1,给两个整形变量的值,将两个值的内容交换:
(1)通过定义临时变量:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 1;
int b = 2;
int tmp = a;//定义临时变量tmp
a = b;
b = tmp;
printf("%d %d\n", a, b);
system("pause");
return 0;
}
(2)不建立临时变量,通过加减运算:
(存在溢出的问题)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 1;
int b = 2;
a = a + b;//将a,b通过加减运算交换值,存在溢出的问题;
b = a - b;
a = a - b;
printf("%d %d\n", a, b);
system("pause");
return 0;
}
(3)通过按位异或的方法:
(不容易理解,不利于阅读代码)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 1;
int b = 2;
a = a^b;//通过按位异或运算将a,b交换值,问题:不容易理解,不利于阅读代码
b = a^b;
a = a^b;
printf("%d %d\n", a, b);
system("pause");
return 0;
}
2,求十个整数中最大的值:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[] = { 12, 34, 55, 6, 3, 2, 12, 67, 98, 67 };
int max = a[0];
for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++i)
{
if (max < a[i])//将数组中第一个数定义为最大值,将数组遍历一遍,如果数组中的值比定义的最大值大,就交换他两的值,
{
max = a[i];
}
}
printf("%d\n", max);
system("pause");
return 0;
}
3,将三个数按从大到小的顺序输出:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[] = { 23, 43, 12 };
int max = a[0];
int min = a[1];
if (max > min)
{
if (max < a[2])
{
printf("%d %d %d\n", a[2], max, min);
}
if (min>a[2])
{
printf("%d %d %d\n", max, min, a[2]);
}
}
else if (max<min)
{
if (max>a[2])
{
printf("%d %d %d\n", min, max, a[2]);
}
if (min < a[2])
{
printf("%d %d %d\n", a[2], min, max);
}
}
system("pause");
return 0;
}
4,求两个数的最大公约数:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void Function(int a, int b)//用递归思想将两数进行求模运算,直到求模的值等于0时
{
if (a < b)
{
Function(b, a);
}
else if (b == 0)
{
printf("%d\n", a);
}
else
{
int tmp = a;
a = b;
b = tmp % a;
Function(a, b);
}
}
int main()
{
int a = 0;
int b = 0;
printf("请输入两个数,求这两数的最大公约数:");
scanf("%d %d", &a, &b);
Function(a,b);
system("pause");
return 0;
}