要求:
输入学生各科成绩,分别设计函数来计算学生各科的平均成绩、各科全部学生的平均成绩、查找学生成绩,然后对成绩进行输出。
希望有小伙伴可以帮忙看一下代码有没有什么错误,以及求问“各科全部学生的平均成绩”这一块的函数怎么写啊?
#include<stdio.h>
#include<string.h>
struct students_list{
char name[20];
int Math[50];
Int English[50];
Int Science[50];
};
void student_average(struct students_list students[ ],intneme);
void subject_average(struct students_list students[ ],intsubject);
void search_student(struct students_list students[ ],char*name);
int Count=0;
int main(void)
{
int choice,i;
char name[20];
char subject[10];
struct students_list students[50];
for(i=1;;i++){
printf("请依次输入学生姓名、数学成绩、英语成绩、科学成绩:");
scanf("%s %d3(不知道为什么不能连着输入三个d)",&students[i].name,&students[i].Math, &students[i].English, &students[i].Science);
Count++;
}
do{
printf("学生成绩功能选项:1:计算学生平均分 2:计算课程平均分 3:查询学生成绩 0:退出并输出成绩\n");
printf("请选择功能:"); scanf("%d", &choice);
switch(choice){
case 1:
printf("请输入要查找的学生姓名:");
scanf("%s", name);
student_average(students,name);
break;
case 2:
printf("请输入要查找的课程:");
scanf("%s", subject);
subject_average(students,subject);
break;
case 3:
printf("请输入要查找的学生姓名:");
scanf("%s", name);
search_student(students, name);
break;
case 0: break;
}
}while(choice != 0);
for(i=1;i<Count;i++){
printf("%s: %d3(不知道为什么不能连着输入三个d)",students[i].name,students[i].Math, students[i].English, students[i].Science);
}
return 0;
}
/学生平均分/
void student_average(struct students_list students[ ],intneme)
{
int i,flag = 0;
double average;
if(Count == 0){
printf("成绩单是空的!\n");
return;
}
for(i = 0; i <=Count; i++)
if(strcmp(name, friends[i].name) == 0){ / 找到学生*/
flag=1; break;
}
if(flag){
average=(students[i].Math+students[i].English+students[i].Science)/3.0
printf(“student_average:%lf\n”,average);
}
else
printf("无此学生!");
}
/查询学生成绩/
void search_student(struct students_list students[ ],char*name)
{ int i, flag = 0;
if(Count == 0){
printf("成绩单是空的!\n");
return;
}
for(i = 0; i < =Count; i++)
if(strcmp(name, friends[i].name) == 0){
flag=1; break;
}
if(flag){
printf("Math: %d\n", students[i].Math);
printf("English: %d\n", students[i].English);
printf("Science: %d\n", students[i].Science);
}
else
printf("无此学生!");
}
你题目的解答代码如下:
#include <stdio.h>
#include <string.h>
struct students_list
{
char name[20];
int Math; //不要用数组
int English; //int是全小写
int Science;
};
void student_average(struct students_list students[], char *neme);
void subject_average(struct students_list students[], char *subject);
void search_student(struct students_list students[], char *name);
int Count = 0;
int main(void)
{
int choice, i;
char name[20];
char subject[10];
struct students_list students[50];
printf("输入学生人数:");
scanf("%d", &Count);
for (i = 0;i < Count; i++)
{
printf("请依次输入学生姓名、数学成绩、英语成绩、科学成绩:");
scanf("%s %d %d %d", students[i].name, &students[i].Math, &students[i].English, &students[i].Science);
}
do
{
printf("学生成绩功能选项:1:计算学生平均分 2:计算课程平均分 3:查询学生成绩 0:退出并输出成绩\n");
printf("请选择功能:");
scanf("%d", &choice);
switch (choice)
{
case 1:
printf("请输入要查找的学生姓名:");
scanf("%s", name);
student_average(students, name);
break;
case 2:
printf("请输入要查找的课程:");
scanf("%s", subject);
subject_average(students, subject);
break;
case 3:
printf("请输入要查找的学生姓名:");
scanf("%s", name);
search_student(students, name);
break;
case 0:
break;
}
} while (choice != 0);
for (i = 0; i < Count; i++)
{
printf("%s: %d %d %d\n", students[i].name, students[i].Math, students[i].English, students[i].Science);
}
return 0;
}
/* 学生平均分 */
void student_average(struct students_list students[], char *name)
{
int i, flag = 0;
double average;
if (Count == 0)
{
printf("成绩单是空的!\n");
return;
}
for (i = 0; i < Count; i++)
if (strcmp(name, students[i].name) == 0)
{
/* 找到学生 */
flag = 1;
break;
}
if (flag)
{
average = (students[i].Math + students[i].English + students[i].Science) / 3.0;
printf("student_average: %lf\n", average);
}
else
printf("无此学生!");
}
/* 查询学生成绩 */
void search_student(struct students_list students[], char *name)
{
int i, flag = 0;
if (Count == 0)
{
printf("成绩单是空的!\n");
return;
}
for (i = 0; i < Count; i++)
if (strcmp(name, students[i].name) == 0)
{
flag = 1;
break;
}
if (flag)
{
printf("Math: %d\n", students[i].Math);
printf("English: %d\n", students[i].English);
printf("Science: %d\n", students[i].Science);
}
else
printf("无此学生!");
}
void subject_average(struct students_list students[], char *subject)
{
int i;
double average, sum=0;
if (Count == 0)
{
printf("成绩单是空的!\n");
return;
}
for (i = 0; i < Count; i++)
{
if (strcmp(subject, "Math") == 0)
{
sum += students[i].Math;
}
else if (strcmp(subject, "English") == 0)
{
sum += students[i].English;
}
else if (strcmp(subject, "Science") == 0)
{
sum += students[i].Science;
}
}
average = sum/Count;
printf("%s average: %lf\n", subject, average);
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
参考一下这个,前两天发的
https://blog.csdn.net/weixin_44882124/article/details/125285056
供参考:
#include <stdio.h>
#include <string.h>
#define SUB 3 //科目数
struct students_list{
char name[20];
int subject[SUB];
//int Math[50];
//int English[50];
//int Science[50];
};
void student_average(struct students_list students[],int neme);
void subject_average(struct students_list students[],int subject);
void search_student(struct students_list students[],char* name);
int Count=0;
int main(void)
{
int choice,i,j;
char name[20];
//char subject[10];
struct students_list students[50];
printf("请依次输入学生姓名、科目1成绩、科目2成绩、科目3成绩( # 结束输入):\n");
for(i=0;i < 50;i++){
scanf("%s", name);
if (strcmp(name,"#") == 0) break;
strcpy(students[i].name,name);
for(j=0;j<SUB;j++)
scanf("%d",&students[i].subject[j]);
Count++;
}
do{
printf("学生成绩功能选项:1:计算学生平均分 2:计算课程平均分"
"3:查询学生成绩 0:退出并输出成绩\n");
printf("请选择功能:"); scanf("%d", &choice);
switch(choice){
case 1:
student_average(students,Count);
break;
case 2:
subject_average(students,SUB);
break;
case 3:
printf("请输入要查找的学生姓名:");
scanf("%s", name);
search_student(students, name);
break;
case 0: break;
}
}while(choice != 0);
for(i=0;i<Count;i++){
printf("%s:",students[i].name);
for(j=0;j<SUB;j++)
printf(" %d",students[i].subject[j]);
printf("\n");
}
return 0;
}
//学生各科的平均成绩
void student_average(struct students_list students[],int neme)
{
int i,j;
double average = 0;
if(Count == 0){
printf("成绩单是空的!\n");
return;
}
for(i = 0; i < Count; i++){
for(j = 0,average = 0;j < SUB; j++)
average += students[i].subject[j];
printf("%s: average:%.2lf\n",students[i].name, average/SUB);
}
}
//各科全部学生的平均成绩
void subject_average(struct students_list students[],int subject)
{
int i,j,flag = 0;
double average = 0;
if(Count == 0){
printf("成绩单是空的!\n");
return;
}
for(j = 0;j < subject; j++){
for(i = 0,average = 0;i < Count; i++){
average+=students[i].subject[j];
}
printf("科目%d: average=%.2f\n",j+1,average/Count);
}
}
//查询学生成绩
void search_student(struct students_list students[],char* name)
{
int i, j , flag = 0;
if(Count == 0){
printf("成绩单是空的!\n");
return;
}
for(i=0; i < Count; i++){
if(strcmp(students[i].name,name) == 0){
flag = 1; break;
}
}
if(flag){
printf("%s:",students[i].name);
for(j = 0; j < SUB; j++)
printf(" %d",students[i].subject[j]);
printf("\n");
}
else
printf("无此学生!\n");
}