P4-1【应用数组进行程序设计】第一节——知识要点:一维数组

视频:

P4-1【应用数组进行程序设计】第一节——知识要点:一维数组

项目四  应用数组进行程序设计

任务一:冒泡排序

知识要点:一维数组

目录

一、任务分析

二、必备知识与理论

三、任务实施


一、任务分析

用冒泡法对任意输入的 10 个整数进行由小到大的排序。

1.首先是定义一个一维数组包含10个元素来存放这10个整数;

2.懂得冒泡法排序的思想,利用循环的嵌套来解决问题;

3.利用这个一维数组来输出排好序的10个整数。

二、必备知识与理论

1. 认识数组

在C语言中,数组必须是静态的,没有提供动态数组的类型。也就是说,定义一个数组之后,就确定了它的维数和所容纳的同类元素的个数(即数组大小)。这就构成了数组类型的两个特点:

(1)数组大小必须是确定的,不允许随机变动。

(2)数组元素的数据类型必须相同,不允许出现混合类型。

也就是说,数组只可以处理同样类型的有限个成批数据信息。在软件设计中尤其是一维数组、二维数组应用最广。

注意:数组的维数和大小是在定义数组时就确定的,程序运行的时候不能改变。

2.一维数组的定义

数组变量也要遵循“先定义后引用”的原则。一维数组定义的一般形式为:

类型说明符 数组名[常量表达式];

例如: int m[8];

它表示定义一个整型数组,数组名是m,数组m中有8个元素。

数组定义中要注意以下几个问题:

(1)“类型说明符”可以是任何一种基本数据类型或构造数据类型。

(2)“数组名”的命名规则和变量命名规则相同,都遵循标识符的命名规则。

(3)数组名后的常量表达式是用方括号[]括起来的,不能使用圆括号。如:int a(10);用法是不对的。

(4)“常量表达式”表示数组中数据元素的个数,即数组长度。通常是一个整型常量,符号常量也行,不能包含变量。例如在m[8]中,表示数组m有8个元素,下标从0开始一直到7,这8个数组元素分别是:m[0]、m[1]、m[2]、m[3]、m[4]、m[5]、m[6]、m[7],注意没有m[8]。若使用m[8]会出现下标越界的错误。

(5)一个数组定义语句中可以只定义一个数组,也可以定义多个数组,还可以同时定义数组和变量。

例如:double a[10],b[6];/*定义了一个有10个元素的双精度型数组a和一个有6个元素的双精度型数组b*/

char f[8],e1;/*定义了一个有8个元素的字符型数组f和一个字符型变量e1*/

3.一维数组的引用

数组必须先定义,然后使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。在C语言中,凡是一般简单变量可以使用的地方都可以使用数组元素。

一维数组元素的表示形式如下:

数组名[下标]

注意:在编译和执行程序时,系统不检查数组的下标是否越界,因此在编程时,要注意下标越界问题,以免发生错误。

4. 一维数组的初始化

在定义数组的同时给数组元素赋初值称为数组的初始化。

一维数组初始化的一般形式为:

类型说明符 数组名[常量表达式]={数据值,数据值,……,数据值};

C语言对数组的初始化赋值还有以下几点规定:

(1)可以只给部分元素赋初值。没有赋初值的元素:对于数值型数组,自动赋初值为0;对字符型数组,自动赋初值为空字符。

例如:int m[8]={1,2,3,4};

定义的数组m有8个元素,但大括号内只有4个初值,这表示只给前面4个元素赋初值,后4个元素值均为0。即 m[0]=1,m[1]=2,m[2]=3,m[3]=4,m[4]=0,m[5]=0,m[6]=0,m[7]=0。

(2)只能给元素逐个赋值,不能给数组整体赋值。

例如:给数组m中的8个元素全部赋值“2”只能用以下形式来表示:

int m[8]={2,2,2,2,2,2,2,2};

而不能为了方便写成如下的形式:

int m[8]=2;

(3)如果给全部数组元素赋初值,则在数组说明中,可以不指定数组的长度,其长度等于花括号中数值的个数。

例如:int m[5]={1,2,3,4,5};

可写为:int m[ ]={1,2,3,4,5};

(4)当花括号内提供的初值个数多于数组元素的个数时,系统编译时将会出错。

三、任务实施

本任务是用冒泡法对任意输入的10个整数进行由小到大排序。

冒泡法的算法思想是: n个数排序,将相邻两个数依次进行比较,将小数调在前面,大数放在后面,这样逐次比较,直至将最大的数移至最后;然后再将n-1个数继续比较,重复上面操作,直至比较完毕。由于排序过程类似每次将最大的数沉到下面,把小的数浮到上面,所以称为冒泡法排序,也有称为沉石子法的。

若对10个数据进行排序,则算法可以描述为:

(1)定义数组a的长度为11,本例中对a[0]不用,只用a[1]到a[10],以符合人们的习惯。

