内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第22练,内容是第5章 数组综合。
《C语言》(第五版)一课一练 第22练
第5章 数组综合
一、单选题
1. 已知 int a[]={5,10,15,20,25}; 以下说法正确的是( )
A. 数组a的长度为5,由初始化数据个数确定
B. 数组a的长度为4,因为最后一个元素下标是4
C. 数组a的长度不确定,需要在定义时指定
D. a[5]的值为25,是数组的最后一个元素
【答案】A
【解析】定义时省略数组长度,编译器根据初始化列表中的数据个数自动确定数组长度为5。因此数组元素为a[0]a[4],合法下标范围04。a[5]是第6个元素,已超出数组范围属于越界访问。数组最后一个元素a[4]的值为25。
2. 已知 int x[2][3]; 以下引用中下标合法的是( )
A. x[2][1]
B. x[1][3]
C. x[0][3]
D. x[1][2]
【答案】D
【解析】二维数组x[2][3]的行下标范围01,列下标范围02。x[1][2]行下标1列下标2均在合法范围内。x[2][1]的行下标2越界,x[1][3]的列下标3越界,x[0][3]的列下标3越界。使用二维数组时必须确保行列下标都在定义的范围内。
3. 已知 char str[10]="abc"; str[3]='d'; 执行后下列语句输出结果正确的是( )
A. printf("%s", str); 输出 abcd 加乱码
B. printf("%s", str); 输出 abcd
C. strlen(str) 返回 4
D. strlen(str) 返回 5
【答案】B
【解析】初始化后str='a','b','c','\0',...。str[3]='d'将原本的'\0'替换为'd',str[4]仍是初始化的0(即'\0')。printf用%s输出时,从str[0]开始直到遇到'\0'停止,输出"abcd"。strlen同样在'\0'处停止计数,返回4。两种函数的结果都正确。
4. int a[6]={1,3,5,7,9,11}, i, sum=0;
for(i=1; i<6; i+=2) sum+=a[i];
执行后sum的值是( )
A. 21(a[1]+a[3]+a[5])
B. 36(所有元素之和)
C. 12(a[1]+a[3])
D. 27(a[0]+a[2]+a[4])
【答案】A
【解析】循环变量i从1开始步长为2:i=1时sum+=a[1]=3,i=3时sum+=a[3]=7,i=5时sum+=a[5]=11,i=7条件i<6为假退出。sum=3+7+11=21。该段代码求的是下标为奇数的元素之和。i从0改为1以及步长的设置决定了访问的元素范围。
5. 关于C语言的字符串处理函数,以下说法正确的是( )
A. strlen("ABC\0DE") 返回值是 5
B. strcmp("abc","ABC") 返回值是 0
C. strlen函数在遇到第一个'\0'时停止计数
D. strcpy 复制字符串时会自动检查目标数组空间
【答案】C
【解析】C正确,strlen从字符串首地址开始计数,遇到第一个'\0'即停止,因此strlen("ABC\0DE")返回3而非5。B中strcmp区分大小写,"abc"与"ABC"不相等,返回非0。D中strcpy不会检查目标空间是否足够,目标空间过小会导致缓冲区溢出。
6. int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}, s1=0, s2=0, i;
for(i=0;i<3;i++) {
s1+=a[i][i];
s2+=a[i][2-i];
}
执行后s1和s2的值分别是( )
A. s1=15, s2=15
B. s1=12, s2=12
C. s1=18, s2=12
D. s1=15, s2=15
【答案】D
【解析】s1累加a[0][0]+a[1][1]+a[2][2]=1+5+9=15(主对角线)。s2累加a[0][2]+a[1][1]+a[2][0]=3+5+7=15(副对角线)。此题中s1和s2都等于15,体现了对角线上元素求和的计算方法。主对角线元素行列下标相等,副对角线元素行列下标之和为定值n-1。
7. 已知数组a[]={8,3,6,1,9,4}; 执行以下冒泡排序(升序):
for(i=0;i<5;i++)
for(j=0;j<5-i;j++)
if(a[j]>a[j+1])
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
第一轮(i=0)内层循环结束后,a[5]的值是( )
A. 8
B. 4
C. 9
D. 1
【答案】C
【解析】第一轮(i=0)内层循环j从0到4,通过相邻比较将最大值逐步后移:8>3交换→3,8,6,1,9,4;8>6交换→3,6,8,1,9,4;8>1交换→3,6,1,8,9,4;8<9不动;9>4交换→3,6,1,8,4,9。最终a[5]=9,最大值"冒泡"到了数组末尾。
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
#include <string.h>
main()
{
char s[30] = "Shangdong";
int i, len = strlen(s);
for (i = 0; i < len / 2; i++)
{
char t = s[i];
s[i] = s[len-1-i];
s[len-1-i] = t;
}
puts(s);
}
【答案】gnodgnahS
【解析】程序实现了字符串的反转功能。len=strlen("Shangdong")=9,循环i从0到3(len/2=4次),每次交换对称位置的字符:i=0交换s[0]和s[8](S和g),i=1交换s[1]和s[7](h和n),依次类推。4次交换后字符串完全反转,输出"gnodgnahS"。
三、案例分析题
9. 以下程序的功能是将一个3×3矩阵主对角线上的元素全部置为1,其余元素置为0(形成单位矩阵)。请填空。
#include <stdio.h>
main()
{
int a[3][3], i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
if (【1】)
a[i][j] = 【2】;
else
a[i][j] = 【3】;
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%d ", a[i][j]);
printf("
");
}
}
【答案】【1】i == j
【2】1
【3】0
【解析】单位矩阵的特点是主对角线(行下标=列下标)上的元素为1,其余为0。if(i==j)判断当前位置是否在主角线上,是则a[i][j]=1,否则a[i][j]=0。输出时应得到:
1 0 0
0 1 0
0 0 1 的3×3矩阵格式。
四、综合应用题
10. 编写一个C程序:定义一个字符数组存放一个字符串(从键盘输入,不超过50个字符),统计该字符串中数字字符的个数,同时将所有小写字母转换为大写字母(如果存在),最后输出转换后的字符串和数字字符个数。
提示:小写字母az的ASCII码值比大写字母AZ的ASCII码值大32。
【答案】#include <stdio.h>
main()
{
char str[51];
int i = 0, digit_count = 0;
printf("请输入一个字符串:");
gets(str);
while (str[i] != '\0')
{
if (str[i] >= '0' && str[i] <= '9')
digit_count++;
else if (str[i] >= 'a' && str[i] <= 'z')
str[i] = str[i] - 32;
i++;
}
printf("转换后的字符串:%s
", str);
printf("数字字符个数:%d
", digit_count);
}
【解析】程序用gets输入字符串,while遍历每个字符。对当前字符用if判断:若在'0''9'范围内则digit_count递增;若在'a''z'范围内则减32转为大写字母。其他字符保持不变。遍历完成后输出转换后的字符串和数字字符统计个数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第22练,内容是第5章 数组综合。
《C语言》(第五版)一课一练 第22练
第5章 数组综合
一、单选题
1. 已知 int a[]={5,10,15,20,25}; 以下说法正确的是( )
A. 数组a的长度为5,由初始化数据个数确定
B. 数组a的长度为4,因为最后一个元素下标是4
C. 数组a的长度不确定,需要在定义时指定
D. a[5]的值为25,是数组的最后一个元素
2. 已知 int x[2][3]; 以下引用中下标合法的是( )
A. x[2][1]
B. x[1][3]
C. x[0][3]
D. x[1][2]
3. 已知 char str[10]="abc"; str[3]='d'; 执行后下列语句输出结果正确的是( )
A. printf("%s", str); 输出 abcd 加乱码
B. printf("%s", str); 输出 abcd
C. strlen(str) 返回 4
D. strlen(str) 返回 5
4. int a[6]={1,3,5,7,9,11}, i, sum=0;
for(i=1; i<6; i+=2) sum+=a[i];
执行后sum的值是( )
A. 21(a[1]+a[3]+a[5])
B. 36(所有元素之和)
C. 12(a[1]+a[3])
D. 27(a[0]+a[2]+a[4])
5. 关于C语言的字符串处理函数,以下说法正确的是( )
A. strlen("ABC\0DE") 返回值是 5
B. strcmp("abc","ABC") 返回值是 0
C. strlen函数在遇到第一个'\0'时停止计数
D. strcpy 复制字符串时会自动检查目标数组空间
6. int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}, s1=0, s2=0, i;
for(i=0;i<3;i++) {
s1+=a[i][i];
s2+=a[i][2-i];
}
执行后s1和s2的值分别是( )
A. s1=15, s2=15
B. s1=12, s2=12
C. s1=18, s2=12
D. s1=15, s2=15
7. 已知数组a[]={8,3,6,1,9,4}; 执行以下冒泡排序(升序):
for(i=0;i<5;i++)
for(j=0;j<5-i;j++)
if(a[j]>a[j+1])
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
第一轮(i=0)内层循环结束后,a[5]的值是( )
A. 8
B. 4
C. 9
D. 1
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
#include <string.h>
main()
{
char s[30] = "Shangdong";
int i, len = strlen(s);
for (i = 0; i < len / 2; i++)
{
char t = s[i];
s[i] = s[len-1-i];
s[len-1-i] = t;
}
puts(s);
}
三、案例分析题
9. 以下程序的功能是将一个3×3矩阵主对角线上的元素全部置为1,其余元素置为0(形成单位矩阵)。请填空。
#include <stdio.h>
main()
{
int a[3][3], i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
if (【1】)
a[i][j] = 【2】;
else
a[i][j] = 【3】;
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%d ", a[i][j]);
printf("
");
}
}
四、综合应用题
10. 编写一个C程序:定义一个字符数组存放一个字符串(从键盘输入,不超过50个字符),统计该字符串中数字字符的个数,同时将所有小写字母转换为大写字母(如果存在),最后输出转换后的字符串和数字字符个数。
提示:小写字母az的ASCII码值比大写字母AZ的ASCII码值大32。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$