1. 程式人生 > >使用多種方法求兩個數的平均數

使用多種方法求兩個數的平均數

在求平均數的方法中,大家最喜歡用的就是先求兩個數的和,然後再除以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;
}
但是最後這種方法不是很好理解,個人建議呢,使用倒數第二種方法。