(2)利用循环的嵌套来解决问题。由上面的算法分析,可以看出10个数据的数组升序排列,需要进行9趟排序。每趟的排序仅在内层循环中对数组中的数据两两进行比较,而外层循环仅说明了总共需要比较的趟数,不会处理数组中的元素。另外,根据上述问题的分析,可以看出内、外层循环变量之间的变化规律,每趟执行的内循环的次数和相应的趟数之和为定值。可采用二重循环实现冒泡法排序,外循环控制进行比较的次数,内循环找出最大的数,并放在最后位置(即沉底)。

冒泡法排序的程序代码如下:

#include <stdio.h>

main()

{                   

int a[11]; /*数组a的长度为11,本例中对a[0]不用,只用a[1]到a[10],以符合人们的习惯*/

int i,j,t;

printf("input l0 numbers:\n");  /* 输出提示信息 */

for(i=1;i<11;i++)

    scanf("%d",&a[i]);  /* 设置循环语句,通过键盘将10个整数分别放到 a[1]到a[10]中*/

 printf("\n");

   for(j=1;j<=9;j++)   /* 外循环,10个数排序进行9次*/

       for(i=1;i<=10-j;i++)   /* 内循环,10-外循环次数=内循环次数 */

          if(a[i]>a[i+1])

            {t=a[i];a[i]=a[i+1];a[i+1]=t;} /*借助于中间变量t交换数据*/

          printf("the sorted numbers:\n");

 for(i=1;i<11;i++)

         printf("%d  ",a[i]);

 }

运行结果如下:

 input l0 numbers:

 1  0  4  8  12  65  -76  100  -45  123↙

 the sorted numbers:

-76  -45  0  1  4  8  12  65  100  123

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/920997.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据库入门】关系型数据库入门及SQL语句的编写

1.数据库的类型&#xff1a; 数据库分为网状数据库&#xff0c;层次数据库&#xff0c;关系型数据库和非关系型数据库四种。 目前市场上比较主流的是&#xff1a;关系型数据库和非关系型数据库。 关系型数据库使用结构化查询语句&#xff08;SQL&#xff09;对关系型数据库进行…

day07(单片机高级)继电器模块绘制

目录 继电器模块绘制 原理图 布局 添加板框 布线 按tab修改线宽度 布线换层 泪滴 铺铜 铺铜的作用 铺铜的使用规范 添加丝印 步骤总结 继电器模块绘制 到淘宝找一个继电器模块 继电器模块的使用&#xff08;超详细&#xff09;_继电器模块工作原理-CSDN博客文章浏览阅读4.8w次&…

1+X应急响应(网络)病毒与木马的处置:

病毒与木马的处置&#xff1a; 病毒与木马的简介&#xff1a; 病毒和木马的排查与恢复&#xff1a;

【电路笔记 TMS320F28335DSP】时钟+看门狗+相关寄存器(功能模块使能、时钟频率配置、看门狗配置)

时钟源和主时钟&#xff08;SYSCLKOUT&#xff09; 外部晶振&#xff1a;通常使用外部晶振&#xff08;如 20 MHz&#xff09;作为主要时钟源。内部振荡器&#xff1a;还可以选择内部振荡器&#xff08;INTOSC1 和 INTOSC2&#xff09;&#xff0c;适合无需高精度外部时钟的应…

CCE-基础

背景&#xff1a; 虚拟化产生解决物理机资源浪费问题&#xff0c;云计算出现实现虚拟化资源调度和管理&#xff0c;容器出现继续压榨虚拟化技术产生的资源浪费&#xff0c;用命名空间隔离&#xff08;namespace&#xff09; 灰度升级&#xff08;升级中不影响业务&#xff09…

基于LLama_factory的Qwen2.5大模型的微调笔记

Qwen2.5大模型微调记录 LLama-facrotyQwen2.5 模型下载。huggingface 下载方式Modelscope 下载方式 数据集准备模型微调模型训练模型验证及推理模型导出 部署推理vllm 推理Sglang 推理 LLama-facroty 根据git上步骤安装即可&#xff0c;要求的软硬件都装上。 llama-factory运行…

提取图片高频信息

提取图片高频信息 示例-输入&#xff1a; 示例-输出&#xff1a; 代码实现&#xff1a; import cv2 import numpy as npdef edge_calc(image):src cv2.GaussianBlur(image, (3, 3), 0)ddepth cv2.CV_16Sgray cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)grad_x cv2.Scharr(g…

移动充储机器人“小奥”的多场景应用(上)

一、高速公路服务区应用 在高速公路服务区&#xff0c;新能源汽车的充电需求得到“小奥”机器人的及时响应。该机器人配备有储能电池和自动驾驶技术&#xff0c;能够迅速定位至指定充电点&#xff0c;为待充电的新能源汽车提供服务。得益于“小奥”的机动性&#xff0c;其服务…

