C程数组教案PPT课件

上传人:s9****2 文档编号:591670115 上传时间:2024-09-18 格式:PPT 页数:76 大小:1.36MB
返回 下载 相关 举报
C程数组教案PPT课件_第1页
第1页 / 共76页
C程数组教案PPT课件_第2页
第2页 / 共76页
C程数组教案PPT课件_第3页
第3页 / 共76页
C程数组教案PPT课件_第4页
第4页 / 共76页
C程数组教案PPT课件_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《C程数组教案PPT课件》由会员分享,可在线阅读,更多相关《C程数组教案PPT课件(76页珍藏版)》请在金锄头文库上搜索。

1、第第5 5章章 数组数组引例:输入引例:输入3030个学生的成绩,求高于平均成绩人数。个学生的成绩,求高于平均成绩人数。开始开始定义变量定义变量sum, x, isum=0, i=1;判断:判断:ixsum=sum+xi+判断:判断:ixsum=sum+xi+判断:判断:i=30 ? 输出输出ave假假ave=sum/30结束结束56x67引例:引例:输入输入3030个学生的成绩,求高于平均成绩的人数。个学生的成绩,求高于平均成绩的人数。nmain()n int i,x;n float sum=0,ave;n for(i=1;i=30;i+)n scanf(%d,&x);n sum+=x; n

2、 ave=sum/30;n printf(aver=%fn,ave);n将将30个人的成绩个人的成绩逐一与逐一与ave比较,比较,大于大于ave计数。计数。(循环处理)(循环处理)如何保存如何保存30个成绩?个成绩?第第5 5章章 数组数组5.1 5.1 一维数组一维数组5.2 5.2 二维数组二维数组5.3 5.3 字符型数据字符型数据5.4 5.4 算法举例算法举例l定义:定义:批量数据的集合批量数据的集合l特点:特点:所有数据类型相同所有数据类型相同l要素:要素:数组名、下标数组名、下标5.1 5.1 一维数组一维数组一、一维数组的定义和引用一、一维数组的定义和引用l定义:定义:类型说明

3、符类型说明符 数组名数组名数组长度数组长度 如:如: int a10,x5*3; 0 01 12 23 34 45 56 67 78 89 9aa0 a2 a4 a6 a8 a1 a3 a5 a7 a9int n; scanf(“%d”, &n);int an;l引用方式:数组名引用方式:数组名下标下标l注意:注意:命名规则、数组长度、下标命名规则、数组长度、下标 、空间分配、空间分配整型表达式整型表达式整型表达式整型表达式整数或整型整数或整型常量表达式常量表达式5.1 5.1 一维数组一维数组二、一维数组元素的赋值二、一维数组元素的赋值1. 初始化:初始化:定义同时赋值;定义同时赋值;2.

4、数组元素的输入:数组元素的输入:scanf函数输入;函数输入;3. 数组元素的赋值:数组元素的赋值:使用赋值运算;使用赋值运算;4. 产生随机数:产生随机数:使用随机函数使用随机函数random。5.1 5.1 一维数组一维数组1 1、初始化、初始化、初始化、初始化l l在定义数组时,对全部数组元素赋初值。在定义数组时,对全部数组元素赋初值。在定义数组时,对全部数组元素赋初值。在定义数组时,对全部数组元素赋初值。 intint a5=6, 2, 7, -3, 5 a5=6, 2, 7, -3, 5;l l只给一部分元素赋值。只给一部分元素赋值。只给一部分元素赋值。只给一部分元素赋值。 inti

5、nt a5=6, 2 a5=6, 2; intint a5=6, 2, a5=6, 2, 0, 0, 00, 0, 0 ;l l定义数组时使数组定义数组时使数组定义数组时使数组定义数组时使数组a a中全部元素自动赋以中全部元素自动赋以中全部元素自动赋以中全部元素自动赋以0 0值。值。值。值。 static static intint a5 a5; intint a5=0; a5=0;l l对全部数组元素赋初值时,可以不指定数组长度。对全部数组元素赋初值时,可以不指定数组长度。对全部数组元素赋初值时,可以不指定数组长度。对全部数组元素赋初值时,可以不指定数组长度。 intint a a3 3=1

