内容正文:
6.1节:一维数组的定义与引用
一、单项选择题
1.以下合法的 C 语言一维数组定义语句是( )
A. int a[10.5]; B. int a[n];
C. int a[8]; D. int a[];
【答案】C
【解析】数组下标必须为整型常量;A 为小数、B 为变量、D 缺少常量长度,均不合法。
2.若有定义 int a[10];,则数组 a 中元素的下标范围是( )
A. 1 到 10 B. 0 到 10 C. 0 到 9 D. 1 到 9
【答案】C
【解析】C语言数组下标从0开始,长度为10的数组,最大下标为长度减1,即9。
3.已知 int a[5] = {1, 2};,则 a[3] 的值为( )
A. 随机值 B. 2 C. 1 D. 0
【答案】D
【解析】当初始化列表中的元素个数少于数组长度时,剩余元素会自动初始化为0。
4.以下程序段的输出结果是( )
int a[5] = {10, 20, 30, 40, 50};
int i;
for(i = 0; i < 5; i++)
printf("%d ", a[i]);
A. 10 20 30 40 50 B. 10 20 30 40
C. 20 30 40 50 0 D. 编译错误
【答案】A
【解析】标准的数组遍历输出,循环从下标0到4,依次输出所有元素。
5.若有定义 int a[10];,以下对数组元素的引用正确的是( )
A. a[10] = 5; B. a[3.5] = 5;
C. int i=3; a[i] = 5; D. a(3) = 5;
【答案】C
【解析】A越界;B下标必须是整数;D应使用方括号[]而非圆括号()。C正确,变量可以作为下标。
6.执行以下语句后,数组 a 的内容为( )
int a[5] = {0};
a[0] = 1; a[1] = 2; a[2] = a[0] + a[1];
A. {1, 2, 3, 0, 0} B. {1, 2, 3, 4, 5}
C. {0, 0, 0, 0, 0} D. {1, 2, 0, 0, 0}
【答案】A
【解析】初始全0,a[2] 被赋值为 1+2=3,其余未修改元素保持0。
7.以下代码片段中,scanf 的正确用法是( )
int a[10], i;
for(i = 0; i < 10; i++)
scanf("%d", ______);
A. a[i] B. &a[i] C. a[i+1] D. &a[i+1]
【答案】B
【解析】scanf 需要变量的地址,数组元素的地址表示为 &a[i]。
8.以下代码的输出结果是( )
int a[3] = {1, 2, 3};
int i;
for(i = 0; i < 3; i++)
a[i] = a[i] * 2;
printf("%d", a[1]);
A. 2 B. 4 C. 6 D. 3
【答案】B
【解析】循环将每个元素乘以2,a[1] 原为2,乘以2后变为4。
9.以下一维数组初始化语句正确的是( )
A. int num[3]={1,2,3,4}; B. int num[4]={1,2};
C. int num[]={}; D. int num[4]=1,2,3;
【答案】B
【解析】初始化元素不能超数组长度;部分初始化剩余元素自动补 0;A 元素溢出、C 空初始化非法、D 缺少大括号。
10.在 C 语言中,一维数组名代表的是( )
A. 数组第一个元素的值 B. 数组首元素的地址
C. 数组全部元素的值 D. 数组元素的个数
【答案】B
【解析】数组名是常量地址,指向数组首个元素存储空间。
二、填空题。
1.C 语言一维数组的下标起始值为___________。
【答案】0
【解析】数组下标统一从 0 开始计数。
2.定义int a[5];,该数组最大合法下标是___________。
【答案】4
【解析】长度 5,下标范围 0~4。
3.若有 int a[5] = {1, 2};,则 a[2] 的值是___________。
【答案】0
【解析】未显式初始化的剩余元素自动置0。
4.已知 int a[10];,要引用数组 a 的最后一个元素,应使用___________。
【答案】a[9]
【解析】长度为10,最大下标为9。
5.以下程序段的功能是求数组元素之和,程序填空处应该填入的代码是___________。
int a[5] = {1, 2, 3, 4, 5};
int sum = 0, i;
for(i = 0; i < 5; i++)
sum = sum + ______;
【答案】a[i]
【解析】累加当前遍历到的数组元素。
6.已知 int a[5] = {5, 4, 3, 2, 1};,执行 a[0] = a[4]; 后,a[0] 的值变为___________。
【答案】1
【解析】将 a[4] 的值(即1)赋给 a[0]。
7.以下代码输出的是数组 a 的第 ______ 个元素。
printf("%d", a[3]);
【答案】4
【解析】 下标0是第1个,下标3是第4个。
8.数组 int b[3] = {5}; 相当于 int b[3] = {______, ______, ______}。
【答案】5, 0, 0
9.若int k=2; int a[5]={10,20,30,40,50}; 则a[k+1]的值是___________。
【答案】40
【解析】 k+1=3, a[3]=40。
10.若有 int m[4] = {2,4,6,8}; 则 m[m[2]-m[1]] 的值是___________。
【答案】6
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[5] = {1, 2, 3, 4, 5};
int i;
for(i = 0; i < 5; i++)
a[i] = a[i] + 1;
printf("%d", a[2]);}
【答案】4
2.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[4] = {0};
int i;
a[0] = 1; a[1] = 2; a[2] = 3;
for(i = 0; i < 4; i++)
printf("%d", a[i]);}
【答案】1230
3.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[5] = {5, 4, 3, 2, 1};
int i;
for(i = 0; i < 2; i++)
printf("%d", a[4-i]);}
【答案】12
4.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[3] = {1, 2, 3};
int b[3];
int i;
for(i = 0; i < 3; i++)
b[i] = a[i] * 2;
printf("%d", b[1]);}
【答案】4
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[5] = {10, 20, 30, 40, 50};
int i, sum = 0;
for(i = 0; i < 5; i++)
sum += a[i];
printf("%d", sum);}
【答案】150
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[4] = {1, 2, 3, 4};
int i;
for(i = 0; i < 3; i++)
a[i] = a[i+1];
printf("%d %d %d", a[0], a[1], a[2]);
}
【答案】2 3 4
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[5] = {1, 2, 3, 4, 5};
int i;
for(i = 1; i < 5; i++)
a[i] = a[i-1] + 1;
printf("%d", a[4]);}
【答案】5
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int x[5] = {2,4,6,8,10};
int i, s = 0;
for(i = 1; i < 5; i+=2)
s += x[i];
printf("%d", s);}
【答案】12
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int x[4] = {5,10,15,20};
int y = 0;
y = x[0] + x[x[0]/5-1];
printf("%d", y);
}
【答案】10
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int arr[5] = {1,3,5,7,9};
int i, s = 0;
for(i = 0; i < 5; i++)
if(arr[i] > 4)
s += arr[i];
printf("%d", s);}
【答案】21
四、程序填空题(根据题意,将空缺的语句补上)
1.以下程序将数组中的元素逆序存放并输出,请填空。
#include <stdio.h>
main() {
int a[5] = {1,2,3,4,5};
int i, temp;
for(i = 0; i < 2; i++) {
temp = a[i];
a[i] = a[4-i];
_______________;}
for(i = 0; i < 5; i++)
printf("%d ", a[i]);
}
【答案】a[4-i] = temp
2.以下程序计算数组中所有奇数的和,请填空。
#include <stdio.h>
int main() {
int arr[6] = {1,2,3,4,5,6};
int i, sum = 0;
for(i = 0; i < 6; i++)
if(______________)
sum += arr[i];
printf("%d", sum);
}
【答案】arr[i]% 2 == 1
3.以下程序查找数组中的最大值,请填空。
#include <stdio.h>
main() {
int a[5] = {12,45,6,89,23};
int i, max;
max = a[0];
for(i = 1; i < 5; i++)
if(____________________)
max = a[i];
printf("%d", max);
}
【答案】a[i] > max
4.以下程序统计数组中大于平均值的元素个数,请填空。
#include <stdio.h>
main() {
float score[5] = {80,90,85,88,92};
float ave, sum = 0;
int i, count = 0;
for(i = 0; i < 5; i++)
sum += score[i];
_______①_______;
for(i = 0; i < 5; i++)
if(______②______) count++;
printf("%d", count);
}
【答案】①ave = sum / 5 ②score[i] > ave
5.以下程序将数组元素循环右移一位,请填空。
#include <stdio.h>
int main() {
int a[5] = {1,2,3,4,5};
int i, temp;
temp = a[4];
for(i = 4; i > 0; i--) {
__________________;
}
a[0] = temp;
for(i = 0; i < 5; i++) {
printf("%d ", a[i]);
}
return 0;
}
【答案】a[i] = a[i-1]
五、编程题。
1. 编写程序,定义长度为8的数组,从键盘输入8个数,找出其中的最大值及其下标。
【参考代码】
#include <stdio.h>
main() {
int arr[8], i, max, pos;
printf("输入8个整数:");
for(i = 0; i < 8; i++) {
scanf("%d", &arr[i]);
}
max = arr[0];
pos = 0;
for(i = 1; i < 8; i++) {
if(arr[i] > max) {
max = arr[i];
pos = i;
}
}
printf("最大值:%d,下标:%d", max, pos);
}
2.编写程序,定义长度为6的数组并初始化,将数组元素逆序存储到另一个数组中,然后输出逆序后的数组。
【参考代码】
#include <stdio.h>
main() {
int a[6] = {1,2,3,4,5,6};
int b[6], i;
for(i = 0; i < 6; i++) {
b[i] = a[5-i];
}
printf("逆序数组:");
for(i = 0; i < 6; i++) {
printf("%d ", b[i]);
}
}
3.编写程序,从键盘输入8个整数存入数组,然后输出数组中重复出现的数字(每个数字只输出一次)。
【参考代码】
#include <stdio.h>
main() {
int a[8], i, j;
int found;
printf("输入8个整数:");
for(i = 0; i < 8; i++)
scanf("%d", &a[i]);
printf("重复数字:");
for(i = 0; i < 8; i++) {
found = 0;
for(j = 0; j < i; j++) {
if(a[i] == a[j]) {
found = 1;
break;
}
}
if(!found) {
for(j = i+1; j < 8; j++) {
if(a[i] == a[j]) {
printf("%d ", a[i]);
break;
}
}
}
}
}
4.编写程序,定义长度为10的数组,用循环给数组赋值:a[0]=1, a[1]=3, a[2]=5, ...(奇数序列),然后输出所有元素。
【参考代码】
#include <stdio.h>
main() {
int a[10], i;
for(i = 0; i < 10; i++)
a[i] = 2*i + 1;
printf("数组元素:");
for(i = 0; i < 10; i++)
printf("%d ", a[i]);
}
5.编写程序,输入6个互不相同的整数存入数组,然后输入一个整数x,查找x在数组中的位置,如果找到输出下标,否则输出"Not found"。
【参考代码】
#include <stdio.h>
main() {
int arr[6], x, i, pos = -1;
printf("输入6个不同的整数:");
for(i = 0; i < 6; i++)
scanf("%d", &arr[i]);
printf("输入要查找的数:");
scanf("%d", &x);
for(i = 0; i < 6; i++) {
if(arr[i] == x) {
pos = i;
break;
}
}
if(pos != -1)
printf("找到,下标:%d", pos);
else
printf("Not found");
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
6.1节:一维数组的定义与引用
一、单项选择题
1.以下合法的 C 语言一维数组定义语句是( )
A. int a[10.5]; B. int a[n];
C. int a[8]; D. int a[];
2.若有定义 int a[10];,则数组 a 中元素的下标范围是()
A. 1 到 10 B. 0 到 10 C. 0 到 9 D. 1 到 9
3.已知 int a[5] = {1, 2};,则 a[3] 的值为()
A. 随机值 B. 2 C. 1 D. 0
4.以下程序段的输出结果是()
int a[5] = {10, 20, 30, 40, 50};
int i;
for(i = 0; i < 5; i++)
printf("%d ", a[i]);
A. 10 20 30 40 50 B. 10 20 30 40
C. 20 30 40 50 0 D. 编译错误
5.若有定义 int a[10];,以下对数组元素的引用正确的是()
A. a[10] = 5; B. a[3.5] = 5;
C. int i=3; a[i] = 5; D. a(3) = 5;
6.执行以下语句后,数组 a 的内容为()
int a[5] = {0};
a[0] = 1; a[1] = 2; a[2] = a[0] + a[1];
A. {1, 2, 3, 0, 0} B. {1, 2, 3, 4, 5}
C. {0, 0, 0, 0, 0} D. {1, 2, 0, 0, 0}
7.以下代码片段中,scanf 的正确用法是()
int a[10], i;
for(i = 0; i < 10; i++)
scanf("%d", ______);
A. a[i] B. &a[i] C. a[i+1] D. &a[i+1]
8.以下代码的输出结果是()
int a[3] = {1, 2, 3};
int i;
for(i = 0; i < 3; i++)
a[i] = a[i] * 2;
printf("%d", a[1]);
A. 2 B. 4 C. 6 D. 3
9.以下一维数组初始化语句正确的是()
A. int num[3]={1,2,3,4}; B. int num[4]={1,2};
C. int num[]={}; D. int num[4]=1,2,3;
10.在 C 语言中,一维数组名代表的是()
A. 数组第一个元素的值 B. 数组首元素的地址
C. 数组全部元素的值 D. 数组元素的个数
二、填空题。
1.C 语言一维数组的下标起始值为___________。
2.定义int a[5];,该数组最大合法下标是___________。
3.若有 int a[5] = {1, 2};,则 a[2] 的值是___________。
4.已知 int a[10];,要引用数组 a 的最后一个元素,应使用___________。
5.以下程序段的功能是求数组元素之和,程序填空处应该填入的代码是___________。
int a[5] = {1, 2, 3, 4, 5};
int sum = 0, i;
for(i = 0; i < 5; i++)
sum = sum + ______;
6.已知 int a[5] = {5, 4, 3, 2, 1};,执行 a[0] = a[4]; 后,a[0] 的值变为___________。
7.以下代码输出的是数组 a 的第 ______ 个元素。
printf("%d", a[3]);
8.数组 int b[3] = {5}; 相当于 int b[3] = {______, ______, ______}。
9.若int k=2; int a[5]={10,20,30,40,50}; 则a[k+1]的值是___________。
10.若有 int m[4] = {2,4,6,8}; 则 m[m[2]-m[1]] 的值是___________。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[5] = {1, 2, 3, 4, 5};
int i;
for(i = 0; i < 5; i++)
a[i] = a[i] + 1;
printf("%d", a[2]);}
2.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[4] = {0};
int i;
a[0] = 1; a[1] = 2; a[2] = 3;
for(i = 0; i < 4; i++)
printf("%d", a[i]);}
3.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[5] = {5, 4, 3, 2, 1};
int i;
for(i = 0; i < 2; i++)
printf("%d", a[4-i]);}
4.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[3] = {1, 2, 3};
int b[3];
int i;
for(i = 0; i < 3; i++)
b[i] = a[i] * 2;
printf("%d", b[1]);}
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[5] = {10, 20, 30, 40, 50};
int i, sum = 0;
for(i = 0; i < 5; i++)
sum += a[i];
printf("%d", sum);}
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[4] = {1, 2, 3, 4};
int i;
for(i = 0; i < 3; i++)
a[i] = a[i+1];
printf("%d %d %d", a[0], a[1], a[2]); }
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a[5] = {1, 2, 3, 4, 5},i;
for(i = 1; i < 5; i++)
a[i] = a[i-1] + 1;
printf("%d", a[4]);}
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int x[5] = {2,4,6,8,10};
int i, s = 0;
for(i = 1; i < 5; i+=2)
s += x[i];
printf("%d", s);}
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int x[4] = {5,10,15,20};
int y = 0;
y = x[0] + x[x[0]/5-1];
printf("%d", y); }
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int arr[5] = {1,3,5,7,9};
int i, s = 0;
for(i = 0; i < 5; i++)
if(arr[i] > 4)
s += arr[i];
printf("%d", s);}
四、程序填空题(根据题意,将空缺的语句补上)
1.以下程序将数组中的元素逆序存放并输出,请填空。
#include <stdio.h>
main() {
int a[5] = {1,2,3,4,5};
int i, temp;
for(i = 0; i < 2; i++) {
temp = a[i];
a[i] = a[4-i];
_______________;}
for(i = 0; i < 5; i++)
printf("%d ", a[i]); }
2.以下程序计算数组中所有奇数的和,请填空。
#include <stdio.h>
int main() {
int arr[6] = {1,2,3,4,5,6};
int i, sum = 0;
for(i = 0; i < 6; i++)
if(______________)
sum += arr[i];
printf("%d", sum); }
3.以下程序查找数组中的最大值,请填空。
#include <stdio.h>
main() {
int a[5] = {12,45,6,89,23};
int i, max;
max = a[0];
for(i = 1; i < 5; i++)
if(____________________)
max = a[i];
printf("%d", max); }
4.以下程序统计数组中大于平均值的元素个数,请填空。
#include <stdio.h>
main() {
float score[5] = {80,90,85,88,92};
float ave, sum = 0;
int i, count = 0;
for(i = 0; i < 5; i++)
sum += score[i];
_______①_______;
for(i = 0; i < 5; i++)
if(______②______) count++;
printf("%d", count); }
5.以下程序将数组元素循环右移一位,请填空。
#include <stdio.h>
main() {
int a[5] = {1,2,3,4,5};
int i, temp;
temp = a[4];
for(i = 4; i > 0; i--) {
__________________; }
a[0] = temp;
for(i = 0; i < 5; i++)
printf("%d ", a[i]); }
五、编程题。
1. 编写程序,定义长度为8的数组,从键盘输入8个数,找出其中的最大值及其下标。
2.编写程序,定义长度为6的数组并初始化,将数组元素逆序存储到另一个数组中,然后输出逆序后的数组。
3.编写程序,从键盘输入8个整数存入数组,然后输出数组中重复出现的数字(每个数字只输出一次)。
4.编写程序,定义长度为10的数组,用循环给数组赋值:a[0]=1, a[1]=3, a[2]=5, ...(奇数序列),然后输出所有元素。
5.编写程序,输入6个互不相同的整数存入数组,然后输入一个整数x,查找x在数组中的位置,如果找到输出下标,否则输出"Not found"。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$