尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C语言-函数(数组传值)

C语言-函数(数组传值)
📅 发布时间:2026/7/27 6:12:24

练习:封装函数,找出数组内能被3整除的数、输出数组内的元素

#include<stdio.h> void inputarray(int *a,int len) { for(int i = 0;i < len ; i++) { scanf("%d",&a[i]); } } void outputarray(int *a,int len) { int i ; for(i = 0;i<len;i++) { printf("%d ",a[i]); } putchar('\n'); } int prime(int *a,int *b,int len_1,int len_2) { int j = 0; for(int i=0;i<len_1;i++) { if(a[i]%3==0 && j<len_2) { b[j] = a[i]; j++; } } return j; } int main(int argc, const char *argv[]) { int a[10],b[10],len_b = 0; inputarray(a,10); puts("---------------"); outputarray(a,10); len_b = prime(a,b,10,10); puts("----------------"); outputarray(b,len_b); return 0; }

此练习首先封装函数进行了数据输入,按顺序存放到数组中,还封装了数组输出函数,可以按序输出数组中的每个元素,最后封装了寻找数组中可以被3整除的数的函数,在主函数中依次调用,首先调用数组输入函数,由键盘输入数组数据,随后调用查找被3整除的函数,找到能被3整除的数据后,使用打印函数,输出能被3整除的所有数据。

练习:封装函数实现数组逆序,并调用之前的函数输入输出。

数组逆序主要就是交换首尾的数据,使用一个中间变量接收数据,由两头向中间靠拢。一次交换两个数据,因此只需要交换n-1次就可以完成数据逆序,n为数组内元素的总数。逆序完成后,调用之前封装好的输出函数打印,效果没问题。

函数封装,使用字符型一维数组传参数,注意:
字符型一维数组做函数参数
形参 --- 只需要一个数组形式
实参 --- 给存放字符串的数组名
不需要数组长度,原因: 字符串自带结束标志

练习:封装函数实现字符型数组打印

使用while循环,判断字符型数组内的元素,是否是字符串的结束标志位'\0'如果为结束标识符则结束打印。在while循环内调用putchar输出字符型数组内的每一个元素,循环条件i自增,依次打印数组内的每一个元素。

练习:封装函数实现字符串拼接和比较函数。字符串拼接函数,首先需要找到dest的结束标志位,然后从结束标志位‘\0’的位置开始赋值src中的每一个字符,最后再加入字符串的结束标志位,形成一个字符串。

字符串数组比较函数,字符串比较主要是按位一个一个比较单个字符的ASCII码的的大小,因此需要传入两个字符串的地址,如两个字符串的每个字符都一样,则继续循环,直到出现字符不一样,或者出现一个字符串已经到了字符串结束位置‘\0’则结束比较,如果是由字符串结束符跳出的循环,则另一个字符串较大。最后输出的是当前位置的字符串两个字符的ASCII码的差值,如s1的字符大于s2则一般为正数,如果s1的字符小于s2则为负数,如果相等,ASCII码值相同返回值就为0

二维数组做函数参数,整型二维数组:

整型二维数组作为函数参数 形参 ---数组形式 和 行数 实参 ---数组名 和 行数 void outputArray(int a[3][4],int row); // void outputArray(int[4] a[],int len); outputArray(a,3);

C 语言中数组做函数参数都会退化为指针,二维数组本质是数组的数组:int a[M][N]等价于「M 个长度为 N 的 int 一维数组」,传递时只能退化为指向长度为 N 的一维数组的指针,不能直接退化为二级指针int**。

// 第二维必须指定大小,第一维可以空 void func(int arr[][5], int row) { arr[i][j] 正常访问 } // 调用:int a[3][5]; func(a,3);

练习:封装输入函数,往二维整型数组中输入数据。封装输出函数,从二维数组输出

字符型二维数组与整型二维数组类似

形参:数组形式和 行数

实参:数组名和 行数

void printArray(int a[],int len) //形参 ---数组形式 及 数组长度 printArray(a,len); //实参 ---数组名 数组长度

练习:字符型二维数组的输入输出:

void outputStr(char s[][10],int row) { int i = 0; for(i=0;i<row;i++) { puts(s[i]); } }

通过循环遍历并用 puts 函数逐行打印数组内存储的所有字符串,主函数初始化 5 个字符串构成二维字符数组,调用该函数完成批量输出。

练习:找出二维字符型数组内,最大的字符串