6、, 2, 3;=1, 2, 3; intint a =1, 2, 3; a =1, 2, 3;等价等价等价等价等价等价随机函数随机函数random的用法:的用法:l 格式格式: random(x)random(x)l 说明说明: (1) (1) x x为为整型整型 (2) (2) 头文件头文件 (3) (3) 产生产生0, x)0, x) 区间上的整数。区间上的整数。注意:注意: 若需每次运行时产生不同的随机整数,用若需每次运行时产生不同的随机整数,用randomize()函数,所在头文件:函数,所在头文件:产生产生 a,ba,b区间上任意整数的方法:区间上任意整数的方法: random(b-

7、a+1)+arandom(b-a+1)+a2、 随机函数随机函数random和和randrand函数的用法:函数的用法:格式格式: rand ( )说明说明: (1) 头文件头文件。 (2) 该函数产生该函数产生0到整型最大值之间的一个随到整型最大值之间的一个随机整数。机整数。产生产生a,b区间上任意整数的方法:区间上任意整数的方法: rand( )%(b-a+1)+asrand函数函数 (头文件头文件) srand(time(0) 用当前时间作为随机数的初始种子用当前时间作为随机数的初始种子main( ) int i, a5=1,2,3,4,5; for (i=0; i5; i+) prin

8、tf(%5d, ai ); printf(n); 例例5-1 数组元素的引用。数组元素的引用。int i, a5; for (i=0; i5; i+) scanf(%d, &ai);ai=i+1;ai=random(20);#include例:例: 用数组求用数组求Fibonacci数列前数列前40项项. main( ) int i; long f40=1,1; for(i=2;i40;i+) fi=fi-2+fi-1; for(i=0;i40;i+) if(i%5=0) printf(n); printf(%12ld,fi); 例例5-2 求求10个学生成绩的最高分、最低分和平均分。个学生成

9、绩的最高分、最低分和平均分。#include main( ) int i, a10, min, max; float av, s; for(i=0;i=9;i+) scanf(%d,&ai); max=min=a0; s=a0; for(i=1;i10;i+) if(aimax) max=ai; s+=ai; av=s/10; printf(max=%d,min=%d,av=%.2f, max,min,av); 运行输入:运行输入:63 88 89 90 66 73 61 92 72 78 运行结果:运行结果:例例5-3:求:求10个数的最小值及其位置,并与第个数的最小值及其位置,并与第1个数

10、对调。(最小值唯一)个数对调。(最小值唯一)分析:分析:l 用数组用数组a存放存放10个数据,个数据,int a10;l 用用k记录最小值的位置。记录最小值的位置。 l 交换交换a0与与ak的值。的值。12-1437 276231 -3665-2-31k=0 k=1k=6k=1 k=1k=1k=1k=6 k=6k=6a0 a1 a2a3 a4 a5a6 a7a8a9例例例例5-35-3:求:求:求:求1010个数的最小值及其位置,并与第个数的最小值及其位置,并与第个数的最小值及其位置,并与第个数的最小值及其位置,并与第1 1个数对调。个数对调。个数对调。个数对调。(最小值唯一)(最小值唯一)(

11、最小值唯一)(最小值唯一)main( ) int i, k, a10, t; for(i=0;i10;i+) scanf(%d,&ai); k=0; for(i=1;i10;i+) if(aiak) k=i; if(k!=0) t=a0; a0=ak; ak=t; printf(min :%dn,a0); printf(“weizhi:%dn, k); 4 6 8 9 0 12 3 45 1 5min :0weizhi:4例例5-45-4:产生产生10个个40,100内的随机数,并内的随机数,并用用选择排序选择排序法按由小到大的顺序排序后输出法按由小到大的顺序排序后输出。5 59 93 37

12、76 6k=0k=2533 39 95 57 76 6k=3k=1k=2593 35 59 97 76 63 35 56 67 79 9k=2k=3k=4967 思路思路思路思路: : 在在在在aiai和和和和a9a9中找出最小的数,记录最小数所在的下中找出最小的数,记录最小数所在的下中找出最小的数,记录最小数所在的下中找出最小的数,记录最小数所在的下标位置标位置标位置标位置k k,然后将最小数与,然后将最小数与,然后将最小数与,然后将最小数与aiai交换。交换。交换。交换。第第 i 轮:轮:k=i; k=i; for (j=i+1;jN;j+)for (j=i+1;jaj) if (akaj

13、) k=j; k=j; if (k!=i)if (k!=i) t=ai;ai=ak;ak=t; t=ai;ai=ak;ak=t; 第第0轮轮第第1轮轮第第2轮轮第第3轮轮#include main() int i, j, k, t, a10; for(i=0;i10;i+) ai=rand()%61+40; printf(%5d,ai); printf(n); for(i=0;i9;i+) k=i; for(j=i+1;jaj) k=j; if (k!=i) t=ai; ai=ak; ak=t; for(i=0;i10;i+) printf(%5d,ai);例例5-4:产生产生10个个40,1

14、00内的随机数,并用内的随机数,并用选择排序选择排序法按由小到大的顺序排序后输出法按由小到大的顺序排序后输出。例例5-55-5:用:用顺序排序法顺序排序法对对1010个数按升序排序。个数按升序排序。57362第第0轮轮53322756323765235765735675667第第1轮轮第第2轮轮第第3轮轮思路思路: 假设假设ai最小,最小,发现发现其后面的数比其后面的数比ai小,就将这两小,就将这两个数交换。个数交换。第第 i 轮:轮:for (j=i+1; jn; j+) for (j=i+1; jn; j+) if (if (ajaiajai) ) t=ai; t=ai; ai=aj; a

15、i=aj; aj=t; aj=t; 例例5-55-5:用:用顺序排序法顺序排序法对对1010个数按升序排序。个数按升序排序。#include main( ) int i, j, k, a10; for(i=0;i10;i+) ai= rand()%61+40; printf(%5d,ai); printf(n); for(i=0;i9;i+) for(j=i+1;j10;j+) if(ajai) k=ai; ai=aj; aj=k; for(i=0;i10;i+) printf(%5d,ai); main( ) int a =1,3,5,6,8,9,10,15, k, left, right,

16、 m, n=8; scanf(%d,&k); left=0; right=n-1; while(left=right) m=(left+right)/2; if(k=am) printf (%d,m); break; else if(kright) printf(no found!); 例例5-6: 用二分查找法判断一个数是否在一个有序用二分查找法判断一个数是否在一个有序数组中。数组中。例例例例: : : : 用用用用randomrandomrandomrandom函数产生函数产生函数产生函数产生n n n n个个个个10,5010,5010,5010,50之间的随机整之间的随机整之间的随机整

17、之间的随机整数,并按逆序重放在数组中。数,并按逆序重放在数组中。数,并按逆序重放在数组中。数,并按逆序重放在数组中。(n50)(n50)(n50)(n50) #include # main( ) int a50, t, n, i; scanf(%d, &n); srand(time(0); for(i=0;in;i+) ai=rand()%41+10; printf(%5d,ai); printf(n); 逆序存放逆序存放a数组元素数组元素 1 12 23 34 45 56 67 78 89 90 0a a数组处理过程:数组处理过程:数组处理过程:数组处理过程:0 09 98 87 76 65

18、 54 43 32 21 1a0a1a2a3a4a5a6a7a8a9a0a1a2a3a4a5a6a7a8a9算法:算法: for(i=0;in/2;i+) t=ai; ai=an-1-i; an-1-i=t; 例例例例: : : : 用用用用randomrandomrandomrandom函数产生函数产生函数产生函数产生n n n n个个个个10,5010,5010,5010,50之间的随机整之间的随机整之间的随机整之间的随机整数,并按逆序重放在数组中。数,并按逆序重放在数组中。数,并按逆序重放在数组中。数,并按逆序重放在数组中。(n50)(n50)(n50)(n50) #include “”

19、 #include main( ) int a50, t, n, i; scanf(%d, &n); srand(time(0); for(i=0;in;i+) ai=rand()%41+10; printf(%5d,ai); printf(n); for(i=0;in/2;i+) t=ai; ai=an-1-i; an-1-i=t; for(i=0;in;i+) printf(%5d,ai); main( ) int i, j, t, a8=1,2,3,4,5,6,7,8; for(i=0;i=7;i+) printf(%3d,ai); printf(n); for(i=1;i=3;i+)

20、t=a0; for( j=1;j=7;j+) aj-1=aj; a7=t; for( i=0;i=7;i+) printf(%3d,ai);数据前移数据前移例例: : 一个数组有一个数组有8 8个元素:个元素:1 2 3 4 5 6 7 81 2 3 4 5 6 7 8不增加数组,通过移动元素将数组变化为不增加数组,通过移动元素将数组变化为4 5 6 7 8 1 2 34 5 6 7 8 1 2 3例例例例: : : : 用随机函数产生用随机函数产生用随机函数产生用随机函数产生20202020个个个个10,9010,9010,9010,90之间的整数,找出之间的整数,找出之间的整数,找出之间的

21、整数,找出其中素数,并按由小到大顺序排列。其中素数,并按由小到大顺序排列。其中素数,并按由小到大顺序排列。其中素数,并按由小到大顺序排列。#include “”main( ) int a20, b20, i, j, k=0, t; for(i=0;i20;i+) ai= rand()%81+10; printf(%5d,ai); printf(n); for(i=0;i20;i+) for( j=2;j=ai-1;j+) if(ai%j=0) break; if(j=ai) bk=ai; k+; 将数组将数组 a 中的素数中的素数找出放到数组找出放到数组b中中例例例例: : : : 用随机函数

22、产生用随机函数产生用随机函数产生用随机函数产生20202020个个个个10,9010,9010,9010,90之间的整数,找出之间的整数,找出之间的整数,找出之间的整数,找出其中素数,并按由小到大顺序排列。其中素数,并按由小到大顺序排列。其中素数,并按由小到大顺序排列。其中素数,并按由小到大顺序排列。for(i=0;ik-1;i+) for(j=i+1;jk;j+) if(bjbi) t=bi; bi=bj; bj=t; for(i=0;ik;i+) printf(%5d,bi);用顺序排序法使用顺序排序法使 b 数组升序数组升序例例: 输入输入n个数到数组中(个数到数组中(n最多为最多为10

23、0),选出所有),选出所有大于大于n个数的平均值的那些数。个数的平均值的那些数。1. int a100;2. 输入输入n个数据并求这个数据并求这n个数据的累加和。个数据的累加和。3. 求求n个数据的平均值。个数据的平均值。4. 选出所有大于平均值的那些数。选出所有大于平均值的那些数。 main( ) int a100, s=0, av, i, n; scanf(%d,&n); for(i=0; in; i+) scanf(%d ,&ai); s=s+ai; av=s/n; printf(av=%dn,av); for(i=0; iav) printf(%6d,ai); printf(n); 例

24、例: 输入输入n个数到数组中(个数到数组中(n最多为最多为100),选出所有),选出所有大于大于n个数的平均值的那些数。个数的平均值的那些数。l定义定义定义定义类型说明符类型说明符类型说明符类型说明符 数组名数组名数组名数组名 常量表达式常量表达式常量表达式常量表达式 常量表达式常量表达式常量表达式常量表达式 例:例:例:例:intint a23 a23l说明说明说明说明uu二维数组看作是特殊的一维数组。二维数组看作是特殊的一维数组。二维数组看作是特殊的一维数组。二维数组看作是特殊的一维数组。 a0a0 a0a00 0 a0a01 1 a0a02 2 a1 a1 a1a10 0 a1a11 1

25、 a1a12 2 uu二维数组在内存中二维数组在内存中二维数组在内存中二维数组在内存中按行存放。按行存放。按行存放。按行存放。5.2 二维数组二维数组 a00 a02 a11 a01 a10 a12 5.2 二维数组二维数组l l引用形式引用形式引用形式引用形式 数组名数组名数组名数组名 下标下标下标下标下标下标下标下标 l l举例:举例:举例:举例: 若有说明:若有说明:若有说明:若有说明: intint a34 a34 则对则对则对则对a a数组元素非法引用的是数组元素非法引用的是数组元素非法引用的是数组元素非法引用的是 A. a03*1 B. a23A. a03*1 B. a23 C.

26、a1+10 D. a04 C. a1+10 D. a04D5.2 二维数组二维数组l l初始化初始化初始化初始化uu对全部元素赋初值对全部元素赋初值对全部元素赋初值对全部元素赋初值 intint a33= a33=1,2,31,2,3 , , 4,5,64,5,6 , , 7,8,97,8,9; ; intint a33= a33= 1,2,3,4,5,6,7,8,91,2,3,4,5,6,7,8,9 ; ; intint a 3= a 3= 1,2,3,4,5,6,7,8,91,2,3,4,5,6,7,8,9 ; ;uu对部分元素赋初值对部分元素赋初值对部分元素赋初值对部分元素赋初值 int

27、int a33= a33=1,21,2 , , 5,65,6; ;等价等价例例: 打印如下方阵打印如下方阵 1 0 0 0 0 0 1 3 1 0 0 0 1 4 3 3 1 0 1 4 4 3 3 3 1 4 4 4 3 3 1 2 1 4 4 3 1 2 2 2 1 4 1 2 2 2 2 2 1主对角线:主对角线: i=j副对角线:副对角线:i+j=6ij & i+jj & i+j6ij & i+j6i6 main( ) int a77, i, j; for(i=0;i7;i+) for(j=0;j7;j+) if (ij&i+j6) aij=0; if (i6) aij=4; if (

28、ij&i+jj&i+j6) aij=2; if(i=j|i+j=6) aij=1; for(i=0;i7;i+) for(j=0;j7;j+) printf(%3d,aij); printf(n); 例例: 打印如下方阵打印如下方阵3311111114 6 45 10 10 56 15 20 15 6例例5-8: 打印杨辉三角形,输出形式如下所示。打印杨辉三角形,输出形式如下所示。算法分析:算法分析:算法分析:算法分析:uu 定义定义定义定义a77a77uu ai0=1; ai0=1; aiiaii=1;=1;uu aijaij=ai-1j-1+ai-1j=ai-1j-1+ai-1j211 1

29、1 2 11 3 3 11 4 6 4 11 5 10 10 5 121 6 15 20 15 6 1111111例例5-8: 打印杨辉三角形。打印杨辉三角形。main ( )main ( ) int a77, i, j; int a77, i, j; for (i=0;i7;i+)for (i=0;i7;i+) ai0=1; aii=1; ai0=1; aii=1; for (i=2;i7;i+)for (i=2;i7;i+) for (j=1;ji;j+)for (j=1;ji;j+) aij=ai-1j+ai-1j-1; aij=ai-1j+ai-1j-1; for (i=0;i7;i+

30、)for (i=0;i7;i+) for (j=0;j=i;j+) for (j=0;j=i;j+) printf(%6d,aij); printf(%6d,aij); printf(n); printf(n); 填充杨辉三填充杨辉三角形中的角形中的 1 数字数字填充除填充除1以外的其以外的其它数字它数字例例: 打印杨辉三角形。打印杨辉三角形。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 11 5 10 10 5 1for (i=0;i6;i+) for (j=1;j6-i;j+) printf( ); for (j=0;j=i;j+) printf(%6d,aij); print

31、f(n); 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1for (i=0;i6;i+) for (j=1;j6-i;j+) printf( ); for (j=0;j=i;j+) printf(%6d,aij); printf(n); 6个空格3个空格main( )main( ) int a33, i, j, t, k=1; int a33, i, j, t, k=1; for(i=0;i3;i+) for(i=0;i3;i+) for(j=0;j3;j+) for(j=0;j3;j+) aij=k+; aij=k+; for(i=0;i3;i+) f

32、or(i=0;i3;i+) for(j=0;ji;j+) for(j=0;ji;j+) t=aij;aij=aji;aji=t; t=aij;aij=aji;aji=t; for(i=0;i3;i+) for(i=0;i3;i+) for (j=0;j3;j+) printf(%4d,aij); for (j=0;j3;j+) printf(%4d,aij); printf(n); printf(n); 例例5-7: 矩阵转置。矩阵转置。1 2 3 4 5 657 8 91 4 7 2 5 83 6 9例:在一个例:在一个例:在一个例:在一个3434矩阵中,求最大值及其位置矩阵中,求最大值及其

33、位置矩阵中,求最大值及其位置矩阵中,求最大值及其位置. . #include main( ) int a34, i, j, max , r, c; for(i=0;i3;i+) for(j=0;j4;j+) aij=rand()%80+10; printf(%5d,aij); printf(n); max=a00; r=c=0; for(i=0;i3;i+) for(j=0;jmax) max=aij; r=i; c=j; printf(max=a%d%d=%dn,r,c,max); 47 71 43 71 77 98 96 36 89 27 65 99max=a23=99例:以下程序的功能是

34、求一个二维数组中每行的最大值例:以下程序的功能是求一个二维数组中每行的最大值和每行的和。和每行的和。#include #define N 4main( )int aNN, bN, cN, i, j, k, s=0; for(i=0;iN;i+) for(j=0;jN;j+) aij=rand()%100; for(i=0;iN;i+) k=ai0; 【?】 ; for(j=0;jN;j+) if(kaij) 【?】 ; s=s+aij; bi=k; 【?】 ; for(i=0;iN;i+) for(j=0;jN;j+) printf(%4d, 【?】 ); printf(%4d%4d,bi,c

35、i); printf(n); s=0;k=aij;ci=s;aij符号常量符号常量符号常量符号常量用一个用一个标识符标识符表示一个常量表示一个常量命名规则:命名规则: 1、字母、数字、下划线组成、字母、数字、下划线组成 不能以数字开头;不能以数字开头; 2、一般不超过、一般不超过8个字符。个字符。 3、见名知意。、见名知意。 4、区分大小写。、区分大小写。#define PImain( ) float c,s,r; r=5; c=2 * 3.14 * r; s=3.14 * r * r; printf(%f,%f ,c,s); #define 符号常量名符号常量名 常量常量 PIPI练习:求一

