C 语言数组与函数:核心要点深度剖析与高效编程秘籍

我的个人主页
我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤
目录
- 引言
- 数组基础
2.1 数组的定义与初始化
2.2 一维数组的基本操作
2.3 二维数组及其应用
2.4 数组与指针的关系 - 函数基础
3.1 函数的定义与调用
3.2 函数参数传递(值传递与指针传递)
3.3 函数与数组的结合 - 高级应用
4.1 数组排序与查找
4.2 数组作为函数返回值
4.3 字符数组与字符串操作 - 项目实践:学生成绩管理系统
1. 引言
数组,作为一种能够集中存储多个相同类型数据元素的容器,赋予了我们处理批量数据的强大能力。想象一下,在处理一系列学生成绩、员工工资或者传感器采集到的大量数据时,数组就像一个整齐有序的仓库,让数据的组织与管理变得井井有条。通过简洁的下标索引,我们可以快速定位和访问其中的任意元素,如同在仓库中精准找到特定的货物一般便捷。
而函数,则是 C 语言的灵魂所在。它犹如一位技艺精湛的工匠,将一段具有特定功能的代码封装起来,使其可以在程序的不同角落被反复调用。函数不仅提高了代码的复用性,避免了重复代码的冗余书写,还极大地增强了程序的可读性与可维护性。当我们需要执行某个特定任务,如计算数学公式、处理文件读写或者实现某种复杂的算法逻辑时,函数就会挺身而出,以其模块化的特性让程序的结构更加清晰明了,就像将一个庞大的机器分解成一个个独立运作且功能明确的部件。
当数组与函数携手共进时,它们所释放出的能量更是超乎想象。函数可以接收数组作为参数,对数组中的数据进行加工处理,从而实现各种复杂的数据操作与业务逻辑。这种协同合作的模式,让 C 语言能够轻松应对从简单数据处理到大型系统开发的各类挑战。在接下来的探索之旅中,我们将深入 C语言数组与函数的神秘世界,揭开它们的层层奥秘,领略其在编程艺术中的无穷魅力与巨大潜力,逐步掌握构建高效、健壮程序的精髓所在。
本文将通过详尽的解释和代码示例,帮助你全面掌握数组和函数,并学习如何结合两者实现复杂功能。
2. 数组基础
2.1 数组的定义与初始化
数组是同类型数据的集合,可以使用以下语法定义和初始化数组:
type array_name[size];
示例代码
#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5}; // 初始化printf("First element: %d\n", arr[0]); // 访问第一个元素return 0;
}
注意
- 数组下标从
0开始。 - 如果未完全初始化,未赋值的元素默认为0。
2.2 一维数组的基本操作
遍历数组
#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {printf("arr[%d] = %d\n", i, arr[i]);}return 0;
}
数组求和
#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};int sum = 0;for (int i = 0; i < 5; i++) {sum += arr[i];}printf("Sum = %d\n", sum);return 0;
}
2.3 二维数组及其应用
二维数组用于存储表格或矩阵数据,定义方式如下:
type array_name[rows][columns];
示例代码
#include <stdio.h>int main() {int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);}}return 0;
}
2.4 数组与指针的关系
数组名本质上是指向第一个元素的指针。
示例代码
#include <stdio.h>int main() {int arr[5] = {10, 20, 30, 40, 50};int *ptr = arr;printf("First element: %d\n", *ptr);printf("Second element: %d\n", *(ptr + 1));return 0;
}
3. 函数基础
3.1 函数的定义与调用
函数是实现代码复用的关键工具。
示例代码
#include <stdio.h>int add(int a, int b) {return a + b;
}int main() {int result = add(5, 10);printf("Sum = %d\n", result);return 0;
}
3.2 函数参数传递
值传递
函数接收的是实参的副本,原值不会改变。
#include <stdio.h>void modify(int x) {x = 100;
}int main() {int num = 10;modify(num);printf("num = %d\n", num); // 输出 10return 0;
}
指针传递
函数接收的是指针,能修改原值。
#include <stdio.h>void modify(int *x) {*x = 100;
}int main() {int num = 10;modify(&num);printf("num = %d\n", num); // 输出 100return 0;
}
3.3 函数与数组的结合
数组作为函数参数
#include <stdio.h>void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() {int arr[5] = {1, 2, 3, 4, 5};printArray(arr, 5);return 0;
}
4. 高级应用
4.1 数组排序与查找
冒泡排序
#include <stdio.h>void bubbleSort(int arr[], int size) {for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}int main() {int arr[5] = {5, 2, 9, 1, 5};bubbleSort(arr, 5);for (int i = 0; i < 5; i++) {printf("%d ", arr[i]);}return 0;
}
线性查找
#include <stdio.h>int linearSearch(int arr[], int size, int key) {for (int i = 0; i < size; i++) {if (arr[i] == key) {return i;}}return -1;
}int main() {int arr[5] = {1, 2, 3, 4, 5};int key = 3;int index = linearSearch(arr, 5, key);if (index != -1) {printf("Element found at index %d\n", index);} else {printf("Element not found\n");}return 0;
}
4.2 数组作为函数返回值
C语言中,数组不能直接作为函数返回值,但可以通过指针或动态分配实现。
动态分配数组
#include <stdio.h>
#include <stdlib.h>int* createArray(int size) {int *arr = (int *)malloc(size * sizeof(int));for (int i = 0; i < size; i++) {arr[i] = i + 1;}return arr;
}int main() {int *arr = createArray(5);for (int i = 0; i < 5; i++) {printf("%d ", arr[i]);}free(arr); // 释放内存return 0;
}
4.3 字符数组与字符串操作
字符串反转
#include <stdio.h>
#include <string.h>void reverseString(char str[]) {int n = strlen(str);for (int i = 0; i < n / 2; i++) {char temp = str[i];str[i] = str[n - i - 1];str[n - i - 1] = temp;}
}int main() {char str[] = "hello";reverseString(str);printf("Reversed: %s\n", str);return 0;
}
5. 项目实践:学生成绩管理系统
该项目结合数组和函数实现一个简单的成绩管理系统,包括录入、显示和计算平均成绩。
完整代码
#include <stdio.h>void inputScores(int scores[], int size) {for (int i = 0; i < size; i++) {printf("Enter score for student %d: ", i + 1);scanf("%d", &scores[i]);}
}void displayScores(int scores[], int size) {printf("Scores:\n");for (int i = 0; i < size; i++) {printf("Student %d: %d\n", i + 1, scores[i]);}
}float calculateAverage(int scores[], int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += scores[i];}return (float)sum / size;
}int main() {int scores[5];inputScores(scores, 5);displayScores(scores, 5);float avg = calculateAverage(scores, 5);printf("Average score: %.2f\n", avg);return 0;
}
相关文章:
C 语言数组与函数:核心要点深度剖析与高效编程秘籍
我的个人主页 我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 引言数组基础 2.1 数组的定义与初始化 2.2 一维数组的基本操作 2.3 二维数组及其应用 2.4 数组与指针的关系函数基础 3.1 函数的定义与调用 3.2…...
汽车轮毂结构分析有哪些?国产3D仿真分析实现静力学+模态分析
本文为CAD芯智库原创,未经允许请勿复制、转载! 之前分享了如何通过国产三维CAD软件如何实现「汽车/汽配行业产品设计」,兼容NX(UG)、Creo(Proe),轻松降低企业上下游图纸交互成本等。…...
解决jupyter notebook 新建或打开.ipynb 报500 : Internal Server Error(涉及jinja2兼容性问题)
报错: [E 10:09:52.362 NotebookApp] 500 GET /notebooks/Untitled16.ipynb?kernel_namepyt hon3 (::1) 93.000000ms refererhttp://localhost:8888/tree ...... 重点是: from .exporters import * File "C:\ProgramData\Anaconda3\lib\site-p…...
【若依ruoyi Vue前端线上个人服务器部署】以及常见报错问题解决
提示:【若依ruoyi Vue前端线上个人服务器部署】以及常见报错问题解决 文章目录 前言一、若依ruoyi Vue前端部署常见两种错误1、404问题2、找不到….模块 二、使用步骤(正式开始)1.修改vue.config.js中的publicPath属性。2.修改router/index.j…...
Python学习第十天--处理CSV文件和JSON数据
CSV:简化的电子表格,被保存为纯文本文件 JSON:是一种数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,以JavaScript源代码的形式将信息保存在纯文本文件中 一、csv模块 CSV文件中的每行代表电…...
python基础(一)
python语言特点 解释型语言代码执行过程中通过解释器将代码转换为机器语言,并立即执行;编译型语言执行前需要经过编译整个代码文件为机器语言的可执行文件,然后执行能找出大部分错误错误处理解释型语言在运行时发现错误,编译型语…...
go-carbon v2.5.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。 carbon 目前已捐赠给 dromara 开源组织,已被 awesome-go 收录&am…...
守护进程
目录 守护进程 前台进程 后台进程 session(进程会话) 前台任务和后台任务比较好 本质 绘画和终端都关掉了,那些任务仍然在 bash也退了,然后就托孤了 编辑 守护进程化---不想受到任何用户登陆和注销的影响编辑 如何…...
学习日记_20241126_聚类方法(自组织映射Self-Organizing Maps, SOM)
前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…...
【接口自动化测试】一文从0到1详解接口测试协议!
接口自动化测试是软件开发过程中重要的环节之一。通过对接口进行测试,可以验证接口的功能和性能,确保系统正常运行。本文将从零开始详细介绍接口测试的协议和规范。 定义接口测试协议 接口测试协议是指用于描述接口测试的规范和约定。它包含了接口的请求…...
安全设备-日志审计-系统安装部署配置
3.1 系统安装部署概述 通过系统初始化安装部署,可实现对系统的基础管理工作。系统安装基本部署涉及功能有时间配置、 资产组、资产、用户组、用户、时间配置等) 3.2 系统安装部署配置举例 3.2.1 用户场景 本阶段进行系统安装,进行相关设…...
【ArcGIS Pro】实现一下完美的坐标点标注
在CAD里利用湘源可以很快点出一个完美的坐标点标注。 但是在ArcGIS Pro中要实现这个效果却并不容易。 虽然有点标题党,这里就尽量在ArcGIS Pro中实现一下。 01 标注实现方法 首先是准备工作,准备一个点要素图层,包含xy坐标字段。 在地图框…...
Unity项目性能优化列表
1、对象池 2、检查内存是否泄露。内存持续上升(闭包、委托造成泄露) 3、检查DrawCall数量,尽量减少SetPassCall 4、尽量多的利用四种合批 动态合批(Dynamic Batching)静态合批(Static Batching)GPUInstancingSRP Batcher 动态合批消耗内存把多个网格组合在一起合并…...
【系统架构设计师】高分论文:论软件架构的生命周期
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 摘要正文摘要 2022 年5月,本人所在的某集团公司承接了财务共享服务平台综合管理系统的项目开发,该项目主要实现财务系统主流业务的集成共享。本人担任项目组成员中的系统架构设计师一职,全面负责项目的全生命周…...
流量控制和拥塞控制的区别
流量控制和拥塞控制是TCP协议中两个重要的机制,它们分别用于解决不同的问题。 流量控制 流量控制的目的是防止发送方发送数据过快,导致接收方来不及接收,从而避免分组丢失。流量控制是通过滑动窗口机制实现的,接收方在返回的ACK…...
CSS 背景、阴影和混合模式
网站的好坏在于细节,在实现页面里某个组件的布局并写完样式之后,不要急着继续,有意识地训练自己,以挑剔的眼光审视刚刚完成的代码。 1 背景与渐变 background-image 指定文件或者生成的颜色渐变为背景图片。 background-origin…...
第49届ICPC亚洲区域赛,非凸科技再次支持上海赛站
11月16日-17日,第49届ICPC国际大学生程序设计竞赛亚洲区域赛上海站在上海大学宝山校区成功举办,来自全国各地222所高校、中学、企业的352支参赛队伍同台竞技。非凸科技高度重视ICPC竞赛,再次荣膺上海赛站合作伙伴,共同推动全球信息…...
良好的并发编程习惯之封闭(Confinement)
创作内容丰富的干货文章很费心力,感谢点过此文章的读者,点一个关注鼓励一下作者,激励他分享更多的精彩好文,谢谢大家! “共享可变状态”有两个要点:“共享”和“可变”。封闭的策略是:不共享就完…...
docker镜像、容器、仓库介绍
docker docker介绍docker镜像命令docker容器命令docker仓库 docker介绍 官网 Docker 是一种开源的容器化平台,用于开发、部署和运行应用。它通过将应用程序及其依赖项打包到称为“容器”的单一包中,使得应用能够在任何环境下运行,不受底层系…...
写个添加球队和展示球队的功能--laravel与inertia
先展示下最终效果,如下是展示球队的界面 如下是添加球队的界面 界面样式没怎么调整,不要在意这些细节。先说说操作流程 首先需要登录,没注册就注册一个账号。登录界面就不展示了。然后选中”NbaBasketballTeams“这个选项,就进入了展示球队的界面。然后点击…...
开源项目主题系统的3大核心机制深度解析:从CSS变量到动态切换的完整实现方案
开源项目主题系统的3大核心机制深度解析:从CSS变量到动态切换的完整实现方案 【免费下载链接】vue-vben-admin vbenjs/vue-vben-admin: 是一个基于 Vue.js 和 Element UI 的后台管理系统,支持多种数据源和插件扩展。该项目提供了一个完整的后台管理系统&…...
MVC / MVVM 和 Vue3、React18 到底啥关系?
MVC / MVVM 和 Vue3、React18 到底啥关系? 我用最直白、最贴合你日常写代码的方式讲清楚,保证你瞬间通透。一、先给结论(最重要) Vue3 标准的 MVVM 框架(官方自己定义的)React18 借鉴 MVVM 思想ÿ…...
纯粹直播:革新直播观看体验的一站式跨平台解决方案
纯粹直播:革新直播观看体验的一站式跨平台解决方案 【免费下载链接】pure_live 纯粹直播:哔哩哔哩/虎牙/斗鱼/快手/抖音/网易cc/M38自定义源应有尽有。 项目地址: https://gitcode.com/gh_mirrors/pur/pure_live 您是否曾为在多个直播平台间频繁切换而感到困…...
AI 辅助开发实战:基于低代码与智能生成的五金店管理系统毕设架构设计
最近在帮学弟学妹们看毕业设计,发现“五金店管理系统”是个高频选题。但很多人做着做着就陷入了“增删改查”的泥潭,前端界面简陋,业务逻辑也写得七零八落,最后答辩时演示效果平平,技术深度更是无从谈起。这让我开始思…...
AI原生应用:解决幻觉难题的有效途径
AI原生应用:解决幻觉难题的有效途径 关键词:AI原生应用、大模型幻觉、检索增强生成(RAG)、验证模块、智能系统架构 摘要:大语言模型(LLM)的“幻觉”(Hallucination)问题——生成与事实不符的内容,正成为AI应用落地的最大障碍。本文将从“AI原生应用”的视角出发,用通…...
Cocos解耦移动和发射模块
目标:玩家受到摇杆A控制移动和方向,发射受到摇杆B负责方向和发射 //玩家模块 ccclass(Player) export class Player extends Component {//玩家速度Speed:number 500;//玩家方向property(Vec3)PlayerDir:Vec3;//虚拟摇杆property(Node)Joystick:Node n…...
AI时代程序员创业指南:从超级个体到一人企业
AI时代程序员创业指南:从超级个体到一人企业 AI给了每个人杠杆,但不是每个人都能用好。认知、决策能力,甚至运气,同样重要。 引子:那些"超级个体"的真实故事 最近读到一篇AIX财经的报道,采访了6…...
3大核心功能让你的英雄联盟体验提升300%:League-Toolkit完全指南
3大核心功能让你的英雄联盟体验提升300%:League-Toolkit完全指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 引言…...
告别‘unbox’失败:Truffle项目初始化保姆级教程,从MetaCoin到自定义合约
告别‘unbox’失败:Truffle项目初始化保姆级教程,从MetaCoin到自定义合约 当你第一次接触Truffle框架时,那种兴奋感可能很快就会被truffle unbox metacoin命令失败的红字提示浇灭。别担心,这几乎是每个区块链开发者的必经之路。本…...
解锁毕业论文新姿势:书匠策AI,你的学术“超级外挂”!
在学术的征途上,毕业论文无疑是每位学子必须跨越的一道重要关卡。它不仅是对你大学四年学习成果的全面检验,更是你迈向学术殿堂或职场的重要敲门砖。然而,面对堆积如山的资料、错综复杂的逻辑结构,以及那令人头疼的格式要求&#…...
