编写一个程序,实现从键盘输入3个学生数据(每个学生的数据包括学号、姓名、2门课程的成绩),输出每个学生2门课的平均成绩,以及最高分的学生的数据(包括学号、姓名、2门课的成绩、平均分数)。
输入3个学生的数据,每个学生的数据占一行,格式如下: <学号> <姓名> <第一门课程成绩> <第二门课程成绩>
注意:学号/姓名中不包含空白符,学号为8位字符,姓名最多为20位字符。
首先在第1行中依次输出3名同学的平均成绩,平均成绩的输出格式为占10位,小数点后保留1位。
在第2行中输出最高分的学生的数据,格式如下: No=<学号>,Name=<姓名>,Score1=<第一门课程成绩>,Score2=<第二门课程成绩>,Average=<平均成绩>
注:课程成绩和平均成绩输出时保留1位小数且四舍五入处理。
20180001 zhangsan 70.0 80.0
20180002 lisi 95.0 89.0
20180003 wangwu 65.0 84.0
75.0 92.0 74.5
No=20180002,Name=lisi,Score1=95.0,Score2=89.0,Average=92.0
#include<stdio.h>
int main( ){
/* 请在这里填写答案 */
printf("\nNo=%s,Name=%s,Score1=%.1f,Score2=%.1f,Average=%.1f",s[max].no,s[max].name,s[max].score1,s[max].score2,s[max].average);
return 0 ;
}
首先说明一下,这道题属实简单,至于为啥我会在PTA卡了半天之久,原因都是这个恐怖的条件,当然,大佬请无视我的牢骚
输入3个学生的数据,每个学生的数据占一行,格式如下: <学号> <姓名> <第一门课程成绩> <第二门课程成绩>
导致我好久都不能通过PTA的编辑,我都疯了
这道题是用结构体做的,理所应当把结构体先写出来
struct student{
char no[100] ;//学号
char name[20] ;//姓名,因为题上说姓名最多为20位字符,所以我们定义为20(其实100什么的也可以,以防万一)
float score1 ;//科一
float score2 ;//科二
float average;//平均数
}s[3];//这是有3个学生录入的结构体
ok,so easy 另外我想说,这个出题人真的不好玩,float score1,float score2,用数组他不香吗?虽然只有两个,但凡以后遇到录入多的,数组是最好的选择,有兴趣的同学可以研究一下哈,我就不再赘述了。
话不多说,看代码
int i,max;
for(i=0;i<3;i++){
scanf("%s %s %f %f",s[i].no,s[i].name,&s[i].score1,&s[i].score2);//就是这个样子,记住就好了,我也是向大佬请教的,哈哈哈,好爽
}
然后我们来进行下一项,输出这个
75.0 92.0 74.5
也是很简单,唯一考的细节就是平均成绩的输出格式为占10位,小数点后保留1位
看下代码吧:
for(i=0;i<3;i++){
s[i].average=(s[i].score1+s[i].score2)/2;//求一下平均数,这个里面有细节,品一下
}
printf("%10.1f%10.1f%10.1f",s[0].average,s[1].average,s[2].average);//然后就是输出了,%10.1就是占十位,保留小数点后一位,记住规律
之后就是比较三个数的大小
鬼知道当时我脑子怎么秀逗了,写出了这个代码
if(s[0].average>s[1].average){
if(s[0].average>s[2].average){
max=0;
}else{
max=2;
}
}else if(s[1].average>s[2].average){
max=1;
}else if(s[2].average>s[3].average){
max=2;
}else{
max=3;
}
后来我想了想,用for循环比较简单,里面加个if语句,哎有兴趣可以自己想想,三行代码就可以搞定哦
#include<stdio.h>
int main( ){
struct student{
char no[100] ;
char name[100] ;
float score1 ;
float score2 ;
float average;
}s[3];
int i,max;
for(i=0;i<3;i++){
scanf("%s %s %f %f",s[i].no,s[i].name,&s[i].score1,&s[i].score2);
}
for(i=0;i<3;i++){
s[i].average=(s[i].score1+s[i].score2)/2;
}
printf("%10.1f%10.1f%10.1f",s[0].average,s[1].average,s[2].average);
if(s[0].average>s[1].average){
if(s[0].average>s[2].average){
max=0;
}else{
max=2;
}
}else if(s[1].average>s[2].average){
max=1;
}else if(s[2].average>s[3].average){
max=2;
}else{
max=3;
}
printf("\nNo=%s,Name=%s,Score1=%.1f,Score2=%.1f,Average=%.1f",s[max].no,s[max].name,s[max].score1,s[max].score2,s[max].average);
return 0 ;
}
不早了,明天写历史论文,睡觉睡觉,呼呼呼