36、个练习:求一个3行行4列矩阵的外框的元素值之和,注意,矩阵列矩阵的外框的元素值之和,注意,矩阵四个角上的元素不能重复加。四个角上的元素不能重复加。#define m 3#define n 4main( ) int amn=1,2,3,4,5,6,7,8,9,10,11,12,i,j,s=0; for(i=0;im;i+) for(j=0;jn;j+) if(i=0|i=m-1|j=0|j=n-1) s=s+aij; printf(s=%dn,s); 5.3 字符型数据字符型数据(1) 普通字符普通字符: 用一对用一对单撇号单撇号括起来的一个字符。括起来的一个字符。(2) 转义字符转义字符: n

37、 123 xAF。转义字符转义字符含义含义ASCIIASCII代码值代码值nn换行,将光标移到下一行开头换行,将光标移到下一行开头1010t t横向跳到下一制表位置横向跳到下一制表位置9 9f f走纸换页走纸换页1212bb退格退格8 8r r回车,将光标移到本行开头回车,将光标移到本行开头1313 反斜杠字符反斜杠字符“”“”9292 单撇号字符单撇号字符3939 双撇号字符双撇号字符3434dddddd1 13 3位八进制数所代表的字符位八进制数所代表的字符xhhxhh以以x x开头的开头的1 12 2位十六进制数所代表的字符位十六进制数所代表的字符5.3.1 字符常量字符常量5.3.2

