一.现有10名学生,每名学生的信息包括:学号、姓名、数学、外语和程序设计基础3门课程的成绩。本次综合训练任务要求如下:
- 用结构体存放学生信息;
- 从键盘输人10个学生数据;
- 输出3门课程总平均成绩;
- 最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。 分析:由于是使用结构体来存放数据而且是十个人的数据(人数较多),所以考虑到用结构体数组
-
接下来就是获取三门课程的总的成绩,这需要每次进入first函数的时候都计算一下各自的总分,考虑到变量的作用域,此次应该使用全局变量,所以要参加mid(个人总成绩),和sum(十个人的总成绩)第二次添加的内容结尾都有!!//基本骨架 #include<stdio.h> struct str{int xuehao:char name[20];int match;int english ;int p;} struct str s[10];//结构体数组 void first(int*s)//输入十个人的数据 {scanf("%d",&(s->xuehao)); scanf("%s",s->name); scanf("%d",&(s->match)); scanf("%d",&(s->english)); scanf("%d",&(s->p)); } int main() { int a=0; while(a<10)//循环输入十组数据 { first(&s[a]); } return 0; }
寻找最高个人成绩并输出->这说明我们需要先找出最高分,再找出最高分所对应的人。为了更好的找到个人最高分是谁,在结构体中加入总分项目,此次添加的代码最后以??结尾#include<stdio.h> struct str{int xuehao:char name[20];int match;int english ;int p;} struct str s[10];//结构体数组 int mid=0,sum=0;//第二次参加的用于计算总成绩的变量!! void first(int*s)//输入十个人的数据 {scanf("%d",&(s->xuehao)); scanf("%s",s->name); scanf("%d",&(s->match)); scanf("%d",&(s->english)); scanf("%d",&(s->p)); mid=s->match+s->english+s->p;//计算个人总成绩!! num=mid+num;//计算总成绩!! } int main() { int a=0; while(a<10)//循环输入十组数据 { first(&s[a]); } printf("计算总成绩的平均值为%d",num/30);!! return 0; }
总结:完整代码(代码变量名与以上有所改变)#include<stdio.h> struct str{int xuehao:char name[20];int match;int english ;int p;int zongfen;} struct str s[10];//结构体数组 int mid=0,sum=0;//第二次参加的用于计算总成绩的变量!! int c=0;//用于寻找最大值?? void first(int*s)//输入十个人的数据 {scanf("%d",&(s->xuehao)); scanf("%s",s->name); scanf("%d",&(s->match)); scanf("%d",&(s->english)); scanf("%d",&(s->p)); mid=s->match+s->english+s->p;//计算个人总成绩!! s->zongfen=mid;//存储最大值?? num=mid+num;//计算总成绩!! if(c<mid)//以下是用于寻找最大的个人成绩并确定最高成绩。?? c=mid; else ; } int main() { int a=0; while(a<10)//循环输入十组数据 { first(&s[a]); } printf("计算总成绩的平均值为%d",num/30);!! for(a=0;a<10;a++)//寻找最高的个人成绩者?? if(mid==s[a].zongfen) printf("学号%d 姓名%s 数学%d 英语%d 程序设计%d", s[a].xuehao,s[a].name,s[a].match,s[a].english,s[a].p);//打印分数最高者的数据 else ; return 0; }
//源代码 struct stu { int xuehao; char name[20]; int match; int el; int pe;int sm };//创建结构体 struct stu s[10];//创建结构体数组 int a = 0,n=0;//全局变量 void tm(struct stu* p, int* a, int* x)//用于记录结10个人的数据 { scanf("%d", &(p->xuehao));//记录学号 scanf("%s", p->name); //记录名字 scanf("%d", &(p->match)); //记录数学 scanf("%d", &(p->el)); //记录英语 scanf("%d", &(p->pe)); //记录程序设计 x=p->match + p->el + p->pe;//记录每个人的总成绩 p->sm = x;//总成绩放到每一个结构体变量内 *a = *a+x;//用于求解全部同学总分 } int main() { int x = 0,m=0,h=0,e=0;//创建变量 int i = 0,c=0,l=0; //创建变量 for (i = 0; i < 10; i++)//循环用于记录结10个人的数据 {tm(&s[i], &a,&x); if (x > l)//判断用于获得10个人中总分最高的分数 { l = x; } else ; } for (m = 0; m < 10; m++)//查找出最高分数是第几名 { if (s[i].sm != l) e++; else ; } c = a / 30;// 计算3门课程总平均成绩 printf("3门课程总平均成绩%d", c);//打印3门课程总平均成绩 printf("学号%d 姓名%s 数学%d 英语%d 程序设计%d", s[e].xuehao,s[e].name,s[e].match,s[e].el,s[e].pe);//打印分数最高者的数据 return 0; }