文档库 最新最全的文档下载
当前位置:文档库 › C语言3-数组作为函数参数传递

C语言3-数组作为函数参数传递

C语言3-数组作为函数参数传递

C语言程序设计教案

二维数组作为函数参数传递在实际中的应用

二维数组作为函数参数传递在实际中的应用 周立功教授数年之心血之作《程序设计与数据结构》,电子版已无偿性分享到电子工程师与高校群体,在公众号回复【程序设计】即可在线阅读。书本内容公开后,在电子行业掀起一片学习热潮。经周立功教授授权,本公众号特对本书内容进行连载,愿共勉之。第一章为程序设计基础,本文为1.7.3将二维数组作为函数参数。>>>> 1.7.3 将二维数组作为函数参数>>> 1. 函数原型int data[3][2] = {{1, 2}, {3, 4}, {5, 6}};int sum(int (*pDdata)[2], int size); int sum(int data[3][2], int size); int sum(int data[][2], int size);int sum(int (*pData)[2], int size); int sum(int data[3][], int size); int data[80][3]; int iMax(int *pData, size_t numData) largest = iMax(data, row*col);largest = iMax(data[0], row*col); 1 #includeint working_calc_salary(working_time[month]);int calc_salary(int *working_time);>>> 2. 二维数组的行1 int sum(int (*pData)[2], int size)int (*pData)[2] = data; for(int *ptr = ptr ptr = ptr = data[i]; int data[row][col]; largest = iMax(data[i], col); >>> 3. 二维数组的列int data[row][col], (*pData)[col], i; for(pData = pData 在这里,将pData声明为指向长度为col的整型数组的指针,pData++将pData移到下一行的开始位置。在表达式(*pData)[i]中,*pData代表data的一整行,因此(*pData)[i]选中了该行第i列的那个元素。注意,*pData必须使用括号,否则编译器会认为pData是指针数组,而不是指向数组的指针。 由此可见,只要抓住“变量的三要素(即变量的类型、变量的值和变量的地址)”并贯穿始终,则一切问题将迎刃而解。

数组名作为函数参数

杨振平

●数组元素作实参,对应的形参为变量,一次传递一个元素,采用值传递。 ●数组名作实参,对应的形参为一个数组,一次传递整个数组。 ●数组作参数,其参数传递可理解为形参数组与实参数组共用同一数组空间(即共用实参数组空间)。因此,在函数中,使用形参数组就是在使用实参数组,改变形参数组元素的值就是在改变实参数组元素的值,这一点与引用传递非常相似。

1.一维数组的传递 ?一维数组作形参的声明格式: <类型> <数组名>[] 其中,[]中可以省略数组的长度值。(可认为形参数组与实参数组长度相同) ?对应的实参应为同类型的一维数组名。(仅用数组名) 说明:为了使函数知道需要处理的数组元素的个数,通常给函数再传递一个表示元素个数的整型数。

数组名作为函数参数(续) 例如:一维数组名作为函数的参数。编写函数,计算一个整型数组中从第m个元素(m从0开始)开始的n个元素之和。函数设计: 函数原型:int fun(int b[],int m,int n); 功能:计算数组b中从第m个元素开始的n个元素之和。 主函数设计: 定义并初始化一个整型数组a。 测试1:fun(a,0,10);//求从第0个元素开始的10个元素之和 测试2:fun(a,3,5); //求从第3个元素开始的5个元素之和

