会c语言程序设计的高手来帮我解决一下编程题 急 啊~~~~~

循环、数组、函数和结构体程序设计
题目:
有10个学生,每个学生的数据包括学号、姓名及3门课的成绩、总成绩和平均成绩,从键盘输入10个学生的数据(包括学号、姓名及3门课的成绩),要求打印出每位学生的学号、姓名、三门课的成绩、总成绩和平均成绩,最后再打印出3门课的总平均成绩以及最高分的学生的数据(包括姓名和总成绩)。要求:
1、根据学生信息定义一个结构体类型,再说明一个该结构体类型的数组。
2、用input函数从键盘上输入10个学生的数据。
3、用average函数求出每个学生总成绩、平均成绩和所有学生的总平均成绩。
4、用maximum函数找出最高分的学生的数据。
5、在主函数中输出每位学生的学号、姓名、3门课的成绩、总成绩以及总平均分和最高分学生的数据。
输出形式如下:
NO name score1 score2 score3 total average
101 wang 80 79 81 240 80.00
102 li 91 90 89 270 90.00
average=85.00
The highest score:li,score total:270

// 学生成绩管理 系统

#include "stdio.h"
#include "malloc.h"
#include "windows.h"
#include "string.h"
int A=0;
int cc;
struct student
{
int stu_id;
char name[20];
float English;
float computer;
float chinese;
float math;
float sum;
int ranking;
struct student *next;
};
struct stu
{
int stu_id1;
char name1[20];
float English1;
float computer1;
float chinese1;
float math1;
float sum1;
}h;
struct score
{
float average;
float h_score;
float l_score;
struct score *next1;
};
Main_Interface();// 主界面

One_Input(struct student *head);// 输入成绩模块

Two_Inquires(struct student *head);//查询模块

Name_inquires(struct student *head);// 姓名查询

Course_inquires(struct student *head);//科目查询

Ranking_inquires(struct student *head);//总分名次查询

Three_Modified(struct student *head);//修改成绩模块

modify1(struct student *temp);//单科 修改

modify2(struct student *temp);//多科修改

Four_shows(struct student *head);//显示全部学生成绩模块

