两个整数求平均值很简单?没几个人写对这个代码! | 您所在的位置:网站首页 › c语言求平均值保留3位小数 › 两个整数求平均值很简单?没几个人写对这个代码! |
谭浩强C程序设计(第五版)课后答案-视频讲解:求2个整数的平均值
这个题目很多时候是直接求2个整数的平均值。 那这个题目就很简单了,请看如下代码: //代码1 #include int main() { int a = 0; int b = 0; scanf("%d%d", &a, &b); int average = (a + b) / 2; printf("avg = %d\n", average); return 0; }这个是一般的实现方式,请看测试结果: 测试结果1: 问题就是:如果求平均数的两个数比较大,如果他们的和超过了整形能表示的最大值,这样就产生了溢出,溢出之后得到的结果也就不是和,不是和就不能求得平均值。 那么此时如果在面试,面试官就会追问,那怎么解决呢? 这里请看一张图: 看完这张图,我们应该就能明白了,原来代码可以这样写: #include #include int main() { int a = 0; int b = 0; scanf("%d%d", &a, &b); int average = a + (b - a) / 2; printf("avg = %d\n", average); return 0; }看测试结果: 如果面试官这个时候,我们这里不能使用除2的方式呢,代码改怎么改进呢? 其实也不要害怕,我们现在给出代码的2种实现。 实现1: #include #include int main() { int a = 0; int b = 0; scanf("%d%d", &a, &b); //右移一位有除2的效果 int average = a + ((b - a) >> 1); printf("avg = %d\n", average); return 0; }实现2: #include #include int main() { int a = 0; int b = 0; scanf("%d%d", &a, &b); int average = a&b + ((a^b) >> 1); printf("avg = %d\n", average); return 0; }以上2种实现,不是很明白,这里我录制了一个视频,请参考: C语言求2个数的平均值 好了,这篇文章就讲解到这里,没有提到的,咱们评论区见! |
CopyRight 2018-2019 实验室设备网 版权所有 |