使用多種方法求兩個數的平均數
阿新 • • 發佈:2019-01-31
在求平均數的方法中,大家最喜歡用的就是先求兩個數的和,然後再除以2,得到的結果即為兩個數的平均數,實現的程式碼如下:
<pre name="code" class="cpp">#include<stdio.h> #include<Windows.h> #pragma warning(disable:4996) int main() { int a = 0; int b = 0; printf("Please inter a,b:"); scanf("%d %d", &a, &b); printf("%d and %d average is %d\n", a, b, (a + b) / 2); system("pause"); return 0; }
若不使用(a+b)/2,若學過移位的童鞋會使用右移的方法,右移一位就相當於除以2,。
int main()
{
int a = 0;
int b = 0;
printf("Please inter a,b:");
scanf("%d %d", &a, &b);
printf("%d and %d average is %d\n", a, b, (a + b) >> 1);
system("pause");
return 0;
}
前兩種方法都有可能會導致資料的溢位,因此,我們可以將兩個數分別右移再相加。若兩數均為奇數,該方法出現錯誤,於是我們就分情況實現。int main() { int a = 0; int b = 0; printf("Please inter a,b:"); scanf("%d %d", &a, &b); printf("%d and %d average is %d\n", a, b, (a >> 1)+( b >> 1)); system("pause"); return 0; }
int main() { int a = 0; int b = 0; printf("Please inter a,b:"); scanf("%d %d", &a, &b); if ((a % 2 == 1) && (b % 2 == 1)) { printf("%d and %d average is %d\n", a, b,1 + (a >> 1) + (b >> 1)); } else { printf("%d and %d average is %d\n", a, b, (a >> 1) + (b >> 1)); } system("pause"); return 0; }
但是這種方法又過於繁瑣,經過深思熟慮之後,我又想到了一種方法:
int main()
{
int a = 0;
int b = 0;
printf("Please inter a,b:");
scanf("%d %d", &a, &b);
printf("%d and %d average is %d\n", a, b, a + (b - a) / 2);
system("pause");
return 0;
}
這種方法既好理解,又簡介,還不易出錯。然後要是有人想問,還有沒有其他的方法,答案是:當然還有啦!
int main()
{
int a = 0;
int b = 0;
printf("Please inter a,b:");
scanf("%d %d", &a, &b);
printf("%d and %d average is %d\n", a, b, (a&b) + ((a^b) >> 1));
system("pause");
return 0;
}
但是最後這種方法不是很好理解,個人建議呢,使用倒數第二種方法。