C语言学习自记录5

1.编写函数:
unsigned int reverse_bit(unsigned int value);
这个函数的返回值value的二进制位模式从左到右翻转后的值。

如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
unsigned int reverse_bit(unsigned int value){
	int i = 0;
	int num = 0;
	for (i = 0; i < 32; i++){
		if ((value >> i & 1) == 1){//取出二进制25的每一位,判断是否为1
			num = num + (1 << (31 - i));//为1时,将1放到翻转后的位置
		}
		else{

		}
	}
	return num;
}
int main(){
	unsigned int value = 25;
	unsigned int sum= reverse_bit(value);;
	printf("取反后的值为");
	printf("%u", sum);
	system("pause");
	return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a = 20;
	int b = 24;
	printf("%d", a&b+(a^b)>>1);
	system("pause");
	return 0;
}

4.
有一个字符数组的内容为:"student a am i",
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。

student a am i
i ma a tneduts
i am a student

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	char arr[] = "student a am i";
	int size = sizeof(arr) / sizeof(arr[0]);
	int len = size - 2;
	int len1;
	int num = len+1;
	for (; len >5;len--){
		
		 if (arr[len] == 't'){//最后一组字符单独打印,或者在住开始字符前加空格,则不要这个if语句
			len1 = 0;
			printf("%c", ' ');
			for (; len1 < num; len1++){
				
				printf("%c", arr[len1]);
			}
			num = len;
		}
		else if (arr[len] == ' '){//遇到空格开始打印至上次打印的位置
			
			len1 = len;
			for (; len1 < num; len1++){
				printf("%c",arr[len1]);
			}
			num = len;
		}
	}
	
	system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值