第17卷 一维数组的定义和使用 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计知识考点双析卷》

2025-10-29
| 2份
| 22页
| 123人阅读
| 1人下载

内容正文:

编写说明: 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计》考点双析卷专辑,依据省教育厅《湖南省普通高等学校对口招生考试基本要求和考试大纲》编写。“考点双析卷”即围绕一个考点,一份是老师的讲解卷一份是学生的练习卷,助力师生构建 “讲练结合”的学习闭环,特别适用于湖南省普通高等学校对口招生考试第一轮高考复习教学。 本专辑第17卷精准对标湖南省考纲,考试内容及范围【C语言程序设计知识】: (九)一维数组的定义和使用 湖南省普通高等学校对口招生考试 计算机应用类 《C语言程序设计》考点双析卷 第17卷 一维数组的定义和使用 老师讲解卷 时间:45分钟 总分:100分 班级_______ 姓名_______ 学号_______ 成绩_______ 一、单项选择题(本大题共20小题,每题3分,共60分) 1.有如下说明:int a[10]={0,1,2,3,4,5,6,7,8,9};则数值不为9的表达式是(   ) A.a[10-1] B.a[8] C.a[9]-0 D.a[9]-a[0] 【答案】B 【分析】数组a的初始值为:a[0]=0, a[1]=1, a[2]=2, a[3]=3, a[4]=4, a[5]=5, a[6]=6, a[7]=7, a[8]=8, a[9]=9 【详解】a[10-1]:即a[9],值为9。 a[8]:值为8(不是9)。 a[9]-0:即9-0=9。 a[9]-a[0]:即9-0=9。 因此,数值不为9的表达式是a[8] 2.下列关于数组的描述正确的是(   ) A.数组的大小是固定的,但可以有不同类型的数组元素 B.数组的大小是可变的,但所有数组元素的类型必须相同 C.数组的大小是固定的,所有数据元素的类型必须相同 D.数组的大小是可变的,可以有不同类型的数组元素 【答案】C 【详解】在C语言中,数组一旦定义,其大小(元素个数)就是固定的,无法动态改变。 数组中的所有元素必须是相同的数据类型(例如全部是int、全部是char等)。 3.下列程序的运行结果为(   ) main() {char a[20]={"abcdo"}; printf("%d",sizeof(a));getch();} A.3 B.4 C.5 D.20 【答案】B 4.下列关于一维整型数组a的说明中,正确的是(   ) A.int a(10); B.int n=10,a[n]; C.int n;scanf(“%d”,&n);int a[n]; D.#define SIZE 10 int a[SIZE]; 【答案】D 5.以下关于数组越界的描述,错误的是(   ) A.编译器不会检测数组越界 B.数组越界可能导致程序崩溃 C.数组越界访问的是非法内存地址 D.数组越界时系统会自动调整索引 【答案】D 【详解】C 语言不检查数组越界,越界访问可能导致内存错误,系统不会自动调整。 6.下列对空间复杂度描述正确的是(   ) A.int arr[5] = {1, 2, 3, 4, 5, 6}; B.int arr[] = {1, 2, 3, 4}; C.char str[5] = "Hello"; D.float f[3] = {1.0, 2.0, 3.0, 4.0}; 【答案】B 【详解】数组初始化时,元素个数不能超过指定长度,未指定长度则根据初始化值确定。 7.执行以下程序的输出结果是(   ) void  fun(int  *p) {printf("%d ", p[5]);  } main( ) {int  a[10]={1,2,3,4,5,6,7,8,9,10}; fun(&a[3]);getch();} A.5 B.6 C.8 D.9 【答案】D 【详解】数组 a 为 {1,2,3,4,5,6,7,8,9,10}。   fun(&a[3]) 将 a[3](值为4)的地址传入函数,此时指针 p 指向 a[3]。 p[5] 表示从 p 指向的位置(即 a[3])向后偏移5个元素,即访问 a[8](值为9) 因此输出结果为 9。 8.若有定义int a[6];下列数组元素引用中,正确的是(   ) A.a={1,2,3,4,5,6} B.a[6]={1,2,3,4,5,6} C.a[6]=10; D.a[0]=1;a[1]=a[0]+5; 【答案】D 【详解】A选项,a是地址常量,不能赋值。B、C选项,a[6]不是数组元素,越界。故选D。 9.以下对数组 s 的初始化错误的选项是 (   ) A.char s[5]={“abc”}; B.char s[5]=””; C.char s[5]={‘a’,’b’,’c’}; D.char s[5]=”abcde”; 【答案】D 10.以下程序段的运行结果是(   ) int main() {     int k[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, *p = k + 4;     int i = p[2] + k[3];     printf("%d ", i); } A.7 B.8 C.9 D.10 【答案】C 【详解】指针p的地址为k+4,即指向数组元素“4”的地址。p[2]指向的值为数组元素中的“6”,k[3]指向数组元素当中的“3”,因此i的值为6+3,即为9。 11.以下程序的运行结果是(     ) int main() {     int s, k[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, i = 1;     for (s = 1; i < 10 - i; i++)         s += k[i];     printf("%d ", s); } A.12 B.14 C.15 D.20 【答案】C 【详解】当 i = 1,10 - i = 9,i < 9 满足,执行循环。当 i = 2,10 - i = 8,i < 8 满足,执行循环。这个过程一直持续到 i = 4,因为 10 - i = 6,i < 6 满足。当 i = 5 时,10 - i = 5,条件 i < 5 不满足,所以循环结束。初始 s = 1,i = 1: s += k[1] => s = 1 + 2 = 3,i = 2: s += k[2] => s = 3 + 3 = 6,i = 3: s += k[3] => s = 6 + 4 = 10 i = 4: s += k[4] => s = 10 + 5 = 15。 12.下面程序执行后输出的值是(    ) #include <stdio.h> int main() {     int arr[] = {1,2,(3,4),5};     printf("%d ", sizeof(arr));     return 0; } A.4 B.16 C.20 D.5 【答案】B 【详解】sizeof是单目操作符,计算元素的大小,单位是字节。arr数组有4个元素,下标2的元素是一个逗号表达式的值,逗号表达式的结果是最后一个元素。arr数组的大小是4,并且这是int类型的数组,4字节,因此4*4为16字节。 13.定义了一维 int 型数组 a[10] 后,下面错误的引用是(     ) A.a[0] = 1; B.a[0] = 5*2; C.a[10] = 2; D.a[1] = a[2] * a[0]; 【答案】C 【详解】a[10]超出了数组的有效索引范围,因为它尝试访问第11个元素,而数组只有10个元素(索引0到9)。 14.以下代码的输出结果是(   ) int arr[3] = {1,2,3};   printf("%d", arr[3]); A.0 B.3 C.随机值 D.编译错误 【答案】C 15.以下关于定义数组的语句的叙述中,下列说法正确的是(   ) A.int a[5] = {0}; 该语句是合法的 B.int a[] = {0,1,2};该语句是不合法的,遗漏了数组的大小 C.char a[2] = {"C", "D"}; 是合法的,定义了一个包含两个字符的数组 D.char a[3]; a = "AB"; 是合法的,因为数组有三个字符空间的容量,可以保存两个字符 【答案】A 【详解】语句“int a[5] = {0}”创建一个为5个int长度的数组并将其中的值均初始化为0。语句“int a[] = {0,1,2}”可以省略数组的长度,根据元素个数来匹配数组长度。“char a[2] = {"C", "D"}”数组中的元素是以单引号的形式来进行存储。“char a[3]; a = "AB"”因字符串最后有结束标志‘\0’,因此不可以存储三个字符长度。 16.假设每个int型数据占2字节,若有定义:int aa[10]={1,2,3,4};,则aa数组占内存字节数是(   ) A.20 B.4 C.8 D.40 【答案】A 17.若有定义:int abc[10];,则下面不能表示abc[1]的地址的是(   ) A.&abc[0]+1 B.&abc[1] C.&abc[0]++ D.abc+1 【答案】C 18.在C语言中,数组的下标可以是(   ) A.整型常量表达式 B.整型表达式 C.整型常量或整型表达式 D.任意类型的表达式 【答案】A 19.以下关于数组越界的描述,正确的是(   ) A.编译器会检测所有越界访问 B.越界访问可能导致程序崩溃 C.越界访问结果一定是0 D.C语言允许越界访问 【答案】B 20.以下数组声明中,错误的是(   ) A.int arr[] = {1,2,3}; B.int arr[][2] = {{1}, {2}}; C.int arr[2][] = {{1,2}, {3,4}}; D.int arr[3] = {0}; 【答案】C 二、程序设计题(本大题共4小题,每题10分,共40分) 21.题目:输入10个互不相同的整数并保存到数组中,找到最大元素并删除它,输出删除后的数组。 #include<stdio.h> void main() {          int a[10];          int i,p=-1,max;         /*******space*******/ /*******space*******/          for(i=0;i<9;i++)                 printf("%d ",a[i]); } 【答案】for(i=0;i<10;i++)                scanf("%d",&a[i]);           max=a[0];           for(i=0;i<10;i++)               if(a[i]>max)               {                    max=a[i];                    p=i;               }           for(i=p;i<10-1;i++)               a[i]=a[i+1]; 【详解】在该数组中利用找最大值的固定方法找到最大值,然后记下该最大值的索引,然后将该索引后的所有元素向前挪动一位即删除了该最大元素。 22.请编写函数fun(),函数的功能是:将一个一维数组(不超过100个元素)中的最小元素与最大元素交换。 输入第一行为一维数组的元素个数,第二行为数组的元素值。     #include <stdio.h> void fun(int a[],int n){ int i,min,min_id=0,max,max_id=0; /*******space*******/ /*******space*******/ } void main() {          int i,a[100],n;          scanf("%d",&n);          for(i=0;i<n;i++)                 scanf("%d",&a[i]);          fun(a,n);          for(i=0;i<n;i++)                 printf("%d ",a[i]); } 【答案】min=a[0]; max=a[0]; for(i=0;i<n;i++) {         if(a[i]<min)         {             min=a[i];             min_id=i;         }         if(a[i]>max)         {             max=a[i];             max_id=i;         }     }     a[min_id]=max; a[max_id]=min; 【详解】假设第一个值为最大值且为最小值,记下最大值和最小值保存在max和min变量中,同时记下最大值的索引和最小值的索引保存在max_id和min_id中,将最大值和最小值和数组中后面所有的值进行比较,一旦找到更大的值或更小值,则改变max和min以及max_id和min_id的值。 循环结束,将最大值和最小值交换即可。 23.题目:一个数如果恰好是等于它的因子之和,这个数就称为"完数"。例如,6的因子是1,2,3,而6=1+2+3,因此6是完数。   #include<stdio.h> #include <stdlib.h> void perfect(int number) {       int k,i=0,j= 0;       int sum = 0;       int arr[100] = {0}; /*******space*******/ /*******space*******/      if(number==sum){           printf("%3d是完数,它的因子:",sum);           for (k = 0; k < j;  k++)  {           printf("%d ", arr[k]);      }      printf(" "); } int main(){     int num = 0;     for (num = 1; num <= 1000; num++) {        perfect(num);     }     system("pause");     return 0; } 【答案】for(i = 1;i<number;i++){              if(number % i==0) {                   arr[j++] = i;                   sum = sum + i;              } } 【详解】判断一个数是否是完数,即是找除开自身之外的所有因子和。因子和若等于自身,则该数是完数。取出1~number-1范围内的所有数,判断哪些数是因子进行求和即可。 24.函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据为: 15、23、43、54、55、64、67、78、98,则逆置后依次为:98、78、67、64、55、54、43、23、15。 #include    <stdio.h> void fun(int  a[], int  n) {   int  i,j,t;       /*******space*******/ /*******space*******/ } void main() {   int  b[9]={15,23,43,54,55,64,67,78,98}, i;     printf("【The original data  :】 ");     printf("【");     for(i=0; i<9; i++)        printf("%4d ", b[i]);     printf("】 ");     fun(b, 9);     printf(" 【The data after invert  :】 ");     for (i=0; i<9; i++)        printf("%4d ", b[i]);     printf(" "); } 【答案】          for(i=0,j=n-1;i<j;i++,j--)           {                 t=a[i];                 a[i]=a[j];                 a[j]=t; } 【详解】此题考察数组逆序的两个索引值的逆序方法。当条件给出两个索引值进行逆序存放时,让其中一个变量位于第一个值的索引,另一个变量位于最后一个值的索引,二者进行值的交换,每交换一次,前面的索引向后走,后面的索引向前走,当两个索引相遇或这前索引大于后索引时停止。 试卷第6页,共6页 试卷第5页,共6页 学科网(北京)股份有限公司 $ 编写说明: 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计》考点双析卷专辑,依据省教育厅《湖南省普通高等学校对口招生考试基本要求和考试大纲》编写。“考点双析卷”即围绕一个考点,一份是老师的讲解卷一份是学生的练习卷,助力师生构建 “讲练结合”的学习闭环,特别适用于湖南省普通高等学校对口招生考试第一轮高考复习教学。 本专辑第17卷精准对标湖南省考纲,考试内容及范围【C语言程序设计知识】: (九)一维数组的定义和使用 湖南省普通高等学校对口招生考试 计算机应用类 《C语言程序设计》考点双析卷 第17卷 一维数组的定义和使用 老师讲解卷 时间:45分钟 总分:100分 班级_______ 姓名_______ 学号_______ 成绩_______ 一、单项选择题(本大题共20小题,每题3分,共60分) 1.有如下说明:int a[10]={0,1,2,3,4,5,6,7,8,9};则数值不为9的表达式是(   ) A.a[10-1] B.a[8] C.a[9]-0 D.a[9]-a[0] 2.下列关于数组的描述正确的是(   ) A.数组的大小是固定的,但可以有不同类型的数组元素 B.数组的大小是可变的,但所有数组元素的类型必须相同 C.数组的大小是固定的,所有数据元素的类型必须相同 D.数组的大小是可变的,可以有不同类型的数组元素 3.下列程序的运行结果为(   ) main() {char a[20]={"abcdo"}; printf("%d",sizeof(a));getch();} A.3 B.4 C.5 D.20 4.下列关于一维整型数组a的说明中,正确的是(   ) A.int a(10); B.int n=10,a[n]; C.int n;scanf(“%d”,&n);int a[n]; D.#define SIZE 10 int a[SIZE]; 5.以下关于数组越界的描述,错误的是(   ) A.编译器不会检测数组越界 B.数组越界可能导致程序崩溃 C.数组越界访问的是非法内存地址 D.数组越界时系统会自动调整索引 6.下列对空间复杂度描述正确的是(   ) A.int arr[5] = {1, 2, 3, 4, 5, 6}; B.int arr[] = {1, 2, 3, 4}; C.char str[5] = "Hello"; D.float f[3] = {1.0, 2.0, 3.0, 4.0}; 7.执行以下程序的输出结果是(   ) void  fun(int  *p) {printf("%d ", p[5]);  } main( ) {int  a[10]={1,2,3,4,5,6,7,8,9,10}; fun(&a[3]);getch();} A.5 B.6 C.8 D.9 8.若有定义int a[6];下列数组元素引用中,正确的是(   ) A.a={1,2,3,4,5,6} B.a[6]={1,2,3,4,5,6} C.a[6]=10; D.a[0]=1;a[1]=a[0]+5; 9.以下对数组 s 的初始化错误的选项是 (   ) A.char s[5]={“abc”}; B.char s[5]=””; C.char s[5]={‘a’,’b’,’c’}; D.char s[5]=”abcde”; 10.以下程序段的运行结果是(   ) int main() {     int k[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, *p = k + 4;     int i = p[2] + k[3];     printf("%d ", i); } A.7 B.8 C.9 D.10 11.以下程序的运行结果是(     ) int main() {     int s, k[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, i = 1;     for (s = 1; i < 10 - i; i++)         s += k[i];     printf("%d ", s); } A.12 B.14 C.15 D.20 12.下面程序执行后输出的值是(    ) #include <stdio.h> int main() {     int arr[] = {1,2,(3,4),5};     printf("%d ", sizeof(arr));     return 0; } A.4 B.16 C.20 D.5 13.定义了一维 int 型数组 a[10] 后,下面错误的引用是(     ) A.a[0] = 1; B.a[0] = 5*2; C.a[10] = 2; D.a[1] = a[2] * a[0]; 14.以下代码的输出结果是(   ) int arr[3] = {1,2,3};   printf("%d", arr[3]); A.0 B.3 C.随机值 D.编译错误 15.以下关于定义数组的语句的叙述中,下列说法正确的是(   ) A.int a[5] = {0}; 该语句是合法的 B.int a[] = {0,1,2};该语句是不合法的,遗漏了数组的大小 C.char a[2] = {"C", "D"}; 是合法的,定义了一个包含两个字符的数组 D.char a[3]; a = "AB"; 是合法的,因为数组有三个字符空间的容量,可以保存两个字符 16.假设每个int型数据占2字节,若有定义:int aa[10]={1,2,3,4};,则aa数组占内存字节数是(   ) A.20 B.4 C.8 D.40 17.若有定义:int abc[10];,则下面不能表示abc[1]的地址的是(   ) A.&abc[0]+1 B.&abc[1] C.&abc[0]++ D.abc+1 18.在C语言中,数组的下标可以是(   ) A.整型常量表达式 B.整型表达式 C.整型常量或整型表达式 D.任意类型的表达式 19.以下关于数组越界的描述,正确的是(   ) A.编译器会检测所有越界访问 B.越界访问可能导致程序崩溃 C.越界访问结果一定是0 D.C语言允许越界访问 20.以下数组声明中,错误的是(   ) A.int arr[] = {1,2,3}; B.int arr[][2] = {{1}, {2}}; C.int arr[2][] = {{1,2}, {3,4}}; D.int arr[3] = {0}; 二、程序设计题(本大题共4小题,每题10分,共40分) 21.题目:输入10个互不相同的整数并保存到数组中,找到最大元素并删除它,输出删除后的数组。 #include<stdio.h> void main() {          int a[10];          int i,p=-1,max;         /*******space*******/ /*******space*******/          for(i=0;i<9;i++)                 printf("%d ",a[i]); } 22.请编写函数fun(),函数的功能是:将一个一维数组(不超过100个元素)中的最小元素与最大元素交换。 输入第一行为一维数组的元素个数,第二行为数组的元素值。     #include <stdio.h> void fun(int a[],int n){ int i,min,min_id=0,max,max_id=0; /*******space*******/ /*******space*******/ } void main() {          int i,a[100],n;          scanf("%d",&n);          for(i=0;i<n;i++)                 scanf("%d",&a[i]);          fun(a,n);          for(i=0;i<n;i++)                 printf("%d ",a[i]); } 23.题目:一个数如果恰好是等于它的因子之和,这个数就称为"完数"。例如,6的因子是1,2,3,而6=1+2+3,因此6是完数。   #include<stdio.h> #include <stdlib.h> void perfect(int number) {       int k,i=0,j= 0;       int sum = 0;       int arr[100] = {0}; /*******space*******/ /*******space*******/      if(number==sum){           printf("%3d是完数,它的因子:",sum);           for (k = 0; k < j;  k++)  {           printf("%d ", arr[k]);      }      printf(" "); } int main(){     int num = 0;     for (num = 1; num <= 1000; num++) {        perfect(num);     }     system("pause");     return 0; } 24.函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据为: 15、23、43、54、55、64、67、78、98,则逆置后依次为:98、78、67、64、55、54、43、23、15。 #include    <stdio.h> void fun(int  a[], int  n) {   int  i,j,t;       /*******space*******/ /*******space*******/ } void main() {   int  b[9]={15,23,43,54,55,64,67,78,98}, i;     printf("【The original data  :】 ");     printf("【");     for(i=0; i<9; i++)        printf("%4d ", b[i]);     printf("】 ");     fun(b, 9);     printf(" 【The data after invert  :】 ");     for (i=0; i<9; i++)        printf("%4d ", b[i]);     printf(" "); } 试卷第6页,共6页 试卷第5页,共6页 学科网(北京)股份有限公司 $

资源预览图

第17卷 一维数组的定义和使用 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计知识考点双析卷》
1
第17卷 一维数组的定义和使用 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计知识考点双析卷》
2
第17卷 一维数组的定义和使用 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计知识考点双析卷》
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。