C程序设计07数组.ppt

上传人:小飞机 文档编号:5426141 上传时间:2023-07-05 格式:PPT 页数:35 大小:241.99KB
返回 下载 相关 举报
C程序设计07数组.ppt_第1页
第1页 / 共35页
C程序设计07数组.ppt_第2页
第2页 / 共35页
C程序设计07数组.ppt_第3页
第3页 / 共35页
C程序设计07数组.ppt_第4页
第4页 / 共35页
C程序设计07数组.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《C程序设计07数组.ppt》由会员分享,可在线阅读,更多相关《C程序设计07数组.ppt(35页珍藏版)》请在三一办公上搜索。

1、第七章 数组,前面所用到的数据均为基本类型(整、实、字符),为了丰富数据类型,须提供强有力的数据表达方式。C语言提供了一种构造类型数据由基本类型按某一规则组合在一起。,其中数组:同一种(基本)类型按一定顺序组合在一起的数据类型。,7.1 一维数组,7.1.1 一维数组的定义与初始化,1.数组名的确定方法同变量名。,2.C语言用方括号 表示数组元数个数。,形式:类型说明符 数组名常量表达式;,例:int a 20;float x 100;,3.常量表达式为常量和符号常量。不允许有变量,其表达式的值代表了元素的个数。,例:int a20;表示有20个元素 且元素从0开始编排:a0,a1,a 19,

2、4.可在定义数组时赋初值,方法如下:,对部分元素赋初值 int a10=0,1,2,3,4;,对全部元素赋初值 int a10=10,11,12,13,14,15,16,17,18,19;,如此,只有前5个元素初值确定,后5个元素由系统设置。,如对数组元素赋同一初值,必须一一写出:int a10=0,0,0,0,0,0,0,0,0,0;,若赋全部元素的初值,可省略常量表达式 int a=0,1,2,3,4;表示a5,即只有5个元素。,7.1.2 一维数组的引用,2.引用方式:数组名下标 代表了一个元素,等价一个同类型的变量。,3.一般地,一维数组各元素分配在连续地内存单元之中。,1.必须象使用

3、变量那样,先定义,后使用,例:a 05+a1+3 6 为正确的算术表达式,7.1.3 一维数组的应用,用循环for实现:for(i=2;i20;i+)fi=fi 2+fi 1;,例:求Fibonacci 数列。定义数组,并赋初值int f20=1,1;,注意:下标越界问题:i=2且i20,main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi2+fi1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,fi,1 8 89 987,5 55 6106765,运行结果如下:,1 13 1441597,2 21 233158

4、4,3 34 3774181,程序如下:,打印:每5个数换一行。,for(i=0;i20;i+),if(i%5=0)printf(n);,printf(%12d,fi);,例2:排序问题计算机处理数据的一个重要问题 排序算法较多,一种最简单的算法选择排序法用得较多。基本思路:设有n个数,需将它们从小到大顺序排列。则:,2.在剩下的n 1个元素中,找出第二小的元素并把它放在第二个位置上。,3.对上述过程重复,直至剩下一个元素。,1.从n个元素中,通过比较,找出最小元素,放在第一个位置上。,例:8,4,20,100,28,1,两次交换,第1遍:1,4,20,100,28,8 一次交换,第2遍:1,

5、4,8,100,28,20 一次交换,第3遍:1,4,8,28,100,20,1,4,8,20,100,28,两次交换,第4遍:1,4,8,20,28,100 一次交换,第0遍:4,8,20,100,28,1 1,8,20,100,28,4,从以上例子可以看到:用到两层循环,第一层循环找第i小的元素,第二层循环对其后的元素的一一比较。,流程图:,jj+1,jn,ii+1,i n1,打印结果,结束,内循环,外循环,B,A,No,Yes,Yes,No,#define N 10main()int a N;int i,j,t;printf(please input%d number:n“,N);for

