小程序12.10

来源:互联网 发布:淘宝卖家不发货怎么办? 编辑:程序博客网 时间:2024/05/22 13:18

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 7int 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");}


原创粉丝点击