- 一、将三个从大到小输出
- 1.思路
- 2.代码如下
- 3.结果图
- 二、求两个数的最大公约数
- 1.思路
- 2.代码如下
- 结果图
- 三、不允许创建临时变量,交换两个数的内容(数组大小相同)
- 1.思路
- 2.代码如下
- 3.结果图
一、将三个从大到小输出 1.思路
这个题是比较简单的,我们需要将这三个数依次进行比较,将较大的数替换到前面即可,详情请看代码。
2.代码如下
#includeint main() { int i ,j; int arr[3] = { 0 }; for (i = 0; i < 3; i++) { scanf("%d", &arr[i]); } for (i = 0; i < 3; i++) { for (j = 0; j < 3 - i; j++) { int tmp = 0; if (arr[j] < arr[j + 1]) { tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } for (i = 0; i < 3; i++) { printf("%d ", arr[i]); } return 0; }
3.结果图
如图所示:
二、求两个数的最大公约数 1.思路
这个题的解法有几种,我这里用的是辗转相除法,又叫欧几里得法,如有两个数a,b,要求这两个数的最大公约数,可以把这两个数相除然后取余数,如果余数不为0,则把除数和所得到的余数继续相除求余数,直到其余数为0是,其除数就是最大公约数。
例:求84和63的最大公约数,步骤如下:
84/63=1(余21)
63/21=3(余0)
即最大公约数为21
提示:还有另一种算法叫更相减法,思路都是差不多的,感兴趣的可以试试。
2.代码如下
#includeint main() { int a, b; printf("请输入两个数字:"); scanf("%d%d", &a, &b); int tmp; tmp = a % b; while (tmp) { a = b; b = tmp; tmp= a % b; } printf("最大公约数为:%d",b); return 0; }
结果图
如图所示:
三、不允许创建临时变量,交换两个数的内容(数组大小相同) 1.思路
这个题目我想到了五种解法,第一种:空瓶倒,也就是再创建一个新的数组,去实现两个数组的互换;第二种和第三种:不用创建新的数组,利用上篇文章中的第二题,使用for循环对数组中的元素进行逐个替换;
第四种:可以利用指针对数组进行操作,从而达到替换的目的,第五种:可以利用strcpy这个函数实现替换。
注:这里只展现第二种和第三种方法,如对其他方法感兴趣的话,可以自主尝试。
2.代码如下
#includeint main() { int a[10]; int b[10]; printf("请输入数组a的内容:n"); int i; for (i = 0; i < 10; i++) { scanf("%d", &a[i]); } printf("请输入数组b的内容:n"); for (i = 0; i < 10; i++) { scanf("%d", &b[i]); } for (i = 0; i < 10; i++) { a[i] = a[i] + b[i]; b[i] = a[i] - b[i]; a[i] = a[i] - b[i]; } printf("数组a的内容为:"); for (i = 0; i < 10; i++) { printf("%d ", a[i]); } printf("数组b的内容为:"); for (i = 0; i < 10; i++) { printf("%d ", b[i]); } return 0; }
3.结果图
如图所示:



