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

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

文章目录

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

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

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


代码如下:

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的起点是0for (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.mzph.cn/bicheng/62920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式Linux无窗口系统下搭建 Qt 开发环境

嵌入式Linux无窗口系统下搭建 Qt 开发环境 本文将介绍如何在树莓派的嵌入式 Linux 环境下&#xff0c;搭建 Qt 开发环境&#xff0c;实现无窗口系统模式&#xff08;framebuffer&#xff09;下的图形程序开发。 1. 安装 Qt 环境 接下来&#xff0c;安装核心 Qt 开发库以及与 …

基于STM32设计的智能宠物喂养系统(华为云IOT)_273

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】设计意义【5】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 参考文献1.6 系统框架图1.7 系统原理图1.8 实物图1.9…

C++【PCL】利用矩阵对点云进行刚体变换

/** 功能&#xff1a; 点云刚体变换* 头文件&#xff1a; #include <pcl/common/transforms.h>* 功能函数&#xff1a; pcl::transformPointCloud(*pPointCloudIn, *pPointCloudOut, transform_1);*/#include <pcl/io/ply_io.h>#include <iostream>// pcl #i…

Java项目实战II基于微信小程序的文章管理系统的设计与实现 (开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在信息爆炸的时代&#xff0c;内容创作与管理已成为众…

Conda 管理python开发环境

同步发布于我的网站 &#x1f680; 故事起因: 在公司使用Requests多任务并行开发时遇到了问题&#xff0c;使用 ProcessPoolExecutor 时不能正常发出网络请求&#xff0c;会卡在网络请求发不出去&#xff0c;但是善于用 ThreadPoolExecutor 时是可以的,纠结了很久&#xff0c;一…

【学习Go编程】

了解Go语言的基本概念&#xff1a; 学习Go的基本语法、数据类型、控制结构等。可以参考官方文档或基础教程来入门。 安装Go环境&#xff1a; 访问Go语言的官方网站&#xff0c;下载并安装适合你操作系统的Go编程环境。配置好环境变量&#xff0c;确保可以在命令行中使用go命令…

LLaMA-Factory 上手即用教程

LLaMA-Factory 是一个高效的大型语言模型微调工具&#xff0c;支持多种模型和训练方法&#xff0c;包括预训练、监督微调、强化学习等&#xff0c;同时提供量化技术和实验监控&#xff0c;旨在提高训练速度和模型性能。 官方开源地址&#xff1a;https://github.com/hiyouga/L…

PGSQL:联合唯一索引的创建和删除

创建联合唯一索引 假设有一个表 your_table&#xff0c;它有多个列&#xff0c;你想在其中的几列上创建一个联合唯一索引。以下是创建联合唯一索引的 SQL 语句&#xff1a; CREATE UNIQUE INDEX idx_unique_columns ON your_table(column1, column2, ...);注意&#xff1a; …

抓包之查看websocket内容

写在前面 本文看下websocket抓包相关内容。 1&#xff1a;正文 websocket基础环境搭建参考这篇文章。 启动后&#xff0c;先看chrome的network抓包&#xff0c;这里我们直接使用is:running来过滤出websocket的请求&#xff1a; 可以清晰的看到发送的内容以及响应的内容。在…

项目介绍和游戏搭建(拼图小游戏)

1. &#xff08;1&#xff09; import javax.swing.*;public class GameJFrame extends JFrame {//游戏主界面&#xff0c;游戏的所有逻辑public GameJFrame(){this.setSize(603,680);this.setVisible(true);//true是展示&#xff0c;flase是隐藏} } &#xff08;2&#xff…

Flask项目入门—会话技术Cookie和Session

Session和Cookie都是用于跟踪用户会话的技术、它们可以存储用户信息&#xff0c;以便在用户与网站进行交互时提供个性化的体验。然而&#xff0c;这两者在存储位置、使用方式、安全性等方面存在显著的差异。 工作原理/流程 Cookie 1、用户第一次访问时候服务器生成 Cookie&a…

【Maven】Nexus私服

6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库&#xff0c;它是架设在局域网内的仓库服务&#xff0c;用来代理位于外部的远程仓库&#xff08;中央仓库、其他远程公共仓库&#xff09;。一些无法从外部仓库下载到的构件&#xff0c;如项目组其他人员开发的…

前端Web性能分析工具扫盲

对于前端大型项目来说,很容易产生性能问题。对于这些性能问题,最常见的解决方式是使用性能分析工具进行分析,然后再进行针对性的解决。 一、Chrome DevTools 一般来说,前端的性能分析通常可以从时间和空间两个角度来进行: 时间:常见耗时,如页面加载耗时、渲染耗时、网…

一键生成后端服务,MemFire Cloud重新定义开发效率

作为开发者&#xff0c;特别是独立开发者和小团队成员&#xff0c;大家都知道开发的最大难题之一就是搭建后端服务。要让一个应用从零开始&#xff0c;除了前端的开发工作外&#xff0c;还需要考虑数据库、接口、认证、存储等等一系列繁琐的后台工作。而MemFire Cloud这款神器&…

HarmonyOS(60)性能优化之状态管理最佳实践

状态管理最佳实践 1、避免在循环中访问状态变量1.1 反例1.2 正例 2、避免不必要的状态变量的使用3、建议使用临时变量替换状态变量3.1 反例3.2 正例 4、参考资料 1、避免在循环中访问状态变量 在应用开发中&#xff0c;应避免在循环逻辑中频繁读取状态变量&#xff0c;而是应该…

Ubuntu 20.04中的权限管理:何时使用sudo以及何时可以避免

Ubuntu 20.04中的权限管理&#xff1a;何时使用sudo以及何时可以避免 在Ubuntu 20.04 LTS中&#xff0c;sudo命令的使用是区分普通用户权限和超级用户权限的关键。正确地理解何时需要使用sudo和何时可以直接使用命令是维护系统安全和操作有效性的重要部分。这里将详细解释何时…

mysql 查询所有的触发器

SELECTTRIGGER_SCHEMA AS Database,TRIGGER_NAME AS Trigger,EVENT_OBJECT_TABLE AS Table,EVENT_MANIPULATION AS Event,ACTION_STATEMENT AS Statement FROMinformation_schema.TRIGGERS;创建触发器遇到报错&#xff1a; You do not have the SUPER privilege and binary lo…

大模型专栏--Spring Ai Alibaba介绍和功能演示

Spring AI Alibaba 介绍和功能演示 背景 Spring AI Alibaba 开源项目基于 Spring AI 构建&#xff0c;是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践&#xff0c;提供高层次的 AI API 抽象与云原生基础设施集成方案&#xff0c;帮助开发者快速构建 AI 应用。…

《数据挖掘:概念、模型、方法与算法(第三版)》

嘿&#xff0c;数据挖掘的小伙伴们&#xff01;今天我要给你们介绍一本超级实用的书——《数据挖掘&#xff1a;概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作&#xff0c;由该领域的知名专家编写&#xff0c;系统性地介绍了在高维数据空间中分析和提取大量…

清理Linux/CentOS7根目录的思路

在使用Linux服务器过程中&#xff0c;经常会遇到磁盘空间不足的问题&#xff0c;好多应用默认安装在根目录下&#xff0c;记录一下如何找到问题所在&#xff0c;清理根目录&#xff08;/&#xff09; 1. 检查空间使用情况 1.1 查看分区占用&#xff1a; df -h输出&#xff1…