您好,欢迎访问三七文档
第6章数组1第12讲字符数组教学目的与要求:掌握字符数组元素的定义和初始化掌握字符数组的输入输出及字符串处理函数掌握数组应用程序设计教学内容提要:1.字符数组的定义和初始化2.字符数组和字符串的输入输出3.字符串处理函数4.数组应用举例教学重点:字符数组元素定义和初始化,字符数组的输入输出教学难点:数组应用程序设计教学进度:P151~P166教学过程:第6章数组2一、字符数组的初始化字符数组的赋值要符合数组的要求,除了在定义时初始化可以用字符串赋初值,其余只能一个元素一个元素地赋值。(1).逐个元素初始化,如:例chars1[7]={‘s’,’t’,’r’,’i’,’n’,’g’,’!’};chars2[]={‘s’,’t’,’r’,’i’,’n’,’g’,’!’};!gnirts存储形式为:1)一维字符数组初始化第6章数组3(2).用字符串来直接初始化字符数组可直接把字符串写在花括号中来初始化字符数组.如:charch[9]={“student”};几点说明:(1)字符串结束标志'\0'仅用于判断字符串是否结束,输出字符串时不会输出。(2)在对有确定大小的字符数组用字符串初始化时,数组长度应大于字符串长度。如:chars[7]={student};是错误的.(3)在初始化一个一维字符数组时,可以省略花括号。如:chars[8]=student;(4)不能直接将字符串赋值给字符数组。下面的操作是错误的。s=”student”;系统将双撇号括起来的字符依次赋给字符数组的各个元素,并自动在末尾补上字符串结束标志字符'\0'。student\0第6章数组42)二维字符数组初始化二维字符串数组的初始化,可以采用二维字符数组初始化形式或者字符串初始化形式例:charname[2][10]={{’J’,’o’,’h’,’n’,’\0’},{’M’,’a’,’r’,’r’,’y’,’\0’}};charname[2][10]={{”John”},{”Marry”}};charname[2][10]={”John”,”Marry”};这三种方法效果一样。第6章数组5二、字符数组的输入与输出1)利用格式符%c逐个输入、输出字符:例:charstr[10];inti;for(i=0;i9;i++)scanf(%c,&str[i]);for(i=0;i9;i++)printf(%c,str[i]);2)利用格式符%s,可以一次输入、输出字符串。%s:遇第一个空白符(空格、Tab、回车)结束输入,遇第一个‘\0’结束输出。第6章数组6注意:用“%s”格式输出字符数组时,遇'\0'结束输出,且输出字符中不包含'\0'。若数组中包含一个以上'\0',则遇第一个'\0'时即结束输出。用“%s”格式输入或输出字符数组时,函数scanf的地址项、函数printf的输出项都是字符数组名。这时数组名前不能再加“&”符号,因为数组名就是数组的起始地址。charc[10];scanf(%s,c);/*注意此处用数组名c*/printf(%s,c);/*注意此处用数组名c*/第6章数组7用语句“scanf(%s,s);”为字符数组s输入数据时,遇空格键或回车键时结束输入。但所读入的字符串中不包含空格键或回车键,而是在字符串末尾添加'\0'。用一个scanf函数输入多个字符串,输入时应以空格键或回车键作为字符串间的分隔。例如:chars1[5],s2[5];scanf(%s%s,s1,s2);若输入数据:CProg↙C\0Prog\0则字符数组s1和s2的存储情况如下图所示第6章数组8main(){inti,m,n,x,y;chars[80];printf(inputastring:\n);scanf(%s,s);m=n=x=y=0;i=0;while(s[i]!='\0'){if(s[i]='a'&&s[i]='z')m++;elseif(s[i]='A'&&s[i]='Z')n++;elseif(s[i]='0'&&s[i]='9')x++;elsey++;i++;}printf(a~z:%d\nA~Z:%d\n0~9:%d\nothers:%d\n,m,n,x,y);}例1:用户从键盘输入一个字符串(字符中不包含空格),当输入回车时认为输入结束,统计输入字符串中小写英文字母、大写英文字母、数字字符、其他字符的个数。第6章数组93)利用字符串输入输出函数C语言要求在使用字符串函数时,要包含头文件stdio.ha)字符串输入函数gets();作用:是将一个字符串输入到字符数组中,当遇到第一个回车时结束输入格式:gets(字符数组名);例:chara[10];gets(a);printf(%s,a);第6章数组10b)字符串输出函数puts()作用:将一个字符串(以’\0’结束的字符序列)输出。格式:puts(字符数组名);或puts(字符串);注意:函数puts()一次只能输出一个字符串。函数puts()可以输出转义字符。函数puts()输出字符串后自动换行。第6章数组11例2:将字符串s1从第m个字符开始剩余的所有字符,送入字符数组s2中。#includestdio.hvoidmain(){inti,j,m;chars1[80],s2[80];printf(inputastring:\n);gets(s1);printf(inputstartpoint:\n);scanf(%d,&m);i=m-1;j=0;while(s1[i]!='\0'){s2[j]=s1[i];i++;j++;}s2[j]='\0';puts(s2);}第八章8.3字符数组与字符串第6章数组12三、字符串函数C语言提供了很多字符串操作函数,其对应的头文件为string.h1、测字符串长度函数strlen引用形式:strlen(字符数组)作用:strlen()是测试字符串实际长度的函数,它的返回值是字符串中字符的个数(不包含’\0’的个数)。第6章数组13例3:写出程序的运行结果。#includestdio.h#includestring.hvoidmain(){staticcharst[20]={hello\0abce\0abc\0};printf(%d\n,strlen(st));}程序运行结果:5第6章数组142、字符串拷贝函数strcpy引用形式:strcpy(字符数组1,字符串2)作用:将字符串2复制到字符数组1中。注意:(1)字符数组1必须足够大,以便容纳字符串2的内容。(2)字符串2可以是字符数组名或者字符串常量。当字符串2为字符数组名时,只复制第一个’\0’前面的内容(含’\0’),其后内容不复制。第6章数组15例如:staticchara[10]=abcdefghi,b[]=happy;strcpy(a,b);应用举例:a数组内存原始情况:abcdefghi\0函数调用后a、b数组内存情况:happy\0happy\0ghi\0第6章数组16例4:分析下面程序的运行结果。#includeconio.h#includestring.h#includestdio.hvoidmain(){staticcharc1[10]=abcdefghi,c2[]=china;strcpy(c1,c2);clrscr();puts(c1);printf(%c,c1[7]);}第八章8.3字符数组与字符串第6章数组173、字符串连接函数strcat引用形式:strcat(字符数组1,字符串2)作用:将字符串2的内容复制连接在字符数组1的后面,其返回值为字符数组1的地址。注意:(1)字符数组1不能是字符串常量,并且必须足够大,以便可以继续容纳字符串2的内容。(2)连接前字符数组1的’\0’将被字符串2覆盖,连接后生成的新的字符串的最后保留一个’\0’。第6章数组18应用举例staticchara[20]=Mynameis,b[10]=Liming;strcat(a,b);执行strcat(a,b);后a:MynameisLiming\0第6章数组19例5:字符串的连接。#includestring.hvoidmain(){chars1[20]=”123”,s2[]=”abcedf”;chars3[20];s3=strcat(s1,s2);puts(s1);puts(s2);puts(s3);}程序运行结果:s1=123abcdefs2=abcdefs3=123abcdef第6章数组204.字符串比较函数引用形式:strcmp(字符串1,字符串2)作用:从左到右逐个比较两个字符串s1、s2中各个字符(用字符的ASCII码比较),直到出现不同字符或遇到结束标记为止。第6章数组21例如:strcmp(d,abc)结果为正整数。strcmp(dog,door)结果为负整数。函数返回值:函数值=0当串1=串2负整数当串1串2正整数当串1串2函数应用举例第6章数组22例5:输入三个字符串,按英文字母序排列后输出。includestring.hvoidmain(){chars1[10]=China,s2[10]=America,s3[10]=Japan,t[10];if(strcmp(s1,s2)0){strcpy(t,s1);strcpy(s1,s2);strcpy(s2,t);}if(strcmp(s2,s3)0){strcpy(t,s2);strcpy(s2,s3);strcpy(s3,t);}puts(s1);puts(s2);puts(s3);}程序输出结果:AmericaChinaJapan第6章数组23例6:比较用户输入的字符串是否为表示同意的yes(用户可以用大写或小写)。#includestring.h#includestdio.hvoidmain(){intk;chars1[5],s2[]=yes;printf(inputastring:\n);gets(s1);k=0;while(s1[k]!=’\0’){if(s1[k]=’A’&&s1[k]=’Z’)s1[k]=s1[k]+32;k++;}if(strcmp(s1,s2)!=0)printf(st1!=st2\n);elseprintf(st1=st2\n);}程序运行情况:inputastring:Yes↙st1=st2第6章数组24四、数组程序设计举例例1、判断一个字符串是否是回文(回文串指正度反读都一样的字符串,如:字符串“abc121cba”)#includestring.h“#include“stdio.h”main(){chara[10];inti,j,n,f=1;gets(a);n=strlen(a);for(i=0,j=n-1;ij;i++,j--)if(a[i]!=a[j]){f=0;break;}if(f==1)printf(yes);}25图6.1例2、用起泡法对5个数排序(由小到大)。起泡法的思路是:将相邻两个数比较,将小的调到前头。26main(){inta[5];inti,j,t;printf(input5numbers:\n);for(i=0;i5;i++)scanf(%d,&a[i]);printf(\n);for(j=1;j=4;j++)for(i=0;i5-j;i++)if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf(thesortednumbers:\n);for(i=0;i5;i++)printf(“%d\t,a[i]);}27运行情况如下:input5numbers:65-76100-45123thesortednumbers:-76-4565100123第6章数组28例3:把一个整数x按大小顺序插入已排好序(从大到小)的数组a中。假设数组a中有10个数。(1)把欲插入的数x与数组a中各数逐个比较,当找到第一个比插入数x小的元素a[i]时,该元素之前即为插入位置
本文标题:c语言教案第12讲
链接地址:https://www.777doc.com/doc-3377424 .html