一、题目要求如下
二、解题思路
题目解读:
1、需要用户输入数据n行
2、1行是共有多少学生
3、后面的行数都是成绩
4、求整型的最大和最小值,浮点型的保留两位小数的平均分。
第一步肯定是获取n,也就是获取学生有多少人;
得到n后我们就知道要重复scanf多少次,每scanf一次就获取一个成绩,n个学生就要scanf n次。
其次确认目标是我们要求的三个值:最大值、最小值、平均分
最大值、最小值:因为无论是 最大值 还是 最小值 都是跟学生的成绩进行比较的,所以这里max和min的值我不设初值,直接在循环学生成绩之前先获取第一个学生的成绩,将成绩递交给min和max还有sum(sum是所有学生成绩求和)
这时候最小值和最大值已经是第一个学生的成绩,接下来开始循环所有学生成绩
因为第一个学生的成绩已经获取过了,所以循环要从i=1开始,即循环是从第二个学生开始。(i=1是第二个学生,i=n就是第n+1个学生,所以循环截止条件是i<n,不能等于n,因为没有第n+1个学生)
每次循环都先获取成绩覆盖给temp,即每次循环的temp就是当前学生的成绩。
加入两条平行的判断,
若当前学生成绩小于最小值(第一次循环min是第一个学生成绩),就把当前学生成绩赋值给min
若当前学生成绩大于最大值(第一次循环max是第一个学生成绩),就把当前学生成绩赋值给max
累加成绩给sum,达到求和的目的;
最大值和最小值计算完了,接下来要求平均值。
因为定义的最大值和最小值都是整型,而平均值要浮点数。我们又知道,在计算机程序中:
整数和整数进行运算=整数
但是,我们又知道浮点数就是颗老鼠屎,去到汤里就会影响整锅汤,导致整锅汤都变成老鼠屎
浮点数和整型运算就=浮点数
所以我们先让sum*1.0,因为1.0是浮点型常量,和sum运算整个值就会变成浮点数,这时候和整型作除法就会得到浮点数了。
%.2f是保留两位小数的浮点数输出格式
三、代码实现
#include <stdio.h>
int main()
{
// 请在此输入您的代码
int sum,i,max,min,n,temp;//temp临时存储当前学生成绩,n为学生数,min为最小学生成绩,max最大成绩,sum学生成绩总和
float avg=0;//avg是学生成绩平均分,为浮点数
scanf("%d",&n); //获取学生数量
scanf("%d",&temp);//获取第一个学生成绩
sum=min=max=temp; //第一个学生成绩赋值给max、min、sum
for(i=1;i<n;i++){//循环n-1次,因为前面已经赋值了一个学生
scanf("%d",&temp);
if(temp<min) min=temp;
if(temp>max) max=temp;
sum+=temp;
}
//求平均数和打印三个值
avg=sum*1.0/n;
printf("%d\n%d\n%.2f\n",max,min,avg);
return 0;
}