38、字符串常量字符串常量用一对用一对双撇号双撇号括起来的字符序列。括起来的字符序列。如:如: CHINA、a、how are you. 、 。字符串常量在内存中的存放:字符串常量在内存中的存放: 每一个字符均以其每一个字符均以其ASCII码存放,且在字符码存放,且在字符串的最后自动添加一个串的最后自动添加一个0作为字符串结束标志。作为字符串结束标志。请区别:请区别: a 和和 a 5.3.3 字符型变量字符型变量只能放一个字符,占只能放一个字符,占一个一个字节,存放该字符的字节,存放该字符的ASCII码值。码值。定义定义 char c1,c2;赋值赋值 c1= a; c2= b;c=a;c=97;

39、二者等价二者等价整型与字符型整型与字符型变量可以通用变量可以通用通用范围:通用范围:0 1275.3.4 getchar和和putchar函数函数函数函数函数函数从终端输入一个字符。从终端输入一个字符。 形式:形式:c=getchar( );c为字符型或整型变量。为字符型或整型变量。向终端输出一个字符。向终端输出一个字符。 形式:形式:putchar(c); a a例例5-11 从键盘上输入一个字符,然后输出到终从键盘上输入一个字符,然后输出到终端显示器上。端显示器上。#include main( ) char c; c=getchar(); putchar(c);5.3.5 5.3.5 字符