怎么只提取视频中的声音?从视频中提取纯音频技巧

在数字媒体的广泛应用中&#xff0c;提取视频中的声音已成为一项常见且重要的操作。无论是为了学习、娱乐、创作还是法律用途&#xff0c;提取声音都能为我们带来诸多便利。怎么只提取视频中的声音&#xff1f;本文将详细介绍提取声音的原因、工具、方法以及注意事项。 一、为什…

Windows环境GeoServer打包Docker极速入门

目录 1.前言2.安装Docker3.准备Dockerfile4.拉取linux环境5.打包镜像6.数据挂载6.测试数据挂载7.总结 1.前言 在 Windows 环境下将 GeoServer 打包为 Docker&#xff0c;可以实现跨平台一致性、简化环境配置、快速部署与恢复&#xff0c;同时便于扩展集成和版本管理&#xff0c…

《Vue零基础入门教程》第四课: 应用实例

往期内容 《Vue零基础入门教程》第一课&#xff1a;Vue简介 《Vue零基础入门教程》第二课&#xff1a;搭建开发环境 《Vue零基础入门教程》第三课&#xff1a;起步案例 参考官方文档 https://cn.vuejs.org/api/application#create-app 示例 const {createApp} Vue// 通…

NUXT3学习日记四(路由中间件、导航守卫)

前言 在 Nuxt 3 中&#xff0c;中间件&#xff08;Middleware&#xff09;是用于在页面渲染之前或导航发生之前执行的函数。它们允许你在路由切换时执行逻辑&#xff0c;像是身份验证、重定向、权限控制、数据预加载等任务。中间件可以被全局使用&#xff0c;也可以只在特定页…

使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像

文章目录 应用快速部署NginxRedisMySQLTomcat 制作镜像镜像原理基于已有容器创建使用 Dockerfile 创建镜像指令说明构建应用创建 Dockerfile 文件创建镜像 应用快速部署 Nginx docker run -d -p 80:80 nginx使用浏览器访问虚拟机地址 Redis docker pull redis docker run --…

02微服务系统与设计(D1_走出微服务误区:避免从单体到分布式单体)

目录 学习前言 一、回顾&#xff1a;从单体到微服务到 Function 二、分布式单体 分布式单体起因之一&#xff1a;通过共享库和网络客户端访问分布式能力 分布式单体起因之二&#xff1a;简单用远程调用替代进程内方法调用 分布式单体起因小结 三、引入非侵入式方案&#…

WEB攻防-通用漏洞文件上传js验证mimeuser.ini语言特性

知识点&#xff1a; 1、文件上传-前端验证 2、文件上传-黑白名单 3、文件上传-user.ini妙用 4、文件上传-php语言特性 详细点&#xff1a; 1、检测层面&#xff1a;前端&#xff0c;后端等 2、检测内容&#xff1a;文件头&#xff0c;完整型&#xff0c;二次渲染等 3、检…

鸿蒙学习高效开发与测试-集成开发环境(4)

文章目录 1、工程管理2、代码编辑3、界面预览4、编译构建5、代码调试6、性能调优7、设备模拟8、命令行工具9、端云一体化开发 HUAWEI DevEco Studio 是面向鸿蒙生态的集成开发环境&#xff0c;提供了一站式的鸿蒙生态应用、元服务开发能力&#xff0c;详细能力如图所示。 1、工…

基于yolov8、yolov5的茶叶等级检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;茶叶等级检测在茶叶生产、质量控制和市场销售中起着至关重要的作用&#xff0c;不仅能帮助相关部门实时监测茶叶质量&#xff0c;还为智能化检测系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的茶叶等级检测模型&#xff0c;该模…

Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图

用户打开 PDF 文档时&#xff0c;他们会看到 PDF 的初始视图。默认情况下&#xff0c;打开 PDF 时不会显示书签面板或缩略图面板。在本文中&#xff0c;我们将演示如何设置文档属性&#xff0c;以便每次启动文件时都会打开书签面板或缩略图面板。 Spire.PDF for .NET 是一款独…

从 HTML 到 CSS:开启网页样式之旅(开篇之一)——CSS 初体验与网页样式新征程

从 HTML 到 CSS&#xff1a;开启网页样式之旅&#xff08;一&#xff09;——CSS 初体验与网页样式新征程 前言一、为什么需要 CSS&#xff1f;二、CSS的引用&#xff08;一&#xff09;行内样式&#xff08;二&#xff09;内部样式&#xff08;三&#xff09;外部样式&#xf…

Android音频采集

在 Android 开发领域&#xff0c;音频采集是一项非常重要且有趣的功能。它为各种应用程序&#xff0c;如语音聊天、音频录制、多媒体内容创作等提供了基础支持。今天我们就来深入探讨一下 Android 音频采集的两大类型&#xff1a;Mic 音频采集和系统音频采集。 1. Mic音频采集…