版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章
数组6.1
一维数组6.2二维数组6.3一维字符数组6.4二维字符数组6.5数组与函数
小结6.1一维数组6.1.1一维数组的定义
定义方式:数据类型
数组名[常量表达式];
例:inta[10];floatb[5];charc[20];合法标识符[]:数组运算符单目运算符优先级(1)左结合不能用()表示元素个数下标从0开始数组名表示内存首地址,是地址常量a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]各元素地址aa+1a+2a+3a+4a+5a+6a+7a+8a+9a编译时分配连续内存内存字节数=数组维数*sizeof(元素数据类型)6.1.2一维数组的初始化初始化方式在定义数组时,为数组元素赋初值(在编译阶段使之得到初值)inta[5]={1,2,3,4,5};等价于:a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;说明:数组不初始化,其元素值为随机数对static数组元素不赋初值,系统会自动赋以0值当全部数组元素赋初值时,可不指定数组长度如inta[5]={6,2,3};
等价于:
a[0]=6;a[1]=2;a[2]=3;a[3]=0;a[4]=0;如inta[3]={6,2,3,5,1};(
)staticinta[5];等价于:a[0]=0;a[1]=0;a[2]=0;a[3]=0;a[4]=0;只给部分数组元素赋初值inta[]={1,2,3,4,5,6};编译系统根据初值个数确定数组维数6.1.3一维数组元素的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组一维数组的下标表示法
数组名[下标]其中:下标可以是正整型常量或表达式例inti=15;intdata[i];
(
不能用变量定义数组维数)例inta[10];printf(“%d”,a);(
)必须
for(j=0;j<10;j++)printf(“%d\t”,a[j]);(
)例intdata[5];data[5]=10;//
C语言对数组不作越界检查,使用时要注意#include<stdio.h>voidmain(){floatscore[50],sum=0,aver;inti,n,k=0;printf("请输入学生人数:\n");scanf("%d",&n);printf("请输入%d个学生成绩:\n",n);for(i=0;i<n;i++){scanf("%f",&score[i]);sum+=score[i];}aver=sum/n;for(i=0;i<n;i++)if(score[i]>=aver)k++;printf(“平均成绩:%.2f\t高于平均分人数:%d\n”,aver,k);}编程,输入一个班级学生(不多于50人)的一门功课成绩,计算平均成绩,并统计高于平均成绩学生人数。6.1.3一维数组应用举例程序运行:请输入学生人数:10↙请输入10个学生成绩:60706575789054779368↙平均成绩:73.00高于平均分人数:5f[0]f[1]f[2]f[3]f[4]f[5]f[39]……...11f[39]01452339例6.1用数组求Fibonacci数列前40项。235#include<stdio.h>main(){inti;
long
f[40]={1,1};
for(i=2;i<40;i++)f[i]=f[i-2]+f[i-1];
for(i=0;i<40;i++){if(i%5==0)printf("\n");printf("%12ld",f[i]);}}例6-1d1读10个整数存入数组,找出其中最大值和最小值步骤:1.输入:for循环输入10个整数2.处理:(a)先令max=min=x[0](b)依次用x[i]和max,min比较(循环)
若max<x[i],令max=x[i]
若min>x[i],令min=x[i]3.输出:max和min#include<stdio.h>#defineSIZE10main(){intx[SIZE],i,max,min;printf("Enter10integers:\n");
for(i=0;i<SIZE;i++){printf("%d:",i+1); scanf("%d",&x[i]);}
max=min=x[0];
for(i=1;i<SIZE;i++){if(max<x[i])max=x[i];if(min>x[i])min=x[i];}
printf("Maximumvalueis%d\n",max);printf("Minimumvalueis%d\n",min);}例6-1d2输入一个正整数n(1<n≤10),再输入n个整数,将它们存入数组a中,将最小值与第一个数交换,输出交换后的n个数。#include<stdio.h>voidmain(){inti,k,temp,n,a[10];printf(“Inputn:\n”);scanf(“%d”,&n);for(i=0;i<n;i++)scanf(“%d”,&a[i]);for(k=0,i=1;i<n;i++)if(a[i]<a[k])k=i;temp=a[0];a[0]=a[k];a[k]=temp;for(i=0;i<n;i++)printf(“%d“,a[i]);}6.1.5数组排序与数组查找选择法排序排序过程:(1)首先通过n-1次比较,从n个数中找出最小的,
将它与第一个数交换—第一趟选择排序,结果最小的数被安置在第一个元素位置上(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换—第二趟选择排序(3)重复上述过程,共经过n-1趟排序后,排序结束for(i=0;i<n-1;i++){找出a[i]至a[n-1]值最小的数组素的下标k;交换a[k]与a[i];
}找出a[i]至a[n-1]值最小的数组元素的下标k的程序段:
k=i;for(j=i+1;j<n;j++)if(a[j]<a[k])k=j;例初始:[49386597761327]kji=01349一趟:13[386597764927]i=12738二趟:
1327
[6597764938]三趟:
132738
[97764965]四趟:
13273849
[769765]五趟:
1327384965
[9776]六趟:
132738496576
[97]kkkkjjjjjjjjjj例6.4对n个数排序。
#defineN8main(){floata[N],t;inti,j,k;printf(“input%dnumber:\n”,N);for(i=0;i<N;i++)scanf(“%f”,&a[i]);
for(i=0;i<N-1;i++){k=i;
for(j=i+1;j<N;j++)
if(a[j]<a[k])k=j;
if(k!=i){t=a[k];a[k]=a[i];a[i]=t;}}printf("\nthesortednumbers:\n");for(i=0;i<N;i++)printf(“%.2f“,a[i]);printf(“\n”);}冒泡法排序排序过程:(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束for(i=0;i<n-1;i++){
第i趟排序算法
}第i趟排序算法:
for(j=0;j<n-1-i;j++){
若a[j+1]≤a[j]则交换a[j]与[j+1]}例38496576132730
97第一趟384965132730
76第二趟3849132730
65第三趟38132730
49第四趟132730
38第五趟1327
30第六趟4938659776132730初始关键字n=83849769713972797309713767676273013652765306513134949304927382738303813
27第七趟例6-4d1冒泡法排序(由小到大)#include<stdio.h>#defineN8voidmain(){floata[N],i,j,t;printf(“input%dnumber:\n”,N);for(i=0;i<N;i++)scanf(“%f”,&a[i]);
for(i=0;i<N–1;i++)
for(j=0;j<N–1–i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf(“thesortednumbers:\n”);for(i=0;i<N;i++)printf(“%.2f”,a[i]);}输入N个数给a[0]到a[N-1]i从0到N-2j从0到N-1-ia[j]>a[j+1]假a[j]与a[j+1]互换输出a[0]到a[N-1]真例6-4d2若在某趟排序时无需交换数据,则可以提前终止排序。程序修改如下:
#include<stdio.h>#defineN8voidmain(){floata[N],i,j,t,flag=1;printf(“input%dnumber:\n”,N);for(i=0;i<N;i++)scanf(“%f”,&a[i]);
for(i=0;i<N–1&&flag!=0;i++)
for(j=0,flag=0;j<N–1–i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;flag=1;}printf(“thesortednumbers:\n”);for(i=0;i<N;i++)printf(“%.2f”,a[i]);}例6.5在n个数中查找某一个数。(顺序查找)#include<stdio.h>#include<stdlib.h>#defineN10voidmain(){inta[N],i,x;printf(“input%dnumber:\n”,N);for(i=0;i<N;i++)scanf(“%d”,&a[i]);printf(“inputxtolookfor:”);scanf(“%d”,&x);for(i=0;i<N;i++)if(a[i]==x){printf(“find:%ditisa[%d]”,x,i);exit(0);//在数组中找到x,结束程序
}printf(“%dnotbeenfound.\n”,x);//如x存在,则不执行
}例6-5d1*折半查找法(前提,数据已按一定的规律升或降序排列好)例如:初始数据
2791534569096123345存放在数组a中,查找90。输入N个数给a数组top=0,bot=N-1mid=(top+bot)/2x==a[mid]输出找到程序结束x<a[mid]bot=mid-1x在mid左边x>a[mid]top=mid+1x在mid右边输出未找到top<=bot#include<stdio.h>#include<stdlib.h>#defineN10voidmain(){inta[N],x,i,n,top,bot,mid;printf(“input%dnumber:\n”,N);for(i=0;i<N;i++)scanf(“%d”,&a[i]);printf(“inputxtolookfor:”);scanf(“%d”,&x);top=0;bot=N–1;
while(top<=bot)
//若top>bot表示所查找区间为空
{mid=(top+bot)/2;if(x==a[mid]){printf(“find:%d,itisa[%2d]\n”,x,mid);exit(0);}elseif(x<a[mid])bot=mid-1;elseif(x>a[mid])top=mid+1;}printf(“%dnotbeenfound.\n”,x);}
2791534569096123345topbootmidmid=4;a[mid]<90top=mid+1boot=9569096123345midtopbootmid=7;a[mid]>90boot=mid-15690topbootmid=6;a[mid]==90数据找到,退出程序6.2二维数组6.2.1二维数组的定义二维数组说明符
数据类型数组名[常量表达式][常量表达式];数组元素的存放顺序原因:内存是一维的二维数组:按行序优先,按行存放例inta[3][4];floatb[2][5];intc[2][3][4];
inta[3,4];
(
)行数列数元素个数=行数*列数inta[3][2]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]014523a[0][0]a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]例inta[3][4];二维数组理解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]每个元素a[i]由包含4个元素的一维数组组成二维数组a是由3个元素组成a[0]a[1]a[2]行名014523a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[0][0]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[1][2]67101189a[0]a[1]a[2]
例inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化
例inta[2][3]={{1,2},{4}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400部分初始化
例inta[][3]={{1},{4,5}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]100450第一维长度省略初始化
例inta[2][3]={1,2,3,4,5,6};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化
例inta[][3]={1,2,3,4,5};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123450第一维长度省略初始化
例inta[2][3]={1,2,4};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000部分初始化6.2.2二维数组元素的初始化分行初始化:按元素排列顺序初始化6.2.3二维数组的引用形式:数组名[下标][下标]正整型表达式,取值0~行长度–1
正整型表达式,取值0~列长度–1
例:intx[2][3];则数组元素为x[0][0]、x[0][1]、x[0][2]、x[1][0]、x[1][1]、x[1][2]。每一元素是一个普通变量,可以参加相应运算。如:
scanf("%d",&x[0][0]);//输入数组元素x[0][0]的值x[1][3-1]=x[0][0]%10;//将x[0][0]的个位数赋值给x[1][2]x[1][2]++;//x[1][2]自增1
矩阵的术语与二维数组下标的对应关系术语含义下标规律主对角线从矩阵的左上角至右下角的连线i==j上三角主对角线以上的部分i<=j下三角主对角线以下的部分i>=j副对角线从矩阵的右上角至左下角的连线i+j=N-11234678910111213141516上三角副对角线主对角线下三角1234678910111213141516例6.6矩阵转置。#defineN4#include<stdio.h>voidmain(){floata[N][N],temp;inti,j;
for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%f",&a[i][j]);
for(i=0;i<N;i++)for(j=0;j<i;j++){temp=a[i][j];a[i][j]=a[j][i];a[j][i]=temp;}for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%8.2f",a[i][j]);
printf("\n");
}}15913261014371115481216#defineM3#defineN4#include<stdio.h>voidmain(){floata[M][N],max;inti,j,maxi,maxj;for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%f",&a[i][j]);//输入数据
max=a[0][0];maxi=maxj=0;//赋初值
for(i=0;i<M;i++)for(j=0;j<N;j++)
if(max<a[i][j]){max=a[i][j];maxi=i;maxj=j;}a[maxi][maxj]=a[M-1][N-1];a[M-1][N-1]=max;for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%8.2f",a[i][j]);printf("\n");}}例6.7找出二维数组的最大值与最后元素交换后以行列对齐的方式输出。问题1:如果max=0,结果如何?问题2:不记录最大值对应的下标,能否完成交换?#defineM30#defineN4#include<stdio.h>voidmain(){floata[M][N],sum,stu_avg[M],cor_avg[N];inti,j;for(i=0;i<M;i++)for(j=0;j<N;j++)scanf(“%f”,&a[i][j]);//输入数据
for(i=0;i<M;i++)//计算每个学生的平均成绩
{sum=0;for(j=0;j<N;j++)sum+=a[i][j];stu_avg[i]=sum/N;}for(j=0;j<N;i++) //计算每门课的平均成绩
{sum=0;for(i=0;i<M;i++)sum+=a[i][j];cor_avg[j]=sum/M;}for(i=0;i<M;i++)printf(“NO%d:%8.2f\n”,i+1,stu_avg[i]);for(j=0;j<N;j++)printf(“Score%d:%8.2f\n”,i+1,cor_avg[i]);}例6.8输入一个班级学生的四门课成绩,求每个学生的平均成绩及每门课的平均成绩。例l5-9d1编程,通过一个循环结构为二维数组输入下列数据后,输出。5432165430765008700090000#include<stdio.h>voidmain(){intb[5][5],i,j;for(i=0;i<5;i++)for(j=0;j<5;j++){if(i+j<=5-1)b[i][j]=i-j+5;if(i+j>5-1)b[i][j]=0;}for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%3d",b[i][j]);printf("\n");}}
例charch[5]=“Boy”;ch[0]Boy\0\0用字符串常量ch[1]ch[2]ch[3]ch[4]
例charch[6]={“Hello”};charch[6]=“Hello”;charch[]=“Hello”;用字符串常量ch[0]Helloch[1]ch[2]ch[3]ch[4]\0ch[5]
例charch[5]={‘H’,’e’,’l’,’l’,’o’};ch[0]Hello逐个字符赋值ch[1]ch[2]ch[3]ch[4]
例charch[5]={‘B’,’o’,’y’};ch[0]Boy\0\0逐个字符赋值ch[1]ch[2]ch[3]ch[4]6.3字符数组6.3.1字符数组的定义、初始化和引用
字符数组定义字符数组的初始化逐个字符赋值用字符串常量字符数组的引用例charc[10],ch[3][4];例输出一个字符串#include<stdio.h>main(){charc[10]={'I','','a','m','','a','','b','o','y'};inti;for(i=0;i<10;i++)printf("%c",c[i]);printf("\n");}Iamaboy01234567896.3.2字符串和字符数组字符串及其结束标志无字符串变量,用字符数组处理字符串字符串结束标志:‘\0’例
“hello”共5个字符,在内存占6个字节
字符串长度5
hello\01041011081081110内存存放字符ASCII码6.3.3字符数组的输入/输出
逐个字符I/O:%c整个字符串I/O:%s例5.10输入一行字符,将其中的小写字母转换成大写字母,其余字符不变。
#include<stdio.h>voidmain(){charc[81];inti;for(i=0;(c[i]=getchar())!=’\n’;i++);c[i]=’\0’;//将数组最后的回车换行符改为结束标志
for(i=0;c[i]!=’\0’;i++)//逐个处理、输出字符
{if(c[i]>=’a’&&c[i]<=’z’)c[i]-=32;printf(“%c”,c[i]);}}例5.10d1用%s
#include<stdio.h>voidmain(){charc[81];inti;scanf(“%s”,c);for(i=0;c[i]!=’\0’;i++)if(c[i]>=’a’&&c[i]<=’z’)c[i]-=32;printf(“%s”,c);}用字符数组名,不要加&输入串长度<数组维数遇空格或回车结束自动加‘\0’用字符数组名,遇‘\0’结束例main(){chara[5]={‘H’,’e’,’l’,’l’,’o’};printf(“%s”,a);}例main(){chara[]=“Hello”;printf(“%s”,a);}结果:Hello#-=*
hello02314结果:Hello用“%s”输出时,遇‘\0’结束main(){chara[]={'h','e','l','\0','l','o','\0'};printf("%s",a);}例输出:hel
hel\0lo\0数组中有多个‘\0’时,遇第一个结束#include<stdio.h>main(){inti;chara[5];scanf("%s",a);for(i=0;i<5;i++)printf("%d,",a[i]);}运行情况:(1)若输入hel,正常(2)若输入
hell,正常(3)若输入
hello,用%s输出时,会出现问题
hel\0
hell\0
hello输入字符串长度<数组维数例字符串输入举例
How\0
are\0
you?\0
#include<stdio.h>//l5-10d1main(){chara[15],b[5],c[5];
scanf("%s%s%s",a,b,c);
printf("a=%s\nb=%s\nc=%s\n",a,b,c);
scanf("%s",a);
printf("a=%s\n",a);}运行情况:输入:Howareyou?输出:a=Howb=arec=you?输入:Howareyou?输出:a=Howscanf中%s输入时,遇空格或回车结束例若准备将字符串“Thisisastring.”记录下来,错误的输入语句为:(A)scanf(“%20s”,s);(B)for(k=0;k<17;k++)s[k]=getchar();(C)while((c=getchar())!=‘\n’)s[k++]=c;scanf函数用格式符%s输入若干字符到字符数组时,遇到空格,TAB,回车符中止,并写入串结束标志’\0’字符串输出函数puts格式:puts(字符数组)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以‘\0’结束字符串输入函数gets格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中,
并自动加‘\0’说明:输入串长度应小于字符数组维数6.3.4常用字符串处理函数头文件string.h例#include<stdio.h>main(){charstring[80];printf(“Inputastring:”);gets(string);puts(string);}输入:
Howareyou?输出:
Howareyou?
字符串连接函数strcat格式:strcat(字符数组1,字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明:
字符数组1必须足够大
连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消,
新串最后加‘\0’字符串拷贝函数strcpy格式:strcpy(字符数组1,字符串2)功能:将字符串2,拷贝到字符数组1中去返值:返回字符数组1的首地址说明:
字符数组1必须足够大
拷贝时‘\0’一同拷贝
不能使用赋值语句为一个字符数组赋值例charstr1[20],str2[20];str1={“Hello!”};(
)str2=str1;(
)strcpy(str1,“Hello!”);(√)strcpy(str2,str1);(√)Trbo\00123456789u24…….…...Trbo0123456789u\024…….…….例strcpy与strcat举例#include<string.h>#include<stdio.h>voidmain(){chard[25];charblank[]="",c[]="C++",turbo[]="Turbo";
strcpy(d,turbo);
strcat(d,blank);
strcat(d,c);
printf("%s\n",d);}TurboC++TrboC++0123456789u\024…….d字符串比较函数strcmp格式:strcmp(字符串1,字符串2)功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(ASCII码),
直到遇到不同字符或‘\0’为止返值:返回int型整数,a.若字符串1<
字符串2,
返回负整数
b.若字符串1>
字符串2,
返回正整数
c.若字符串1==字符串2,
返回零说明:字符串比较不能用“==”,必须用strcmp字符串长度函数strlen格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括‘\0’在内例对于以下字符串,strlen(s)的值为:(1)chars[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’};(2)chars[]=“\t\v\\\0will\n”;(3)chars[]=“\x69\082\n”;
答案:1316.3.5字符串应用举例
#include<stdio.h>#include<string.h>voidmain(){chars[81],t;inti,j;gets(s);j=strlen(s)-1;//最后j为字符串的长度
for(i=0;i<j;i++,j--)//j一开始为最后元素下标
{t=s[i];s[i]=s[j];s[j]=t;}printf(“逆序后字符串为:%s\n”,s);}
例6.11将一字符数组中的字符串逆序存放。当前字符=空格是否未出现新单词,使blank=1num不累加前一字符为空格(blank==1),新单词出现,blank=0,num加1前一字符为非空格(blank==0),未出现新单词,num不变否1是01是0未11否1是02否0未02是0未12否1是03是0未13否1是04否0未04否0未04否0未04例输入:Iamaboy.
当前字符是否空格blank原值新单词开始否blank新值num值
Iamaboy.例
输入一行字符,统计其中有多少个单词输入一字符串给stringi=0num=0blank=1当((c=string[i])!=‘\0’)c=空格真真假假blank=1blank=0num=num+1i=i+1输出:numblank==1#include<stdio.h>main(){charstring[81];inti,num=0,blank=1;
charc;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if(c=='')blank=1;
elseif(blank==1){blank=0;num++;}
printf("Thereare%dwords\intheline\n",num);}
例chardiamond[][5]={{'.','.','*'},{'.','*','.','*'}, {'*','.','.','.','*'},{'.','*','.','*'},{'.','.','*'}};二维字符数组初始化..*\0\0.*.*\0*...*.*.*\0..*\0\0diamond[0]diamond[1]diamond[2]diamond[3]diamond[4]
例
charfruit[][7]={“Apple”,”Orange”,”Grape”,”Pear”,”Peach”};二维字符数组初始化fruit[0]fruit[1]fruit[2]fruit[3]fruit[4]Apple\0\0Orange\0Grape\0\0Pear\0\0\0Peach\0\06.4.1二维字符数组的定义、初始化和引用
二维字符数组的定义和初始化6.4二维字符数组
字符数组的引用可以引用字符数组中的一个元素,得到一个字符例:#include<stdio.h>main(){chard[][3]={{‘a’,‘b’,‘c’},{‘d’,‘e’,‘f’},{‘h’,‘i’,‘j’”}};inti,j;for(i=0;i<3;i++){for(j=0;j<3;j++)printf(“%c”,d[i][j]);printf(“\n”);}也可以用字符串处理函数进行处理例5.16在三个字符串中,找出最大者。#include<stdio.h>#include<string.h>main(){charstring[20],str[3][20];inti;
for(i=0;i<3;i++)gets(str[i]);strcpy(string,str[0]);if(strcmp(str[1],string)>0)strcpy(string,str[1]);if(strcmp(str[2],string)>0) strcpy(string,str[2]);
printf("\nThelargeststring\is:\n%s\n",string);}
How\0
Hello\0
High\0
str[0]str[1]str[2]传地址方式:函数调用时,将数据的存储地址作为参数传递给形参特点:形参与实参占用同样的存储单元“双向”传递实参和形参必须是地址常量或变量6.5数组与函数数组名作函数参数地址传递在主调函数与被调函数分别定义数组,且类型应一致形参数组大小(多维数组第一维)可不指定形参数组名是地址变量一维形参数组定义的一般形式类型标识符
数组名[],intn二维维形参数组定义的一般形式类型标识符
数组名[][指定维数],intn,intm指定要处理的数组元素个数例求学生的平均成绩#include<stdio.h>
floataverage(intstu[10],intn);voidmain(){intscore[10],i;floatav;printf("Input10scores:\n");for(i=0;i<10;i++)scanf("%d",&score[i]);av=average(score,10);printf("Averageis:%.2f",av);}floataverage(int
stu[],intn){inti;floatav,total=0;for(i=0;i<n;i++)total+=stu[i];av=total/n;returnav;}实参用数组名形参用数组定义,
intstu[]..2109score566372….….88stu例6.6编写函数,将数组中的n个整数,按值从小到大排序voidsort(inta[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i; for(j=i+1;j<n;j++) if(a[j]<a[k])k=j; if(k!=i) {t=a[i]; a[i]=a[k]; a[k]=t; }}}main(){intb[10],i;for(i=0;i<10;i++) scanf("%d",&b[i]);
sort(b,10);for(i=0;i<10;i++)printf("%d",b[i]);printf("\n");}0123456789b4968573299927137688akjjjkjkjjjjj949i=0kjjkjkjjjjj0123456789b4968573299927137688a949kk1368i=1例6.6编写函数,将数组中的n个整数,按值从小到大排序voidsort(inta[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i; for(j=i+1;j<n;j++) if(a[j]<a[k])k=j; if(k!=i) {t=a[i]; a[i]=a[k]; a[k]=t; }}}main(){intb[10],i;for(i=0;i<10;i++) scanf("%d",&b[i]);
sort(b,10);for(i=0;i<10;i++)printf("%d",b[i]);printf("\n");}0123456789b9132732495768768899ai=8例6.6编写函数,将数组中的n个整数,按值从小到大排序voidsort(inta[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i; for(j=i+1;j<n;j++) if(a[j]<a[k])k=j; if(k!=i) {t=a[i]; a[i]=a[k]; a[k]=t; }}}main(){intb[10],i;for(i=0;i<10;i++) scanf("%d",&b[i]);
sort(b,10);for(i=0;i<10;i++)printf("%d",b[i]);printf("\n");}例6.12编写函数,将5×5的矩阵中的右上三角元素都设置成0(包括对角线上的元素),其余元素值不变。
#include<stdio.h>voidmain(){intt,a[5][5];inti,j;voidchange(intx[][5],intn,intm);printf("原矩阵:\n");for(i=0;i<5;i++){for(j=0;j<5;j++) {a[i][j]=1+i+j;printf("%3d",a[i][j]);}printf("\n");}change(a,5,5);//调用函数printf("\n修改后的矩阵:\n");for(i=0;i<5;i++){ for(j=0;j<5;j++) printf("%3d",a[i][j]); print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 1第五章-本体聚合1
- 2025年全科三基考试题库及答案
- 2025年内蒙古自治区通辽市中小学教师招聘考试试题及答案详解
- 苹果深加工项目可行性研究报告
- 夏季矿井水害治理培训课件
- 疑难死亡病例讨论制度
- 湖北省考勤管理制度
- 回忆总结群文阅读教学设计
- 消防安全线路隐患排查治理方案
- 学校食堂食品管理制度
- 2026秋季学期新教材译林版(三起)六年级上册英语Unit 1 Try your best 教案(3课时)
- 2026年秋季开学第一课:新时代青年使命
- 绵阳英才中学2025初一入学语文分班考试真题含答案
- 新二升三暑假英语26个字母每日一练过关练22天
- 2026秋西师大版小学数学五年级(新教材)上册教学计划附教学进度表
- 2026年高校行政管理岗招聘笔试典型试题及要点含答案
- 光伏施工方案范文模板
- 2026年时事政治考试题库及答案(100题)
- 2026智慧灯杆商业化模式评估及城市更新与基础设施REITs报告
- 2023-2024学年广西南宁二中高一(下)期末生物试卷
- 2026年广播电视天线工题库及参考答案详解【突破训练】
评论
0/150
提交评论