1.不允许创建临时变量,交换两个数的内容
中间变量 a0 = a+b;
b1 = a0-b = (a+b)-b = a;
a1 = a0-b1 = (a+b)-((a+b)-b) = b;
int main()
{
int a = 10, b = 20;
a = a + b;
b = a - b;
a = a - b;
printf("a=%d b=%d\n",a,b);
system("pause");
return 0;
}
#include <stdio.h>
int main()
{
int a = 10, b = 20;
//"^"表示按位异或,同位得1,异位得0
a = a^b;
b = a^b;
a = a^b;
printf("a=%d b=%d\n",a,b);
system("pause");
return 0;
}
2.求10 个整数中最大值。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10] = {0};
int n = 0, max = 0;
//用数组在存取10个整数
printf("请输入10个整数: ");
for(n=0; n<10; n++)
{
scanf("%d",&a[n]);
printf("%3d",a[n]);
}
//设最大值初值为第一个元素,后面的元素大于初值则置换
max = a[0];
for(n=0; n<10; n++)
{
if(a[n] > max)
{
max = a[n];
}
}
printf("\nmax=%d\n",max);
system("pause");
return 0;
}
3.将三个数按从大到小输出。
int main()
{
int a[3] = {0};
int i = 0, j = 0;
//输入3个数
printf("请输入三个数: ");
for(i=0; i<3; i++)
{
scanf("%d",&a[i]);
}
//外循环进行遍历
//内循环判断,设数组的第一个元素为最大值,依次跟后面的元素进行比较。若小于后面的元素,则交换位置
for(i=0; i<3; i++)
{
for(j=i+1; j<3; j++)
{
if(a[j] > a[i])
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
//输出排序后的数组
printf("\n从大到小的顺序是: ");
for(i=0; i<3; i++)
{
printf("%3d",a[i]);
}
printf("\n");
system("pause");
return 0;
}
4.求两个数的最大公约数。
#include <stdio.h>
int main()
{
int a = 0, b = 0, min=0;
int i = 0;
//输入两个数:
printf("请输入两个数:");
scanf("%d%d",&a,&b);
min = (a>b)?b:a;
for(i=min; i>=1; i--)
{
if(a%i == 0 && b%i == 0)
{
printf("a和b的最大公约数是:%d",i);
break;
}
}
system("pause");
return 0;
}