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

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

在这里插入图片描述
我的个人主页
我的专栏C语言,希望能帮助到大家!!!点赞❤ 收藏❤

目录

  1. 引言
  2. 数组基础
    2.1 数组的定义与初始化
    2.2 一维数组的基本操作
    2.3 二维数组及其应用
    2.4 数组与指针的关系
  3. 函数基础
    3.1 函数的定义与调用
    3.2 函数参数传递(值传递与指针传递)
    3.3 函数与数组的结合
  4. 高级应用
    4.1 数组排序与查找
    4.2 数组作为函数返回值
    4.3 字符数组与字符串操作
  5. 项目实践:学生成绩管理系统

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 语言数组与函数:核心要点深度剖析与高效编程秘籍

我的个人主页 我的专栏&#xff1a;C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 目录 引言数组基础 2.1 数组的定义与初始化 2.2 一维数组的基本操作 2.3 二维数组及其应用 2.4 数组与指针的关系函数基础 3.1 函数的定义与调用 3.2…...

汽车轮毂结构分析有哪些?国产3D仿真分析实现静力学+模态分析

本文为CAD芯智库原创&#xff0c;未经允许请勿复制、转载&#xff01; 之前分享了如何通过国产三维CAD软件如何实现「汽车/汽配行业产品设计」&#xff0c;兼容NX&#xff08;UG&#xff09;、Creo&#xff08;Proe&#xff09;&#xff0c;轻松降低企业上下游图纸交互成本等。…...

解决jupyter notebook 新建或打开.ipynb 报500 : Internal Server Error(涉及jinja2兼容性问题)

报错&#xff1a; [E 10:09:52.362 NotebookApp] 500 GET /notebooks/Untitled16.ipynb?kernel_namepyt hon3 (::1) 93.000000ms refererhttp://localhost:8888/tree ...... 重点是&#xff1a; from .exporters import * File "C:\ProgramData\Anaconda3\lib\site-p…...

【若依ruoyi Vue前端线上个人服务器部署】以及常见报错问题解决

提示&#xff1a;【若依ruoyi Vue前端线上个人服务器部署】以及常见报错问题解决 文章目录 前言一、若依ruoyi Vue前端部署常见两种错误1、404问题2、找不到….模块 二、使用步骤&#xff08;正式开始&#xff09;1.修改vue.config.js中的publicPath属性。2.修改router/index.j…...

Python学习第十天--处理CSV文件和JSON数据

CSV&#xff1a;简化的电子表格&#xff0c;被保存为纯文本文件 JSON&#xff1a;是一种数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff0c;以JavaScript源代码的形式将信息保存在纯文本文件中 一、csv模块 CSV文件中的每行代表电…...

python基础(一)

python语言特点 解释型语言代码执行过程中通过解释器将代码转换为机器语言&#xff0c;并立即执行&#xff1b;编译型语言执行前需要经过编译整个代码文件为机器语言的可执行文件&#xff0c;然后执行能找出大部分错误错误处理解释型语言在运行时发现错误&#xff0c;编译型语…...

go-carbon v2.5.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库

carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库&#xff0c;提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。 carbon 目前已捐赠给 dromara 开源组织&#xff0c;已被 awesome-go 收录&am…...

守护进程

目录 守护进程 前台进程 后台进程 session&#xff08;进程会话&#xff09; 前台任务和后台任务比较好 本质 绘画和终端都关掉了&#xff0c;那些任务仍然在 bash也退了&#xff0c;然后就托孤了 ​编辑 守护进程化---不想受到任何用户登陆和注销的影响​编辑 如何…...

学习日记_20241126_聚类方法(自组织映射Self-Organizing Maps, SOM)

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…...

【接口自动化测试】一文从0到1详解接口测试协议!

接口自动化测试是软件开发过程中重要的环节之一。通过对接口进行测试&#xff0c;可以验证接口的功能和性能&#xff0c;确保系统正常运行。本文将从零开始详细介绍接口测试的协议和规范。 定义接口测试协议 接口测试协议是指用于描述接口测试的规范和约定。它包含了接口的请求…...

