C语言编程题目~2

1、给定两个整型变量的值,将两个值的内容进行交换
#include <stdio.h>
#include <stdlib.h>
int main() {
	int a = 0;
	int b = 0;
	int tmp = 0;	// C中规定:定义变量必须放到代码最前端
	scanf_s("%d%d",&a,&b);
	// 注意在scanf语句中%d之间不需要换行或空格,因为换行键对它来说就是一次读入
	tmp = a;
	a = b;
	b = tmp;
	printf("a = %d b=%d\n", a, b);
}
2、不允许创建临时变量,交换两个数的内容
#include <stdio.h>
#include <stdlib.h>
int main() {
	int a = 0;
	int b = 0;
	scanf("%d%d",&a,&b);
	// 方法1:利用本身数学算术特性
	a = a + b;
	b = a - b;
	a = a - b;  
	// 方法2:按位异或操作:
	a = a^b;
	b = a^b;
	a = a^b;
	printf("a = %d b=%d\n", a, b);
}
扩展:

① 找出整型数组里只出现一次的数字,其他数字出现两次;
(思路:运用异或运算,任何一个数字异或它自己都等于0)

② 找出整型数组里只出现了一次的两个数字,其他的数字都出现了两次;(思路:所有数字依次异或的结果就是这两个只出现一次的数字的异或结果)

③ 要求时间复杂度是O(n),空间复杂度是O(1)。
(辅助空间被限制,Hash表思路不可用)

3、求10个整数中的最大值
#include <"stdio.h">
#include <"stdlib.h">
int main() {
	int arr[10] = { -1, 2, -3, 4, -5, 6, -7, 8, -9, 0 };
	int max = arr[0];
	for (int i = 1; i < 10; i++){
		if (arr[i]>max){
			max = arr[i];
		}
	}
	printf("%d\n", max);
	system("pause");
	return 0;
}
4、将三个数按从大到小顺序输出
void Swap(int *pa, int *pb) {
	int tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}
int main(){
	int a = 0;
	int b = 0;
	int c = 0;
	scanf_s("%d%d%d", &a, &b, &c);
	if (a < b){
		Swap(&a, &b);
	}
	if (a < c){
		Swap(&a, &c);
	}
	if (b < c){
		Swap(&b, &c);
	}
	printf("%d %d %d\n", a, b, c);
	system("pause");
	return  0;
}
4、求两个数的最大公约数
// “辗转相除法”
int main(){
	int a = 24;
	int b = 18;
	// 此处若a小b大也可以算,经过一次循环会交换过来
	// 可加入b不能为0 的判断条件
	while (a%b != 0)
	{
		int tmp = a%b;
		a = b;
		b = tmp;
	}
	printf("%d\n", b);
	system("pause");
}

猜你喜欢

转载自blog.csdn.net/Hannah_Hsq/article/details/84581443
今日推荐