内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第18练,内容是5.1 一维数组的定义、初始化与元素引用。
《C语言》(第五版)一课一练 第18练
5.1 一维数组的定义、初始化与元素引用
一、单选题
1. 以下选项中,正确定义一个有10个int型元素的一维数组的是( )
A. int a[10];
B. int a(10);
C. int a{10};
D. int a[5+5];
【答案】A
【解析】C语言中一维数组的定义形式为:类型说明符 数组名[常量表达式]。A中int a[10]完整符合定义格式。B使用了圆括号,C使用了花括号,这两种都不是数组定义的语法。D中a[5+5]虽然表达式值为10,看起来合法,但A是最直接的正确答案。数组定义时方括号内必须是常量表达式。
2. 已知定义 int a[8]; 则元素a[5]是该数组中的第几个元素( )
A. 第5个元素
B. 第4个元素
C. 第6个元素
D. 第7个元素
【答案】C
【解析】C语言数组的下标从0开始,元素依次为a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]。a[5]对应下标5,排在a[0]~a[4]之后,是数组中的第6个元素。理解下标从0开始是正确使用数组的基础。
3. 已知 int a[6]={1,2,3}; 则a[4]的值是( )
A. 随机值(不确定)
B. 3(最后一个初始化值)
C. 编译错误,初始化值太少
D. 0(自动初始化为0)
【答案】D
【解析】对数组进行部分初始化时,已列出初始值的元素按顺序赋值,未列出的元素自动初始化为0。int a[6]={1,2,3}中a[0]=1、a[1]=2、a[2]=3,a[3]到a[5]均自动赋值为0。因此a[4]=0。这种机制方便对大型数组的默认值设置。
4. 已知 int a[5]={10,20,30,40,50}; 执行 a[5]=100; 后,下列说法正确的是( )
A. a[5]的值被正确设置为100,程序正常运行
B. 编译器会报错,程序无法编译通过
C. 程序可能异常,因为访问了数组之外的区域
D. 数组会自动扩展为6个元素以容纳新值
【答案】C
【解析】数组a[5]的合法下标范围是0~4,a[5]已超出数组边界,属于越界访问。C语言不检查数组下标是否越界,编译期往往不报错,但在运行时可能覆盖相邻内存区域中的数据,导致程序出现不可预料的错误。这是使用数组时需要格外注意的地方。
5. 以下程序段执行后,a[3]的值是
int a[5]={0}, i;
for(i=0; i<5; i++)
a[i] = i * 2 + 1;( )
A. 7
B. 3
C. 6
D. 9
【答案】A
【解析】循环中i从0到4,依次为每个数组元素赋值:a[0]=0*2+1=1,a[1]=1*2+1=3,a[2]=2*2+1=5,a[3]=3*2+1=7,a[4]=4*2+1=9。因此a[3]的值为7。这种通过循环对数组元素批量赋值的模式在程序设计中非常常见。
6. 已知 int a[]={2,4,6,8,10}, s=0, j=0;
while(j<5) { s+=a[j]; j+=2; }
执行后s的值是( )
A. 30(所有元素之和)
B. 12(前两个元素之和)
C. 20(中间三个元素之和)
D. 18(a[0]+a[2]+a[4]之和)
【答案】D
【解析】j的初值为0,每次循环j加2。循环过程:j=0时s+=a[0]=2,j变为2;j=2时s+=a[2]=6,j变为4;j=4时s+=a[4]=10,j变为6;j=6时条件j<5为假,退出。最终s=2+6+10=18。此题综合考察了数组下标与循环步长的配合使用。
7. 已知 int a[7]={3,1,4,1,5,9,2}, max=a[0];
for(i=1; i<7; i++)
if(a[i]>max) max=a[i];
程序段执行后变量max的值是( )
A. 1
B. 9
C. 3
D. 5
【答案】B
【解析】该程序段的功能是求数组中所有元素的最大值。max初始为a[0]=3,然后依次与a[1]~a[6]比较:3>3不成立,1>3不成立,4>3成立max=4,1>4不成立,5>4成立max=5,9>5成立max=9,2>9不成立。最终max=9。在C语言中求数组的最值是常见的基本操作。
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
main()
{
int a[6] = {10, 20, 30, 40, 50, 60}, i;
for (i = 5; i >= 0; i--)
printf("%d ", a[i]);
}
【答案】60 50 40 30 20 10
【解析】程序定义了一个包含6个元素的一维数组a并初始化,通过for循环让变量i从5递减到0,依次输出a[5]到a[0]的值。输出结果为60 50 40 30 20 10,实现了将数组元素逆序输出的功能。printf中%d后的空格使得各数值之间用空格分隔。
三、案例分析题
9. 以下程序的功能是在数组a中查找指定的数值x,如果找到则输出其下标,未找到则输出-1。请填空。
#include <stdio.h>
main()
{
int a[8] = {12, 34, 56, 78, 90, 23, 45, 67};
int x, i, pos = 【1】;
printf("请输入要查找的数:");
scanf("%d", &x);
for (i = 0; i < 8; i++)
{
if (a[i] == x)
{
pos = 【2】;
【3】;
}
}
printf("位置=%d
", pos);
}
【答案】【1】-1
【2】i
【3】break
【解析】pos初始为-1表示未找到的默认值。for循环遍历数组,当a[i]==x时,将当前下标i赋给pos记录位置,然后用break跳出循环避免继续不必要的比较。循环结束后输出pos,找到了则输出对应下标值,未找到仍为-1。这是顺序查找算法的典型实现。
四、综合应用题
10. 编写一个C程序:从键盘输入10个整数存入一维数组,统计其中的正数个数、负数个数和零的个数,并计算所有元素的平均值(保留两位小数),最后输出统计结果。
【答案】#include <stdio.h>
main()
{
int a[10], i, pos = 0, neg = 0, zero = 0;
float sum = 0;
printf("请输入10个整数:
");
for (i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
if (a[i] > 0) pos++;
else if (a[i] < 0) neg++;
else zero++;
sum += a[i];
}
printf("正数个数=%d
负数个数=%d
零的个数=%d
", pos, neg, zero);
printf("平均值=%.2f
", sum / 10);
}
【解析】程序定义数组a[10]存储输入数据,变量pos、neg、zero分别统计正数、负数和零的个数,sum累加所有元素求总和。循环中用if-else结构判断每个元素的正负零属性并分类计数,同时累加求和。最后输出三项统计结果与平均值。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第18练,内容是5.1 一维数组的定义、初始化与元素引用。
《C语言》(第五版)一课一练 第18练
5.1 一维数组的定义、初始化与元素引用
一、单选题
1. 以下选项中,正确定义一个有10个int型元素的一维数组的是( )
A. int a[10];
B. int a(10);
C. int a{10};
D. int a[5+5];
2. 已知定义 int a[8]; 则元素a[5]是该数组中的第几个元素( )
A. 第5个元素
B. 第4个元素
C. 第6个元素
D. 第7个元素
3. 已知 int a[6]={1,2,3}; 则a[4]的值是( )
A. 随机值(不确定)
B. 3(最后一个初始化值)
C. 编译错误,初始化值太少
D. 0(自动初始化为0)
4. 已知 int a[5]={10,20,30,40,50}; 执行 a[5]=100; 后,下列说法正确的是( )
A. a[5]的值被正确设置为100,程序正常运行
B. 编译器会报错,程序无法编译通过
C. 程序可能异常,因为访问了数组之外的区域
D. 数组会自动扩展为6个元素以容纳新值
5. 以下程序段执行后,a[3]的值是
int a[5]={0}, i;
for(i=0; i<5; i++)
a[i] = i * 2 + 1;( )
A. 7
B. 3
C. 6
D. 9
6. 已知 int a[]={2,4,6,8,10}, s=0, j=0;
while(j<5) { s+=a[j]; j+=2; }
执行后s的值是( )
A. 30(所有元素之和)
B. 12(前两个元素之和)
C. 20(中间三个元素之和)
D. 18(a[0]+a[2]+a[4]之和)
7. 已知 int a[7]={3,1,4,1,5,9,2}, max=a[0];
for(i=1; i<7; i++)
if(a[i]>max) max=a[i];
程序段执行后变量max的值是( )
A. 1
B. 9
C. 3
D. 5
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
main()
{
int a[6] = {10, 20, 30, 40, 50, 60}, i;
for (i = 5; i >= 0; i--)
printf("%d ", a[i]);
}
三、案例分析题
9. 以下程序的功能是在数组a中查找指定的数值x,如果找到则输出其下标,未找到则输出-1。请填空。
#include <stdio.h>
main()
{
int a[8] = {12, 34, 56, 78, 90, 23, 45, 67};
int x, i, pos = 【1】;
printf("请输入要查找的数:");
scanf("%d", &x);
for (i = 0; i < 8; i++)
{
if (a[i] == x)
{
pos = 【2】;
【3】;
}
}
printf("位置=%d
", pos);
}
四、综合应用题
10. 编写一个C程序:从键盘输入10个整数存入一维数组,统计其中的正数个数、负数个数和零的个数,并计算所有元素的平均值(保留两位小数),最后输出统计结果。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$