第6章 第3节:字符数组(练习)-《C语言程序设计》(电子工业出版社)上好课

2026-04-29
| 2份
| 27页
| 58人阅读
| 0人下载

内容正文:

6.3节:字符数组 一、单项选择题 1.以下代码的输出结果是( ) char str[] = "China"; printf("%d", strlen(str)); A. 4 B. 5 C. 6 D. 不确定 【答案】B 【解析】strlen函数计算字符串长度,不包含结束符\0,"China"有5个字符,故长度为5。 2.执行以下代码后,str的内容是( ) char str[10] = "abc"; strcat(str, "def"); A. "abcdef" B. "abc def" C. "defabc" D. "abc" 【答案】A 【解析】strcat函数将第二个字符串连接到第一个字符串的末尾,"abc"后连接"def",结果为"abcdef"。 3.以下能正确比较两个字符串s1和s2是否相等的语句是( ) A. if(s1 == s2) B. if(strcmp(s1, s2) == 0) C. if(strcpy(s1, s2)) D. if(strlen(s1) == strlen(s2)) 【答案】B 【解析】字符串比较需用strcmp函数,返回值为0表示相等;A选项比较的是数组首地址,不是内容;C选项是复制字符串;D选项比较长度,长度相等内容不一定相等。 4.定义字符数组char str[5];,以下输入语句正确的是( ) A. scanf("%s", &str); B. scanf("%s", str); C. gets(&str); D. getchar(str); 【答案】B 【解析】字符数组名str表示数组首地址,scanf("%s", str)正确;A选项&str是数组的地址,类型不符;gets的参数是数组首地址,无需&;getchar无参数。 5.以下代码的输出结果是( ) char str[] = "Hello"; puts(str); A. Hello(无换行) B. Hello(有换行) C. Hello\0 D. 编译错误 【答案】B 【解析】puts函数输出字符串后会自动换行,故输出"Hello"并换行。 6.以下代码的输出结果是( ) char s1[10] = "abc", s2[10] = "abd"; printf("%d", strcmp(s1, s2)); A. 正数 B. 负数 C. 0 D. 1 【答案】B 【解析】strcmp比较字符串,s1的第三个字符'c'(ASCII码99)小于s2的第三个字符'd'(ASCII码100),返回负数。 7.以下代码的输出结果是( ) char str[20] = "I love"; strcat(str, " C"); printf("%s", str); A. I love C B. I loveC C. C I love D. I love 【答案】A 【解析】strcat将" C"连接到"I love"后,结果为"I love C"。 8.以下代码的输出结果是( ) char str[] = "12345"; printf("%d", sizeof(str)); A. 5 B. 6 C. 4 D. 不确定 【答案】B 【解析】sizeof计算数组总字节数,"12345"有5个字符加1个\0,共6字节。 9.字符数组str初始化为char str[5] = "abc";,则str[3]的值是( ) A. 'a' B. 'b' C. '\0' D. 'c' 【答案】C 【解析】"abc"存储在数组中为{'a','b','c','\0'},str[3]是第四个元素,即\0。 10.若有定义char str[20];,要输入字符串"I love C",以下输入方式正确的是( ) A. scanf("%s", str); B. gets(str); C. scanf("%c", str); D. getchar(str); 【答案】B 【解析】字符串包含空格时,scanf("%s")会在空格处停止读取,因此 A 选项无法读取完整字符串;gets()函数可读取包含空格的字符串,B 选项正确;C、D 选项用于读取单个字符,无法读取字符串。 二、填空题。 1.字符数组str定义为char str[10];,若输入字符串"test",则str[4]的值是___________。 【答案】\0 【解析】"test"有4个字符,存储为{'t','e','s','t','\0'},str[4]是第五个元素,即字符串结束符。 2.函数______用于将字符串s2连接到s1的末尾。 【答案】strcat 【解析】strcat函数的功能是字符串连接。 3.若要通过键盘输入一个含空格的字符串到字符数组str,应使用函数___________。 【答案】gets 【解析】gets可输入含空格的字符串,scanf("%s")遇空格停止。 4.函数______用于比较两个字符串s1和s2,若s1小于s2,返回值为___________。 【答案】strcmp;负数 【解析】strcmp比较字符串,s1<s2时返回负数。 5.若有定义char str1[20] = "hello", str2[] = " world";,执行strcat(str1, str2);后,strlen(str1)的值是___________。 【答案】11 【解析】拼接后的字符串为"hello world",有效字符数为 11(h~d共 11 个字符,不含\0),因此strlen(str1)的值为 11。 6.以下程序段中,puts()函数的输出结果是___________。 char str[] = {'h', 'e', 'l', 'l', 'o', '\0', 'w', 'o', 'r', 'l', 'd'}; puts(str); 【答案】hello 【解析】puts()输出字符串时遇到第一个\0就停止,因此只会输出\0之前的"hello"。 7.若有定义char str1[] = "test", str2[10];,以下能正确将str1的字符串复制到str2中的语句是___________。 【答案】strcpy(str2, str1); 【解析】strcpy()可正确复制字符串。 8.字符串常量"programming"在内存中存储时,末尾会自动添加字符______作为结束标志。 【答案】\0 【解析】C 语言中所有字符串都以\0(ASCII 码为 0 的空字符)作为结束标志,用于标识字符串的终止位置。 9.strcpy(str1, str2)函数的作用是将字符串______复制到字符数组______中(填写 str1 或 str2)。 【答案】str2;str1 【解析】strcpy()函数的参数顺序为目标数组在前、源字符串在后,因此将str2复制到str1中。 10.若要将单个字符'A'输入到字符数组str[0]中,可使用语句scanf("%c", ______);。 【答案】&str[0] 【解析】scanf()读取单个字符时,需传入字符变量的地址,因此取str[0]的地址&str[0]。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> #include <string.h> main() { char str[] = "hello"; printf("%d", strlen(str)); } 【答案】5 2.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char str[10]; int i; for(i=0; i<5; i++) { str[i] = 'a' + i; } str[5] = '\0'; printf("%s", str); } 【答案】abcde 3.写出下列程序段的输出结果:________________。 #include <stdio.h> #include <string.h> main() { char s1[] = "longstring", s2[] = "short"; if(strcmp(s1, s2) > 0) printf("s1 is longer"); else printf("s2 is shorter or equal"); } 【答案】s2 is shorter or equal 4.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char str[] = "ABCD"; int i; for(i = 0; str[i] != '\0'; i++) { printf("%d", str[i] - 'A'); } } 【答案】0123 5.写出下列程序段的输出结果:________________。 #include <stdio.h> #include <string.h> main() { char s[] = "C Language"; int i, len = strlen(s); for(i = len - 1; i >= 0; i--) { if(s[i] == ' ') continue; printf("%c", s[i]); } } 【答案】egaugnaLC 6.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[] = "a1B2c3"; int i, c = 0; for(i = 0; s[i] != '\0'; i++) { if(s[i] >= 'a' && s[i] <= 'z') c++; } printf("%d", c); } 【答案】2 7.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[] = "XYZ"; int i; for(i = 0; s[i] != '\0'; i++) { s[i] = s[i] - 1; } printf("%s", s); } 【答案】WXY 8.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[] = "12345"; int i, sum = 0; for(i = 0; s[i] != '\0'; i++) { sum = sum * 10 + (s[i] - '0'); } printf("%d", sum + 1); } 【答案】12346 9.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[] = "0000"; int i; for(i = 0; i < 3; i++) { s[i] = s[i+1] + 1; } printf("%s", s); } 【答案】1110 10.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[] = "dbca"; char max = s[0]; int i; for(i = 1; s[i] != '\0'; i++) { if(s[i] > max) max = s[i]; } printf("%c", max); } 【答案】d 四、程序填空题(根据题意,将空缺的语句补上) 1.下列程序的功能是:计算字符串长度(不使用strlen)。 #include <stdio.h> main() { char str[80]; int len = 0; scanf("%s", str); while (__________) { len++; } printf("%d", len); } 【答案】str[len] != '\0' 或 str[len] 2.下列程序的功能是:统计数字字符个数。 #include <stdio.h> main() { char s[] = "a1b2c3"; int i, count = 0; for(i = 0; s[i] != '\0'; i++) { if (__________) { count++; } } printf("%d", count); } 【答案】s[i] >= '0' && s[i] <= '9' 3.下列程序的功能是:将小写字母转换为大写。 #include <stdio.h> main() { char s[] = "hello"; int i = 0; while(s[i] != '\0') { if(s[i] >= 'a' && s[i] <= 'z') { __________; } i++; } printf("%s", s); } 【答案】s[i] = s[i] - 32; 4.下列程序的功能是:判断是否为回文。 #include <stdio.h> #include <string.h> main() { char s[] = "aba"; int i, flag = 1; int len = strlen(s); for(i = 0; i < len/2; i++) { if(__________) { flag = 0; break; } } printf("%d", flag); } 【答案】s[i] != s[len-1-i] 5.下列程序的功能是:字符串逆序(首尾交换)。 #include <stdio.h> #include <string.h> main() { char s[] = "abcd"; int i, j; char temp; j = strlen(s) - 1; for(i = 0; i < j; i++, j--) { temp = s[i]; s[i] = s[j]; __________; } printf("%s", s); } 【答案】s[j] = temp; 五、编程题。 1. 有两个字符串 str1 和 str2。编写程序,将 str2 中的内容插入到 str1 中下标为 k 的位置(假设 str1 足够大)。 输入样例:(输入第一行是str1,第二行是str2,第三行是整数k) HelloWorld 123 5 输出样例: Hello123World 【参考代码】 #include <stdio.h> #include <string.h> main() { char str1[200], str2[100]; int k, i, len1, len2; scanf("%s", str1); scanf("%s", str2); scanf("%d", &k); len1 = strlen(str1); len2 = strlen(str2); // 1. 将str1中从下标k开始的字符向后移动len2个位置 // 注意要从后往前移,防止数据覆盖 for (i = len1; i >= k; i--) { str1[i + len2] = str1[i]; } // 2. 将str2的内容复制到str1的空出的位置 for (i = 0; i < len2; i++) { str1[k + i] = str2[i]; } printf("%s", str1); } 2.输入一行英文句子(仅包含字母和空格,单词之间用空格隔开),找出其中最长的单词并输出。如果有多个长度相同的最长单词,输出第一个。 输入样例: I love C programming language 输出样例: programming 【参考代码】 #include <stdio.h> #include <string.h> main() { char str[200]; char maxWord[50] = ""; char temp[50]; int i = 0, j = 0; int maxLen = 0; gets(str); // 读取整行 while (str[i] != '\0') { // 如果不是空格,存入临时数组 if (str[i] != ' ') temp[j++] = str[i]; else { // 遇到空格,说明一个单词结束 temp[j] = '\0'; if (j > maxLen) { maxLen = j; strcpy(maxWord, temp); } j = 0; // 重置临时数组下标 } i++; } // 处理最后一个单词(因为句子末尾可能没有空格) temp[j] = '\0'; if (j > maxLen) { strcpy(maxWord, temp); } printf("%s", maxWord); } 3.编写程序,对输入的字符串进行压缩。压缩规则是:如果某个字符连续出现多次,则输出该字符加上出现的次数;如果只出现一次,则只输出该字符。 输入样例: aaabbccccda 输出样例: a3b2c4d1a1 【参考代码】 #include <stdio.h> main() { char str[100]; int i = 0, count; scanf("%s", str); while (str[i] != '\0') { count = 1; // 统计当前字符连续出现的次数 while (str[i] == str[i + 1]) { count++; i++; } printf("%c%d", str[i], count); i++; } } 4.输入两个字符串 str 和 sub。编写程序查找 sub 在 str 中第一次出现的位置(下标)。如果不存在,输出 -1。 输入样例: abcdefg cde 输出样例: 2 【参考代码】 #include <stdio.h> #include <string.h> main() { char str[100], sub[50]; int i, j, k; int lenStr, lenSub; int found = -1; scanf("%s", str); scanf("%s", sub); lenStr = strlen(str); lenSub = strlen(sub); // 遍历主串,注意边界是 lenStr - lenSub for (i = 0; i <= lenStr - lenSub; i++) { // 假设从i开始匹配 for (j = 0; j < lenSub; j++) { if (str[i + j] != sub[j]) { break; // 匹配失败 } } // 如果j走到了sub的末尾,说明全部匹配成功 if (j == lenSub) { found = i; break; } } printf("%d", found); } 5.输入5个字符串(每个字符串长度不超过20),将它们按字典序(从小到大)排序并输出。 【参考代码】 #include <stdio.h> #include <string.h> main() { char str[5][21]; // 5个字符串,每个最多20字符+1个'\0' char temp[21]; int i, j; // 输入 for (i = 0; i < 5; i++) scanf("%s", str[i]); // 冒泡排序 for (i = 0; i < 4; i++) { for (j = 0; j < 4 - i; j++) { // strcmp > 0 表示前一个比后一个大,需要交换 if (strcmp(str[j], str[j + 1]) > 0) { strcpy(temp, str[j]); strcpy(str[j], str[j + 1]); strcpy(str[j + 1], temp); } } } // 输出 for (i = 0; i < 5; i++) printf("%s ", str[i]); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 6.3节:字符数组 一、单项选择题 1.以下代码的输出结果是( ) char str[] = "China"; printf("%d", strlen(str)); A. 4 B. 5 C. 6 D. 不确定 2.执行以下代码后,str的内容是() char str[10] = "abc"; strcat(str, "def"); A. "abcdef" B. "abc def" C. "defabc" D. "abc" 3.以下能正确比较两个字符串s1和s2是否相等的语句是() A. if(s1 == s2) B. if(strcmp(s1, s2) == 0) C. if(strcpy(s1, s2)) D. if(strlen(s1) == strlen(s2)) 4.定义字符数组char str[5];,以下输入语句正确的是() A. scanf("%s", &str); B. scanf("%s", str); C. gets(&str); D. getchar(str); 5.以下代码的输出结果是() char str[] = "Hello"; puts(str); A. Hello(无换行) B. Hello(有换行) C. Hello\0 D. 编译错误 6.以下代码的输出结果是() char s1[10] = "abc", s2[10] = "abd"; printf("%d", strcmp(s1, s2)); A. 正数 B. 负数 C. 0 D. 1 7.以下代码的输出结果是() char str[20] = "I love"; strcat(str, " C"); printf("%s", str); A. I love C B. I loveC C. C I love D. I love 8.以下代码的输出结果是() char str[] = "12345"; printf("%d", sizeof(str)); A. 5 B. 6 C. 4 D. 不确定 9.字符数组str初始化为char str[5] = "abc";,则str[3]的值是() A. 'a' B. 'b' C. '\0' D. 'c' 10.若有定义char str[20];,要输入字符串"I love C",以下输入方式正确的是() A. scanf("%s", str); B. gets(str); C. scanf("%c", str); D. getchar(str); 二、填空题。 1.字符数组str定义为char str[10];,若输入字符串"test",则str[4]的值是___________。 2.函数______用于将字符串s2连接到s1的末尾。 3.若要通过键盘输入一个含空格的字符串到字符数组str,应使用函数___________。 4.函数______用于比较两个字符串s1和s2,若s1小于s2,返回值为___________。 5.若有定义char str1[20] = "hello", str2[] = " world";,执行strcat(str1, str2);后,strlen(str1)的值是___________。 6.以下程序段中,puts()函数的输出结果是___________。 char str[] = {'h', 'e', 'l', 'l', 'o', '\0', 'w', 'o', 'r', 'l', 'd'}; puts(str); 7.若有定义char str1[] = "test", str2[10];,以下能正确将str1的字符串复制到str2中的语句是___________。 8.字符串常量"programming"在内存中存储时,末尾会自动添加字符______作为结束标志。 9.strcpy(str1, str2)函数的作用是将字符串______复制到字符数组______中(填写 str1 或 str2)。 10.若要将单个字符'A'输入到字符数组str[0]中,可使用语句scanf("%c", ______);。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> #include <string.h> main() { char str[] = "hello"; printf("%d", strlen(str));} 2.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char str[10]; int i; for(i=0; i<5; i++) { str[i] = 'a' + i; } str[5] = '\0'; printf("%s", str);} 3.写出下列程序段的输出结果:________________。 #include <stdio.h> #include <string.h> main() { char s1[] = "longstring", s2[] = "short"; if(strcmp(s1, s2) > 0) printf("s1 is longer"); else printf("s2 is shorter or equal");} 4.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char str[] = "ABCD"; int i; for(i = 0; str[i] != '\0'; i++) { printf("%d", str[i] - 'A'); } } 5.写出下列程序段的输出结果:________________。 #include <stdio.h> #include <string.h> main() { char s[] = "C Language"; int i, len = strlen(s); for(i = len - 1; i >= 0; i--) { if(s[i] == ' ') continue; printf("%c", s[i]); }} 6.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[] = "a1B2c3"; int i, c = 0; for(i = 0; s[i] != '\0'; i++) { if(s[i] >= 'a' && s[i] <= 'z') c++; } printf("%d", c);} 7.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[] = "XYZ"; int i; for(i = 0; s[i] != '\0'; i++) { s[i] = s[i] - 1; } printf("%s", s);} 8.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[] = "12345"; int i, sum = 0; for(i = 0; s[i] != '\0'; i++) { sum = sum * 10 + (s[i] - '0');} printf("%d", sum + 1);} 9.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[] = "0000"; int i; for(i = 0; i < 3; i++) { s[i] = s[i+1] + 1; } printf("%s", s);} 10.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[] = "dbca"; char max = s[0]; int i; for(i = 1; s[i] != '\0'; i++) { if(s[i] > max) max = s[i]; } printf("%c", max);} 四、程序填空题(根据题意,将空缺的语句补上) 1.下列程序的功能是:计算字符串长度(不使用strlen)。 #include <stdio.h> main() { char str[80]; int len = 0; scanf("%s", str); while (__________) { len++; } printf("%d", len); } 2.下列程序的功能是:统计数字字符个数。 #include <stdio.h> main() { char s[] = "a1b2c3"; int i, count = 0; for(i = 0; s[i] != '\0'; i++) { if (__________) { count++; } } printf("%d", count); } 3.下列程序的功能是:将小写字母转换为大写。 #include <stdio.h> main() { char s[] = "hello"; int i = 0; while(s[i] != '\0') { if(s[i] >= 'a' && s[i] <= 'z') { __________; } i++; } printf("%s", s); } 4.下列程序的功能是:判断是否为回文。 #include <stdio.h> #include <string.h> main() { char s[] = "aba"; int i, flag = 1; int len = strlen(s); for(i = 0; i < len/2; i++) { if(__________) { flag = 0; break; } } printf("%d", flag); } 5.下列程序的功能是:字符串逆序(首尾交换)。 #include <stdio.h> #include <string.h> main() { char s[] = "abcd"; int i, j; char temp; j = strlen(s) - 1; for(i = 0; i < j; i++, j--) { temp = s[i]; s[i] = s[j]; __________; } printf("%s", s); } 五、编程题。 1. 有两个字符串 str1 和 str2。编写程序,将 str2 中的内容插入到 str1 中下标为 k 的位置(假设 str1 足够大)。 输入样例:(输入第一行是str1,第二行是str2,第三行是整数k) HelloWorld 123 5 输出样例: Hello123World 2.输入一行英文句子(仅包含字母和空格,单词之间用空格隔开),找出其中最长的单词并输出。如果有多个长度相同的最长单词,输出第一个。 输入样例: I love C programming language 输出样例: programming 3.编写程序,对输入的字符串进行压缩。压缩规则是:如果某个字符连续出现多次,则输出该字符加上出现的次数;如果只出现一次,则只输出该字符。 输入样例: aaabbccccda 输出样例: a3b2c4d1a1 4.输入两个字符串 str 和 sub。编写程序查找 sub 在 str 中第一次出现的位置(下标)。如果不存在,输出 -1。 输入样例: abcdefg cde 输出样例: 2 5.输入5个字符串(每个字符串长度不超过20),将它们按字典序(从小到大)排序并输出。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第6章 第3节:字符数组(练习)-《C语言程序设计》(电子工业出版社)上好课
1
第6章 第3节:字符数组(练习)-《C语言程序设计》(电子工业出版社)上好课
2
第6章 第3节:字符数组(练习)-《C语言程序设计》(电子工业出版社)上好课
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。