有N个学生,每个学生的数据包括学号、姓名、性别、三门课程的成绩。要求在主函数中输入数据,函数count()计算每个学生的总分和平均分,并输出各项数据,每一个学生输出后换行。(提示:定义结构体类型时,不仅要有三门课程的成绩,还要有总分和平均分;在调用count()函数时,函数的参数可以是结构体数组也可以是结构体指针)。定义符号常量N为4。
一个实现,供参考:
#include <stdio.h> //提供printf函数原型
#define N 4
struct stu{ //学生信息结构
int id; //学号
char name[20]; //姓名
char sex[5]; //性别
//三门课程的成绩
float chinese;
float math;
float english;
float totalScore;
float avgScore;
};
void count (struct stu * scores){
int i;
for(i=0;i<N;i++){ //计算n个学生的平均成绩
scores[i].totalScore=(float)((scores[i].chinese+scores[i].math+scores[i].english)); //计算每个学生总分
scores[i].avgScore=(float)(scores[i].totalScore/3); //计算每个学生平均分
}
}
int main(void){
struct stu s[N]; //定义存放四个学生信息的结构数组
int i=0;
//获取学生信息输入
while(i<N){
printf("请输入第%d个学生的信息(学号,姓名,性别,语文成绩,数学成绩,英语成绩):\n",i+1);
scanf("%d%s%s%f%f%f",&s[i].id,s[i].name,s[i].sex,&s[i].chinese,&s[i].math,&s[i].english);
i++;
}
count(s); //调用函数count计算每个学生的总分和平均分
//打印平局成绩
i=0;
//下面printf函数里面的-(负号)代表左对齐,数组8代表数字字符占用几个字符位置,通过格式控制进行信息打印的排版
printf("%-8s %-8s %-8s %-8s %-8s %-8s %-8s %-8s\n","学号","姓名","性别","语文成绩","数学成绩","英语成绩","总分","平均分");
//打印4个学生的消息
while(i<N){
printf("%-8d %-8s %-8s %-8.1f %-8.1f %-8.1f %-8.1f %-8.1f\n",
s[i].id,s[i].name,s[i].sex,s[i].chinese,s[i].math,s[i].english,s[i].totalScore,s[i].avgScore);
i++;
}
return 0;
}