40、数组字符数组l l定义定义定义定义 charcharcharchar 字符数组名字符数组名字符数组名字符数组名 整型常量表达式整型常量表达式整型常量表达式整型常量表达式 例:例:例:例:char s110, s223;char s110, s223;l l初始化初始化初始化初始化uu将字符数组中的各元素逐个赋予字符将字符数组中的各元素逐个赋予字符将字符数组中的各元素逐个赋予字符将字符数组中的各元素逐个赋予字符 例:例:例:例:char str3=t, a, e;char str3=t, a, e;uu用字符串常量来对字符数组初始化用字符串常量来对字符数组初始化用字符串常量来对字符数组初始化用字

41、符串常量来对字符数组初始化 例:例:例:例:char char strstr =“hello; =“hello; char char strstr 6=“hello; 6=“hello; 注注注注: : 对对对对静态字符数组静态字符数组静态字符数组静态字符数组未被赋值的元素系统自动将其赋未被赋值的元素系统自动将其赋未被赋值的元素系统自动将其赋未被赋值的元素系统自动将其赋值为空值为空值为空值为空(0)(0)。l l字符数组元素的引用字符数组元素的引用字符数组元素的引用字符数组元素的引用: : 同简单变量同简单变量同简单变量同简单变量等价等价下面几种定义形式是等价的:char name5= goo

