1.编写函数:
unsigned int reverse_bit(unsigned int value);
这个函数的返回值value的二进制位模式从左到右翻转后的值。
如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
unsigned int reverse_bit(unsigned int value)
{
unsigned int num = 0;
int i = 0;
double k = 0;
double l = 2.0;
for (i = 0; i <32; i++)
{
k = (value & 1);
if (k==1)
num=num+ pow(l, 31 - i);
value=value >> 1;
}
return num;
}
int main()
{
int n = 0;
int m = 0;
printf("请输入一个数字\n");
scanf("%d", &n);
m=reverse_bit(n);
printf("反转二进制之后数字为\n");
printf("%u", m);
}
2.不使用(a+b)/2这种方式,求两个数的平均值。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
int num = 0;
printf("请输入两个数字\n");
scanf("%d %d", &a, &b);
/*if (a > b)
{
a = a - b;
num = b + a / 2;
}
else
{
b = b - a;
num = a + b / 2;
}*/
//num = (a + b) >> 1;
//num = (a&b) + (a^b) / 2;
printf("%d", num);
system("pause");
}
3.编程实现:
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
请找出这个数字。(使用位运算)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define MAX 7
int main()
{
int a[MAX] = { 0 };
int i = 0;
int m = 0;
int n = 0;
int count = 0;
printf("请以此输入MAX个数字\n");
for (i = 0; i < MAX; i++)
{
printf("请输入第%d个数字\n", i + 1);
scanf("%d", &a[i]);
}
for (i = 0; i < MAX; i++)
{
count = 0;
for (m = 0; m < MAX; m++)
{
if (i == m)
continue;
if ((a[i] ^ a[m]) == 0)
{
count++;
break;
}
}
if (count == 0)
printf("单独数字为:%d", a[i]);
}
system("pause");
}
4.
有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a[20] = { "student a am i" };
int b[10] = { 0 };
int i = 0;
int count = 0;
int sum1 = 0;
int m = 0;
int tmp = 0;
char c[20] = { 0 };
for (i = 0; i < 20; i++)
{
if (a[i] == ' ')
{
b[count] = i;
count++;
}
if (a[i] == 0)
{
sum1 = i;
printf("字符串长度为%d\n", i);
break;
}
}
printf("字符串中空格的个数为%d\n", count);
for (i = 0; i < count; i++)
{
printf("%d\n", b[i]);
}
for (i = 0; i < sum1; i++)
{
printf("%c", a[i]);
}
printf("\n");
m = b[0]-1;
for (i = 0; i <( b[0]-1)/2; i++)
{
tmp = a[i];
a[i] = a[m];
a[m] = tmp;
m--;
}
m = b[2] - 1;
for (i=b[1]+1; i < b[2]-1; i++)
{
tmp = a[i];
a[i] = a[m];
a[m] = tmp;
m--;
}
for (i = 0; i <=(sum1 - 1) / 2; i++)
{
tmp = a[i];
a[i] = a[sum1 - 1 - i];
a[sum1 - 1 - i] = tmp;
}
for (i = 0; i < sum1; i++)
{
printf("%c", a[i]);
}
system("pause");
}