当前位置:网站首页>【C语言实现】两种计算平均成绩题型,博主精心整理,值得一读
【C语言实现】两种计算平均成绩题型,博主精心整理,值得一读
2022-08-01 21:34:00 【万羽西】
有需要的小伙伴们可以点进来看看哟,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; // 因为是浮点数所以用 double 类型定义, 并且要除以 5.0,而不是 5,需要注意
printf("%.1lf", avg); // 因为是保留一位小数,所以要 .1lf
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; // 初始化 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:运行结果
边栏推荐
猜你喜欢
随机推荐
Flink cluster construction
Appendix A printf, varargs and stdarg A.3 stdarg.h ANSI version of varargs.h
Popular explanation: what is a clinical prediction model
WEB 渗透之端口协议
0DFS中等 LeetCode6134. 找到离给定两个节点最近的节点
365 days challenge LeetCode1000 questions - Day 046 Generate a string with odd number of each character + add two numbers + valid parentheses
JSD - 2204 - Knife4j framework - processing - Day07 response results
【C语言实现】求两个整数的较大值
基于php旅游网站管理系统获取(php毕业设计)
Spark集群搭建
Centos7--MySQL的安装
Uses of Anacoda
基于php影视资讯网站管理系统获取(php毕业设计)
C Pitfalls and Defects Chapter 7 Portability Defects 7.6 Memory Location 0
C pitfalls and pitfalls Chapter 7. Portability pitfalls 7.10 Free first, then realloc
How to make the timer not execute when the page is minimized?
AI应用第一课:支付宝刷脸登录
基于php在线考试管理系统获取(php毕业设计)
C语言_typedef和结构体
基于php酒店在线预定管理系统获取(php毕业设计)