当前位置: 首页 > article >正文

用函数实现模块化程序设计(七)--数组作为函数参数(排序算法)

调用有参函数时,需要实参,实参可以是常量,变量,表达式,数组元素的作用与变量相当,凡是变量出现的地方都可用数组代替数组元素可以用作函数实参数组名可以作实参和形参,传递的是一个元素的地址。

文章目录

  • 一、数组元素作为函数参数
  • 二、数组名作为函数参数
    • 选择排序算法
      • 步骤分析
  • 总结

一、数组元素作为函数参数

数组元素可以用作函数实参不能用于函数形参


代码如下:

int main() 
{
	int i = 0;
	int arr[8] = { 1,2,8,9,19,2,98,1 };
	for (i = 0; i < 8; i++)
	{
		printf("%d ", arr[i]);//数组元素作为函数参数传递
	}
	return 0;
}

再举个例子 :

void print(int n)
{
	printf("%d ", n);//打印的n就是数组元素
}

int main()
{
	int i = 0;
	int arr[8] = { 1,2,8,9,19,2,98,1 };
	for (i = 0; i < 8; i++)
	{
		print(arr[i]);//这个地方把数组元素传给print
	}
	
	return 0;
}

二、数组名作为函数参数

除了数组元素作为函数实参外,数组名不仅能够作为函数实参,也能做函数形参


代码如下:

//求学生的平均成绩
//n是学生总人数
double score(int arr[],int n)
{
	int sum = 0;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		sum += arr[i];//注意这个加的是每个元素的值而不是”i“的值
	}
	return (sum /1.0/n);
}
int main()
{
	double avg = 0;
	int arr[10] = { 1,4,8,20,18,11,20,18,0,48 };
	avg=score(arr, 10);
	printf("%lf", avg);
	return 0;
}
注意:sum在加的时候是arr[i]的值,不是i的值,i是元素标号 

数组名作参数时,应该在被调用函数和主调函数中分别定义数组

数组名是数组中首元素的地址,传参时,也是传递的首元素地址,两个数组共占同一段内存单元

实参数组和形参数组类型应一致

形参中不用表明传几个元素,C语言编译系统不检查形参数组大小,只是将函数首地址传给了形参数组名

2.选择排序算法

对10个整数按从小到大排序


代码如下(示例):

//对10个整数从小到大排序
void paixu(int arr[], int n)//n代表元素个数
{
	int i = 0;
	for (i = 0; i <= n - 1; i++)
		//选择排序的次数(元素需要n-1次比较,同时元素下标最大也是n-1)
	{
		//在所有排序元素中找一个最小的和下标为i的元素进行交换
		int j = 0;
		int min = j;//min的起点是0

		for (j = i; j < n; j++)//元素个数
		{
			if (arr[j] < arr[min])
			{
				min = j;

			}
		}
		int tmp = arr[i];
		arr[i] = arr[min];
		arr[min] = tmp;
		printf("%d ", arr[i]);
	}
}
int main()
{
	int min = 0;
	int arr[10] = { 21,33,22,10,20,1,3,13,24,50 };
	paixu(arr, 10);
	return 0;

}

先使用for循环使元素标号一次一次的++,再for循环从剩下的元素里面找一个最小值的下标与下标为i的元素进行交换,最终输出数组i的下标


步骤分析: 

j先从i开始,j刚开始为0,min的起点也为0;

j循环一直不停的执行找到最小值然后赋给外面的i元素;

给到i元素了之后最外层的循环才能再一次执行,不然就一直是j循环在执行找最小值;

把每一次执行得到的最小值传给min;

相当于min这个下标永远是剩下的元素中值最小的那个;

然后再把每一次执行得到的最小值传给i元素并打印出来;

 

总结

主要学习了数组作为函数参数,数组名可以作为函数实参和形参,数组元素只能做函数实参,在数组名做函数参数时,传递的是数组第一个元素的地址。

学习了选择排序,拿一个数跟其它剩余的数比较,找到最大或最小。(选择排序比较绕,自己也理解代码理解了好久,分析出来了一些步骤,仅供参考。


http://www.kler.cn/a/420989.html

相关文章:

  • Linux命令行解释器的模拟实现
  • java基础语法光速入门
  • 聊聊GC Roots
  • 开发环境初始化安装软件全指南
  • CTF之密码学(密码特征分析)
  • 组合问题变式——选数(dfs)
  • 【Elasticsearch】06-JavaRestClient查询
  • springboot340“共享书角”图书借还管理系统(论文+源码)_kaic
  • YOLOv11融合[ECCV2024]WTConvNeXt中的WTConv模块及相关改进思路
  • 利用 Redis 与 Lua 脚本解决秒杀系统中的高并发与库存超卖问题
  • 使用 Elastic 和 Amazon Bedrock 制作混合地理空间 RAG 应用程序
  • Android V CTS-ON-GSI CtsGameManagerTestCases 测试fail
  • 一分钟解决 在多个dataframe相同位置中寻找最大值保留
  • 经典C语言代码——part 19(链表)
  • Vuex的基本使用
  • 利用Python爬虫精准获得Amazon商品详情数据
  • 40分钟学 Go 语言高并发:分布式系统理论基础
  • 基于大语言模型的智能Agent研究:定义、方法与展望(Large Language Model Based Intelligent Agents)
  • C语言经典题目详解(PTA题目)
  • c++领域展开第一幕——入门基础(命名空间、iostream、缺省参数、函数重载、nullptr、inline(内联函数))超详细!!!!
  • 【adb】AndroidStudio调试
  • 【python】列表
  • 面对深度伪造:OWASP发布专业应对指南
  • Java Web 1HTML快速入门
  • 代码随想录-算法训练营day29(回溯算法05:非递减子序列,全排列,全排列2)
  • 【C++算法】28.前缀和_除自身以外数组的乘积