C语言编程 求两个数的平均值方法(三种方法)

第一种方法是最常见的
average=(a + b) / 2这种方式,求两个数的平均值

第二种方法是
当 a<b 时
averag=a+(b-a)/2

这里着重介绍的是第三种方法

average=(a&b) + (a^b)>>1

推导过程如下
a + b = (a&b) 2 + (a^b)) ———》average=((a&b)2+(a^b))/2 ————》average=(a&b) + (a^b)>>1

eg:
两个数为15和5
15二进制序列低位为1111
5二进制序列低位为0101
按位与(&)运算后得到两者相同的部分0101
按位异或(^)运算后得到两者不同的部分1010
因为相同的部分两者都有,所以要乘以二,再加上不同的部分(至此为15+5)再除以2就是平均值(10)。
0101为5,乘以2为10,加上1010(10)为20,再除以2就是平均值10.

源代码实例:

#include<stdio.h>
#include<stdlib.h>
int average(int a, int b)
{
    return (a&b) + ((a^b) >> 1);
}
int main()
{
    int num1, num2;
    int result;
    printf("请输入两个数\n");
    scanf("%d%d", &num1, &num2);
    result = average(num1, num2);
    printf("平均值是%d\n", result);
    system("pause");
    return 0;
}

原文地址:https://blog.51cto.com/14232799/2382167

时间: 2024-12-19 04:35:57

C语言编程 求两个数的平均值方法(三种方法)的相关文章

求字符串长度函数实现的三种方法

/* Date: 10/03/19 12:49 Description: 求字符串长度函数实现的三种方法*/ #include<stdio.h> int strlen1(char *s);int strlen2(char *s);int strlen3(char *s); int main(void) { char str[]="The function to test my length."; printf("The length1 is:%d\n",

c语言:求两个数的最大公约数。

求两个数的最大公约数. 程序: #include <stdio.h> int main() { int num1, num2, t; printf("请输入两个正整数:"); scanf("%d%d",&num1, &num2);//7,8 while (t = num1%num2)//7           1        0,循环结束 { num1 = num2;     //8           7 num2 = t;     

【c语言】求两个数中不同的位的个数

// 求两个数中不同的位的个数 #include <stdio.h> int dcount(int a,int b) { int count = 0; int num = a ^ b; while (num) { count++; num = num & (num - 1); } return count; } int main() { printf("%d\n", dcount(3, 5)); return 0; } 版权声明:本文为博主原创文章,未经博主允许不得

编写C语言程序求两个数的最大公约数

//求两个数的最大公约数 #include <stdio.h> int main() {  int num1,num2;  int temp;  scanf("%d%d",&num1,&num2);  //核心算法  while(num1 % num2 != 0)  {   temp = num2;   num2 = num1%num2;   num1 = temp;  }  printf("最大公约数为:%d\n",num2);  re

【c语言】求两个数m和n的最大公约数(辗转相除法)

// 求两个数m和n的最大公约数(辗转相除法) #include <stdio.h> int yue( int x, int y ) { int temp; int tem; // 保证分母不为0 if( y == 0 ) { x = temp; temp = y; y = x; } // 辗转相除法 while( tem ) { tem = x % y; x = y; y = tem; } return x; } int main() { int a,b; printf("请输入要

【C语言】求两个数的最大公约数

思路: 辗转相除法:以小的数除大数,所得的是整数,那这个数就是最大公约数,不然就用余数来除刚才的除数,直到得到整数,这时作为除数的就是最大公约数. #include<stdio.h> int main() { int m,n,t,p; printf("请输入两个数:"); scanf("%d %d",&m,&n); if((m >= n) && (m % n==0)) { t=n; } if((p = m%n) &a

c语言编程求两个整数的最大公约数(两种方法)

第一种(for循环) #include <stdio.h> #include <stdlib.h> int main() { int i, min, k, a, b; printf("请输入两个整数:\n"); scanf("%d%d", &a, &b); if (a>b)//此处if else语句可以删除(只是为了少执行几步程序) min = b; else min = a; for (i = min; i>0;

c语言:不使用(a+b)/2这种方式,求两个数的平均值。

程序: #include<stdio.h> int main() { int a, b; int avg = 0; scanf("%d%d", &a, &b); avg = (a + b) >> 1; //右移一位相当于除以2 printf("%d\n",avg); return 0; } 结果: 6 8 7

不使用(a+b)/2这种方式,求两个数的平均值

//(右移一位相当于除以2) #include <stdio.h> int main() {      int a,b;      int avg=0;      scanf("%d%d",&a,&b);      avg=(a+b)>>1;      printf("%d\n",avg);   return 0; }