6、(i=0;iaj)t=ai;ai=aj;aj=t;printf(the sorted numbers:n);for(i=0;iN;i+)printf(%d,ai);,程序:,另一种排序法:冒泡排序法(详见教材),7.2 二维数组,7.2.1 二维数组的定义,1.不可将定义写为int a4,10。,形式 类型说明符 数组名常量表达式 常量表达式,例:int a4 10;float x8 20;,2.可将二维数组的元素看成为若干个特殊的一维数组。如:int b3 4;,则:有三个特殊的一维数组b0,b1,b2,每一个又有四个元素:b00,b01,b02,b03,b10,b11,b12,b13,b2

7、0,b21,b22,b23,3.二维数组的存放方式为:按行存放。由此可推广 至三维、n维数组的定义和存放。即:最右边的下标变化最快。,4.初始化:按行给二维数组赋初值:int a34=1,2,3,4,5,6,7,8,9,10,11,12;可以去掉其中的。,可以对部分元素赋初值,但需表达清楚。如:int a34=1,2,3,8。,可通过赋初值决定数组大小。如为二维,则只可省略第一维的大小.int a 4=1,2,3,4,5,6,7,8,9,10,11,12;,7.2.2 二维数组元素的引用,形式:数组名下标下标,其中的下标为整型表达式,但不得越界。与一维数组元素一样,二维数组元素相当于同类型的简

8、单变量。,7.2.3 程序举例,程序如下:,例1 将一个二维数组行和列元素互换,存到另一个二维数组中。例如:,main()int a2 3=1,2,3,4,5,6;int b3 2,i,j;printf(array a:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);,运行结果如下:array a:1 2 3 4 5 6,array b:1 4 2 5 3 6,数

9、组元素数据的输入必须以循环方式进行或者定义时置初值。,例2.有一个34的矩阵,要求编程序求出其中值最大的那个元素的值,以及所在的行号和列号。,先用NS流程图表示算法,见图6.6,二维数组一般用二重循环,据此写出以下程序:,main()int i,j,row=0,column=0,max;int a34=1,2,3,4,9,8,7,6,10,10,5,2;max=a00;for(i=0;imax)max=aij;row=i;column=j;printf(max=%d,row=%d,column=%dn,max,row,column);,输出结果为:max=10,row=2,column=1,7

10、.3 字符数组,7.3.1字符数组的定义,类型名,数组名,大小,1.初始化:直接给出字符串中的各字符 char a4=G,o,o,d;,存放字符数据。字符串用字符数组存放。,char c10;,若字符多于元素个数,则语法错,反之,后面补0,可以去掉定义时的大小设置,而通过自动赋值决定长度(大小)static char x=I,a,m,a,s,t,u,d,e,n,t;,前面说过,字符串常量用“”表示,且由 0结尾.static char x=I am a student.;则长度为15+1=16,其中x15存放0,其中 亦可省略。,2.字符数组的引用 每一个字符数组元素相当于一个字符变量。,格式

11、符:%c 逐个输入/输出字符。%s 整个串一次输入/输出。,1.输出(用%s)用%s输出时,不输出0.,在printf中须直接写数组名.char c=I am a student;printf(%s,c);,7.3.2 字符数组的输入输出,若数组长度大于字符串长度,则遇到0 即停止输出 char c10=China;printf(%s,c);,输出时遇到第一个0即结束。,2.输入(用%s),输入多个字符串,可用空格隔开。char str15,str25,str35;scanf(%s%s%s,str1,str2,str3);,输入字符串时,系统自动加上0,则:输入 How are you?str

12、1:How0 str2:are0 str3:you?0,输入:How are you 则只会将How输入,且存为,scanf中须用地址量,数组名表示地址量。,但若:char str13 scanf(%s,str);,7.3.3 字符串处理函数,由学生自学,能否根据它们的功能自己编写其函数(可由主函数main实现),7.3.4 字符串数组举例,例:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。,程序如下:,#include stdio.hmain()char string81;int i,num=0,word=0;char c;gets(string);for(i=0;(c=stringi)!=0;i+)if(c=)word=0;else if(word=0)word=1;num+;printf(There are%d words in the line n,num);,运行情况如下:I am a boy.There are 4 words in the line,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号