题目描述:
这里拓展一个小知识点:
打印输出:
%g 根据数值不同自动选择%f或%e,
%g用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的0。
举几个例子来理解一下:
printf("%g\n", 0.00001234); printf("%g\n", 0.0001234); printf("%.2g\n", 123.45); printf("%.2g\n", 23.45); 上面四句输出结果为: 1.234e-05 0.0001234 1.2e+02 23
运行结果
源代码:
#include<stdio.h>
int n = 0;//这里的n定义全局变量的好处是在每个函数中都可以直接使用
float English[100], math[100], cplus[100], music[100], art[100] = {0};//这里使用数组的形式主要是为了在循环中储存对应的每个人的各科成绩
float kemu_average[5] = { 0 };//定义出五个科目的平均分
//定义这个平均分时,之所以用数组的形式主要是为了在求每科平均分时便于直接储存起来每组数据方便计算并且方便后期的直接打印
struct student
{
long int ID;
float English_score;
float math_score;
float cplus_score;
float music_score;
float art_score;
float average1;//这里直接把学生各科平均分定义在这个结构体中
};//这里我们考虑使用结构体来对学生这些基本信息说明
void Average1(struct student stu[])
{
for (int i = 0; i < n; i++)
{
stu[i].average1 = (stu[i].English_score + stu[i].math_score + stu[i].cplus_score + stu[i].music_score + stu[i].art_score) / 5;
}
}
void Kemu_average(float *kemu_average)
{
for (int i = 0; i < n; i++)
{
kemu_average[0] = kemu_average[0] + English[i];
kemu_average[1] = kemu_average[1] + math[i];
kemu_average[2] = kemu_average[2] + cplus[i];
kemu_average[3] = kemu_average[3] + music[i];
kemu_average[4] = kemu_average[4] + art[i];
}
kemu_average[0] = kemu_average[0] / n;
kemu_average[1] = kemu_average[1] / n;
kemu_average[2] = kemu_average[2] / n;
kemu_average[3] = kemu_average[3] / n;
kemu_average[4] = kemu_average[4] / n;
}//在计算每科成绩的平均分时我们就可以发现前面储存每科成绩的好处了
int main()
{
struct student stu[100] = { 0 };
scanf("%d", &n);//输入学生人数
for (int i = 0; i < n; i++)
{
scanf("%ld %f %f %f %f %f", &stu[i].ID, &stu[i].English_score, &stu[i].math_score, &stu[i].cplus_score, &stu[i].music_score, &stu[i].art_score);//这里依次输入每个学生的各科成绩
//输入完每个学生的成绩过后,由于这是一个循环体,下一次循环就会是另一个学生的成绩,所以我们要把这个学生的每科成绩储存起来,便于后面算每科成绩的平均分
English[i] = stu[i].English_score;
math[i] = stu[i].math_score;
cplus[i] = stu[i].cplus_score;
music[i] = stu[i].music_score;
art[i] = stu[i].art_score;
}//循环结束过后我们就完成了每位学生的成绩输入,并且将每位学生的各科成绩都成功地储存了下来
//接下来我们就要写一个函数算出每个学生的平均分,并且要用数组名传参
Average1(stu);
Kemu_average(kemu_average);
//计算完成过后我们就需要打印了
for (int i = 0; i < n;i++)
{
printf("%ld %g %g %g %g %g %.1f\n", stu[i].ID, stu[i].English_score, stu[i].math_score, stu[i].cplus_score, stu[i].music_score, stu[i].art_score,stu[i].average1);
}//注意题目在这里输出时输出的是整数,所以我们需要用%g来输出
printf("%.1f %.1f %.1f %.1f %.1f\n", kemu_average[0], kemu_average[1], kemu_average[2], kemu_average[3], kemu_average[4]);//这个代码是笔者在后面修改的,下面这个代码始终不能通过也是不理解
/*for (int i = 0; i < n; i++)
{
printf("%.1f ", kemu_average[i]);
}*/
return 0;
}