学习不易,需要坚持
1.交换两个变量值
2.求10个整数的最大值
3.将三个数从大到小输出
4.求两个数的最大公约数最小公倍数
//交换两个数字的值(常规方法,借助中间变量来交换)
#include <stdio.h>
void Swap(double* p1, double* p2)
{
double temp = *p1 ;
*p1 = *p2 ;
*p2 = temp ;
}
int main()
{
double value1 = 0 ;
double value2 = 0 ;
printf("请输入两个数字: ") ;
scanf("%lf%lf", &value1, &value2) ;
printf("交换前 value1 = %lf, value2 = %lf\n", value1, value2) ;
Swap(&value1, &value2) ;
printf("交换后 value1 = %lf, value2 = %lf\n", value1, value2) ;
return 0 ;
}
运行结果:
//交换两个变量,不借助中间变量
#include <stdio.h>
int main()
{
int a = 5 ;
int b = 9 ;
printf("---------使用加减法实现两个变量的交换---------\n") ;
printf("交换前 a = %d, b = %d\n", a, b) ;
a = a + b ;
b = a - b ;
a = a - b ;
printf("交换后 a = %d, b = %d\n", a, b) ;
return 0 ;
}
运行结果:
//交换两个变量,不借助中间变量
#include <stdio.h>
int main()
{
int a = 5 ;
int b = 9 ;
printf("---------使用异或法实现两个变量的交换---------\n") ;
printf("交换前 a = %d, b = %d\n", a, b) ;
a = a ^ b ;
b = a ^ b ; //b=(a^b)^b=a^b^b=a^0=a
a = a ^ b ; //a=a^(a^b)=a^a^b=0^b=b
printf("交换后 a = %d, b = %d\n", a, b) ;
return 0 ;
}
运行结果:
//求10个整数之间的最大值
//解题思路:将10个数字存到数组中,然后设定个max值一一比较,在这里要注意max的初值应该为数组首元素
#include <stdio.h>
int Find_max(int arr[], int sz)
{
int i = 0 ;
int max = arr[0] ;
for(i=0; i<sz; i++)
{
if(max < arr[i])
{
max = arr[i] ;
}
}
return max ;
}
int main()
{
int arr[10] = {-1, 2, 3, 4, 5, 6, 7, 8, 9, 0} ;
int ret = 0 ;
int size = 0 ;
size = sizeof(arr) / sizeof(arr[0]) ; //数组大小要在函数调用之前计算出来再传进去,因为在进行参数传递时,数组名会隐式转换为指针。
ret = Find_max(arr, size) ;
printf("Max = %d\n", ret) ;
return 0 ;
}
运行结果:
//三个数字从大到小输出(借助中间变量)
#include <stdio.h>
Sort(int* pa, int* pb, int* pc)
{
int temp = 0 ;
if(*pa < *pb)
{
temp = *pa ;
*pa = *pb ;
*pb = temp ;
}
if(*pa < *pc)
{
temp = *pa ;
*pa = *pc ;
*pc = temp ;
}
if(*pb <*pc)
{
temp = *pb ;
*pb = *pc ;
*pc = temp ;
}
}
int main()
{
int a = 0 ;
int b = 0 ;
int c = 0 ;
printf("-------借助中间变量-------\n") ;
printf("请输入三个数字: ") ;
scanf("%d%d%d", &a, &b, &c) ;
Sort(&a, &b, &c) ;
printf("结果为:%d > %d > %d\n",a, b, c) ;
return 0 ;
}
运行结果:
//三个数字按大小输出(通过Swap函数)
#include <stdio.h>
void Swap(int* p1, int* p2)
{
int temp = *p1 ;
*p1 = *p2 ;
*p2 = temp ;
}
int main()
{
int a = 0 ;
int b = 0 ;
int c = 0 ;
printf("-------通过Swap函数-------\n") ;
printf("请输入三个数字: ") ;
scanf("%d%d%d", &a, &b, &c) ;
if(a < b)
Swap(&a, &b) ;
if(a < c)
Swap(&a, &c) ;
if(b < c)
Swap(&b, &c) ;
printf("结果为: %d > %d > %d\n", a, b, c) ;
return 0 ;
}
运行结果:
//求两个数的最大公约数(Great Common Divisor)(辗转相除法)和最小公倍数(Least Common Multiple)
//算法思想:定义三个变量a, b, c ,c存储a % b,若c不为0,将b赋给a, 将c赋给b,继续进行求模,直到余数为0 时,b就是两数的最大公约数。a和b的乘积除以最大公约数即为最小公倍数
#include <stdio.h>
int Get_GCD(int a, int b)
{
int c = 0 ;
while(c = a % b)
{
a = b ;
b = c ;
}
return b ;
}
int Get_LCM(int a, int b)
{
int value = Get_GCD(a, b) ;
return a * b / value ;
}
int main()
{
int a = 0 ;
int b = 0 ;
int gcd = 0 ; //存放最大公约数
int lcm = 0 ; //存放最小公倍数
printf("请输入a和b的值: ") ;
scanf("%d%d", &a, &b) ;
gcd = Get_GCD(a, b) ;
printf("最大公约数为: %d\n", gcd) ;
lcm = Get_LCM(a, b) ;
printf("最小公倍数为: %d\n", lcm) ;
return 0 ;
}
运行结果: