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

C语言程序设计P5-4【应用函数进行程序设计 | 第四节】——知识要点:数组作函数参数

知识要点:数组作函数参数

视频:

目录

一、任务分析

二、必备知识与理论

三、任务实施


一、任务分析

任务要求用选择法对数组中的 10 个整数按由小到大的顺序排序,前面在讲解数组时讲冒泡法排序曾提到选择法排序的思想。

所谓选择法就是:先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中最小的数与a[1]对换;……,每比较一轮,找出一个未经排序的数中最小的一个。共应比较9轮。

在这里主要是想应用数组名作函数参数,让实参和形参共用一段内存单元。

二、必备知识与理论

数组可以作为函数的参数使用,进行数据传送。数组用作函数参数有两种形式,一种是把数组元素作为函数实参使用;另一种是把数组名作为函数的实参和形参使用。

1. 数组元素作函数实参

数组元素的使用与普通变量相同,因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的数值传送。

2.数组名作函数参数

数组名作为函数参数时,此时实参与形参都应用数组名(或用数组指针,见项目六。)要求实参和形参数组的类型相同,维数相同。在进行参数传递时是“地址传递”,也就是说是实参数组的起始地址传递给了形参数组,而不是将实参数组中的每一个元素一一传递给形参数组元素。

3.多维数组作函数参数

多维数组元素可以作为实参,这与普通变量作为实参的用法相同。

也可以用多维数组名作为实参和形参,在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明。但是不能把第二维以及其它高维的大小说明省略。

三、任务实施

本任务是用选择法对数组中10个整数按由小到大排序。

算法分析:所谓选择法就是:先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中最小的数与a[1]对换;……,每比较一轮,找出一个未经排序的数中最小的一个。共应比较9轮。

(1)首先是写一个main()函数,在main()函数中定义一个整型数组a用来存放将要排序的10个整数。

(2)自己定义一个有参函数sort(),用来完成对10个整数的排序这个功能,在函数sort()中定义一个整型数组array,数组array接收数组a的首地址,使数组array和数组a共用一段内存单元。并且将较大的数作为返回值返回到main()函数中。

(3)在sort()函数中用数组array完成对这10个整数的排序任务。

程序代码如下:

#include <stdio.h>void sort(int array[],int n){ int i,j,k,t;for(i=0;i<n-1;i++){ k=i;for(j=i+1;j<n;j++)if(array[j]<array[k]) k=j;t=array[k];array[k]=array[i];array[i]=t;}}main(){ int a[10],i;printf("enter the array:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);sort(a,10);printf("the sorted array:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");  }

程序的运行结果如下:

enter the array:

12 0 -45 99 34 89 76 -60 100 38↙

the sorted array:

-60 -45 0 12 34 38 76 89 99 100

可以看到在执行函数调用语句“sort(a,10);”之前和之后,a数组中各元素的值是不同的。原来是无序的,执行“sort(a,10);”后,a数组已经排好序了,这是由于形参数组array已用选择法进行排序了,形参数组改变也使实参数组随之改变。

实参数组a将它的首地址传递给形参数组array,这样这两个数组在内存中共同使用同一段内存单元。

http://www.lryc.cn/news/498749.html

相关文章:

  • PostgreSQL数据库连接:psqlODBC驱动安装与配置实战指南
  • 【NLP 8、normalization归一化函数:sigmoid、softmax】
  • 鸿蒙ArkTS 与安卓Android-底层逻辑对比
  • 第八节、Bresenham直线插补【51单片机-TB6600驱动器-步进电机教程】
  • 唇形同步视频生成工具:Wav2Lip
  • 旅游管理系统的设计与实现
  • burp常用机漏洞测试理论
  • TCP/IP 和 UDP
  • FastAPI解决跨域报错net::ERR_FAILED 200 (OK)
  • git如何新建分支并提交?
  • 使用 LlamaFactory 结合开源大语言模型实现文本分类:从数据集构建到 LoRA 微调与推理评估
  • Python基础学习总结篇
  • 8. Debian系统中显示屏免密码自动登录
  • ubuntu安装nginx并设置开机自启动
  • SQLServer中使用ISNULL替换为指定的替换值
  • 深入浅出:PHP函数的定义与使用
  • C++知识整理day4内存管理——new和delete详解
  • 部署项目报错
  • 专业140+总分420+上海交通大学819考研经验上交电子信息与通信工程,真题,大纲,参考书。博睿泽信息通信考研论坛,信息通信考研Jenny
  • 电子信息工程自动化 单片机自动门控制系统设计
  • T C P
  • PDF与PDF/A的区别及如何使用Python实现它们之间的相互转换
  • 【Linux课程学习】: 进程地址空间,小故事理解虚拟地址,野指针
  • 解决el-select数据量过大的3种方法
  • 速盾:高防cdn预热指定url就只刷新这个吗?
  • aarch64-linux-gnu-g++在windous不能用
  • 01_Node.js入门 (黑马)
  • 记一次搞校园网的经历
  • 沃德云商协系统微信小程序PHP+Uniapp
  • Leecode刷题C语言之可以被进一步捕获的棋子数