void main()
{
int b;
struct student *head;
head=(struct student *)malloc(sizeof(struct student));
head->next=NULL;
do
{
Main_Interface();
scanf("%d",&b);
while(b<1||b>5)
{
printf(" 没有此模块 请重新输入 (1/2/3/4/5)_______");
fflush(stdin);
scanf("%d",&b);
}
switch(b)
{
case 1 : One_Input(head);break;
case 2 : Two_Inquires(head);break;
case 3 : Three_Modified(head);break;
case 4 : Four_shows(head);break;
case 5 : printf("\n\n\n\t\t\t");break;
}
}while(cc=='n');
}
Main_Interface()
{
printf(" 学生成绩管理系统主菜单界面:\n");
printf(" ********************************\n");
printf("学生成绩管理系统 *********************************\n");
printf("(1) 输入学生成绩;\n");
printf("(2) 查询学生成绩;\n");
printf("(3) 修改学生成绩;\n");
printf("(4) 输出学生成绩;\n");
printf("(5) 退出系统 ;\n\n");
printf(" 请选择(1/2/3/4/5)______ ");
return 0;
}
One_Input(struct student *head)
{
int count=0;
char c;
struct student *p=head;
while(p->next!=NULL)
{
p=p->next;
}
do
{
struct student *temp=(struct student *)malloc(sizeof(struct student));
printf("\n学生成绩输入模块界面\n");
printf("****************************************\n");
printf("请输入学生:");
printf(" 学号__");
scanf("%d",&temp->stu_id);
printf("\n");
printf("\t\t姓名__");
scanf("%s",temp->name);
printf("\n");
printf("\t\t英语__");
scanf("%f",&temp->English);
printf("\n");
printf("\t\t计算机__");
scanf("%f",&temp->computer);
printf("\n");
printf("\t\t语文__");
scanf("%f",&temp->chinese);
printf("\n");
printf("\t\t数学__");
scanf("%f",&temp->math);
printf("\n");
temp->sum=temp->math+temp->chinese+temp->computer+temp->English;
temp->next=NULL;
A++;
p->next=temp;
p=temp;
printf(" 是否继续? (y/n)________");
while(count<1)
{
printf(" 注 此处若是 输入“y” ,则继续上述菜单,若为“n” 则返回主菜单.。 请输入 是否继续—__ ");
count++;
}
fflush(stdin);
scanf("%c",&c);
system("cls");
while(c!='y'&&c!='n')
{
printf(" 输入有误 请重新输入 y/n __");
fflush(stdin);
scanf("%c",&c);
}
}while(c=='y');
if(c=='n') cc='n';
system("cls");
return 0;
}
Two_Inquires(struct student *head)
{
int a;
char c;
struct student *p=head;
if(p->next==NULL)
{
printf (" 请先输入学生成绩 在主菜单选择 1 ");
cc='n';
system("cls");
return 0;
}
else
{
do
{
system("cls");
printf("\t查询模块\n\n");
printf("(1) 按姓名查询\n");
printf("(2) 按课程查询\n");
printf("(3) 按总分名次查询\n");
printf(" 请选择 1/2/3____ ");
scanf("%d",&a);
while(a<1||a>3)
{
printf(" 没有此选项 请重新输入 1/2/3 ___ ");
scanf("%d",&a);
}
switch(a)
{
case 1 : Name_inquires(p); break;
case 2 : Course_inquires(p);break;
case 3 : Ranking_inquires(p);break;
}
printf("\n否继续查询? “ y :继续查询 n : 返回主菜单” y/n ____ ");
fflush(stdin);
scanf("%c",&c);
while(c!='y'&&c!='n')
{
fflush(stdin);
printf(" 输入有误 请重新输入 y/n __ ");
scanf("%c\n",&c);
}
}while(c=='y');
if(c=='n') cc='n';
system("cls");
return 0;
}
}
Name_inquires(struct student *head)
{
int count;
char c[21];
struct student *pointer=head;
printf("\t\t 按姓名查询 \n\n ");
printf("\n 输入姓名 ___ ");
scanf("%s",c);
do
{
pointer=pointer->next;
count=strcmp(c,pointer->name);
if(count==0)
{
printf(" 学号 : ");
printf("%d\n",pointer->stu_id);
printf(" 数学 :");
printf("%.1f\n",pointer->math);
printf(" 语文 :");
printf("%.1f\n",pointer->chinese);
printf(" 英语 :");
printf("%.1f\n",pointer->English);
printf(" 计算机 :");
printf("%.1f\n",pointer->computer);
}
}
while(pointer->next!=NULL);
}
Course_inquires(struct student *head)
{
char c;
float count=0;
float h_score,l_score,t_score=0,average;
struct student *pointer=head;
printf("输入课程名 \n\t 数学==M,语文==C,英语==E,计算机==J \n\t 请输入____ ");
fflush(stdin);
scanf("%c",&c);
while(c!='M'&&c!='C'&&c!='E'&&c!='J')
{
printf(" 没有此科目 请重新输入 数学==M,语文==C,英语==E,计算机==J 请输入____");
scanf("%c",&c);
}
switch(c)
{
case 'M' :
h_score=0;
l_score=5000;
while(pointer->next!=NULL)
{ pointer=pointer->next;
printf(" 学生 姓名 :");
printf("%s ",pointer->name);
printf("学生数学成绩:");
printf("\t%.1f\n\n",pointer->math);
t_score=t_score+pointer->math;
if(pointer->math>h_score) h_score=pointer->math;
if(pointer->math<l_score) l_score=pointer->math;
count++;

}
average=t_score/count;
printf(" 平均分 :");
printf("%.1f\n",average);
printf(" 最高分 :");
printf("%.1f\n",h_score);
printf(" 最低分 :");
printf("%.1f\n",l_score);break;
case 'C' :
h_score=0;
l_score=5000;
while(pointer->next!=NULL)
{
pointer=pointer->next;
printf(" 学生 姓名 :");
printf("%s ",pointer->name);
printf("学生语文成绩:");
printf("\t%.1f\n",pointer->chinese);
t_score=t_score+pointer->chinese;
if(pointer->chinese>h_score) h_score=pointer->chinese;
if(pointer->chinese<l_score) l_score=pointer->chinese;
count++;
}
average=(float)t_score/count;
printf(" 平均分 :");
printf("%.1f\n",average);
printf(" 最高分 :");
printf("%.1f\n",h_score);
printf(" 最低分 :");
printf("%.1f\n",l_score);break;
case 'E' :
h_score=0;
l_score=5000;
while(pointer->next!=NULL)
{
pointer=pointer->next;
printf(" 学生 姓名 :");
printf("%s ",pointer->name);
printf("学生英语成绩:");
printf("\t%.1f\n",pointer->English);
t_score=t_score+pointer->English;
if(pointer->English>h_score) h_score=pointer->English;
if(pointer->English<l_score) l_score=pointer->English;
count++;
}
average=(float)t_score/count;
printf(" 平均分 :");
printf("%.4f\n",average);
printf(" 最高分 :");
printf("%.1f\n",h_score);
printf(" 最低分 :");
printf("%.1f\n",l_score);break;
case 'J' :
h_score=0;
l_score=5000;
while(pointer->next!=NULL)
{
pointer=pointer->next;
printf(" 学生 姓名 :");
printf("%s ",pointer->name);
printf("学生计算机成绩:");
printf("\t%.1f\n",pointer->computer);
t_score=t_score+pointer->computer;
if(pointer->computer>h_score) h_score=pointer->computer;
if(pointer->computer<l_score) l_score=pointer->computer;
count++;
}
average=(float)t_score/count;
printf(" 平均分 :");
printf("%.4f\n",average);
printf(" 最高分 :");
printf("%.1f\n",h_score);
printf(" 最低分 :");
printf("%.1f\n",l_score);break;
}
}
Ranking_inquires(struct student *head)
{
int B=A,i=0;
struct student *temp=head;
struct student *p=head;
struct student *q=head;
printf("\t\t 按总分 名次查询 \n ");
printf("姓名 总分 名次\n");
while(p->next!=NULL&&A>1)//根据成员的成绩对结构体 进行排序
{
p->sum=p->math+p->English+p->chinese+p->computer;
q=p->next;
p=p->next;
while(q->next!=NULL)
{
q=q->next;
if(p->sum<q->sum)
{
h.stu_id1=p->stu_id;
strcpy(h.name1,p->name);
h.English1=p->English;
h.computer1=p->computer;
h.math1=p->math;
h.sum1=p->sum;
h.chinese1=p->chinese;
p->stu_id=q->stu_id;
strcpy(p->name,q->name);
p->English=q->English;
p->computer=q->computer;
p->math=q->math;
p->sum=q->sum;
p->chinese=q->chinese;
q->stu_id=h.stu_id1;
strcpy(q->name,h.name1);
q->English=h.English1;
q->computer=h.computer1;
q->math=h.math1;
q->sum=h.sum1;
q->chinese=h.chinese1;
}
}
A--;
++i;
p->ranking=i;
}
p=p->next;
p->ranking=++i;

while(temp->next!=NULL)
{
temp=temp->next;
printf(" %s\t\t",temp->name);
printf("%.1f\t\t",temp->sum);
printf(" %d\n",temp->ranking);
}
}
Three_Modified(struct student *head)
{
int id;
char c;
struct student *p=head;
if(p->next==NULL)
{
printf (" 请先输入学生成绩 在主菜单选择 1 ");
cc='n';
system("cls");
return 0;
}
else
{
do
{
printf(" 修改成绩模块 \n");
printf(" 请输入 该学生的学号_____ ");
fflush(stdin);
scanf("%d",&id);
while(p->next!=NULL)
{
p=p->next;
if(id==p->stu_id)
{
printf(" 学生姓名 : %s\n\t",p->name);
printf(" 数学成绩 : %.1f\n\t",p->math);
printf(" 语文成绩 : %.1f\n\t",p->chinese);
printf(" 英语成绩 : %.1f\n\t",p->English);
printf(" 计算机成绩 :%.1f\n\t",p->computer);
printf("\n 修改一科(o)还是多科(m) o/m ___ ");
fflush(stdin);
scanf("%c",&c);
while(c!='o'&&c!='m')
{
printf(" 输入有误 请重新输入 o/m __");
fflush(stdin);
scanf("%c",&c);
}
switch(c)
{
case 'o' : modify1(p);break;
case 'm' : modify2(p);break;
}
}
}
printf("是否返回主菜单? y/n __ ");
fflush(stdin);
scanf("%c",&c);
while(c!='y'&&c!='n')
{
printf(" 输入有误 重新输入 y/n ");
fflush(stdin);
scanf("%c",&c);
}
}
while(c=='n');
if(c=='y') cc='n';
system("cls");
return 0;
}
}
modify1(struct student *temp)
{
char c;
printf("请输入 您要修改的科目 数学==M,语文==C,英语==E,计算机==J ____ ");
fflush(stdin);
scanf("%c",&c);
while(c!='M'&&c!='C'&&c!='E'&&c!='J')
{
printf("输入错误 重新输入 您要修改的科目 数学==M,语文==C,英语==E,计算机==J ____ ");
fflush(stdin);
scanf("%c",&c);
}
switch(c)
{
case 'M':
printf("原数学成绩为: %.1f\n",temp->math);
printf("请输入新数学成绩 :");
scanf("%.1f\n",&temp->math);
printf(" 修改完成 !\n ");break;
case 'C':
printf("原语文成绩为: %.1f\n",temp->math);
printf("请输入新语文成绩 :");
scanf("%.1f\n",&temp->chinese);
printf(" 修改完成 !\n ");break;
case 'E' :
printf("原英语成绩为: %.1f\n",temp->math);
printf("请输入新英语成绩 :");
scanf("%.1f\n",&temp->English);
printf(" 修改完成 ! \n");break;
case 'J' :
printf("原计算机成绩为: %.1f\n",temp->math);
printf("请输入新计算机成绩 :");
scanf("%.1f\n",&temp->computer);
printf(" 修改完成 !\n ");break;
}
}
modify2(struct student *temp)
{
int i=0;
int count=1;
char c[5];
while(count==1&&i<5)
{
printf(" \n请输入您要修改的第%d个科目 数学==M,语文==C,英语==E,计算机==J _____",i+1);
fflush(stdin);
scanf("%c",&c[i]);
while(c[i]!='M'&&c[i]!='C'&&c[i]!='E'&&c[i]!='J')
{
printf("\n输入错误 重新输入 您要修改的科目 数学==M,语文==C,英语==E,计算机==J ____ ");
fflush(stdin);
scanf("%c",&c[i]);
}
switch(c[i])
{
case 'M':
printf("原数学成绩为: %.1f\n",temp->math);
printf("请输入新数学成绩 :__");
scanf("%.1f\n",&temp->math);
printf(" 修改完成 !\n ");
printf("是否 继续修改? 1/0 (1:继续修改成绩 0:退出系统) __ ");
fflush(stdin);
scanf("%d",&count);break;

case 'C':
printf("原语文成绩为: %.1f\n",temp->math);
printf("请输入新语文成绩 :__");
scanf("%.1f\n",&temp->chinese);
printf(" 修改完成 !\n ");
printf("是否 继续修改? 1/0 (1:继续修改成绩 0:退出系统) __ ");
fflush(stdin);
scanf("%d",&count);break;
case 'E' :
printf("原英语成绩为: %.1f\n",temp->math);
printf("请输入新英语成绩 :__");
scanf("%.1f\n",&temp->English);
printf(" 修改完成 ! \n");
printf("是否 继续修改? 1/0 (1:继续修改成绩 0:退出系统)__ ");
fflush(stdin);
scanf("%d",&count);break;
case 'J' :
printf("原计算机成绩为: %.1f\n",temp->math);
printf("请输入新计算机成绩 :__");
scanf("%.1f\n",&temp->computer);
printf(" 修改完成 !\n ");
printf("是否 继续修改? 1/0(1:继续修改成绩 0:退出系统) __ ");
fflush(stdin);
scanf("%d",&count);break;
}
i++;
}
}
Four_shows(struct student *head)
{
struct student *p=head;
struct student *q=head;
struct student *p5=head;
struct stu h;
int i=0,C=A;char c;
float sum=0;
struct score *head1=(struct score *)malloc(sizeof(struct score));
struct score *p4=head1;
struct student *temp=head;
struct score *p2=head1;
struct score *temp1=head1;
struct score *p3=head1;
head1->next1=NULL;
if(p->next==NULL)
{
printf (" 请先输入学生成绩 在主菜单选择 1 ");
cc='n';
system("cls");
return 0;
}
else
{
printf("\n\n 输出模块\n ");
printf("-------------------------------------------------------------------\n");
printf(" 学号 姓名 数学 语文 英语 计算机 总分 名次");
if(A==1)
{
p5=p5->next;
p5->ranking=1;
printf("\n %d\t",p5->stu_id);
printf("%s\t",p5->name);
printf("%.1f\t",p5->math);
printf("%.1f\t",p5->chinese);
printf("%.1f\t",p5->English);
printf("%.1f\t",p5->computer);
printf("%.1f\t",p5->sum);
printf(" %d",p5->ranking);
}
while(p->next!=NULL&&A>1)
{
p->sum=p->math+p->English+p->chinese+p->computer;
q=p->next;
p=p->next;
while(q->next!=NULL)
{
q=q->next;
if(p->sum<q->sum)
{
h.stu_id1=p->stu_id;
strcpy(h.name1,p->name);
h.English1=p->English;
h.computer1=p->computer;
h.math1=p->math;
h.sum1=p->sum;
h.chinese1=p->chinese;
p->stu_id=q->stu_id;
strcpy(p->name,q->name);
p->English=q->English;
p->computer=q->computer;
p->math=q->math;
p->sum=q->sum;
p->chinese=q->chinese;
q->stu_id=h.stu_id1;
strcpy(q->name,h.name1);
q->English=h.English1;
q->computer=h.computer1;
q->math=h.math1;
q->sum=h.sum1;
q->chinese=h.chinese1;
}
}
A--;
++i;
p->ranking=i;
}++i;
p=p->next;
p->ranking=++i;
i=0;
while(i<4)
{
struct score *p1=(struct score *)malloc(sizeof(struct score));
struct student *p=head;
p1->next1=NULL;
p1->h_score=0;
p1->l_score=1000;
sum=0;
while(p->next!=NULL)
{
if(i==0)
{
p=p->next;
sum=sum+p->math;
if(p1->h_score<p->math)
{
p1->h_score=p->math;
}
if(p1->l_score>p->math)
{
p1->l_score=p->math;
}
}
if(i==1)
{
p=p->next;
sum=sum+p->chinese;
if(p1->h_score<p->chinese)
{
p1->h_score=p->chinese;
}
if(p1->l_score>p->chinese)
{
p1->l_score=p->chinese;
}
}
if(i==2)
{
p=p->next;
sum=sum+p->English;
if(p1->h_score<p->English)
{
p1->h_score=p->English;
}
if(p1->l_score>p->English)
{
p1->l_score=p->English;
}
}
if(i==3)
{
p=p->next;
sum=sum+p->computer;
if(p1->h_score<p->computer)
{
p1->h_score=p->computer;
}
if(p1->l_score>p->computer)
{
p1->l_score=p->computer;
}
}
}
i++;
p1->average=sum/C;
temp1->next1=p1;
temp1=p1;
}
while(p5->next!=NULL)
{
p5=p5->next;
printf("\n %d\t",p5->stu_id);
printf("%s\t",p5->name);
printf("%.1f\t",p5->math);
printf("%.1f\t",p5->chinese);
printf("%.1f\t",p5->English);
printf("%.1f\t",p5->computer);
printf("%.1f\t",p5->sum);
printf(" %d",p5->ranking);
}
printf("\n\n平均分\t\t");
while(p2->next1!=NULL)
{
p2=p2->next1;
printf("%.1f\t",p2->average);
}
printf("\n最高分\t\t");
while(p3->next1!=NULL)
{
p3=p3->next1;
printf("%.1f\t",p3->h_score);
}
printf("\n最低分\t\t");
while(p4->next1!=NULL)
{
p4=p4->next1;
printf("%.1f\t",p4->l_score);
}
printf("\n\n-------------------------------------------------------------------\n\t");
printf("选择 n 返回主菜单 __ ");fflush(stdin);
scanf("%c",&c);
while(c!='n')
{
printf(" 输入有误 重新输入 n -___ ");
scanf("%c",&c);
}
cc='n';
system("cls");
return 0;
}
}
符合你的那个 要求 但是函数名不同。。追问

