c语言实例(12)

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

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

unsigned int reverse_bit(unsigned int value) {
	int count = 0 , i = 0;
	while (i < 32){
		if ((value >> i) & 1){
			count |= 1 << (31 - i);
		}
		i++;
	}
	return count;
}
int main() {
	int a , answer;
	printf("请输入需要按二进制位模式从左到右翻转的数:");
	scanf("%d", &a);
	answer = reverse_bit(a);
	printf("翻转后为:%u\n", answer);
	system("pause");
	return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int main() {
	float x, y, z;
	printf("请输入两个数求平均数(x y):");
	scanf("%f %f", &x, &y);
	if (x > y) {
		z = (x - y) / 2 + y;
	}
	else {
		z = (y - x) / 2 + x;
	}
	printf("平均数为:%f\n", z);
	system("pause");
	return 0;
}

3 编程实现:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)

#include<stdio.h>
#include<stdlib.h>

int main() {
	int arr[] = { 1, 2, 3, 2, 1, 3, 4 };
	int result = 0 , i;
	printf("数组为:");
	for (i = 0; i < 5; ++i) {
		printf("%d ", arr[i]);
	}
	printf("\n");
	for (i = 0; i < 5; ++i) {
		result = result ^ arr[i];
	}
	printf("其中不成对出现的数为:%d\n", result);
	system("pause");
	return 0;
}

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

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

#include<stdio.h>
#include<stdlib.h>

void Reverse_All(char* s) {
	char* start = s; 
	char* end = s;
	while (*end != '\0') {
		++end;
	}
	--end; 
	while (start < end) { 
		char tmp = *start;
		*start = *end;
		*end = tmp;
		++start;
		--end;
	}
}

void Reverse_Every(char* s) {
	while (*s != '\0') {
		char* start = s; 
		char* end = s;
		while (*end != ' ' && *end != '\0') {
			++end;
		}
		--end; 
		while (start < end) { 
			char tmp = *start;
			*start = *end;
			*end = tmp;
			++start;
			--end;
		}
		while (*s != ' ' && *s != '\0') {
			++s;
		}
		if (*s != '\0') { 
			++s;
		}
	}
}

int main() {
	char a[] = "student a am i";
	printf("初始的字符串:\n%s\n", a);
	Reverse_All(a);
	printf("整个字符串按二分法逆置后:\n%s\n", a);
	Reverse_Every(a);
	printf("以空格为分隔符将每个分隔后的字符串按二分法逆置后:\n%s\n", a);
	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值