作业2

本文深入探讨C语言编程的实用技巧,包括数值交换、数组操作、排序算法及最大公约数的计算。通过具体代码实例,详细解析了不使用临时变量进行数值交换的方法,如加法和异或运算;介绍了如何求取数组中的最大值;展示了三数排序的过程;并提供了求两数最大公约数的高效算法。

1.给定两个整形变量的值,将两个值的内容进行交换。

#include<stdlib.h>
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	printf("输入a =\n");
	printf("输入b =\n");
	scanf("%d%d", &a, &b);
	c = a;
	a = b;
	b = c;
	printf("\na = %d,b = %d", a, b);
	system("pause");
	return 0;
}

2. 不允许创建临时变量,交换两个数的内容

(1)通过加法来实现

int main()
{
	int a = 0;
	int b = 0;
	printf("输入a =\n");
	printf("输入b =\n");
	scanf("%d%d", &a, &b);
	a = a + b;
	b = a - b;
	a = a - b;
	printf("\na = %d,b = %d", a, b);
	system("pause");
	return 0;
}

(2)通过异或来实现
通过异或计算时,会将整数转换为二进制数,a^ b时,二进制上各位数相互比较,相同为0,不同为1。例如二进制数 a = 011 b= 110 , a^b=101。

int main()
{
	int a = 0;
	int b = 0;
	printf("输入a =\n");
	printf("输入b =\n");
	scanf("%d%d", &a, &b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("\na = %d,b = %d", a, b);
	system("pause");
	return 0;
}

3.求10 个整数中最大值。

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	int max = 0;
	printf("请输入10个数\n");
	for (i = 0; i < 10; i++)
	{
		printf("arr[%d]=", i);
		scanf("%d", &arr[i]);
		printf("\n");
	}
	max = arr[0];
	for (i = 0; i < 10; i++)
	{
		if (arr[i]>max)
			max = arr[i];
	}
	printf("max is  = %d", max);
	system("pause");
	return 0;
}

4.将三个数按从大到小输出。

将数从大到小依次传给a,b,c最终输出a,b,c得到结果。

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int temp = 0;
	scanf("%d%d%d" ,&a, &b, &c);
	if (a < b)
	{
		temp = a;
		a = b;
		b = temp;
	}
	if (a < c)
	{
		temp = a;
		a = c;
		c = temp;
	}
	if (b < c)
	{
		temp = b;
		b = c;
		c = temp;
	}
	printf("%d %d %d", a, b, c);
	system("pause");
	return 0;
}

在写这个代码是遇到的问题:
在输入环节scanf,曾将代码写成

scanf("%d %d %d " ,&a, &b, &c);

这时发现在输入三个数字后 仍需要再输入一个数字,才会显示结果
在这里插入图片描述
随意输入一个数后却能得到正确结果
在这里插入图片描述
这是因为在下面这段代码中,%d和%d之间输入了空格,前面的两个空格对输入似乎不会影响,
但最后一个空格会使输入增加一次。

scanf("%d %d %d " ,&a, &b, &c);

将这段代码改成下图后,即去掉%d之间的逗号可以得到:

scanf("%d%d%d" ,&a, &b, &c);

在这里插入图片描述
只去除最后一个%d后面的空格

scanf("%d %d %d" ,&a, &b, &c);

在这里插入图片描述
其结果一样!

5.求两个数的最大公约数。

算法:用a%b得到c在用b模c知道结果为0 为止
在语句while (c=a%b)不仅仅是判断a%b是否为0 ,同时也将a%b的值赋给了c
若改成while(a%b)将陷入死循环!

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	printf("enter two number\n");
	scanf("%d%d", &a, &b);
	while (c=a%b)//小数模大数余小数的值
	{
		a = b;
		b = c;
	}
	printf("%d", b);
	system("pause");
	return 0;
}
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值