版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章简单构造数据类型4.1一维数组4.2二维数组4.3字符数组与字符串4.4数组与指针4.5字符串与指针☆☆☆☆☆C语言程序设计例1:输入并保存160个同学《C语言》课程的成绩,按成绩从高到低排序,并计算平均分,按高低顺序输出每个同学的成绩及平均分。分析:
一个变量只能保存一个成绩,如果要保存160个同学的成绩,需要定义160个变量,将会使输入、排序、计算和输出都会变得繁琐。解决办法:可以使用数组类型,即定义一个含有160个变量(元素)的一维数组,每个数组元素可以存放一个成绩,通过循环来实现成绩的输入、排序和输出等。
inta[160];for(i=0;i<160;i++)
scanf("%d",&a[i]);C语言程序设计例2:对于下面的行列式或矩阵,如何定义变量来存储其值,才能较好的表示元素的位置关系。解决办法:可以定义一个3行4列(或4行3列)的二维数组:
intb[3][4];用下标表示其所在的位置,实现数据的输入、计算和输出等。可以方便的实现行列式和矩阵的相关运算。C语言程序设计数组的概念为了处理一批类型相同的数据,引入了数组。①、数组:由相同类型的具有固定个数的元素组成的集合。②、每个数组元素都是一个变量,其类型为数组的类型。与相同类型的普通变量完全一样。③、数组元素在数组中的序号称为下标。通过数组名和下标来唯一的确定每一个元素。C语言程序设计4.1一维数组1.一维数组的定义1.格式:类型标识符数组名[常量表达式];例:inta[10];charc[20];doubleb[5];2.说明:①、常量表达式一般是整型常量,也可以是符号常量,但不能是变量。也即是说数组的大小在程序运行前已确定好,不依赖于程序运行中变量值的变化而变化。#defineM20inta[M];//正确intn;scanf("%d",&n);inta[n];//错误intn=5;//编译时不赋值inta[n];//错误C语言程序设计②、一维数组在内存中的存放:整个数组占用一段连续的内存单元,各元素按下标顺序存放;inta[10];2000a[0]2004a[1]2008a[2]2012a[3]2016a[4]2020a[5]2024a[6]2028a[7]2032a[8]2036a[9]数组名表示数组所占内存区域的首地址(即第1个元素的地址,&a[0]);数组名是一个指针。C语言程序设计2.一维数组元素的引用1.引用形式:数组名[下标]2.说明:①、下标可以是整型常量、整型变量或整型表达式;a[0]a[2]a[2*3]a[i]②、下标从0开始;当数组长度为N时,则数组的下标值可以是0,1,2,……,N-1,如果用a[N]是错误的。注意:若定义数组inta[10];则下标范围为0-9;但如果出现a[10]=12;编译时不会指出错误,系统会将a[9]后的下一个存储单元赋值为12,这样就可能会破坏数组以外其他变量的值,需要特别注意!数据输入(inta[160]):
for(i=0;i<160;i++)
scanf("%d",&a[i]);数据输出:
for(i=0;i<160;i++)
printf("%4d",a[i]);C语言程序设计3.一维数组程序举例例1:计算并输出Fibonacci数列前20项,用数组存储。Fib1=1(n=1)Fib2=1(n=2)Fibn=Fibn-1+Fibn-2(n≥3)f[0]f[1]1f[2]1f[3]2f[4]3f[5]5f[6]8f[7]13……f[20]6765intf[21];f[1]=1;f[2]=1;for(i=3;i<=20;i++)
f[i]=f[i-1]+f[i-2];for(i=1;i<=20;i++)printf("%5d",f[i]);数组元素赋值能否初始化?{if(i%5==0)
printf("\n");}intf[21]={0,1,1};EG401.CC语言程序设计例2:用冒泡法将10个整数由小到大排序。冒泡法的思路:将相邻两个数比较,将小的交换到前面。943580493580439580435980435890435809一趟排序3450892趟3405893趟3045894趟0345895趟结论:若有n个数,则要进行趟排序。n-1在第1趟排序中,要进行次两两比较;n-1在第i趟排序中,要进行次两两比较;n-i输入n个数给a[1]~a[n]for(i=1;i<=n-1;i++)for(j=1;j<=;j++)n-ia[j]>a[j+1]假真a[j]←→a[j+1]输出a[1]~a[n]C语言程序设计输入n个数给a[1]~a[n]for(i=1;i<=n-1;i++)for(j=1;j<=;j++)n-ia[j]>a[j+1]假真a[j]←→a[j+1]输出a[1]~a[n]#include<stdio.h>intmain(){return0;}for(i=1;i<=10;i++)
scanf("%d",&a[i]);for(i=1;i<=9;i++)for(j=1;j<=10-i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}for(i=1;i<=10;i++)printf("%-4d",a[i]);int
a[11],i,j,t;EG402.CC语言程序设计#include<stdio.h>intmain(){
inta[11],i,j,temp;for(i=1;i<=10;i++)
scanf("%d",&a[i]);for(i=1;i<=9;i++)for(j=1;j<=10-i;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}for(i=1;i<=10;i++)
printf("%d",a[i]);return0;}EG402.C问题:若从下标为0的元素开始存放,数组至少应定义为多大?输入、输出循环做何变化?排序时第一层for语句应如何写?i的初值是多少?循环表达式如何写?第二层for语句应如何写?j的初值是多少?循环表达式如何写?C语言程序设计4.一维数组的初始化1、在定义数组时对全部数组元素赋以初值(最好将数组的存储类型定义为static或extern)
staticinta[10]={0,1,2,3,4,5,6,7,8,9};2、可以只给一部分数组元素赋初值,系统自动对其余元素赋缺省值0:
inta[10]={1,3,5,7,9};等价于:inta[10]={1,3,5,7,9,0,0,0,0,0};3、若对static数组不赋值,系统自动对所有元素赋缺省值0:
staticinta[5];等价于:inta[5]={0,0,0,0,0};实型:0.0char:'\0'C语言程序设计4、对全部数组元素赋初值时,可以不指定数组长度,其长度由初值个数自动确定:
inta[]={0,1,2,3,4};等价于:inta[5]={0,1,2,3,4};5、不允许数组指明的元素个数小于初值个数:inta[5]={0,1,2,3,4,5};
编译时出错C语言程序设计4.2二维数组1.二维数组的定义1、格式:
类型说明符数组名[常量表达式][常量表达式];inta[3][4];floatb[5][10];a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]2、存储方式:在内存中按行存放,即先顺序存放第一行的元素,再存放第二行的元素……2000a[0][0]2004a[0][1]2008a[0][2]2012a[0][3]2016a[1][0]2020a[1][1]2024a[1][2]2028a[1][3]2032a[2][0]2036a[2][1]2040a[2][2]2044a[2][3]C语言程序设计3、说明:
根据数组的定义方式,可以将二维数组看作是一种特殊的一维数组,它的每一个元素又是一个一维数组。int
a[3][4];a[0]a[1]a[2]a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]2.二维数组元素的引用二维数组元素的表示形式:
数组名[行下标][列下标]其中行号和列号可以是整型常量或整型表达式,其值从0开始,不能超过数组定义的范围a[1][2]a[i][j]a[2-1][2*2-1]for(i=0;i<3;i++)for(j=0;j<4;j++)
scanf("%d",&a[i][j]);inta[3][4];……a[3][4]=5;×C语言程序设计二维数组的应用:矩阵、行列式的相关运算⑴矩阵转置inta[M][N],b[N][M];for(i=0;i<M;i++)for(j=0;j<N;j++)b[j][i]=a[i][j];⑵
矩阵相加、减inta[M][N],b[M][N],c[M][N];for(i=0;i<M;i++)for(j=0;j<N;j++)c[i][j]=a[i][j]+b[i][j];⑶
矩阵相乘inta[M][N],b[N][S],c[M][S];for(i=0;i<M;i++)for(j=0;j<S;j++){c[i][j]=0;for(k=0;k<N;k++)c[i][j]+=a[i][k]*b[k][j];}C语言程序设计3.二维数组的初始化1、按行给二维数组赋初值:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
1234
5678则结果为:
91011122、按数组存储顺序依次给各元素赋初值:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};注意:此方法数据没有明显的界限,当数据较多时容易出错3、可以对部分元素赋初值:(其余赋缺省值)inta[3][4]={{1},{5},{9}};
1000
5000则结果为:
90004、只对数组各行中的某些元素赋初值:inta[3][4]={{1},{0,5},{0,0,9}};
1000
0
500则结果为:
00
90C语言程序设计5、只对数组中前面几行赋初值,后面各行的元素自动赋缺省值:inta[3][4]={{1},{3,5}};
1000
3500则结果为:
00006、当对全部数组元素赋初值时,第一维的长度可以不说明,但第二维长度不能省:inta[][3]={1,2,3,4,5,6,7,8};
123456则结果为:
7807、按行赋初值时,可省略第一维的长度说明:inta[][3]={{0,0,3},{0,2},{1}};
003
020则结果为:1008、同一维数组一样,不允许所提供的初值个数多于数组的元素个数。C语言程序设计4.二维数组程序举例例1、输入一个矩阵A,计算A的转置矩阵B。步骤:1.输入二维数组a2.转置存入bb[j][i]=a[i][j]3.输出b#include<stdio.h>intmain(){return0;}inta[3][4],b[4][3],i,j;printf("ArrayA(3*4):\n");for(i=0;i<3;i++)for(j=0;j<4;j++)
scanf("%d",&a[i][j]);for(i=0;i<3;i++)for(j=0;j<4;j++)b[j][i]=a[i][j];printf("ArrayB(4*3):\n");for(i=0;i<4;i++)for(j=0;j<3;j++)printf("%5d",b[i][j]);
printf("\n");{}
for(i=0;i<3;i++)for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);b[j][i]=a[i][j];
}
EG403.CC语言程序设计例2、有一个3×4的矩阵,求出其中最大的那个元素的值,以及其所在的行号和列号。方法:先假定第一个数就是最大数max,并记下行号列号,然后依次访问数组中的每一个元素,比较与max的大小,比max大则修改max的值,同时修改行号和列号introw,column,max;….//输入max=a[0][0];row=0;column=0;for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>max){max=a[i][j];row=i;column=j;}EG404.Cr=0;c=0;for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>a[r][c]){r=i;c=j;}C语言程序设计方法二:#include<stdio.h>intmain(){
inta[3][4],r,c,i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
r=0;c=0;for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>a[r][c]){r=i;c=j;}
printf("max=%d\n",a[r][c]);return0;}C语言程序设计方法三:EG404.C#include<stdio.h>intmain(){
inta[3][4],r=0,c=0;for(i=0;i<3;i++)for(j=0;j<4;j++){scanf("%d",&a[i][j]);if(a[i][j]>a[r][c]){r=i;c=j;}}
printf("max=%d\n",a[r][c]);return0;}C语言程序设计4.3字符串1.字符串常量各种字符构成的字符序列。如"Howareyou!"、"ABC123"、"6=-\'m"、""(空串)。
C语言中没有字符串变量,而用字符数组来存放字符串。一个字符串用一个一维字符型数组存放。2.字符数组的定义1、格式:
char
数组名[字符个数];2、例:charc[6];C语言程序设计3.字符数组的初始化1、逐个字符赋给数组中的元素:
charc[5]={'C','h','i','n','a'};
如果初值个数小于数组长度,则按顺序赋值后,其余元素自动赋空字符'\0';
chars[10]={'B','e','i','J','i','n','g'};
则:s[7]=s[8]=s[9]='\0';问题:如何才能说存放的字符串?C语言程序设计2、用字符串常量来使字符数组初始化:
charc[]={"China"};//使用不方便
或:charc[]="China";//推荐使用
等价于:charc[6]="China";//推荐使用也等价于:charc[6]={'C','h','i','n','a','\0'};//不推荐使用不能写成:charc[5]="China";注意:①、只有字符数组中有了'\0',才能说存放着一个字符串。②、初始化时数组的长度应足够大,确保可以容纳所有字符和结束标志'\0'。C语言程序设计4.字符数组的输入输出1、用"%s"格式控制符对数组进行整体输入和输出:#include<stdio.h>intmain(){charstr[30];
scanf("%s",str);
printf("%s\n",str);return0;}数组名即代表数组首地址,因此不需加“&”EG405.C注意:⑴数组应定义得足够大,以便存放输入的所有字符及'\0'。⑵用scanf输入字符串时,空格和回车符都会作为字符串的分隔符,即scanf不能用来输入包含有空格的字符串C语言程序设计2、用gets()和puts()函数实现字符串的输入输出:#include<stdio.h>intmain(){charstr[81];
gets(str);
puts(str);return0;}注意:输入有空格的字符串时应使用gets函数,它可以读入包括空格在内的全部字符直到遇到回车符为止;必须将数组定义得足够大puts函数一次输出一个字符串,输出时将'\0'自动转换成换行符输出EG406.CC语言程序设计说明:①、输出字符不包括结束符'\0';②、如果数组长度大于字符串实际长度,输出时遇'\0'结束;
charstr[10]="China";
printf("%s",str);China③、如果一个字符数组中包含多个'\0',则遇第一个'\0'时输出就结束。
charstr[10]={'a','b','c','\0','d','e','\0'};
printf("%s",str);abcC语言程序设计5.字符串处理函数1、字符串拷贝函数strcpy()
strcpy(字符数组1,字符串2)功能:将字符串2复制到字符数组1中例:charstr1[10],str2[]="China";
strcpy(str1,str2);str1\0\0\0\0\0\0\0\0\0\0str2China\0China\0strcpy(str1,str2);strcpy(str1,"China");说明:①字符数组1的长度不应小于字符串2的长度。注意:使用这些函数时,需要加文件包含命令:
#include<string.h>C语言程序设计②、不能用赋值语句将一个字符串常量或字符数组直接赋给另一个字符数组。charstr1[20],str2[]="computer";str1="computer";
×str1=str2;
×strcpy(str1,str2);√strcpy(str1,"computer");√函数:strncpy(字符数组1,字符串2,n)作用:将字符串2的前n个字符复制到字符数组1中例:charc1[10],c2[]="abcdef";strncpy(c1,c2,3);abcC语言程序设计2、字符串连接函数strcat()
strcat(字符数组1,字符数组2)功能:把字符串2连接到字符串1的后面,仍存放在字符数组1中例:charstr1[20]="China",str2[]="Bei
jing";
strcat(str1,str2);str1China\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0str2Beijing\0ChinaBeijing\0说明:①、字符数组1必须定义得足够大,以便容纳连接后的新字符串;②、连接时将字符串1后面的'\0'去掉C语言程序设计3、字符串比较函数strcmp()
int
strcmp(字符串1,字符串2)功能:比较字符串1和字符串2(从左到右逐个字符比较ASCII值的大小,直到出现的字符不一样或遇到'\0'为止,比较结果由函数返回)①、若字符串1=字符串2,函数的返回值为0②、若字符串1>字符串2,函数的返回值为一正整数③、若字符串1<字符串2,函数的返回值为一负整数例:strcmp("China","China")strcmp("35+78","4")
strcmp(str,"China")strcmp("computer","compare")if(str1==str2)
printf("equal");×if(strcmp(str1,str2)==0)
printf("equal");√C语言程序设计4、测试字符串长度函数strlen()
int
strlen(字符串)功能:测试字符串长度(函数的值为字符串的实际长度,不包括'\0'在内)charstr[20]="China";printf("%d\n",strlen(str));也可以直接测字符串常量的长度。strlen("China")5、大小写转换函数strupr()、strlwr()
char*strupr(字符串);
char*strlwr(字符串)功能:strupr()函数将字符串中的小写字母转换为大写字母;
strlwr()函数将字符串中的大写字母转换为小写字母。例:strupr("abC;")=="ABC;"
strlwr("abC;")=="abc;"C语言程序设计6.字符数组程序举例例1:输入5个字符串,输出其中最大者。分析:C语言中存放一个字符串需要使用一个一维字符数组,因此可以定义成二维数组的形式,每一行存放一个字符串。
字符串中可能包含空格,因此使用gets函数输入。charmax[20],str[5][20];for(i=0;i<5;i++)
gets(str[i]);strcpy(max,str[0]);for(i=1;i<5;i++)if(strcmp(max,str[i])<0)
strcpy(max,str[i]);printf("Thelargeststringis:%s\n",max);EG407.Ck=0;for(i=1;i<5;i++)if(strcmp(str[k],str[i])<0)
k=i;printf("%s\n",str[k]);C语言程序设计例:编写一个程序,将字符数组str2中的全部字符拷贝到字符数组str1中。不要使用strcpy函数。注意:'\0'也要拷贝,'\0'后面的字符不拷贝。分析:从str2中下标为0的字符开始,逐个复制到str1中,直到结束符'\0'charstr1[30],str2[30];gets(str2);for(i=0;;i++)str1[i]=str2[i];str1[i]='\0';puts(str1);str2[i]!='\0'for(i=0;(str1[i]=str2[i])!='\0';i++);for(i=0;str1[i]=str2[i];i++);EG409.CC语言程序设计4.4数组与指针4.4.1一维数组与指针1.指向数组的指针指向数组的指针变量的定义:inta[10];int*p;赋值:①p=&a[0];//p指向数组元素a[0]②p=a;//a为数组的首地址,即a[0]的地址,p指向a[0]初始化:①inta[10],*p=&a[0];②inta[10],*p=a;C语言程序设计有语句:①inta[10],*p=&a[0];②inta[10],*p=a;则:p和a均为数组的首地址(指向数组的指针),它们是不同的!①a为数组名,表示数组的首地址,程序编译后数组的地址不会发生改变,因此a是一个指针常量,其值不能被改变。②p为指针变量,可以被赋值,可使它在不同的时刻指向不同的元素。p=&a[2];//正确:p→a[2]p=&a[6];//正确:p→a[6]a=&a[2];//错误:a为指针常量,不能被赋值C语言程序设计指向数组的指针变量的定义:#include<stdio.h>intmain(){
inta[10]={1,2,3};
int*p;p=&a[0];
printf("a=:%X\n",a);//数组a的首地址
printf("&a[0]=:%X\n",&a[0]);//元素a[0]的地址
printf("p=:%X\n",p);//元素a[0]的地址
printf("*p=:%X\n",*p);//元素a[0]的值
return0;}EG419.CC语言程序设计2.指向数组的指针变量的加减inta[10],*p=a;a和p均为指向a[0]的指针,则:*a和*p:均表示a[0]p是指针变量,值可以被改变,执行操作:p=p+1,则:p=?C语言规定:指针变量加1表示指向下一个元素,减1指向前一个元素p=&a[0];p=p+1;//p→a[1],p加了4B(VC,int4B)p=&a[0];p=p+i;//p→a[i],p加了(i*4)BC语言程序设计double
x[10],*dp=x;//dp指向x[0]inta[10],*p;doublex[10],*dp;for(i=0,p=a;i<10;i++)//p每次加4个字节(VC){
printf("%X\n",p);p++;}for(i=0,dp=x;i<10;i++)//dp每次加8个字节{
printf("%X\n",dp);
dp++;}EG420.Cdp++;//dp加了8B,dp→x[1];dp=&x[3];dp+=3;//dp加了(3*8)B,dp→x[6];C语言程序设计inta[10],*p=a;a
或p:数组首地址,即&a[0]a+0
或p+0:数组首地址,即&a[0]a+i
或p+i:数组元素a[i]的地址,即&a[i]*a或*p:数组元素a[0]*(a+i)
或*(p+i):数组元素a[i]结论:
a[i]
*(a+i)p[i]
*(p+i)C语言程序设计结论:
a[i]
*(a+i)p[i]
*(p+i)引用数组元素的方法:
下标法:a[i]p[i]
指针法:*(a+i)*(p+i)数组元素a[i]的表示方法(inta[10],p=a):
a[i]*(a+i)p[i]*(p+i)数组元素a[i]地址的表示方法:&a[i]a+i&p[i]p+iC语言程序设计4.4.2多维数组与指针(略)C语言程序设计EG421.C4.4.3数组作为函数参数1数组名作为函数参数
数组名作为函数参数,即用数组名作为函数实参,要求形参也必须是数组名。此时主调函数将实参数组的起始地址传递给被调函数的形参数组,而不是传递数组元素的值。主调函数:inta[10];…fun(a);被调函数原型:voidfun(intx[10]);a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]axx[0]x[1]x[2]x[3]x[4]x[5]x[6]x[7]x[8]x[9]参数传递的实质--实参赋值给形参
x=a;//a是数组名,表示数组首地址(指针)因此x实际上是指针变量
voidfun(int*x);
//定义成指针的形式C语言程序设计例:一维数组a,内放10个学生的成绩,编写函数计算并返回平均成绩。intmain(){floata[10];…aver=average(a);…return0;}floataverage(floatx[10]){
inti;floataver,sum=0.0;for(i=0;i<10;i++)sum+=x[i];aver=sum/10.0;return(aver);}a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]axx[0]x[1]x[2]x[3]x[4]x[5]x[6]x[7]x[8]x[9]EG416.CC语言程序设计说明:
1、用数组名作函数参数,必须在主调函数和被调函数中分别定义数组;且实参数组和形参数组类型必须一致float
a[10];ave=average(a);floataverage(float
x[10]);2、形参数组和实参数组的大小可不一致;C语言编译时对形参数组大小不作检查,只将实参数组的首地址传给形参数组3、形参数组可以不指定大小,仅给出数组类型、数组名和一对方括号,另设一个参数传递数组的实际长度floataverage(floatx[],intn){……}第一次调用:aver=average(a,10);第二次调用:aver=average(b,5);C语言程序设计4、实参数组和形参数组占同一段内存单元,即表示同一个数组,因此形参数组的变化等同于实参数组的变化例:编写函数,用选择法对数组中10个整数按由小到大排序。排序过程:94378050437895–1趟0347895–2趟0347895–3趟0345897–4趟0345798–5趟0345789–6趟元素存放在x[0]-x[n-1]中:for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(x[j]<x[k])
k=j;t=x[k];x[k]=x[i];x[i]=t;}C语言程序设计例:编写函数,用选择法对数组中10个整数按由小到大排序。voidsort(intx[],intn){
inti,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(x[j]<x[k])
k=j;t=x[k];x[k]=x[i];x[i]=t;}}EG417.Cintmain(){
inta[10],i;
printf("Inputarraya:\n");for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("Thesortedarray:\n");for(i=0;i<10;i++)
printf("%d",a[i]);return0;}C语言程序设计实参:
inta[10];……sort(a,10);形参:
voidsort(intx[],intn){……}实际上,C编译系统就是将形参数组名作为指针变量来处理的函数fun也可以定义成:
voidsort(int
*x,intn){……}结论:形参:既可以定义为数组的形式,也可以定义为指针的形式实参:既可以定义为数组的形式,也可以定义为指针的形式C语言程序设计归纳起来,实参与形参的对应关系以下几种:①、形参和实参都用数组名:f(intx[],intn);f(a,10);形参定义成数组名的形式,但实际上是指针变量②、实参用数组名,形参用指针变量:f(int*x,intn);f(a,10);直接将形参定义成指针变量③、形参和实参都用指针变量:f(int*x,intn);f(p,10);函数调用前应先给实参指针变量赋值(如:p=a)④、实参为指针变量,形参为数组名:f(intx[],intn);f(p,10);C语言程序设计选择法排序:用指针作为函数参数,使用指针形式访问数组元素voidsort(int*x,intn){
inti,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(*(x+j)<*(x+k))k=j;t=*(x+k);*(x+k)=*(x+i);*(x+i)=t;}}voidsort(int*x,intn){//也可以数组的形式访问元素
inti,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(x[j]<x[k])k=j;t=x[k];x[k]=x[i];x[i]=t;}}说明:不管参数是指针的形式还是数组的形式,函数内尽量使用数组的形式来访问,使用指针访问格式复杂。C语言程序设计2多维数组作为函数参数1、多维数组元素可以作为实参,形参需定义为同类型的变量;多维数组名也可以作实参,形参需定义为多维数组2、定义形参数组时可以指定每一维的大小,也可省略第一维的大小说明(但不能省略第二维及其它高维的大小说明)int
fun(intx[3][4])
或:int
fun(intx[][4])但不能写成:int
fun(intx[][])×也不能写成:int
fun(intx[3][])×3、实参数组可以大于形参数组;
inta[5][10];intx[3][10];此时实参中只有前面数据起作用。C语言程序设计例:编写一个函数,求3×4矩阵中的最大元素并返回该值。int
max_value(intx[][4]){
inti,j,max;
max=x[0][0];for(i=0;i<3;i++)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自动报靶器课程设计
- 自行车cad课程设计
- 有关趣味数学的课程设计
- 幼儿园铜鼓主题课程设计
- 网络技术课程设计
- 系统规划课程设计
- 椅子美背课程设计
- 新材料行业技术工作总结
- 建筑行业推广方案分享
- 电动车课程设计摘要
- 电梯维护保养分包合同
- 10以内连加减口算练习题完整版139
- 2022-2023学年广东省广州市海珠区六年级(上)期末英语试卷(含答案)
- 2024至2030年中国沥青搅拌站行业市场现状调研及市场需求潜力报告
- 《平凡的世界》整本书阅读指导教学设计基础模块上册
- 2024政务服务综合窗口人员能力与服务规范考试试题
- (高清版)AQ 2002-2018 炼铁安全规程
- 虚拟现实与增强现实
- 08J933-1体育场地与设施(一)
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 课题论文:引领新经济加速新质生产力发展
评论
0/150
提交评论