给定两个整形变量的值,将两个值的内容进行交换。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num1 = 0;
int num2 = 0;
printf("请输入两个数字:");
scanf("%d %d", &num1, &num2);
printf("num1 = %d num2 = %d\n", num1, num2);
int tmp = 0;
tmp = num1;
num1 = num2;
num2 = tmp;
printf("num1 = %d num2 = %d\n", num1, num2);
system("pause");
return 0;
}
结果如下:
如果,不允许创建临时变量,交换两个数的内容,
用加减的方法来做:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num1 = 0;
int num2 = 0;
printf("请输入两个数字:");
scanf("%d %d", &num1, &num2);
printf("num1 = %d num2 = %d\n", num1, num2);
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
printf("num1 = %d num2 = %d\n", num1, num2);
system("pause");
return 0;
}
结果如下:
但是,此方法存在问题,两数相加可能会溢出。
所以,还有另外一种方法,异或。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num1 = 0;
int num2 = 0;
printf("请输入两个数字:");
scanf("%d %d", &num1, &num2);
printf("num1 = %d num2 = %d\n", num1, num2);
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
printf("num1 = %d num2 = %d\n", num1, num2);
system("pause");
return 0;
}
结果与上面的方法是一样的。异或,按位异或,不会出现溢出。
求10 个整数中最大值。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
int max = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
for (i = 0; i < 10; i++)
{
if (arr[i] > max)
max = arr[i];
}
printf("max =%d\n", max);
system("pause");
return 0;
}
结果为:
但是,这种处理方法会出现问题。int max = 0; max的初始化为0,如果,数组里面是负数,求出的最大值会是0;结果如下:
而正确的是,max为-1。
解决这个问题,将max的初始化为数组的第一个元素。此时,比较大小时,也就可以从第二个元素开始比较,减少一次循环次数。如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
int max = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
max = arr[0];
for (i = 1; i < 10; i++)
{
if (arr[i] > max)
max = arr[i];
}
printf("max =%d\n", max);
system("pause");
return 0;
}
此时的结果就是正确的:
将3个数从大到小输出:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 2;
int b = 1;
int c = 3;
int tmp = 0;
if (a < b)
{
tmp = a;
a = b;
b = tmp;
}
if (a < c)
{
tmp = a;
a = c;
c = tmp;
}
if (b < c)
{
tmp = b;
b = c;
c = tmp;
}
printf("%d %d %d", a, b, c);
system("pause");
return 0;
}
结果如下:
求两个数的最大公约数:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 24;
int b = 18;
int c = 0;
while (c = a % b)
{
a = b;
b = c;
}
printf("%d\n", b);
system("pause");
return 0;
}
结果如下: