编写一个程序,实现从键盘输入3个学生数据(每个学生的数据包括学号、姓名、2门课程的成绩),输出每个学生2门课的平均成绩,以及最高分的学生的数据(包括学号、姓名、2门课的成绩、平均分数)。

计算学生平均成绩

编写一个程序,实现从键盘输入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语句,哎有兴趣可以自己想想,三行代码就可以搞定哦

看一下运行结果

编写一个程序,实现从键盘输入3个学生数据(每个学生的数据包括学号、姓名、2门课程的成绩),输出每个学生2门课的平均成绩,以及最高分的学生的数据(包括学号、姓名、2门课的成绩、平均分数)。_第1张图片
是没有一点问题的,PTA也正常编写一个程序,实现从键盘输入3个学生数据(每个学生的数据包括学号、姓名、2门课程的成绩),输出每个学生2门课的平均成绩,以及最高分的学生的数据(包括学号、姓名、2门课的成绩、平均分数)。_第2张图片

最后,我把所有代码放在这,有问题或者什么的希望大家提出批评

#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 ;
}

不早了,明天写历史论文,睡觉睡觉,呼呼呼

你可能感兴趣的:(编写一个程序,实现从键盘输入3个学生数据(每个学生的数据包括学号、姓名、2门课程的成绩),输出每个学生2门课的平均成绩,以及最高分的学生的数据(包括学号、姓名、2门课的成绩、平均分数)。)