1、CONTENTS 目 录提出问题 引入新课自主学习 明确考点案例分析 交流提升仿真演练 体验探索提出问题 引入新课PART 011、存储字符串常量时,是根据其中 字符的多少 分配存储单元,一个字符分配一个 字节 ,用于存放字符对应的 ASCII值 ,其若干个字符的存储单元是连续分配并存放。同时,为了识别字符串的结束,常在其后增加 字符串结束标识符 。2、C语言中,字符串常量与字符数组相对应,字符常量的格式控制符是%c,字符串的格式控制符是%s。3、使用scanf函数进行输入数据时,遇到 空格、回车符、制表符,指定的宽度,不同类型字符时 ,该数据被认为输入结束。提出问题 引入新课自主学习 明确考
2、点PART 02字符数组就是元素类型为字符型char的数组,定义格式是:char ;说明:(1)数组中一个元素存放一个字符。(2)同数值型数组一样,系统在内存为字符数组分配若干(和数组元素个数相同)连续的存储单元,每个存储单元为一个字节。例如:char a5;假设a0=A;a1=;a2=B;a3=o;a4=y;则数组a在内存存储示意图如下图 考点一:字符数组的定义a0a1a2a3a4ABo(1)在初始化表中用若干字符常量赋初值,字符常量以单引号作为定界符,相互之间用逗号隔开。例如:char s15=a,p,p,l,e;char s210=a,p,p,l,e,0;考点二:字符数组的初始化字符数组
3、s1含5个字符,分别用5个字符常量初始化赋值,对应元素s10-s14;字符数组s2含10个字符,分别用6个字符常量初始化赋值,对应元素s20s25,后面4个元素被初始化为空格,0是字符串结束标志。说明:如果初值个数大于数组长度,则作语法错误处理;如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定为空字符(即0);如果初值个数等于数组长度,则在定义时可省略数组长度。(2)在初始化表中用字符串常量赋初值,甚至大括号也可以省去。字符串常量用双引号括起,系统会自动在字符串常量的最后一个字符后加一个0作为字符串结束标志。并不是字符串的组成,也不算进字符串的长度中。考点二:字符
4、数组的初始化(1)、使用字符数组中的单个元素,用格式符“%c”逐个字符输入输出:scanf(%c,&a0);printf(%c,a0);/*每次输入、输出一个字符*【例1】输出一个字符串#includevoid main()char ch9=c,p,r,o,g,r,a,m;int i;for(i=0;i9;i+)printf(%c,chi);运行结果:c program字符数组的引用的元素是字符,所以我们在输出字符数组元素时要注意它的格式是%c还是%s!考点三:字符数组的使用案例三:数组的排序(2)对存储在字符数组中的整个字符串进行操作,字符数组的输入输出将变得简单方便。除了上述用字符串赋初值
5、的办法外,还可用printf函数和scanf函数一次性输出输入一个字符数组中的字符串,而不必使用循环语句逐个地输入输出每个字符。但要用格式符“%s”。char ch10=apple;printf(%s,ch);puts(ch);与scanf函数结合,对整个数组进行字符串的输入,格式为:scanf(%s,ch);或puts(ch);说明:char c10;scanf(%s,c);/*注意此处用数组名c*/printf(%s,c);/*注意此处用数组名c*/案例三:数组的排序【例2】改错题:如以下程序功能是输出字符串#includevoid main()char c=how are you?nfi
6、ne,thank you!;printf(%sn,c);【例3】输出以下字符串,写出输出结果。void main()char str15;printf(input string:n);scanf(%s,str);printf(%sn,str);说明:对一个字符数组,如果不作初始化赋值,则必须说明数组长度。运行结果:input string:输入字符为:we are Chinese 则输出为:思考:如果要求输出为:we are Chinese整体字符串,你对上述程序作何修改?案例分析 交流提升PART 03【例1】、分析以下程序main()char c=BASICnDBASE;printf(%s
7、n,c);运行结果:。【例2】、以下程序运行后的输出结果是()#include main()char c1,c2;for(c1=0,c2=9;c1c2;c1+,c2-)printf(%c%c,c1,c2);printf(n);【例3】、以下程序运行后的输出结果是()#include main()int s8=1,3,5,2,4,6,i,d=0;for(i=0;si%2;i+)d+=si;printf(%dn,d);【例4】、以下程序运行后的输出结果是()#include main()int p8=11,12,13,14,15,16,17,18,i=0,j=0;while(i+7)if(pi%2
8、)j+=pi;printf(%dn,j);【例5】、以下程序运行后的输出结果是()#include main()int y=18,i=0,j,a8;do ai=y%2;i+;y=y/2;while(y=1);for(j=i-1;j=0;j-)printf(%d,aj);printf(n);仿真演练,体验探索PART 041、以下程序运行后,输出结果是()。#includemain()int i,j,t;int a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i9;i+=2)for(j=i+2;j10;j+=2)if(aiaj)t=ai;ai=aj;aj=t;for(i=0;i
9、10;i+)printf(%d,ai);printf(n);2、以下程序运行后,输出结果是()。#includemain()int a10,b10,i;for(i=0;i10;i+)scanf(%d,&ai);/*假如输入1,2,3,4,5,6,7,8,9,10*/for(i=1;i10;i+)bi=ai-ai-1;for(i=1;i10;i+)printf(%3d,bi);if(i%3=0)printf(n);3、以下程序运行后,输出结果是()。main()int x=1,3,5,7,2,4,6,0,i,j,k;for(i=0;i=i;j-)if(xj+1xj)k=xj;xj=xj+1;xj
10、+1=k;for(i=0;i3;i+)for(j=4;jxj+1)k=xj;xj=xj+1;xj+1=k;for(i=0;i=2;i-)ai+1=ai;for(i=0;i5;i+)printf(%d,ai);5、填空题以下程序的功能是输出如下形式的方阵:13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 main()int i,j,x;for(j=4;j ;j-)for(i=1;i=4;i+)x=(j-1)*4+;printf(%4d,x);printf(n);6、以下程序运行后,输出结果是()#includemain()char s=12134211;int v4=0,0,0,0,k,i;for(k=0;sk;k+)switch(sk)case 1:i=0;case 2:i=1;case 3:i=2;case 4:i=3;vi+;for(k=0;k4;k+)printf(%d,vk);