第6章 第1节:一维数组的定义与引用(练习)-《C语言程序设计》(电子工业出版社)上好课

2026-04-29
| 2份
| 23页
| 38人阅读
| 0人下载

内容正文:

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"。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。