1.给定两个整形变量,并将两个值进行交换
解题思路
一般我们我们面对这种问题,我们都是先创建一个临时变量,然后借用临时变量以达到我们的目标。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf_s("%d %d", &a, &b);
printf("a = %d\n", a);
printf("b = %d\n", b);
c = a;
a = b;
b = c;
printf("a = %d\n", a);
printf("b = %d\n", b);
system("pause");
return 0;
}
当然,这是一种好方法,但是,假如有要求我们不能创建这个临时变量我们应该怎么做呢?
我们可以使用加减亦或者乘除的方法来构造一个变量,但是这种方法是由明显缺陷的,假设这两个值非常大,他们相加或相乘后就会超出我们的整形范围,最后交换出来的值可能就不是我们想要的(减法和除法也是同理)
所以下来我们就引入一种叫做异或‘ ^ ’。
然后我们就可以借用异或这个密码来实现不创建临时变量进行两变量交换
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf_s("%d %d", &a, &b);
printf("a = %d\n", a);
printf("b = %d\n", b);
a = a^b;
b = a^b;
a = a^b;
printf("a = %d\n", a);
printf("b = %d\n", b);
system("pause");
return 0;
}
2.求10个整数中的最大值
解题思路
我们在C语言中应该了解过冒泡排序这种算法。
它可以帮助完成我们本次的题目要求。
这里我们先简单的介绍一下冒泡排序的思想:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
了解了冒泡排序后,代码就变得比较简单了。
这里我们直接给出利用冒泡排序算法写出的程序,代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *arr[9] = { 0 };
int i = 0;
int k = 0;
int max = 0;
printf("请输入输出10个整数\n");
for (i = 0; i < 10; i++)
{
printf("请输出你的10个整数\n");
scanf_s("%d,",&arr[i]);
}
for (i = 0; i < 10; i++)
{
if (arr[i] >= max);
{
max = arr[i];
}
}
printf("\n");
printf("10个整数中的最大值为%d\n", max);
system("pause");
return 0;
}
最后附上这次程序的结果