内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第17练,内容是5.3 字符数组的定义和使用。
《编程语言基础——C语言》(第5版)一课一练 第17练
5.3 字符数组的定义和使用
一、单选题
1. 关于字符数组,以下说法正确的是( )
A. 字符数组不能存储字符串
B. 字符数组的定义格式与整型数组完全不同
C. 字符数组的元素类型为char,可用于存储字符串
D. 字符数组的长度不能超过10
2. C语言中,字符串的结束标志是( )
A. 空格字符
B. '\0'(ASCII码为0的字符)
C. 换行符'
'
D. 回车符'\r'
3. 定义 char s[10] = "hello"; 则字符串s的长度(strlen(s)的值)是( )
A. 5
B. 6
C. 10
D. 9
4. 以下对字符数组初始化中,合法的是( )
A. char s[5] = "hello";
B. char s[] = 123;
C. char s[3] = {'a','b','c','d'};
D. char s[] = "hello";
5. 使用 scanf("%s", s); 输入字符串时,输入结束的标志是( )
A. 回车符
B. 空格符
C. 分号
D. '\0'字符
6. 关于gets()函数和scanf("%s")函数,正确的说法是( )
A. gets()以回车为结束标志,可接收空格;scanf("%s")以空格为分隔符
B. 两者的功能完全相同
C. gets()不能接收空格
D. scanf("%s")以回车为结束标志
7. 设有 char s1[20] = "hello", s2[] = "world"; 执行 strcat(s1, s2); 后,s1的内容是( )
A. "hello"
B. "world"
C. "helloworld"
D. "hello world"
二、程序运行结果题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
#include <string.h>
main()
{
char s1[20] = "Hello", s2[] = "World";
strcat(s1, " ");
strcat(s1, s2);
printf("%s
", s1);
printf("%d
", strlen(s1));
}
三、程序填空题
9. 以下程序的功能是:输入两个字符串,比较它们的大小并输出比较结果。请填空。
#include <stdio.h>
#include <string.h>
main()
{
char s1[30], s2[30];
int cmp;
gets(s1);
gets(s2);
cmp = ______【1】______;
if (cmp > 0)
printf("s1 > s2
");
else if (cmp < 0)
printf("s1 < s2
");
else
printf("s1 == s2
");
}
四、阅读程序改错题
10. 阅读以下程序,该程序的功能是将字符串s2复制到字符串s1中并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。
L1 #include <stdio.h>
L2 #include <string.h>
L3 main()
L4 {
L5 char s1[20], s2[] = "Hello World";
L6 s1 = s2;
L7 printf("%s
", s1);
L8 }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第17练,内容是5.3 字符数组的定义和使用。
《编程语言基础——C语言》(第5版)一课一练 第17练
5.3 字符数组的定义和使用
一、单选题
1. 关于字符数组,以下说法正确的是( )
A. 字符数组不能存储字符串
B. 字符数组的定义格式与整型数组完全不同
C. 字符数组的元素类型为char,可用于存储字符串
D. 字符数组的长度不能超过10
【答案】C
【解析】字符数组即数组元素为字符类型(char)的数组,定义格式与一维/二维数组类似。字符数组可以存放字符串数据,在C语言中字符串是当做字符数组处理的。
2. C语言中,字符串的结束标志是( )
A. 空格字符
B. '\0'(ASCII码为0的字符)
C. 换行符'
'
D. 回车符'\r'
【答案】B
【解析】C语言规定以'\0'(ASCII值为0的空字符)作为字符串的结束标志符。在存储字符串常量时系统自动在其末尾添加'\0'。
3. 定义 char s[10] = "hello"; 则字符串s的长度(strlen(s)的值)是( )
A. 5
B. 6
C. 10
D. 9
【答案】A
【解析】strlen()计算的是首次出现'\0'之前的字符个数。
4. 以下对字符数组初始化中,合法的是( )
A. char s[5] = "hello";
B. char s[] = 123;
C. char s[3] = {'a','b','c','d'};
D. char s[] = "hello";
【答案】D
【解析】选项D缺省长度,由"hello"的6个字符含'\0'确定数组长度为6。选项A需6字节而数组长度为5;选项B类型不匹配;选项C初值个数4超过数组长度3。
5. 使用 scanf("%s", s); 输入字符串时,输入结束的标志是( )
A. 回车符
B. 空格符
C. 分号
D. '\0'字符
【答案】B
【解析】scanf()函数使用%s格式时,以空格、制表符(Tab)、回车符中的任一种作为输入结束标志。因此带空格的字符串会接收到空格前面的部分。
6. 关于gets()函数和scanf("%s")函数,正确的说法是( )
A. scanf("%s")以空格为分隔符
B. 两者的功能完全相同
C. gets()不能接收空格
D. scanf("%s")以回车为结束标志
【答案】A
【解析】gets()与scanf("%s")的区别:gets()以回车符作为输入结束标志,空格可作为字符串内容;scanf("%s")以空格、Tab、回车等作为结束标志,不能接收含空格的字符串。
7. 设有 char s1[20] = "hello", s2[] = "world"; 执行 strcat(s1, s2); 后,s1的内容是( )
A. "hello"
B. "world"
C. "helloworld"
D. "hello world"
【答案】C
【解析】strcat(s1,s2)将s2的内容连接到s1的后面。系统自动删除s1末尾的'\0',将s2内容连接进来,之后在末尾添加'\0'。结果为"helloworld",中间没有空格。
二、程序运行结果题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
#include <string.h>
main()
{
char s1[20] = "Hello", s2[] = "World";
strcat(s1, " ");
strcat(s1, s2);
printf("%s
", s1);
printf("%d
", strlen(s1));
}
【答案】Hello World
11
【解析】先连接空格(s1="Hello "),再连接"World"(s1="Hello World")。strlen计算'\0'前字符数:H(1)e(2)l(3)l(4)o(5)空格(6)W(7)o(8)r(9)l(10)d(11) = 11。
三、程序填空题
9. 以下程序的功能是:输入两个字符串,比较它们的大小并输出比较结果。请填空。
#include <stdio.h>
#include <string.h>
main()
{
char s1[30], s2[30];
int cmp;
gets(s1);
gets(s2);
cmp = ______【1】______;
if (cmp > 0)
printf("s1 > s2
");
else if (cmp < 0)
printf("s1 < s2
");
else
printf("s1 == s2
");
}
【答案】【1】strcmp(s1, s2)
【解析】strcmp(s1,s2)用于比较两个字符串:若s1>s2则返回值>0,s1<s2则返回值<0,相等则返回0。比较是按ASCII码从左至右依次比较对应字符。
四、阅读程序改错题
10. 阅读以下程序,该程序的功能是将字符串s2复制到字符串s1中并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。
L1 #include <stdio.h>
L2 #include <string.h>
L3 main()
L4 {
L5 char s1[20], s2[] = "Hello World";
L6 s1 = s2;
L7 printf("%s
", s1);
L8 }
【答案】【1】L6: s1 = s2; → 修改为 strcpy(s1, s2);(数组名是地址常量,不能作为赋值语句的左值,需用strcpy()函数复制字符串内容)
【解析】在C语言中,数组名是地址常量,代表数组在内存中的首地址,不能进行赋值运算。要将一个字符串的内容复制到另一个字符数组中,必须使用strcpy()函数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$