一、. 给定两个整形变量的值,将两个值的内容进行交换。
#include<stdio.h>
int main()
{
int a = 10;//定义第一个值为10。
int b = 20;//定义第二个值为20。
int *p1 = &a;//定义指针p1,存放a的地址。
int *p2 = &b;//定义指针p2,存放b的地址。
int temp;
//定义一个变量,用来交换存放 a b 的值。
temp = *p1;
//将p1中存放的地址赋值给temp。,此时temp是a元素的地址。
*p1 = *p2;
//将p2的地址赋值给p1,此时p1里面存放的是p2的地址,也就是b的地址。
*p2 = temp;
//将temp里面a元素的地址赋值给p2,此时p2里面存放的是a元素的地址。
a = *p1;
//此时指针p1里面是b的地址,将b的值赋值给a.
b = *p2;
//此时指针p2里面是a的地址,将a的值赋值给b.
printf("%d %d", a, b);
//最终输出a b,实现两个数的交换。
system("pause");
return 0;
}
二. 不允许创建临时变量,交换两个数的内容(附加题)
#include<stdio.h>
int main()
{
int a = 13;
int b = 78;
a = a ^ b;
//将a异或b的值赋值给a,此时a的值变为a^b。
b = a ^ b;
//将a异或b的值赋值给b,此时a的值已经变成为a^b;
//则的表达式相当于b=(a^b)^b,a异或两次b,其值变成a,所以相当于把a的值赋值给b。
a = a ^ b;
//此时,b的值为a^b,z这个表达式可以变成a^(a^b);
//给b异或两次a,其值还是b,所以相当于把b的值赋值给a。
printf("a=%d,b=%d", a, b);
system("pause");
return 0;
}
三、求10 个整数中最大值。
思路将一个数组中的值与前一个值进行比较,如果大于,则交换两个值的内容。
//求10个整数中的最大值。
#include<stdio.h>
#include<windows.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10}; //定义一个大小为10的数组。
int i,j,temp; //定义一个变量,初始化为0。
for (i = 0; i < 9; i++) //遍历这10个数字。
{
for (j = 0; j <= 9 - i; j++)
{
if (arr[j] > arr[j + 1]) //条件判断,数组中的随机值是否大于第i+1个值。
{
temp = arr[j + 1]; //将第i+1个值赋值给temp。
arr[j + 1] = arr[j]; //在将一个随机值赋值给第i+1个值。
arr[j] = temp; //将temp的值赋值给随机值。
}
}
}
system("pause");
return 0;
}
四、.将三个数按从大到小输出。
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d;//定义一个变量,要在abc交换时存储中间值。
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);
if (a < b)
{
d = a;
a = b;
b = d;
}
//if a<b 交换a和b的值,交换之后满足a>b。
if (a < c)
{
d = a;
a = c;
c = d;
}
//if a<c 交换a和c的值,交换之后满足a>c,此时a的值变成三个数中的最大值。
if (b < c)
{
d = b;
b = c;
c = d;
}
//if b<c 交换b和bc的值,交换之后满足b>c。
printf("%d %d %d", a, b, c);//此时abc的大小顺序已经确定。a>b>c
system("pause");
return 0;
}
五.求两个数的最大公约数。余数为0的时候,除数就是最大公约数
#include<stdio.h>
int main()
{
int m, n, t, r;
scanf("%d %d", &m, &n);
if (m > n)
{
t = m;
m = n;
n = t;
}//如果m>n,交换m和n的值,使得m<n。
r = m % n;
if (r != 0)//如果m%n余数r不等于0。
{
m = n; //将n的值赋值给m.
n = r; //将r的值赋值给n.
r = m % n; //把被重新赋值的n和m进行计算。
}
printf("%d\n",n);
system("pause");
return 0;
}