No.13 代码练习

学习不易,需要坚持

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 ; 
}

运行结果:
在这里插入图片描述

学习不易,需要坚持

猜你喜欢

转载自blog.csdn.net/studyhardi/article/details/83713447