版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章数组,第七章数组7.1一维数组的定义和引用数组的定义数组的初始化数组元素的引用程序举例7.2二维数组的定义和引用数组的定义数组的初始化数组元素的引用程序举例7.3字符数组数组的定义数组初始化数组元素的引用字符串和字符串结束标志字符数组的输入输出字符串处理函数字符数组应用举例,问题的提出:统计某一地区每个年龄的人数,假定不超过120岁。用120个变量intage1,age2,.,age120,age1=0;age120=0;.scanf(“%d”,printf(“%dn”,age1);printf(“%dn”,age2);.printf(“%dn”,age120);,7.1一维数组的定义和
2、引用,一、一维数组的定义,inta10;,二、引用,下标(第几个元素),inti=3,j=2,a10;引用ai,ai+2,ai+j,main()inta120,x,i,n=0;for(i=0;i0),问题:统计某一地区每个年龄的人数,假定不超过120岁。,a0,a1,a2,.a119,同样的方法:可定义其他类型数组,inta10;floatb5;charc20;,a0,a1,.a9,b0,b1,.b4,c0,c1,.c19,定义,引用,三、一维数组初始化:在定义数组时赋初值,inta3=1,3,5;floatb2=3.14,5.18;charc5=a,b,c,d,e;,注意:inta=1,2,
3、3,4,5;编译系统自动确定元素个数intb10=1,2;前两个元素有值,后八个为0,四、数组在内存中的存放,在内存中申请一组连续的存储单元例:inta20;一维数组的特点:内存中连续存放、类型相同的一组变量。,五、一维数组应用,例7.1数组元素的引用。,运行结果:9876543210,main()inti,a10;for(i=0;i=0;i-)printf(“%d”,ai);,例7.2用数组来处理求Fibonacci数列问题。main()inti;intf20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;/*从f2求到f19*/for(i=0;i20;i+)if(i%5=
4、0)printf(“n”);/*控制一行输出5个数*/printf(“%12d”,fi);,1,1,2,3,5,8,f0,f1,f2,f3,f4,f5,f19,例用起泡法对5个数排序(升序),第一次扫描:,起泡法:顺序扫描数组元素,将相邻两个数进行比较,将小数调到前面,1,8,5,15,0,0,1,5,8,15,158015,起泡法排序的思想(对n个数进行升序排序)1、n个数排序,需要进行n-1次扫描。2、在第j次扫描中,要进行n-j次两两比较。3、两两比较时,前一个元素的下标从第1个元素到当前(本次扫描元素)的倒数第2个元素,例7.3用起泡法对10个数排序(升序)main()inta10,i
5、,j,t;printf(“intput10numbers:n”);for(i=0;i10;i+)scanf(“%d”,/*排序程序的核心*/for(j=1;jai+1)t=ai;ai=ai+1;ai+1=t;printf(“thesortednumbers:n”);for(i=1;i11;i+)printf(“%d”,ai);,同理可给出降序排序程序!,冒泡法排序算法缺点:经常交换,执行效率低,?能否降低交换次数,,用选择法排序,选择法的思路是:(假定10个元素存放在a0a9中)第一遍扫描:将a0到a9中最小数的下标找到,设为p,若p!=0,则a0与ap交换位置。第二遍扫描:将a1到a9中最小
6、数的下标找到,设为p,若p!=1,则a1与ap交换位置。依此类推,共需9次扫描,第i次扫描时(i=08),第一个元素的下标为i,最后一个元素的下标为9,inta10=.;/*选择法排序程序的核心*/for(i=0;i9;i+)/*i控制扫描次数*/p=i;/*j控制第i次扫描时下标的变化*/for(j=i+1;j10;j+)if(ajap)p=j;if(p!=i)t=ap;ap=ai;ai=t;,7.2二维数组的定义和引用,求每门课程的平均成绩,一列的平均值,求一个学生的平均成绩,一行的平均值,inta43;,一、二维数组的定义,二、二维数组元素的引用,inta43定义了12个整型变量:,a0
7、0a01a02a10a11a12a20a21a22a30a31a32,行号从0开始,列号也从0开始,,三、二维数组在内存中的存放(占据一片连续存储区),a00a01a02a10a11a12a20a21a22a30a31a32,四、二维数组的初始化,inta43=1,2,3,4,5,6,7,8,9,10,11,12;四行三列,inta43=1,2,3,4,5,6,7,8,9,10,11,12;存储顺序,inta43=1,4,7,10;给每一行的第一个元素赋值,其它元素为0,inta3=1,2,3,4,5,6,7,8,9,10,11,12;缺少第一维下标,元素按列数连续存放,五、二维数组的应用,课
8、程1课程2课程3aver数组学生1897856aver0学生28899100aver1学生3728061aver2学生4607075aver3,问题:求每个学生的平均成绩,即求各行的平均值,inta43=.,aver4,i,j;for(i=0;i4;i+)/*i控制行数*/averi=0;for(j=0;j3;j+)averi+=aij;/*j控制列数*/averi/=3;for(i=0;i4;i+)printf(“%dn”,averi);,解2:课程1课程2课程3空列学生1897856a03学生28899100a13学生3728061a23学生4607075a33,问题:求每个学生的平均成绩
9、,即求各行的平均值,inta4489,78,56,0.,i,j;for(i=0;i4;i+)/*i控制行数*/for(j=0;j3;j+)ai3+=aij;/*j控制列数*/ai3/=3;for(i=0;i4;i+)printf(“%dn”,ai3);,多定义一列,用来存放平均值,例7.5有一个34的矩阵,要求编程求出其中值最大的元素的值,以及其所在的行号和列号。P129main()inti,j,row=0,colum=0,max;inta34=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a00;for(i=0;imax)max=aij;row=i;colum=jprint
10、f(“max=%d,row=%d,colum=%dn”,max,row,colum);,例7.4将一个二维数组行和列元素互换,存到另一个二维数组中(矩阵的转置)。P128main()inta23=1,2,3,4,5,6;intb32,i,j;printf(“arraya:n”);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(“%5d”,aij);bji=aij;printf(“n”);,printf(“arrayb:n”);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(“%5d”,bij);printf(“n”);,7.3字符数组,一、字
11、符数组,1.定义charc10;2.引用c0,c1,c2,c9每个元素都是一个字符变量,ci=a;for(i=0;i=0;i-)printf(“%c”,ci);执行时,输入:ABCDE输出:EDCBA3.初始化chars4=A,B,C,D;chars1=A,B,C,s210=A;,二、字符串,例:字符串常数“China”,“OK!”占6个字节占4个字节,一般用一维字符数组来存放,即用一维字符数组实现字符串。,0为字符串结尾标志,1.将字符串存放到一维字符数组中例:chars110=C,h,i,n,a,0;简写为:chars110=“China”;再简写为:chars110=“China”;只用
12、字符数组的前六个字节空间2.字符串的输入输出(作为整体输入输出)例1:chars110,s210,s310;scanf(“%s”,s1);printf(“%s”,s1);执行时输入:how输出:how,三、字符串及输入输出,字符数组名是字符串在内存中的起始地址,例2:chars110,s210,s310;scanf(“%s%s%s”,s1,s2,s3);printf(“%s%s%s”,s1,s2,s3);执行时输入:howareyou!输出:howareyou!输入时:字符串之间以空白分隔,s1的值为“how”s2的值为“are”s3的值为“you!”用scanf()不能输入带空格的字符串,二
13、、字符串及输入输出,2.字符串的输入输出(作为整体输入输出)若欲输入带空格的字符串,必须用gets()函数。chars20;gets(s);puts(s);执行时输入:howareyou!输出:howareyou!输入时:字符串以回车作为结束,二、字符串及输入输出,1.strlen(字符串)求字符串长度(stringlength),三、字符串运算函数,例:chars110=“ABCD”,s210=“12n”,s310=“An0121”;intx,y,z,i;x=strlen(s1);y=strlen(s2);z=strlen(s3);i=strlen(“XYZ0ABC”);,x=4y=4z=7
14、i=3,2.strcat(字符串1,字符串2)连接两个字符串(stringcatch),将字符数组2的内容连接到字符数组1之后。,三、字符串运算函数,例:chars110=“AB”,s210=“CD”;strcat(s1,s2);puts(s1);puts(s2);strcat(s1,“EF”);puts(s1);,输出ABCD输出CD输出ABCDEF,3.strcpy(字符串1,字符串2)字符串赋值(stringcopy)将字符串2的值赋给字符串1,三、字符串运算函数,例:chars110,s210;strcpy(s1,“ABCD”);strcpy(s2,“XYZ”);strcpy(s1,s
15、2);puts(s1);puts(s2);,输出XYZ输出XYZ,4.strcmp(字符串1,字符串2)比较两个字符串的大小(stringcompare),自左至右比较相应字符的ASCII码,直到不等,则停止比较。,三、字符串运算函数,例:chars110=“ABC”,s2=“aBc”;i=strcmp(s1,s2);j=strcmp(s1,“ABC”);k=strcmp(s1,“ABc”);x=strcmp(s1,“AB”);,i0,我们可以把一篇文章或一个编辑屏幕,看成一个二维数组。,四、二维字符数组,将每行看成一个一维数组(字符串),则定义二维字符数组如下:chara34=“*”,“*”
16、,“*”;charb36=“Wang”,“Li”,“Cheng”;多定义一列用于存放0,四、二维字符数组,chara34=“*”,“*”,“*”;charb36=“Wang”,“Li”,“Cheng”;,*,WangLiCheng,可按行访问:a0表示“*”a1表示“*”a2表示“*”puts(a0);puts(a1);puts(a2);,亦可访问某个字符:b10表示Lb22表示e,五、字符数组应用举例例7.8统计字符串中有多少个单词,单词之间用空格分隔。#include“stdio.h”main()charstring81,c;inti,num=0,word=0;gets(string);for(i=0;(c=stringi)!=0;i+)if(c=)wor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026下半年初中生物教资面试试讲题库及答案
- 具身智能+音乐创作智能辅助乐器系统方案
- 服务人员跨区工作方案
- ct及mr在腹部疾病诊断的应用
- 信息系统项目管理教程配套讲义第9章项目人力资源管理
- 区域旅游职业发展规划
- 起重吊装工程专项施工方案编制施工工艺
- 2026年安全考试题参考题目(及答案)
- 钢柱安装施工工艺
- java面向对象试题及答案
- 【《基于单片机的老人跌倒报警装置设计》11000字】
- 护士聘用合同简单模板(3篇)
- 华南师范大学2025年心理学(教育心理)本科试题及答案
- 益丰大药房介绍
- 腹部损伤讲解课件
- CNC知识培训课件
- 饮用天然矿泉水生产工艺21课件
- 2025年度旅游业安全生产费用使用计划
- 加气站气瓶充装质量保证体系手册2024版
- 志愿服务证明(多模板)
- 二维材料研究
评论
0/150
提交评论