安全设备-日志审计-系统安装部署配置

3.1 系统安装部署概述 通过系统初始化安装部署&#xff0c;可实现对系统的基础管理工作。系统安装基本部署涉及功能有时间配置、 资产组、资产、用户组、用户、时间配置等&#xff09; 3.2 系统安装部署配置举例 3.2.1 用户场景 本阶段进行系统安装&#xff0c;进行相关设…...

【ArcGIS Pro】实现一下完美的坐标点标注

在CAD里利用湘源可以很快点出一个完美的坐标点标注。 但是在ArcGIS Pro中要实现这个效果却并不容易。 虽然有点标题党&#xff0c;这里就尽量在ArcGIS Pro中实现一下。 01 标注实现方法 首先是准备工作&#xff0c;准备一个点要素图层&#xff0c;包含xy坐标字段。 在地图框…...

Unity项目性能优化列表

1、对象池 2、检查内存是否泄露。内存持续上升(闭包、委托造成泄露) 3、检查DrawCall数量&#xff0c;尽量减少SetPassCall 4、尽量多的利用四种合批 动态合批(Dynamic Batching)静态合批(Static Batching)GPUInstancingSRP Batcher 动态合批消耗内存把多个网格组合在一起合并…...

【系统架构设计师】高分论文:论软件架构的生命周期

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 摘要正文摘要 2022 年5月,本人所在的某集团公司承接了财务共享服务平台综合管理系统的项目开发,该项目主要实现财务系统主流业务的集成共享。本人担任项目组成员中的系统架构设计师一职,全面负责项目的全生命周…...

流量控制和拥塞控制的区别

流量控制和拥塞控制是TCP协议中两个重要的机制&#xff0c;它们分别用于解决不同的问题。 流量控制 流量控制的目的是防止发送方发送数据过快&#xff0c;导致接收方来不及接收&#xff0c;从而避免分组丢失。流量控制是通过滑动窗口机制实现的&#xff0c;接收方在返回的ACK…...

CSS 背景、阴影和混合模式

网站的好坏在于细节&#xff0c;在实现页面里某个组件的布局并写完样式之后&#xff0c;不要急着继续&#xff0c;有意识地训练自己&#xff0c;以挑剔的眼光审视刚刚完成的代码。 1 背景与渐变 background-image 指定文件或者生成的颜色渐变为背景图片。 background-origin…...

第49届ICPC亚洲区域赛,非凸科技再次支持上海赛站

11月16日-17日&#xff0c;第49届ICPC国际大学生程序设计竞赛亚洲区域赛上海站在上海大学宝山校区成功举办&#xff0c;来自全国各地222所高校、中学、企业的352支参赛队伍同台竞技。非凸科技高度重视ICPC竞赛&#xff0c;再次荣膺上海赛站合作伙伴&#xff0c;共同推动全球信息…...

良好的并发编程习惯之封闭(Confinement)

创作内容丰富的干货文章很费心力&#xff0c;感谢点过此文章的读者&#xff0c;点一个关注鼓励一下作者&#xff0c;激励他分享更多的精彩好文&#xff0c;谢谢大家&#xff01; “共享可变状态”有两个要点&#xff1a;“共享”和“可变”。封闭的策略是&#xff1a;不共享就完…...

docker镜像、容器、仓库介绍

docker docker介绍docker镜像命令docker容器命令docker仓库 docker介绍 官网 Docker 是一种开源的容器化平台&#xff0c;用于开发、部署和运行应用。它通过将应用程序及其依赖项打包到称为“容器”的单一包中&#xff0c;使得应用能够在任何环境下运行&#xff0c;不受底层系…...

写个添加球队和展示球队的功能--laravel与inertia

先展示下最终效果,如下是展示球队的界面 如下是添加球队的界面 界面样式没怎么调整,不要在意这些细节。先说说操作流程 首先需要登录,没注册就注册一个账号。登录界面就不展示了。然后选中”NbaBasketballTeams“这个选项,就进入了展示球队的界面。然后点击…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...