int fun(int b[],int m,int n) { int i,s=0; for(i=m;i

C语言二维数组作为函数的参数

可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如: void Func(int array[3][10]); void Func(int array[][10]); 二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的: void Func(int array[][]); 因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的: void Func(int array[3][]);实参数组维数可以大于形参数组,例如实参数组定义为: void Func(int array[3][10]); 而形参数组定义为: int array[5][10]; 这时形参数组只取实参数组的一部分,其余部分不起作用。 对于数组int p[m][n]; 如果要取p[i][j]的值(i>=0 && i

C语言数组名作函数参数

数组名可以作函数的实参和形参。如: 01. main(){ 02. int array[10]; 03. /* …… */ 04. /* …… */ 05. f(array,10); 06. /* …… */ 07. /* …… */ 08. } 09. 10. f(int arr[],int n); 11. { 12. /* …… */ 13. /* …… */ 14. } array为实参数组名,arr为形参数组名。在学习指针变量之后就更容易理解这个问题了。数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,形参得到该地址后也指向同一数组。这就好象同一件物品有两个彼此不同的名称一样。 同样,指针变量的值也是地址,数组指针变量的值即为数组的首地址,当然也可作为函数的参数使用。 【例10-15】 01. float aver(float*pa); 02. main(){ 03. float sco[5],av,*sp; 04. int i; 05. sp=sco; 06. printf("\ninput 5 scores:\n"); 07. for(i=0;i<5;i++)scanf("%f",&sco[i]); 08. av=aver(sp); 09. printf("average score is %5.2f",av);

10. } 11. float aver(float*pa){ 12. int i; 13. float av,s=0; 14. for(i=0;i<5;i++) s=s+*pa++; 15. av=s/5; 16. return av; 17. } 【例10-16】将数组a中的n个整数按相反顺序存放。 算法为:将a[0]与a[n-1]对换,再a[1]与a[n-2] 对换……,直到将a[(n-1/2)]与a[n-int((n-1)/2)]对换。今用循环处理此问题,设两个“位置指示变量”i和j,i的初值为0,j的初值为n-1。将a[i]与a[j]交换,然后使i的值加1,j 的值减1,再将a[i]与a[j]交换,直到i=(n-1)/2为止,如图所示。 程序如下: 01. void inv(int x[],int n)/*形参x是数组名*/{ 02. int temp,i,j,m=(n-1)/2; 03. for(i=0;i<=m;i++){ 04. j=n-1-i; 05. temp=x[i];x[i]=x[j];x[j]=temp; 06. } 07. return; 08. } 09. main(){ 10. int i,a[10]={3,7,9,11,0,6,7,5,4,2}; 11. printf("The original array:\n"); 12. for(i=0;i<10;i++) 13. printf("%d,",a[i]); 14. printf("\n"); 15. inv(a,10); 16. printf("The array has benn inverted:\n"); 17. for(i=0;i<10;i++) 18. printf("%d,",a[i]); 19. printf("\n"); 20. } 对此程序可以作一些改动。将函数inv中的形参x改成指针变量。

《C语言程序设计》数组名作为函数的参数

《C语言程序设计》实验报告 实验名称:数组名作为函数的参数 系别: 计算机系专业:计算机科学与技术班级:五班 姓名: 学号: 实验日期: 教师审批签字:

实验8 数组名作为函数的参数 ⒈实验目的 ⑴掌握数组名作为函数参数的基本使用方式。 ⑵掌握与数组有关的算法(特别是排序算法)。 ⒉实验内容或实验题目 编程题目:(题目⑴、题目⑵为一组,题目⑶为一组。每个同学每组都必须完成1题) 要求:每道题目分别书写程序,试运行(如何输入,结果如何)。 题目⑴:编写函数实现将数组元素按从小到大的顺序排序,主函数从键盘输入10个整数存入数组,调用函数后输出数组的元素。 题目⑵:用数组名作为函数参数,编写一个比较两个字符串s和t大小的函数strcomp(s,t),要求s小于t时返回-1,s等于t?时返回0,s大于t时返回1。在主函数中任意输入4个字符串,利用该函数求最小字符串。 题目⑶:输入6×6的数组,下面的各要求通过编写函数实现,要求用数组名作为函数参数: ①求出对角线上各元素的和; ②求出对角线上行、列下标均为偶数的各元素的积; ③找出对角线上其值最大的元素和它在数组中的位置。 ⒊算法说明 (用文字或流程图说明。)

题目1:

⒋程序清单 题目⑴: #include main() { int i,j,t,n=10,a[10]; printf("Please enter ten numbers:\n"); for(i=0;i a[j]) { t = a[j]; a[j] = a[i]; a[i] = t; } }

C语言数组作为函数参数

数组可以作为函数的参数使用,进行数据传送。 数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。 数组元素作函数实参 数组元素就是下标变量,它与普通变量并无区别。 因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。【例5-4】说明了这种情况。 【例8-7】判别一个整数数组中各元素的值,若大于0 则输出该值,若小于等于0则输出0值。编程如下:#include void nzp(int v){ if(v>0) printf("%d ",v); else printf("%d ",0); } int main(void){ int a[5],i; printf("input 5 numbers\n"); for(i=0;i<5;i++){ scanf("%d",&a[i]); nzp(a[i]); } return 0; } 本程序中首先定义一个无返回值函数nzp,并说明其形参v为整型变量。在函数体中根据v值输出相应的结果。在main函数中用一个for语句输入数组各元素,每输入一个就以该元素作实参调用一次nzp函数,即把a[i]的值传送给形参v,供nzp函数使用。 数组名作为函数参数 用数组名作函数参数与用数组元素作实参有几点不同。 1) 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的。因此,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明。当形参和实参二者不一致时,即会发生错误。 2) 在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。

形参数组详解

可以用数组名作函数参数,此时实参与形参都应用数组名(或指针变量)。 例2:有一个一维数组score,内放10个学生成绩,求平均成绩。 float average(float array[10]){ int i; float aver,sum=array[0]; for(i=1; i<10; i++)sum=sum+array[i]; aver=sum/10; return aver; } main(){ float score[10],aver; int i; printf("input 10 scores:/n"); for(i=0; i<10; i++)scanf("%f",&score[i]); printf("/n"); aver=average(score);//数组名作为函数参数 printf("average score is %5.2f",aver); } 说明: ●用数组名称作函数参数,应该在主调函数和被调函数分别定义数组,本例中array是形 参数组名,score是实参数组名,分别在其所在的函数中定义,不能只在一方定义。 ●实参数组与形参数组类型应该保持一致(这里都为float型),如不一致,结果将出错。 ●在被调用函数中声明了形参数组的大小为10,但在实际上,指定其大小是不起任何作 用的,因为C编译器对形参数组大小不做检查,只是检查实参数组的首地址传给形参数组。因此,score[n]和array[n]指的是同一单元。 ●形参数组也可以不指定大小,在定义数组时在数组名后面跟一个空的方括号,有时为 了在被调用函数中处理数组元素的需要,可以另设一个参数,传递需要处理的数组元素的个数,上例可以改写为下面的形式: float average(float array[], int n){

c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论

c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论 //由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,本程序用来讨论有此带来的 //相关问题,以及解决问题方法,即给调用函数传递数组的元素个数的几种有效方法并实现它 #include #include using namespace std; void PutArray1(int *p,int length) { for(int ix=0;ix

} void PutArray5(vectorverc) { vector::iterator begin_iter=verc.begin(); vector::iterator end_iter=verc.end(); int size=verc.size (); cout<<"使用两个迭代器来输出int向量"<<"\n"<::iterator iter=begin_iter ;iter!=end_iter;iter++) cout<<*iter<<"\t"; cout< verc1(a,a+10); vector verc2(b,b+8); cout<<"数组a[10]调用函数PutArray1的结果为:\n"<

c语言实验报告9 函数的嵌套调用和递归调用、数组作为函数参数

《C程序设计》课程实验报告 学院:班级:姓名:学号: 实验设备:计算机1台实验日期:2011年3月1日 实验项目名称函数的嵌套调用和递归调用、数组作为函数参数 实验目的 掌握函数的嵌套调用和递归调用。数组名作为函数参数的设计方 法。 实验要求: 掌握函数的嵌套调用和递归调用。数组名作为函数参数的设计方法。 编写简单程序。 实验内容(包括步骤): 1.编写程序,计算下列函数值: f(x,y)= 其中,s(n)= =p(1)+p(2)+…p(n),p(i)=i!。 要求:(1)为函数p(i)、s(n)、f(x,y)均编写一个用户函数。 (2)x、y由键盘输入。

2.n个人按年龄从小到大站成一排,编号依次为1到n,年龄都相差2岁,且第一个人的年龄是10岁,问第n个的年龄是多大? 要求:1)通过函数递归调用方式。2)n的值从键盘输入。 3.有两个数组a、b,各有10个元素,分别统计出两个数组对应元素大于(a[i]>b[i])、等于(a[i]=b[i])和小于(a[i] int main() { float f(int x,int y); int a,b; float m; scanf("%d%d",&a,&b); m=f(a,b); printf("%f\n",m);

相关文档
相关文档 最新文档