42、dchar name5= good;char name = goodchar name = good;char name5= goodchar name5= good;char name = goodchar name = good;char name5= g, o, o, dchar name5= g, o, o, d;char name = g, o, o, d, 0char name = g, o, o, d, 0;例例: 输出一个字符数组中的字符输出一个字符数组中的字符main( ) char c10=I, ,a,m, ,a, ,b,o,y; int i; for (i=0;i10;i

43、+) printf(%c,ci); Iamaboy5.3.5 5.3.5 字符数组字符数组l字符数组的输入输出字符数组的输入输出 %c %c 逐个字符输入逐个字符输入/ /输出输出 % %s s 一次输入一次输入/ /输出整个字符串输出整个字符串 5.3.5 5.3.5 字符数组字符数组l输入时应注意输入时应注意输入时应注意输入时应注意 “%s”%s”%s”%s”格式输入,后面跟数组名,且不带格式输入,后面跟数组名,且不带格式输入,后面跟数组名,且不带格式输入,后面跟数组名,且不带“&”&”&”&”符符符符号。号。号。号。 “%s”%s”%s”%s”格式输入无法输入空格。格式输入无法输入空格。

44、格式输入无法输入空格。格式输入无法输入空格。 例:例:char c10; scanf(%s, c); I am happy I 0c0 c1 c2 c3 c4 c5 c6c7 c8 c9 “% %c”格式输入字符时,不需要分隔符,连续输入格式输入字符时,不需要分隔符,连续输入之后回车。之后回车。l输出应注意的问题输出应注意的问题 用用“%s”格式输出,遇格式输出,遇0时结束,时结束,printf函数中的输出项是函数中的输出项是字符数组名字符数组名,而不是数,而不是数组元素。组元素。 例:例: static char c11=china; printf(%s, c); c h i n a 0 0