int max_Chararray_string(char s[][10],int row) { int i; int max =0; char max_char[10]; strcpy(max_char,s[0]); for(i = 0; i<row;i++) { if(strcmp(s[i],max_char)>0) { strcpy(max_char,s[i]); max = i; } } return max; }

先用第一个字符串作为基准,循环通过 strcmp 逐一对比字符串字典序大小,若当前字符串更大则更新基准字符串并记录下标,最终返回字典序最大字符串所在的数组行下标。

封装函数实现二维字符型数组内字符串倒序。

void String_daoguolai(char s1[][10],int row) { int i,j; char s2[10]; for(i=0;i<row/2;i++) { j = row - 1-i; strcpy(s2,s1[j]); strcpy(s1[j],s1[i]); strcpy(s1[i],s2); } }

字符串倒序与普通的整型数组倒序步骤几乎相同,主要就是根据数组长度,进行数据交换,并使用中间变量接收数据,循环交换,即可完成字符串倒序。

练习:二维字符型数组,字符串插入排序。

void String_choice_input(char s1[][10],int row) { int i = 0; int j ; char temp[10]; for(i=0;i<row;i++) { j = i; strcpy(temp,s1[i]); while(j>0 && strcmp(s1[j],s1[j-1])<0) { strcpy(s1[j],s1[j-1]); j--; } strcpy(s1[j],temp); } }

按字符串字典序升序排列,运行逻辑完整过程如下:函数接收每行最大长度为 10 的字符串二维数组与总行数 row,外层 for 循环依次取出第 i 个位置的字符串存入临时数组 temp,并记录当前下标 j=i;随后进入内层 while 循环,在 j 大于 0 的前提下,用 strcmp 比较当前 s [j] 与前一个 s [j-1],若前者字典序更小,返回负数,就把前一个字符串后移到 j 位置,再将 j 向前递减一位,持续向前冒泡查找正确插入位置,直到不满足前移条件时,把暂存的 temp 字符串放入最终确定的 j 下标位置;外层循环遍历完所有行后,整个字符串数组就完成了字典从小到大的升序插入排序。

先输出未排序的原始字符串序列,再通过插入排序函数利用 strcmp 进行字符串字典序比较,将靠后位置字典序偏小的字符串向前逐个移位插入,最终完成全部字符串升序排列,输出了排序后的字符串升序排序的顺序结果,验证该字符串插入排序代码逻辑执行无误。

练习:二分查找法,查找字符串

int find_twocharstring(char s1[][10],int row,char *s2) { int begin = 0; int end = row - 1; int mid ; while(begin<=end) { mid = (begin+end)/2; if(strcmp(s1[mid],s2)>0) { end = mid - 1; }else if(strcmp(s1[mid],s2)<0) { begin = mid + 1; }else { break; } } return begin<=end?mid:-1; }

二分查找算法对已按升序排列的二维字符串数组进行目标字符串,先初始化查找区间首尾下标,循环计算中间位置下标,通过 strcmp 对比中间字符串与待查找字符串的字典序大小,若中间值更大则收缩右边界,更小则收缩左边界,相等则跳出循环,最终判断查找区间是否有效,找到就返回对应数组下标,未找到则返回 - 1。

先定义了一个乱序的二维字符型数组并给了初始值五个字符串,先用前文写的插入排序,先对字符串经行排序,因为二分查找法只能对已经排好序的使用。

输出结果主要为,先输出原始数据,然后输出排序数据,最后输出查找的字符串,如果找到了就是输出对应的字符串。如果没找到,返回值为-1则会造成数组越界,无法输出。

相关新闻

  • 正则表达式实战:从基础到高效应用的完整指南
  • 2kol七月限时彩蛋开源领取
  • 2026专科生论文写作AI工具TOP10推荐与测评

最新新闻

  • 基于YOLOv10与CNN的自闭症早期诊断系统设计与实现
  • 半监督学习:降低AI数据标注成本的核心技术
  • WorkshopDL:跨平台Steam创意工坊模组下载的完整解决方案
  • 山地城市土地生态安全评价:PSR模型应用与实践
  • 深入解析Python函数调用与绑定机制:从可调用对象到描述符协议
  • 河洛数理体系的范式创新、现代科学适配性与学术升维展望

日新闻

  • OpenClaw开源智能体网关:AI助手与即时通讯的完美融合
  • 写一个简单的sh脚本
  • 2026年 西安缝隙天线厂家:5G通信与车载天线专业定制供应商深度分析 - 卓企推荐

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号