系列文章目录
有需要的小伙伴们可以点进来看看哟,c_基础算法详解,内容详细,包看包懂!!!
>求两个整数的较大值得三种方法<
前言
计算平均成绩是变成入门的基础题,今天给大家带来两种题型,一种是直接求几个数的平均值,一种是类似于公务员打分,去掉最高分和最低分求出平均值。
一、普通平均值
这里用牛客网一道例题讲解。
计算平均成绩 这里有几点需要注意,输入的成绩是整数,但平均值是浮点数,并且保留一位小数
方法一
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
double avg = (a + b + c + d + e) / 5.0;
printf("%.1lf", avg);
return 0;
}
保留几位小数就在打印的时候写 .多少,比如保留两位就是 .2lf ,因为是double 类型,所以是 lf 而不是 f ,整型除以整型只能得到整型,就算是用 double 定义的也没用,所以要除以 5.0 ,而不是 5。
方法二
为了避免输入的冗余,我们可要考虑用数组输入,不然以后要我们输入100个数根本写不出来。
#include <stdio.h>
int main()
{
int sum = 0;
int arr[20] = { 0 };
for (int i = 0; i < 5; i++)
{
scanf("%d", &arr[i]);
sum += arr[i];
}
double avg = sum / 5.0;
printf("%.1lf\n", avg);
return 0;
}
利用 for 循环对数组进行输入,并且同时可以求出数组里五个元素的和,比第一种方法更具有通用性,需要注意,我们在创建数组的时候一定要初始化数组,数组个数可以给的多一点,我们可以利用 for 循环控制输入的个数
二、较为特殊的计算平均成绩
我们这里还是用一道题目举例 公务员面试 这道题需要注意的点是去掉最高分和最低分,输入为百分之,意味着分数不会超过100,并且输出小数保留两位,并且要考虑到分数一样的情况
错误示范
#include <stdio.h>
int main()
{
int arr[7] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
int max = 0;
int min = 0;
int sum = 0;
for (int i = 0; i < sz; i++)
{
scanf("%d", &arr[i]);
sum += arr[i];
}
for (int j = 0; j < sz; j++)
{
if (max < arr[j])
{
max = arr[j];
}
if (min > arr[j])
{
min = arr[j];
}
}
double avg = (sum - max - min) / 5.0;
printf("%.2lf\n", avg);
return 0;
}
1. 其实这个写法看起来思路还算是清晰,但我们要注意,这里的 min 初始化的值是 0,在第二个 for 循环判断的时候,永远不会出现 min > arr[i] 的情况,所以 min 永远都是0,除非有一个裁判打了 0 分, 不然这就是个有 bug 的代码,需要我们注意。 2. 单纯的使用 if 会让代码显得冗余,可以加以改进
正确演示
#include <stdio.h>
int main()
{
int sum = 0;
int arr[7] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < sz; i++)
{
scanf("%d", &arr[i]);
sum += arr[i];
}
int max = -1;
int min = 101;
for (int j = 0; j < sz; j++)
{
max = max < arr[j] ? arr[j] : max;
min = min > arr[j] ? arr[j] : min;
}
printf("%.2lf\n", (sum - max - min) / 5.0);
return 0;
}
这里将 max 初始化为 -1,min 初始化为 101,有效的避免了上述的问题,也解决了出现了 0 分和 100 分的问题,并且使用三目操作符让代码看起来更加精炼,其实这里还可以将下面的部分封装成函数,对于初学者来说逼格满满!!!在计算的时候我们发现定义 avg 这个变量去算平均值是没必要的,可以直接在 printf 函数后面将表达式写出来,使代码更加的整洁。 ps附函数代码可以参考哦,会有新的收货!!
总结
提示: 计算平均成绩是学习编程初期一定要掌握的重要算法,结尾处将再奉上第二题的封装函数的写法,写文不易,希望家人们多多支持,一键三连,你们的陪伴,就是博主最大的动力!!!
ps:函数写法
#include <stdio.h>
double Avg(int arr[], int sz)
{
int max = -1;
int min = 101;
int sum = 0;
for (int j = 0; j < sz; j++)
{
max = arr[j] > max ? arr[j] : max;
min = arr[j] < min ? arr[j] : min;
sum += arr[j];
}
return (sum - max - min) / 5.0;
}
int main()
{
int arr[7] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < sz; i++)
{
scanf("%d", &arr[i]);
}
double avg = Avg(arr, sz);
printf("%.2lf\n", avg);
return 0;
}
ps:运行结果
|