内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第21练,内容是5.3-5.4 字符串处理函数、数组应用实例。
《C语言》(第五版)一课一练 第21练
5.3-5.4 字符串处理函数、数组应用实例
一、单选题
1. 以下选项中,能够从键盘读取一行字符串(含空格)存入字符数组s的函数是( )
A. scanf("%s", s);
B. getchar(s);
C. gets(s);
D. scanf("%c", s);
2. 已知 char str[]="Hello"; 执行 puts(str); 后输出的内容是( )
A. Hello并自动换行
B. Hello(不自动换行)
C. 输出一个空行,无文本内容
D. 输出"Hello"并带双引号
3. 已知 char s1[20]="Hello", s2[]="World"; 执行 strcat(s1, s2); 后s1的内容是( )
A. "Hello"(s2因空间不足以连接被忽略)
B. "WorldHello"(s2被连接到s1之前)
C. "Hello World"(中间自动添加空格)
D. "HelloWorld"(s2被连接到s1末尾)
4. 已知 char a[20]; 要将字符串"China"复制到数组a中,正确语句是( )
A. a = "China";
B. strcpy(a, "China");
C. strcpy("China", a);
D. strcat(a, "China");
5. 已知 char s[]="ABCDEF"; 则以下函数调用返回值最大的是( )
A. sizeof(s)
B. strlen(s)
C. strcmp(s, "ABCDEF")
D. strcmp(s, "abc")
6. 已知 char s1[20]="C", s2[20]="Language";
strcat(s1, " "); strcat(s1, s2);
printf("%s", s1); 输出结果是( )
A. CLanguage
B. C Language
C. C Language
D. Language C
7. 冒泡排序对数组{3,1,4,1,5}进行第一轮排序(从后向前比较)后,数组变为( )
A. {1,3,4,1,5}
B. {3,1,1,4,5}
C. {1,1,3,4,5}
D. {1,3,1,4,5}
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
#include <string.h>
main()
{
char s1[30] = "Tsingtao", s2[30] = "Beer";
strcat(s1, " ");
strcat(s1, s2);
printf("%s
", s1);
printf("%d
", strlen(s1));
}
三、案例分析题
9. 以下程序的功能是不使用strcat函数,将字符串t连接到字符串s的末尾。请填空。
#include <stdio.h>
main()
{
char s[50] = "Hello", t[] = "World";
int i = 0, j = 0;
while (s[i] != '【1】') i++;
while (t[j] != '\0')
{
s[【2】] = t[j];
i++;
【3】;
}
s[i] = '\0';
puts(s);
}
四、综合应用题
10. 编写一个C程序:从键盘输入8个整数存入一维数组,使用选择排序法(Selection Sort)将数组从小到大排序,最后输出排序后的数组元素。
选择排序原理:每轮从未排序部分选出最小元素,将该元素交换到当前轮次的起始位置。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第21练,内容是5.3-5.4 字符串处理函数、数组应用实例。
《C语言》(第五版)一课一练 第21练
5.3-5.4 字符串处理函数、数组应用实例
一、单选题
1. 以下选项中,能够从键盘读取一行字符串(含空格)存入字符数组s的函数是( )
A. scanf("%s", s);
B. getchar(s);
C. gets(s);
D. scanf("%c", s);
【答案】C
【解析】gets()函数可以读入包含空格的一整行字符串,直到遇到换行符为止,不会因为空格而截断输入。scanf("%s",s)遇到空格会停止读取,不能完整读取含空格的字符串。getchar()每次读一个字符。scanf("%c",s)也读取单个字符。
2. 已知 char str[]="Hello"; 执行 puts(str); 后输出的内容是( )
A. Hello并自动换行
B. Hello(不自动换行)
C. 输出一个空行,无文本内容
D. 输出"Hello"并带双引号
【答案】A
【解析】puts()函数输出字符串后会自动追加一个换行符。因此puts(str)输出Hello,光标自动换到下一行。与之对比,printf("%s",str)输出后不会自动换行。puts要求的参数是一个字符串,输出的内容不包含双引号。
3. 已知 char s1[20]="Hello", s2[]="World"; 执行 strcat(s1, s2); 后s1的内容是( )
A. "Hello"(s2因空间不足以连接被忽略)
B. "WorldHello"(s2被连接到s1之前)
C. "Hello World"(中间自动添加空格)
D. "HelloWorld"(s2被连接到s1末尾)
【答案】D
【解析】strcat(s1,s2)的功能是将s2的内容连接到s1的末尾。执行前s1="Hello",s2="World",连接后s1="HelloWorld"。使用strcat时要求s1的字符数组有足够空间容纳连接后的全部字符。strcat不会自动在中间添加空格,也不会改变s2的内容。
4. 已知 char a[20]; 要将字符串"China"复制到数组a中,正确语句是( )
A. a = "China";
B. strcpy(a, "China");
C. strcpy("China", a);
D. strcat(a, "China");
【答案】B
【解析】strcpy(目标,源)将源字符串复制到目标数组中,包括'\0'。B写法正确,将"China"复制到a。A中通过赋值运算符无法对数组整体赋值,写法错误。C中参数顺序反了,strcpy第一个参数是目标数组。D中strcat是连接函数,功能不同于复制操作。
5. 已知 char s[]="ABCDEF"; 则以下函数调用返回值最大的是( )
A. sizeof(s)
B. strlen(s)
C. strcmp(s, "ABCDEF")
D. strcmp(s, "abc")
【答案】A
【解析】strlen(s)返回字符串长度6(不含'\0')。strcmp(s,"ABCDEF")比较相等返回0。strcmp(s,"abc")因大写字母ASCII值小于小写,返回负值。sizeof(s)求数组变量占用的内存字节数,s含6个字符+1个'\0',共7字节。7是四个选项中的最大值。
6. 已知 char s1[20]="C", s2[20]="Language";
strcat(s1, " "); strcat(s1, s2);
printf("%s", s1); 输出结果是( )
A. CLanguage
B. C Language
C. C Language
D. Language C
【答案】C
【解析】执行过程:s1初始为"C",strcat(s1," ")连接空格后s1="C ",strcat(s1,s2)继续连接s2="Language"后s1="C Language"。两次strcat调用将三个部分依次连接到s1末尾。s2的内容未被修改,输出结果包含C空格Language。
7. 冒泡排序对数组{3,1,4,1,5}进行第一轮排序(从后向前比较)后,数组变为( )
A. {1,3,4,1,5}
B. {3,1,1,4,5}
C. {1,1,3,4,5}
D. {1,3,1,4,5}
【答案】D
【解析】冒泡排序可以从前向后,也可以从后向前依次比较相邻两元素。从后向前比较:第1步比较a[4]和a[3],5>1不交换→{3,1,4,1,5};第2步a[3]和a[2],1<4交换→{3,1,1,4,5};第3步a[2]和a[1],1=1不交换→{3,1,1,4,5};第4步a[1]和a[0],1<3交换→{1,3,1,4,5}。
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
#include <string.h>
main()
{
char s1[30] = "Tsingtao", s2[30] = "Beer";
strcat(s1, " ");
strcat(s1, s2);
printf("%s
", s1);
printf("%d
", strlen(s1));
}
【答案】Tsingtao Beer
12
【解析】s1初始为"Tsingtao"(8个字符),strcat(s1," ")追加空格后s1="Tsingtao ",strcat(s1,s2)追加"Beer"(4个字符)后s1="Tsingtao Beer",共12个字符(含空格)。strlen统计到'\0'之前的字符数,空格也计入长度,返回12。
三、案例分析题
9. 以下程序的功能是不使用strcat函数,将字符串t连接到字符串s的末尾。请填空。
#include <stdio.h>
main()
{
char s[50] = "Hello", t[] = "World";
int i = 0, j = 0;
while (s[i] != '【1】') i++;
while (t[j] != '\0')
{
s[【2】] = t[j];
i++;
【3】;
}
s[i] = '\0';
puts(s);
}
【答案】【1】\0
【2】i
【3】j++
【解析】第一空:第一个while循环找到s中'\0'的位置(字符串末尾),此时i指向s的结束位置。第二空:s[i]=t[j]将t中的字符逐个复制到s末尾,i从结束位置开始递增。第三空:j++使循环变量自增遍历t的每个字符。最后s[i]='\0'为连接后的字符串补上结束标志。
四、综合应用题
10. 编写一个C程序:从键盘输入8个整数存入一维数组,使用选择排序法(Selection Sort)将数组从小到大排序,最后输出排序后的数组元素。
选择排序原理:每轮从未排序部分选出最小元素,将该元素交换到当前轮次的起始位置。
【答案】#include <stdio.h>
main()
{
int a[8], i, j, min_idx, temp;
printf("请输入8个整数:
");
for (i = 0; i < 8; i++)
scanf("%d", &a[i]);
for (i = 0; i < 7; i++)
{
min_idx = i;
for (j = i + 1; j < 8; j++)
if (a[j] < a[min_idx])
min_idx = j;
if (min_idx != i)
{
temp = a[i];
a[i] = a[min_idx];
a[min_idx] = temp;
}
}
printf("排序后的数组:
");
for (i = 0; i < 8; i++)
printf("%d ", a[i]);
printf("
");
}
【解析】选择排序的外层循环控制轮次(i从0到6),每轮先设定min_idx=i作为本轮最小值的候选位置,内层循环从i+1到末尾查找真正的最小值下标。内层结束后,若min_idx不等于i,交换a[i]与a[min_idx]。经过7轮后,数组完成升序排列。选择排序每轮进行一次交换。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$