内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第20练,内容是5.3 字符数组的定义与初始化。
《C语言》(第五版)一课一练 第20练
5.3 字符数组的定义与初始化
一、单选题
1. 以下选项中,能正确定义一个字符数组并初始化为字符串"Hello"的是( )
A. char s[5] = "Hello";
B. char s[] = 'Hello';
C. char s[] = {'H','e','l','l','o'};
D. char s[6] = "Hello";
【答案】D
【解析】字符串"Hello"占5个字符加上'\0'结束标志共6个位置。A中s[5]存放容量为5个字符,无法容纳结束标志。B用了单引号,语法错误。C中缺少字符串结束标志'\0',这是字符数组而非完整的字符串。D以char s[6]="Hello"正确定义并分配了足够空间。
2. 关于C语言中字符数组与字符串,下列说法正确的是( )
A. 字符数组就是字符串,两者完全相同
B. 字符串不能存储在字符数组中
C. 字符串以字符数组形式存储,以'\0'结束
D. 字符数组的长度就是字符串的长度
【答案】C
【解析】C语言中没有专门的字符串类型,字符串以字符数组的形式存储,用'\0'(ASCII码为0的空字符)作为结束标志。字符数组不一定存放字符串;如果字符数组最后没有'\0',则是普通字符数组,不能当作字符串使用。
3. 已知 char str[8] = "China"; 则str[5]中存放的字符是( )
A. \0
B. a
C. 空格字符
D. 不确定的值
【答案】A
【解析】用字符串"China"初始化字符数组时,系统自动在字符串末尾添加'\0'结束标志。str[0]='C'、str[1]='h'、str[2]='i'、str[3]='n'、str[4]='a'、str[5]='\0'。str[6]和str[7]未被初始化值覆盖,但题目中整个数组用字符串初始化,剩余位置也会自动赋'\0'。
4. 在C语言中,字符串结束标志'\0'的ASCII码值是( )
A. 48(数字0的ASCII码)
B. 10(换行符的ASCII码)
C. 32(空格字符的ASCII码)
D. 0(空字符的ASCII码)
【答案】D
【解析】'\0'是空字符(null character),ASCII码值为0。注意区分'\0'、'0'(ASCII码48)和空格(ASCII码32),这三者是完全不同的字符。字符串处理函数(如strlen、strcpy等)都通过查找'\0'来确定字符串的结束位置。
5. 在main函数中声明 char ch[10]; 然后执行 ch[0]='A'; ch[1]='B'; ch[2]='C'; 则 strlen(ch) 的值是( )
A. 10(数组的总长度)
B. 不确定(未赋值元素含随机值)
C. 3(已赋值的字符个数)
D. 0(因为没有'\0'结束符)
【答案】B
【解析】在函数内声明char ch[10]后面没有用花括号初始化,数组元素值为随机值。前三个元素被赋值,ch[3]~ch[9]的内容是随机的未定义值。strlen从首地址开始找'\0',随机值中何时出现'\0'是不确定的,因此返回值不可预测。要得到正确的字符串长度,需要手动在末尾添加'\0'结束标志。
6. 已知 char s1[]="ab", s2[]={'a','b'}; 关于s1和s2,下列说法正确的是( )
A. sizeof(s1)比sizeof(s2)大1个字节
B. 两个数组占用同样大小的内存空间
C. sizeof(s2)比sizeof(s1)大1个字节
D. sizeof(s1)与sizeof(s2)不确定
【答案】A
【解析】char s1[]="ab"自动分配3个字节:'a','b','\0'。char s2[]={'a','b'}元素个数由初始化列表决定,分配2个字节,不含'\0'。因此sizeof(s1)=3,sizeof(s2)=2,s1比s2多1个字节。这是字符串初始化与字符列表初始化的本质区别。
7. 以下字符数组的初始化语句中,存在语法错误的是( )
A. char s[] = "ABCD";
B. char s[10] = "ABCD";
C. char s[3] = "ABCD";
D. char s[5] = {'A','B','C','D'};
【答案】C
【解析】选项C中s[3]容纳空间为3个字符,而"ABCD"需要5个字节(4个字符加1个'\0'),初始化字符串长度超过数组空间,编译器会报错。选项A未指定长度,由初始化字符串确定长度为5。选项B分配了足够空间。选项D逐个字符赋初值,未赋完的元素自动为0,合法。
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
main()
{
char s1[10] = "Shandong";
char s2[] = {'P','r','o',',','C','\0'};
printf("%s", s1);
printf("
");
printf("%s", s2);
}
【答案】Shandong
Pro,C
【解析】s1用字符串"Shandong"初始化,系统自动添加'\0',printf用%s格式输出时遇到'\0'停止,输出"Shandong"。s2用字符列表初始化,末尾手工添加了'\0',因此用%s输出时也是完整的字符串,输出"Pro,C"。两句printf之间有一次换行。
三、案例分析题
9. 以下程序的功能是统计字符串中大写字母的个数。请填空。
#include <stdio.h>
main()
{
char str[50] = "HelloWorld2024";
int i = 0, count = 【1】;
while (str[i] != '【2】')
{
if (str[i] >= 'A' 【3】 str[i] <= 'Z')
count++;
i++;
}
printf("大写字母个数=%d
", count);
}
【答案】【1】0
【2】\0
【3】&&
【解析】count初始为0用来累计大写字母个数。while循环遍历字符串,判断条件str[i]!='\0'确保遍历到字符串末尾停止。if中用条件str[i]>='A' && str[i]<='Z'判断当前字符是否为大写字母,借助ASCII码中大写字母A~Z连续排列的特性。"HelloWorld2024"中有H和W两个大写字母。
四、综合应用题
10. 编写一个C程序:从键盘输入一个字符串(不超过80个字符),统计字符串中元音字母(a、e、i、o、u,不区分大小写)的个数,并输出结果。
提示:可以用字符数组存储输入的字符串,遍历每个字符判断是否为元音字母。
【答案】#include <stdio.h>
main()
{
char str[81];
int i = 0, count = 0;
printf("请输入一个字符串:");
gets(str);
while (str[i] != '\0')
{
char ch = str[i];
if (ch >= 'A' && ch <= 'Z')
ch = ch + 32;
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
count++;
i++;
}
printf("元音字母个数=%d
", count);
}
【解析】程序用gets()读取一行字符串存入str。遍历时先判断字符是否为大写字母,如果是则转换为小写(大写字母ASCII码值+32得到对应小写字母),方便统一判断。然后用if条件依次检查是否为a、e、i、o、u五个元音字母。不符合判断条件的字符被跳过,符合条件的count递增。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第20练,内容是5.3 字符数组的定义与初始化。
《C语言》(第五版)一课一练 第20练
5.3 字符数组的定义与初始化
一、单选题
1. 以下选项中,能正确定义一个字符数组并初始化为字符串"Hello"的是( )
A. char s[5] = "Hello";
B. char s[] = 'Hello';
C. char s[] = {'H','e','l','l','o'};
D. char s[6] = "Hello";
2. 关于C语言中字符数组与字符串,下列说法正确的是( )
A. 字符数组就是字符串,两者完全相同
B. 字符串不能存储在字符数组中
C. 字符串以字符数组形式存储,以'\0'结束
D. 字符数组的长度就是字符串的长度
3. 已知 char str[8] = "China"; 则str[5]中存放的字符是( )
A. \0
B. a
C. 空格字符
D. 不确定的值
4. 在C语言中,字符串结束标志'\0'的ASCII码值是( )
A. 48(数字0的ASCII码)
B. 10(换行符的ASCII码)
C. 32(空格字符的ASCII码)
D. 0(空字符的ASCII码)
5. 在main函数中声明 char ch[10]; 然后执行 ch[0]='A'; ch[1]='B'; ch[2]='C'; 则 strlen(ch) 的值是( )
A. 10(数组的总长度)
B. 不确定(未赋值元素含随机值)
C. 3(已赋值的字符个数)
D. 0(因为没有'\0'结束符)
6. 已知 char s1[]="ab", s2[]={'a','b'}; 关于s1和s2,下列说法正确的是( )
A. sizeof(s1)比sizeof(s2)大1个字节
B. 两个数组占用同样大小的内存空间
C. sizeof(s2)比sizeof(s1)大1个字节
D. sizeof(s1)与sizeof(s2)不确定
7. 以下字符数组的初始化语句中,存在语法错误的是( )
A. char s[] = "ABCD";
B. char s[10] = "ABCD";
C. char s[3] = "ABCD";
D. char s[5] = {'A','B','C','D'};
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
main()
{
char s1[10] = "Shandong";
char s2[] = {'P','r','o',',','C','\0'};
printf("%s", s1);
printf("
");
printf("%s", s2);
}
三、案例分析题
9. 以下程序的功能是统计字符串中大写字母的个数。请填空。
#include <stdio.h>
main()
{
char str[50] = "HelloWorld2024";
int i = 0, count = 【1】;
while (str[i] != '【2】')
{
if (str[i] >= 'A' 【3】 str[i] <= 'Z')
count++;
i++;
}
printf("大写字母个数=%d
", count);
}
四、综合应用题
10. 编写一个C程序:从键盘输入一个字符串(不超过80个字符),统计字符串中元音字母(a、e、i、o、u,不区分大小写)的个数,并输出结果。
提示:可以用字符数组存储输入的字符串,遍历每个字符判断是否为元音字母。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$