第7章c语言教程独家

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言程序设计信息学院计算机基础教研室第七章数组C语言程序设计信息学院计算机基础教研室第七章数组7.1一维数组的定义和引用数组的定义数组的初始化数组元素的引用程序举例7.2二维数组的定义和引用数组的定义数组的初始化数组元素的引用程序举例7.3字符数组数组的定义数组初始化数组元素的引用字符串和字符串结束标志字符数组的输入输出字符串处理函数字符数组应用举例C语言程序设计信息学院计算机基础教研室问题的提出:统计某一地区每个年龄的人数,假定不超过120岁。用120个变量intage1,age2,….,age120age1=0;……age120=0;..scanf(“%d”,&x););While((x0)&&(x121)){if(x==1)age1+=1;elseif(x==2)age2+=1;……elseif(x==120)age120+=1;scanf(“%d”,&x);}结构庞大,机械重复,于是引入数组printf(“%d\n”,age1);printf(“%d\n”,age2);…...printf(“%d\n”,age120);C语言程序设计信息学院计算机基础教研室§7.1一维数组的定义和引用一、一维数组的定义数组(整体)inta[10];数组名数组元素个数数组类型二、引用a[0],a[1],a[2],…...a[9]下标(第几个元素)inti=3,j=2,a[10];引用a[i],a[i+2],a[i+j],……C语言程序设计信息学院计算机基础教研室main(){inta[120],x,i,n=0;for(i=0;i120;i++)a[i]=0;scanf(“%d”,&x);while((x0)&&(x121)){a[x-1]=a[x-1]+1;n++;scanf(“%d”,&x);}printf(“Totalpeople=%d\n”,n);for(i=0;i120;i++)printf(“%dyearsold=%d\n”,i+1,a[i]);}问题:统计某一地区每个年龄的人数,假定不超过120岁。a[0],a[1],a[2],…...a[119]1岁人数2岁人数3岁人数120岁人数使用一个数组元素,就象使用一个简单变量,包括:输入、输出、赋值等C语言程序设计信息学院计算机基础教研室同样的方法:可定义其他类型数组inta[10];floatb[5];charc[20];a[0],a[1],…...a[9]b[0],b[1],…...b[4]c[0],c[1],…...c[19]定义引用C语言程序设计信息学院计算机基础教研室三、一维数组初始化:在定义数组时赋初值inta[3]={1,3,5};floatb[2]={3.14,5.18};charc[5]={‘a’,‘b’,‘c’,‘d’,‘e’};注意:inta[]={1,2,3,4,5};编译系统自动确定元素个数intb[10]={1,2};前两个元素有值,后八个为0C语言程序设计信息学院计算机基础教研室四、数组在内存中的存放在内存中申请一组连续的存储单元例:inta[20];一维数组的特点:内存中连续存放、类型相同的一组变量。a[0]a[1]a[2]a[17]a[18]a[19]…..…..内存C语言程序设计信息学院计算机基础教研室五、一维数组应用[例7.1]数组元素的引用。运行结果:9876543210main(){inti,a[10];for(i=0;i=9;i++)a[i]=i;for(i=9;i=0;i--)printf(“%d”,a[i]);}C语言程序设计信息学院计算机基础教研室[例7.2]用数组来处理求Fibonacci数列问题。main(){inti;intf[20]={1,1};for(i=2;i20;i++)f[i]=f[i-2]+f[i-1];/*从f[2]求到f[19]*/for(i=0;i20;i++){if(i%5==0)printf(“\n”);/*控制一行输出5个数*/printf(“%12d”,f[i]);}}1,1,2,3,5,8,……f[0],f[1],f[2],f[3],f[4],f[5],……f[19]C语言程序设计信息学院计算机基础教研室[例]用起泡法对5个数排序(升序)第一次扫描:起泡法:顺序扫描数组元素,将相邻两个数进行比较,将小数调到前面1,8,5,15,00,1,5,8,15升序排序158015第一遍扫描结束:最大数沉底。扫描过程中经过了4次比较。下一步应对前四个元素进行第二遍扫描…...185150185150158150158150C语言程序设计信息学院计算机基础教研室起泡法排序的思想(对n个数进行升序排序)1、n个数排序,需要进行n-1次扫描。2、在第j次扫描中,要进行n-j次两两比较。3、两两比较时,前一个元素的下标从第1个元素到当前(本次扫描元素)的倒数第2个元素[例7.3]用起泡法对10个数排序(升序)main(){inta[10],i,j,t;printf(“intput10numbers:\n”);for(i=0;i10;i++)scanf(“%d”,&a[i]);printf(“\n”);C语言程序设计信息学院计算机基础教研室/*排序程序的核心*/for(j=1;j=9;j++)/*j控制扫描次数*/for(i=0;i=9-j;i++)/*i控制第j次扫描时下标的变化*/if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf(“thesortednumbers:\n”);for(i=1;i11;i++)printf(“%d”,a[i]);}同理可给出降序排序程序!冒泡法排序算法缺点:经常交换,执行效率低?能否降低交换次数,用选择法排序C语言程序设计信息学院计算机基础教研室选择法的思路是:(假定10个元素存放在a[0]……a[9]中)第一遍扫描:将a[0]到a[9]中最小数的下标找到,设为p,若p!=0,则a[0]与a[p]交换位置。第二遍扫描:将a[1]到a[9]中最小数的下标找到,设为p,若p!=1,则a[1]与a[p]交换位置。……依此类推,共需9次扫描,第i次扫描时(i=0……8),第一个元素的下标为i,最后一个元素的下标为9C语言程序设计信息学院计算机基础教研室inta[10]={…...};/*选择法排序程序的核心*/for(i=0;i9;i++)/*i控制扫描次数*/{p=i;/*j控制第i次扫描时下标的变化*/for(j=i+1;j10;j++)if(a[j]a[p])p=j;if(p!=i){t=a[p];a[p]=a[i];a[i]=t;}}C语言程序设计信息学院计算机基础教研室数组(整体)§7.2二维数组的定义和引用问题:课程1课程2课程3学生1897856学生28899100学生3728061学生4607075二维表格①求每门课程的平均成绩,一列的平均值②求一个学生的平均成绩,一行的平均值inta[4][3];数组名行数列数一、二维数组的定义数组类型C语言程序设计信息学院计算机基础教研室二、二维数组元素的引用inta[4][3]定义了12个整型变量:a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[3][0]a[3][1]a[3][2]行号从0开始,列号也从0开始,C语言程序设计信息学院计算机基础教研室元素(个体)a[i][j]行下标列下标问题:课程1课程2课程3学生1897856学生28899100学生3728061学生4607075二维表格inta[4][3]代表12个简单变量如a[0][0]、a[1][2]、a[3][2]C语言程序设计信息学院计算机基础教研室三、二维数组在内存中的存放(占据一片连续存储区)a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[3][0]a[3][1]a[3][2]第一行a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]第二行a[3][0]a[3][1]a[3][2]第四行…..…..内存按行存放C语言程序设计信息学院计算机基础教研室四、二维数组的初始化inta[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};四行三列inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};存储顺序inta[4][3]={{1},{4},{7},{10}};给每一行的第一个元素赋值,其它元素为0inta[][3]={1,2,3,4,5,6,7,8,9,10,11,12};缺少第一维下标,元素按列数连续存放C语言程序设计信息学院计算机基础教研室五、二维数组的应用课程1课程2课程3aver数组学生1897856aver[0]学生28899100aver[1]学生3728061aver[2]学生4607075aver[3]问题:求每个学生的平均成绩,即求各行的平均值inta[4][3]={…….},aver[4],i,j;for(i=0;i4;i++)/*i控制行数*/{aver[i]=0;for(j=0;j3;j++)aver[i]+=a[i][j];/*j控制列数*/aver[i]/=3;}for(i=0;i4;i++)printf(“%d\n”,aver[i]);C语言程序设计信息学院计算机基础教研室解2:课程1课程2课程3空列学生1897856a[0][3]学生28899100a[1][3]学生3728061a[2][3]学生4607075a[3][3]问题:求每个学生的平均成绩,即求各行的平均值inta[4][4]{{89,78,56,0}…….},i,j;for(i=0;i4;i++)/*i控制行数*/{for(j=0;j3;j++)a[i][3]+=a[i][j];/*j控制列数*/a[i][3]/=3;}for(i=0;i4;i++)printf(“%d\n”,a[i][3]);多定义一列,用来存放平均值C语言程序设计信息学院计算机基础教研室[例7.5]有一个3×4的矩阵,要求编程求出其中值最大的元素的值,以及其所在的行号和列号。P129main(){inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];for(i=0;i=2;i++)for(j=0;j=3;j++)if(a[i][j]max){max=a[i][j];row=i;colum=j}printf(“max=%d,row=%d,colum=%d\n”,max,row,colum);}C语言程序设计信息学院计算机基础教研室[例7.4]将一个二维数组行和列元素互换,存到另一个二维数组中(矩阵的转置)。P128main(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf(“arraya:\n”);for(i=0;i=1;i++){for(j=0;j=2;j++){printf(“%5d”,a[i][j]);b[j][i]=a[i][j];}printf(“\n”);}printf(“arrayb:\n”);for(i=0;i=2;i++){for(j=0;j=1;j++)printf(“%5d”,b[i][j]);printf(“\n”);}}C语言程序设计信息学院计算机基础教研室§7.3字符数组一、字符数组1.定义charc[10];2.引用c[0],c[1],c[2],……c[9]每个元素都是一个字符变量,c[i]='a’;for(i=0;i5;i++)scanf(“%c”,&c[i]);for(i=4;i=0;i--)printf(“%c”,c[i]

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功