🐤计算平均成绩
🏀 题目要求
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。
输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。
输出格式:
首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。
🏀 题解
💻step1.定义结构体
struct Student { char xuehao[5];//由5个数字组成的字符串 char name[10];//长度小于10的非空字符串 int score; }stu[10];//因为N <= 10
💻step2.输入N;随后N行 每行给出一位学生的信息
int main() { int N; scanf("%d",&N); //输入N double sum=0; int i; for(i = 0;i<N;i++) { scanf("%s %s %d",&stu[i].xuehao,&stu[i].name,&stu[i].score); getchar();//读换行 sum+=stu[i].score; } return 0; }
💻step3.求平均值
double average = 1.0*sum/N; printf("%.2lf\n",average);//保留2位小数
💻step4.输出平均线以下的学生的信息
for(i = 0;i<N;i++) { if(stu[i].score<average) printf("%s %s\n",stu[i].name,stu[i].xuehao); }
🐳完整代码
#include<stdio.h> struct Student { char xuehao[10]; char name[15]; int score; }stu[10]; int main() { int N,i; scanf("%d",&N); double sum=0; for(i = 0;i<N;i++) { scanf("%s %s %d",&stu[i].xuehao,&stu[i].name,&stu[i].score); getchar(); sum+=stu[i].score; } double average = 1.0*sum/N; printf("%.2lf\n",average); for(i = 0;i<N;i++) { if(stu[i].score<average) printf("%s %s\n",stu[i].name,stu[i].xuehao); } return 0; }
🐤找出总分最高的学生
🏀 题目要求
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。
输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。
输出格式:
在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。
🏀 题解
💻step1.定义结构体
struct Student { char ID[9]; char name[15];//定义的比题干要求的大一点,要不PTA不通过 int score1;//最好定义三个score变量,用数组的话会有问题(亲测) int score2; int score3; }stu[10];
💻step2.输入N;随后N行 每行给出一位学生的信息
int main() { int N,i; scanf("%d",&N);//输入N for(i = 0;i<N;i++) { scanf("%s%s%d%d%d",stu[i].ID,stu[i].name,&stu[i].score1,&stu[i].score2,&stu[i].score3); getchar();//读换行符 } //继续 return 0; }
💻step3.筛选总分最高的学生
先假设总分最高(max)的是第一个学生(stu[ 0 ])
再进入循环,计算每一个学生的总分,如果大于max,则max 等于该学生,记录下此时对应数组的下标x
int max=stu[0].score1+stu[0].score2+stu[0].score3; int x; for(i = 0;i<N;i++) { int tem = 0; tem += stu[i].score1+stu[i].score2+stu[i].score3; if(tem>max) { max = tem; x = i; } } printf("%s %s %d",stu[x].name,stu[x].ID,max); //打印出下标为x的学生的姓名学号和总分即可
🐳完整代码
#include<stdio.h> struct Student { char ID[5]; char name[10]; int score1; int score2; int score3; }stu[10]; int main() { int N; scanf("%d",&N); int i; for(i = 0;i<N;i++) { scanf("%s%s%d%d%d",stu[i].ID,stu[i].name,&stu[i].score1,&stu[i].score2,&stu[i].score3); getchar(); } int max=stu[0].score1+stu[0].score2+stu[0].score3; int x = 0; for(i = 0;i<N;i++) { int tem = 0; tem += stu[i].score1+stu[i].score2+stu[i].score3; if(tem>max) { max = tem; x = i; } } printf("%s %s %d",stu[x].name,stu[x].ID,max); return 0; }