《c语言程序设计第06章利用数组处理批量数据.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计第06章利用数组处理批量数据.ppt(26页珍藏版)》请在三一办公上搜索。
1、第6章 利用数组处理批量数据,6.1 为什么要用数组6.2 定义和引用一维数组6.3 二维数组的定义和引用6.4 字符数组6.5 提高部分,6.1 为什么要用数组,1 为什么要用数组?利用数组可以有效的处理大批量的具有同一属性的数据,大大提高了工作效率,十分方便。什么是数组?数组是一批有关联的数据的有序集合,用一个统一的数组名表示,这样就把这批数据组织成一个整体;其中每个数据称为一个元素,每个元素都属于同一个数据类型,用下标来确定数组中某个具体的元素。,6.2 定义和引用一维数组,一维数组是具有相同类型的一组数据的序列,用一个下标就可以确定数组中的某个元素。6.2.1 定义一维数组 需要给出数
2、据的类型、数组名、元素的个数(数组长度)。定义一维数组的一般式:类型符 数组名 常量表达式;如:int a5;表示定义了一个整型数组,数组名为a,包含5个元素:a0、a1、a2、a3、a4(不包括a5)注意:(1)数组名也是变量名,和变量名取名规则一样。(2)数组元素的下标是从0开始。(3)数组的长度在定义时必须是常量(符号常量)。,6.2.2 引用一维数组的元素 对已经定义的一维数组,只能逐个引用数组元素,不能一次引用整个数组中的全部元素。如:a3=10;t=a3+6;引用数组元素的一般式为:数组名 下标表达式 注意:1 下标表达式应为整型常量或整型表达式。2 定义数组时的数组名 常量表达式
3、 和引用数组元素的数组名 下标表达式 虽然在形式上相似,但含义和用法上是不同的。如:int a10;/*定义数组长度为10*/a8=4;t=a8+6;/*引用数组元素a8*/思考:a10=4;可以吗?,例6.1 给长度为10的整型数组赋值1 10,按逆序输出。编程序:#include void main()int a10,i,;for(i=0;i=0;i-)/*逆序*/printf(“%d”,ai);/*输出10个元素值*/printf(“n”);思考:从键盘给数组元素赋值,然后输出?,6.2.3 一维数组的初始化 在定义一维数组的同时赋予初值,称为数组的初始化。如:int a5=1,2,3,
4、4,5;注意:1 在定义数组时可以对全部元素赋初值(如上)。2 可以对部分元素赋初值:如:int a10=1,2,3,4,5;前5个元素a0 a4初始化15,后5个值自动为0。3 当对全部元素赋初值时,数组长度可以省略:如:int a=1,2,3,4,5;系统会据此自动地定义数组长度为5。思考:有几种方法可以给数组的各个元素赋值?,6.2.3 一维数组程序举例 例6.2 用数组求Fibonacci数列的前20项并输出。编程序:#include void main()int i,f20=1,1;/*初始化f0、f1*/for(i=2;i20;i+)fi=fi-1+fi-2;/*求f2 f19*/
5、for(i=0;i20;i+)printf(“%6d”,fi);/*输出20个元素值*/printf(“n”);,例6.3 从键盘输入10个整数,按从大到小输出。#include void main()int i,j,t,a20;for(i=0;i10;i+)scanf(“%d”,6.3 二维数组的定义和引用,6.3.1 定义二维数组 一般形式为:类型名 数组名常量表达式 常量表达式 如:int a34,b510;定义a为3行4列的二维数组;b为5行10列的二维数组。注意:二维数组中元素排列的顺序是按行进行的,即在内存中是按行连续存放的。6.3.2 引用二维数组的元素 引用形式为:数组名下标表
6、达式下标表达式 如:int a34,b;a23=12;b=a23;注意:二维数组a的行下标范围为02,列下标为03。思考:a34=15;正确吗?,6.3.3 二维数组的初始化(1)分行给二维数组初始化。如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;(2)按元素排列顺序给二维数组初始化。如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;(3)可以给部分元素初始化。如:int a34=1,2,3;int b44=1,0,2,0,0,3,0,0,0,4;int c34=1,2,3;int d34=1,2,3;除了已经赋值的元素外,其余元素值均为0。
7、(4)当给数组全部元素初始化时,第一维的长度可省。如:int a 4=1,2,3,4,5,6,7,8,9,10,11,12;也可以:int d 4=1,2,3;,6.3.4 二维数组程序举例 例6.4 将二维数组a转置后存放到b数组中并输出。#include void main()int i,j,b32,a23=1,2,3,4,5,6;for(i=0;i2;i+)for(j=0;j3;j+)bji=aij;for(i=0;i3;i+)for(j=0;j2;j+)printf(“%4d”,bij);/*输出b数组*/printf(“n”);,例6.5 假设某班有5个人,每人有3门成绩,求平均成绩
8、最高的学生的成绩和序号。设计算法:1 从键盘输入5个人 的3门成绩 2 求出平均成绩放到数组的最后一列 3 找出最高的平均分及序号 4 输出最高的平均分及序号编程序:#include void main()int i,j,m,m_i,a54;for(i=0;i5;i+)for(j=0;j3;j+)scanf(“%d”,/*输入a数组*/,for(i=0;im)m=ai3;m_i=I;/*求出成绩最大及下标*/printf(“NO=%dnSUM=%dn”,m_i+1,m);/*输出最大成绩及序号*/,6.4 字符数组,6.4.1 定义字符数组及对其初始化定义字符数组:char c5;初始化:ch
9、ar c5=h,a,p,p,y;char c=h,a,p,p,y;/*同上*/char c10=h,a,p,p,y;/*后面的字符均为 0*/char ch33=,*,*,*,*,*,;6.4.2 引用字符数组 可以引用字符数组的某个元素,得到一个字符。例如:for(i=0;i5;i+)ci=getchar();/*scanf(“%c”,*/例6.6 输出一个菱形图。(P152),6.4.3 字符数组与字符串 char c5=h,a,p,p,y;char c6=h,a,p,p,y,0;char c6=“happy”;char c=“happy”;char c=“happy”;char c10=
10、“happy”;6.4.4 字符串的输入输出 1 用格式符%s将整个字符串输入输出例如:char c=“happy”,ch10,c15,c25,c35;printf(“%s”,c);scanf(“%s”,ch);scanf(“%s%s%s”,c1,c2,c2);printf(“%s%s%s”,c1,c2,c3);,注意:(1)输出时遇到第一个0就结束,不包括结束符0。(2)用%s输出字符串时,输出项是数组名,不能是元素名。即printf(“%s”,c0);是不对的。(3)用%s输入字符串时,从键盘输入的字符串应短于定义 的长度,系统自动在后面加上 0。(4)用%s输入多个字符串时,用空格分隔。
11、因此不能输入 一个含有空格的字符串。(5)用%s输入字符串时,字符数组名前不能加 执行时,从地址 ch开始,逐个输出每个字符,直到遇0为止。,2 用函数gets(ch)、puts(ch)输入输出字符串 输入:gets(ch);功能:从键盘输入一个字符串(包括0)到字符数组ch中 回车键作为结束标志,其中可以出现空格字符。输出:puts(ch);功能:输出字符串(以0结束),字符串中可以包含转义 字符。6.4.5 字符串处理函数(头文件:string.h)strcat(s1,s2)将字符串s2连接到s1后面 strcpy(s1,s2)将字符串s2复制到s1中 strcmp(s1,s2)比较s1和
12、s2:s1=s2:值为0 s1s2:值为正整数 s1s2:值为负整数 strlen(s)求字符串长度 strlwr(s)将大写字母转成小写 strupr(s)将小写字母转成大写,6.4.5 字符串数组应用举例例6.7 键盘输入3个字符串,求出最大者输出。(P157)编程序:#include#include void main()char s320,str=“”;int i;for(i=0;i0)strcpy(str,s1);printf(“largest:%sn”,str);,例6.8 输入一行字符,统计其中的单词数。注意:一行开头的空格不统计,单词间的多个空格算一个。设计算法:1 设变量nu
13、m,累计单词数,初值为0。若某个字符为非空 格,而他前面的字符是空格,则num+;2 设变量word,用来表示前一个字符是否空格:0代表是;1代表不是。word的初值为0。编程序:#include void main()char c;int num=0,word=0;while(c=getchar()!=n)if(c=)word=0;else if(word=0)num+;word=1;printf(“words=%dn”,num);,6.5 提高部分,1 定义二维数组:int a34;可以理解为:(1)二维数组a可以看成是一个一维数组,包含3个元素:a0、a1、a2;(2)a0又是一个包含4
14、个元素的一维数组,a0为数组名 4个元素为:a00、a01、a02、a03;同样 a1、a2也是数组名,也包含4个元素。2 对字符的二维数组,也是如此。例如:char s320;for(i=0;i3;i+)gets(si);/*s0为字符数组名*/for(i=0;i3;i+)printf(“%sn”,si);思考:请看例6.7?,习 题,P167:1、2、3、5、6、7、8、9、10,P167-6#include void main()int i,j,m;int a15=2,4,6,7,9,11,12,14,15,16,19,21,24,25,34;scanf(“%d”,P167-7#incl
15、ude void main()int i,j;for(i=1;i=5;i+)for(j=1;j=2*i;j+)printf(“”);printf(“*n”);,P167-8#include#include void main()char s380;int i,j,a,b,c,d,e;a=b=c=d=e=0;for(i=0;i=A,P167-9#include void main()char s=“umtorhs”,ch26;int i,k;for(i=0;i26;i+)chi=a+i;k=0;while(sk!=0)i=sk-a+1;printf(“%c”,ch26-i+1-1);k+;printf(“n”);,P167-10#include#include void main()char s120,s210;int i=0,k=0;gets(s1);gets(s2)printf(“strcat1:%sn”,strcat(s1,s2);while(s1k!=0)k+;while(s2i!=0)s1k+=s2i+;s1k=0;printf(“strcat2:%sn”,s1);,
链接地址:https://www.31ppt.com/p-5426437.html