45、 0 0 0 0chinal可使用可使用gets和和puts整体输入整体输入/输出字符串。输出字符串。#include #include main( )main( ) char a20; char a20; int i; int i; for(i=0;i6;i+) for(i=0;i6;i+) ai=getchar();ai=getchar(); for(i=0;i6;i+) for(i=0;i6;i+) putchar(putchar(aiai); ); scanf(scanf(%c%c, ,&ai&ai); );printf(printf(%c%c, ,aiai); );#include

46、#include main( )main( ) char a20; char a20; scanf( scanf(%s%s, ,a a); ); printf( printf(%s%sn,n,a a); ); 例:输入例:输入/输出字符串输出字符串 gets(a);gets(a); puts(a);puts(a);5.3.5 5.3.5 字符数组字符数组l字符串处理函数字符串处理函数 lgets(gets(字符数组名字符数组名) ):输入字符串:输入字符串lputs(puts(字符数组名或字符串常量字符数组名或字符串常量) ):输出字符串:输出字符串例例#include main( ) cha

47、r a6; gets(a); puts(a);5.3.5 5.3.5 字符数组字符数组l字符串有效长度函数字符串有效长度函数字符串有效长度函数字符串有效长度函数 strlenstrlenstrlenstrlen( ( ( (字符数组名或字符串常量字符数组名或字符串常量字符数组名或字符串常量字符数组名或字符串常量) ) ) ) char a10=char a10=abcdeabcde; ; printf(printf(%d%dn,n,strlen(astrlen(a) ););5举例举例举例举例下面程序段的输出结果是下面程序段的输出结果是 char c =“tv0willn”; printf(“

48、%d”,strlen(c); A. 14 B. 3 C. A. 14 B. 3 C. 输出不确定输出不确定输出不确定输出不确定 D. 9 D. 9B例:不使用例:不使用strlenstrlen函数求字符串有效长度函数求字符串有效长度#include #include “ “ ” ”main()main() char s80; char s80; int i=0; int i=0; gets(s); gets(s); while( while(si!=0si!=0) ) i+; i+; printf( printf(“ “ %d%d”, ”,i i); ); g good0s igood45.3

49、 字符数组字符数组l字符串连接函数字符串连接函数字符串连接函数字符串连接函数 strcatstrcatstrcatstrcat( ( ( (字符数组名字符数组名字符数组名字符数组名, , , ,字符数组名或字符串常量字符数组名或字符串常量字符数组名或字符串常量字符数组名或字符串常量) ) ) ) char a10=abcde,b10=char a10=abcde,b10=xyxy; ; strcat(a,bstrcat(a,b);); puts(aputs(a);); puts(bputs(b););abcdexyxy例例5-20:5-20:不使用不使用strcatstrcat函数,将两个字符

50、串连函数,将两个字符串连接起来。接起来。 g good0boy 0数组数组s1数组数组s2goodboy0数组数组s1 i j#include #include main( )main( ) char s80,t80; char s80,t80; int i, j; int i, j; gets(s); gets(t); gets(s); gets(t); for(i=0; for(i=0;si!=0si!=0;i+) ;i+) ; ; for(j=0; for(j=0;tj!=0tj!=0;j+);j+) si+j=tj;si+j=tj; si+j=0;si+j=0; puts(s); pu

51、ts(s); goodboygoodboy例例5-20:5-20:不使用不使用strcatstrcat函数,将两个字符串连函数,将两个字符串连接起来。接起来。 5.3 字符数组字符数组l字符串复制函数字符串复制函数字符串复制函数字符串复制函数 strcpystrcpystrcpystrcpy( ( ( (字符数组名字符数组名字符数组名字符数组名, , , ,字符数组名或字符串常量字符数组名或字符串常量字符数组名或字符串常量字符数组名或字符串常量) ) ) ) char a10=abcde,b10=char a10=abcde,b10=xyxy; ; strcpy(a,bstrcpy(a,b);

52、 ); puts(aputs(a); ); puts(bputs(b); );xyxy例例5-195-19:不使用:不使用strcpystrcpy函数完成字符串复制函数完成字符串复制#include #include main()main() char s80,t80; char s80,t80; int i; int i; gets(s); gets(s); for(i=0; si!=0; i+)for(i=0; si!=0; i+) ti=si; ti=si; ti=0;ti=0; puts(t); puts(t); 输入:china输出:china5.3 字符数组字符数组l l字符串比较

53、函数字符串比较函数字符串比较函数字符串比较函数 strcmpstrcmpstrcmpstrcmp( ( ( (字符数组名或字符串字符数组名或字符串字符数组名或字符串字符数组名或字符串1,1,1,1,字符数组名或字符串字符数组名或字符串字符数组名或字符串字符数组名或字符串2)2)2)2)函数值函数值= =the thatthe thesePLANE boat如:例例: : 编写程序,比较两个字符串的大小。不编写程序,比较两个字符串的大小。不用用strcmpstrcmp函数实现其功能。函数实现其功能。 比较规则:比较规则:逐个字符进行比较,直到有两个字符不等逐个字符进行比较,直到有两个字符不等逐个

54、字符进行比较,直到有两个字符不等逐个字符进行比较,直到有两个字符不等或有一个字符串结束为止。或有一个字符串结束为止。或有一个字符串结束为止。或有一个字符串结束为止。#include #include main( )main( ) char s80,t80; char s80,t80; int i; int i; gets(s); gets(s); gets(t); gets(t); for(i=0; for(i=0;si=ti&si!=0si=ti&si!=0;i+) ;i+) ; ; printf( printf(%d%dn,n,si-tisi-ti); ); thethat4#includ

55、e #include main( )main( )char s80, t80;char s80, t80; int i, k; int i, k; gets(s); gets(t); gets(s); gets(t); for(i=0; si!=0; i+)for(i=0; si!=0; i+) if(si!=ti) break;if(si!=ti) break; k=si-ti;k=si-ti; if(k0) printf(stn); if(k0) printf(stn); else if(k0) printf(stn); else if(k0) printf(s9|si0)sk=si; k

56、+; sk=0; puts(s);7bc8bc9bc bcbcbc例例: : 有三个字符串有三个字符串( (长度不超过长度不超过20)20),要求找,要求找出其中最大者。出其中最大者。str0str1str2 string大大大大 例例: : 有三个字符串有三个字符串( (长度不超过长度不超过20)20),要求找,要求找出其中最大者。出其中最大者。#include #include #include main( ) char str20, s320; int i; for(i=0;i0) strcpy(str,s0); else strcpy(str,s1); if (strcmp(s2,st

57、r)0) strcpy(str,s2);printf(nthe largest string is:n%sn,str); CHINAHOLLANDAMERICAthe largest string is:HOLLAND例例5-21: 将将5个姓名按由小到大排序。个姓名按由小到大排序。#include #include main( )char a520, b20; int i, j; for (i=0;i5;i+) gets(ai); for (i=0;i4;i+) for (j=i+1;j0) strcpy(b,ai); strcpy(ai,aj); strcpy(aj,b); for (i=

58、0;i0) d=m%16; if(d10) sn=d+0; else sn=d+55; n+; m=m/16; sn=0; for(i=0;in/2;i+) t=si; si=sn-1-i; sn-1-i=t; puts(s); 例例: 将一个十进制正整数转换为十六进制数。将一个十进制正整数转换为十六进制数。28.以下程序的功能是打印以下图形。以下程序的功能是打印以下图形。main ( )char a59= ; int i,j; for (i=0;i5;i+) for(j=i; 【?】;j+) aij=*; for(【?】;i5;i+) for(j=0;j9;j+) printf(%c, 【?】 ); 【?】 ; * * * * *ji+5 i=0 aijprintf(“n”)4.从键盘上输入从键盘上输入20个元素的值存入一维数组个元素的值存入一维数组m中,然后将中,然后将下标为(下标为(1. 3. 5. 7. 919)的元素值赋值给数组)的元素值赋值给数组n,最,最后输出数组后输出数组n的内容。的内容。 main() int m20,n10,a,b=0; for(a=0;a20;a+) scanf(%d,&ma); if(a%2=1) nb=ma; b+; for(a=0;a10;a+) printf(%d,na);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号