上海理工大学C语言实验7答案.doc
实验7 字符数组和字符串参考答案DIY1、调试下列程序(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)1.1 以下程序统计字符串str中字符与数字字符的个数。代码 includestdio.h main charstr81;intn1,n2;getsstr;for i 0; stri 0; i if str i n1 ;if stri0 stri 9 n2 ; printf “d, digitdn”, n1, n2 ; 参考答案includestdio.h main charstr81;inti,n10,n20;getsstr;fori0; stri0n1;if stri0 stri9n2; printf d, digitdn, n1, n2 ; 1.2 有n个国家参加运动会,开幕式上,各国的出场顺序以国名在英文字典中的位置先后为序,输出一份各国出场顺序表。代码includestdio.hincludemath.hdefine N 10main char nameN30, str30; int i, j; printfEnter the namen ; fori0; iN; i scanfs, namei ; struprnamei; /*输入国名,转换为大写*/ for i 0; iN; i /*排序*/ forj i; jN; j ifnamei namej strcpynamei,str ; strcpynamei, namej; strcpynamej, str; for i0; iN; i printfsn, namei;参考答案includestdio.hincludestring.hdefine N 10main char nameN30, str30; int i, j; printfEnter the namen ; fori0; iN; i scanfs, namei ; struprnamei; /*输入国名,转换为大写*/ for i0; iN; i /*排序*/ forj0; jN-i-1; j ifstrcmpnamej,namej10 strcpystr,namej ; strcpynamej, namej1; strcpynamej1, str; for i0; iN; i printfsn, namei;2程序填空(请填写适当的符号,使程序实现其功能)2.1 程序的功能是删除字符串s中与变量c相同的字符。main char s80, c; int i, j; scanfs, s; getchar; cgetchar; for ij0; 1 ; i if sic 2 ; sj0 参考答案si0 2.2以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串abc123edf456gh,执行程序后输出123456。请填空。 include stdio.h include string.h main char s80, d80; int i,j; getss; forij0;si0 j; dj0 参考答案 ifsi0si9 3编程3.1 最多从键盘输入80个字符,遇到回车键就结束,将输入的字符串按奇偶位置拆分,奇数位字符在前偶数位字符在后重新组成新的字符串输出,例如输入 ab12cd3456fg,则经过程序处理后输出 a1c35fb2d46g 。include stdio.hinclude string.hmainchar s100,d100,c100;int i,j,k;ijk0;whilesigetcharnifi12 djsi; else cksi; djck0 strcpys,d;putss;3.2 编程序把从键盘输入的英文短文作为一个字符串(长度不超过80),把短文中每个单词的首字母改成大写(原输入可以是大写),若还发现有两个或两个以上连续的空格,把它们删成只有一个空格,输出修改后的字符串。includestdio.hincludestring.hchar chachar achar c;ifaaazca-32;else ca;return c;main char str81,s81,s181,c; int i,j,k,word0; printfEnter the stringn; getsstr; kstrlenstr;j0; fori0;ik;i,j ifstri sjstri; else ifstri stri1 sjstri; else ifstri stri1 sjstri; sj0fori0,j0;ik;i,j ifsi s1jsi;s1jchasi; else s1jsi; s1j0 本章测试 一、 单选题(10分) 1、以下不合法的数组定义是_ B 。A char a”string”; B char a6”string”;C int a50,1,2,3,4,5; D int a0,1,2,3,4,5; 2、若有以下语句, 则下面正确的描述是_ B _。char x123451,2,3,4,5 则s 所占的内存空间为_ C _。A)1个字节 B)12个字节C)11个字节 D)10个字节 4、下列关于字符串的说法中错误的是 B A)在C语言中,字符串是借助于字符型一维数组来存放的,并规定以字符0作为字符串结束标志 B)0作为标志占用存储空间,计入串的实际长度 C)在表示字符串常量的时候不需要人为在其末尾加入0 D)在C语言中,字符串常量隐含处理成以0结尾 5、以下程序的输出结果是_ C 。 include “stdio.h” main char sabcdef0sn,s; A abcdef B abcde C abcd D abc 6、有以下程序 include stdio.hinclude string.h main char aa,b,c,d, e, f, g,h,0d,dn,strlena,sizeofa; 程序运行后的输出结果是D A 9,9 B 8,9 C 1,8 D 9,8 7、以下程序的输出结果是B include stdio.h main char ch35AAAA,BBB,CCsn,ch1; A AAAA B BBB C BBBCC D CC 8、当执行下面的程序时,如果输入ABC,则输出结果是_ A _。 include “stdio.h” include “string.h” main char ss10“1,2,3,4,5”; getsss; strcatss, “6789”; printf“sn”,ss; A ABC6789 B ABC67 C 12345ABC6 D ABC456789 9、有下面程序段 include stdio.h include string.h main char a320china,isa,bigcountry int i; fori0;i3;i pstrcatp,ai; istrlenp; printfdn,i; 则程序段的输出结果是B A)18 B)19 C)20 D)2110、有以下程序 include string.h include stdio.h main char p10 abc,aabdfg,abbd,dcdbe,cd,t10; int i,j; fori0;i5;i forji1;j5;j ifstrcmppi,pj0 strcpyt,pi; strcpypi,pj; strcpypj,t; printfdn,strlenp0; 程序运行后的输出结果是 C 。 A 6 B 4 C 5 D 3二、填空题(7分)1、已知字符数组str的定义char str “ABCDEFGHIJ”;执行函数调用printf“.2s n”,str5 后的输出结果是FG 。2、若有定义语句 char s1 00,d100; int j0, i0;,且s中已赋字符串,请填空以实现字符串拷贝。(注不得使用逗号表达式)whilesi dj si; j; dj0 使用printf写出语句输出words中第一维下标i对应的字符串。 printf“s n”,wordsi 。4、设有如下程序段,程序运行结果是_ P4CPU17CRT _。char s120P4CPUDVD17CRT56KMODEM0putss1;5、下面的程序输出结果是 -1。 include string.h main char language10FORTRAN,BASIC,PASCAL,JAVA,C cstrcmplanguage1,language3; printfdn,c; 6、下面程序的功能是将输入字符串的内容颠倒过来。请在空白处填空。includestring.hvoid main int i, j;char str80, k ; getsstr; for i0, jstrlenstr -1 ;ij ;i,j kstri; stristrj; strjk; putsstr; 三、程序调试题(10分) 1、下面程序功能是输入一个字符串,并将其中的字符a用字符串”shu”替代后输出。如输入为”123abcaHello”,则输出为”123shubcshuHello”。程序3-1 include stdio.h void main int i; char line81; scanf“s”,line; for i0; linein; i if lineia printf“shu”; else printf“s”,linei; 参考答案include stdio.h void main int i; char line81; scanfs,line; for i0; linei0a printfshu; else printfc,linei; 2、下列程序的功能是将字符串b连接到字符串a。程序3-2includestdio.hvoid main char awel,bcome whilean n; fori0;bi0 printfsn,a;参考答案includestdio.hvoid main char a20wel,bcome whilean n; fori0;bi0 printfsn,a;四、程序填空题(30分)1、下面的程序功能是根据输入的学生姓名,查看该生是否是某个班的学生。(假设某个班有30人,姓名已根据字母顺序排列,即输入的班级学生姓名是有序的)程序4-1includestdio.hincludestring.hdefine N 10main char nameN30, str30; int i,low0,highN-1,m,find0,lc; printfEnter the namen ; fori0; iN; i getsnamei; struprnamei; /*输入姓名,转换为大写*/ printfEnter the searched namen ; getsstr; struprstr; /*输入要查找的姓名,转换为大写*/ mlowhigh/2; while_lowhigh ifstrcmpnamem,str0 highm-1; else ifstrcmpnamem,str0 lowm1; else find1;lcm; m_; if_ printfFound,d,lc1; else printfno found; 参考答案 whilefindlowhighmlowhigh/2; iffind2、输入一行字符,从中读出所有单词,并将所有单词的首字符组成字符串后输出。设单词以空格分隔)程序4-2includestdio.hincludestring.hmain char str81,s20,c; int i,j,word0; printfEnter the stringn; getsstr; i0;j0; whilecstri0 ifc /*空格表示单词结束*/ _; else ifc word0 word1; _c; i; _; printfThe new string issn,s; 参考答案 sjstri1; s0c; sj0stdio.hinclude string.hvoid mainchar c,s100,s1100;int i0,j0,k; getss;kstrlens;whilesi0ifsiji1;break;i; whilesj0 ifsjasjz sjsj-32;j; putss; 2、不用C字符串函数,编写一个实现两个字符串连接的函数。include stdio.hvoid mainchar s1100,s2100,s3200;int i0,j0,k0;getss1;getss2;whiles1i0s3js1i;i; whiles2k0s3js2k;k; s3j0