内容正文:
编写说明: 湖南省普通高等学校对口招生考试-计算机应用类《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页
学科网(北京)股份有限公司
$