我与代码的日常:交换变量值,求最大值,求公约数和公倍数

本文介绍了C语言中的基本编程技巧,包括变量交换、求最大值、排序及计算最大公约数和最小公倍数的方法。通过实际代码示例,展示了如何解决常见的编程问题。

学习不易,需要坚持

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

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

学习不易,需要坚持

内容概要:本文介绍了一个针对电力系统连锁故障传播路径的N-k多阶段双层优化及故障场景筛选模型,该模型基于混合整数线性规划(MILP)方法构建,旨在全面评估电力系统在遭受多重故障时的脆弱性恢复能力。通过引入故障传播路径的概念,模型能够动态模拟故障在电网中的逐级扩散过程,并结合多阶段优化策略,实现对关键故障场景的有效识别优先排序。整个框架不仅考虑了初始故障元件的选取,还涵盖了后续因潮流转移引发的级联跳闸行为,从而提升了风险评估的准确性时效性。该研究已在Matlab平台上完成代码实现,具备良好的可复现性工程应用价值,适用于提升现代电网的安全防御水平。; 适合人群:电力系统、能源安全及相关领域的科研人员、高校研究生以及从事电网规划运行管理的工程技术人员。; 使用场景及目标:①用于电力系统安全评估中识别最危险的N-k故障组合;②支撑电网应急预案制定薄弱环节改造;③作为学术研究中关于级联故障建模优化解的教学验证工具;④服务于智能电网背景下抵御蓄意攻击或极端事件的风险防控决策。; 阅读建议:建议读者结合Matlab代码深入理解模型的数学 formulation 解流程,重点关注目标函数设计、约束条件构建及双层优化结构的实现逻辑,同时可通过调整系统参数故障设定进行仿真对比分析,以掌握不同因素对连锁故障演化的影响规律。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值