tc环境下能运行中文吗?

追答

试试呗 我也不知道 应该不知道。。。 给加分不 嘿嘿。。
要是不行的话 把中文的部分 改成英语就可以了。

追问

这个太复杂了 交上去老师一眼就看出来不是我自己写的 能不能有一个相对简单一点的啊?
如果改一个程序的话 会加分的
帮帮忙 啊~~~·

追答

#include "stdio.h"
#include "string.h"
struct student
{
int id;
float math;
float chinese;
float english;
float total;
float average;
char name[20];
}stu[3];
float t_average=0,sum=0;
float highest;
char name1[20];
input()
{
int i=0;
for(i=0;i<3;i++)
{
printf("The data input %d students",i+1);
printf(" input Student_id __ ");
scanf("%d",&stu[i].id);
getchar();
printf("\ninput stu_name__ ");
scanf("%s",stu[i].name);
getchar();
printf("\ninput math_scores __ ");
scanf("%f",&stu[i].math);
getchar();
printf(" \n input chinese_scores __ ");
scanf("%f",&stu[i].chinese);
getchar();
printf(" \n input english_scores __ ");
scanf("%f",&stu[i].english);
getchar();
}
return 0;
}
average()
{
int i;
for(i=0;i<3;i++)
{
stu[i].total=stu[i].math+stu[i].chinese+stu[i].english;
stu[i].average=stu[i].total/3;
sum+=stu[i].total;
}
t_average=sum/3;
}
maximum()
{
int i=0;
strcpy(name1,stu[i].name);
highest=stu[i].total;
for(;i<3;i++)
{
if(highest<stu[i].total)
{
highest=stu[i].total;
strcpy(name1,stu[i].name);
}
}
}
void main()
{
int i;
input();
average();
maximum();
printf("NO\tname\tmath\tchinese\tenglish\ttotal\taverage");
for(i=0;i<3;i++)
{
printf("\n%d",stu[i].id);
printf("\t%s",stu[i].name);
printf("\t%.1f",stu[i].math);
printf("\t%.1f",stu[i].chinese);
printf("\t%.1f",stu[i].english);
printf("\t%.1f",stu[i].total);
printf("\t%.1f",stu[i].average);
}
printf("\nt_average=%.2f",t_average);
printf("\nThe highest_name: %s",name1);
printf("\tscore total: %.f",highest);
}
这个是符合你要求的 题。。

温馨提示:答案为网友推荐,仅供参考
相似回答