1、不借助中间变量交换两个数的数值
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0, b = 1;
int* p = &a;
int* q = &b;
printf("a=%d,b=%d\n", *q, *p);
system("pause");
return 0;
}
利用指针交换两个数的数值
进阶版
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
a = a + b;
b = a - b;
a = a - b;
printf("a=%d,b=%d\n", a, b);
system("pause");
return 0;
}
2、
输出两个数的最大公约数``
#include<stdio.h>
#include<stdlib.h>
int yue(int x, int y)
{
int temp=0;
int tem=0;
// 保证分母不为0
if (y == 0)
{
x = temp;
temp = y;
y = x;
}
// 辗转相除法
while (tem)
{
tem = x % y;
x = y;
y = tem;
}
return x;
}
int main()
{
int a=0, b=0;
printf("请输入要求的两个数:");
scanf_s("%d%d", &a, &b);
printf("最大公约数是:%d\n", yue(a, b));
system("pause");
return 0;
进阶版
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
int min = 0;
int i = 0;
int max = 0;
printf("请输入两个数");
scanf_s("%d%d", &a,&b);
for (i = 2; i <=( min = a < b ? a : b);i++)
{
if (0 == a % i && 0 == b % i)
max = i;
}
if (0 == max)
printf("两个数互质");
else
printf("两个数的最大公约数是%d\n", max);
system("pause");
return 0;
}在这里插入代码片
这种方法是,如果两个数同时能被从2到两个数中较小的一个是整除那么这个数就是他们的公约数。两个数的最小公倍数是两个数的和除以他们的最小公约数。
函数版交换两个数的值
#include<stdio.h>
#include<stdlib.h>
void jiaohuan(int *p,int *q)
{
int tmp = *p;
*p = *q;
*q = tmp;
}
int main()
{
int a = 0, b = 1;
jiaohuan(&a, &b);
printf("a=%d,b=%d\n", a, b);
system("pause");
return 0;
}