内容正文:
编写说明: 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计》考点双析卷专辑,依据省教育厅《湖南省普通高等学校对口招生考试基本要求和考试大纲》编写。“考点双析卷”即围绕一个考点,一份是老师的讲解卷一份是学生的练习卷,助力师生构建 “讲练结合”的学习闭环,特别适用于湖南省普通高等学校对口招生考试第一轮高考复习教学。
本专辑第18卷精准对标湖南省考纲,考试内容及范围【C语言程序设计知识】:
(九)一维数组的定义和使用
湖南省普通高等学校对口招生考试 计算机应用类
《C语言程序设计》考点双析卷 第18卷
一维数组的定义和使用 学生练习卷
时间:45分钟 总分:100分
班级_______ 姓名_______ 学号_______ 成绩_______
一、单项选择题(本大题共20小题,每题3分,共60分)
1.在C语言中,引用数组元素时,其数组下标的数据类型允许是( )
A.整型常量 B.整型表达式
C.整型常量或整型表达式 D.任何类型的表达式
【答案】C
【详解】在C语言中,引用数组元素时使用的数组下标必须是整型。这包括整型常量和整型表达式。
2.若有定义:int ch1[10];,则不能代表数组元素ch1[1]地址的是( )
A.&ch1[0]+1
B.&ch1[l]
C.&ch1[0]++
D.ch1+1
【答案】C
3.假定一个 int型变量占用两个字节,若有定义:int x[5]={0,2,4};则数组x在内存中所占字节数是( )
A.6 B.10 C.20 D.3
【答案】B
4.以下对一维数组的定义中不正确的是( )
A.double x[5]={2.0,0,6.0,8.0,10.0};
B.int y[5]={2,1,3,5,7,9};
C.char z[ ]={‘1’,‘2’,‘3’};
D.char h[ ]={‘\x10’,‘\xa’,‘\x8’};
【答案】B
5.以下对一维数组a的定义中正确的是( )
A.char a(10); B.int a[0..10];
C.int a[10]; D.int c=10; int a[c];
【答案】C
6.有以下程序
#include <stdio.h>
void main()
{
int a[]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{
case 0:
switch(a[i]%2)
{case 0:a[i]++;break;
case 1:a[i]--;}
break;
case 1:a[i]=0;
}
for(i=0;i<4;i++)
printf("%d",a[i]);
printf("
");
}
程序运行后的输出结果是( )
A.2 0 5 0 B.3 3 4 4 C.3 0 4 0 D.0 3 0 4
【答案】C
【详解】使用两个嵌套的 for 循环和 switch 语句来修改数组 a 的元素。外层 for 循环遍历数组索引,内层 switch 根据索引的奇偶性对数组元素进行操作。当索引 i 为偶数时,进一步检查数组元素 a[i] 的奇偶性。如果是偶数,将其加 1;如果是奇数,将其减 1。当索引 i 为奇数时,直接将数组元素 a[i] 设置为 0。 初始数组 a 是 {2, 3, 5, 4}。经过循环,数组变为 {3, 0, 4, 0}。最后的 for 循环打印数组元素,输出结果是 3040。
7.在C语言的一维数组中,以下选项中的值会被默认初始化为0的是( )
A.float数组 B.char数组 C.int数组 D.string数组
【答案】C
【详解】在C语言中,未进行显式初始化的一维数组元素会被默认初始化为0。
8.可以使用下列哪种方式对一维整型数组的所有元素进行赋值( )
A.arr[0] = {1, 2, 3, 4}; B.int arr[4] = {1, 2, 3, 4};
C.arr = {1, 2, 3, 4}; D.int arr[] = {1, 2, 3, 4};
【答案】D
【详解】在定义数组时可以使用选项D的方式对一维整型数组进行赋值,其中省略了数组大小。
9.在定义一维数组时可以省略数组大小,
A.但必须在初始化时指定数组大小
B.但无法进行初始化
C.但此时数组大小默认为0
D.但必须在后续代码中进行赋值来确定数组大小
【答案】A
【详解】在定义一维数组时可以省略数组大小,但在初始化时需要指定数组大小。
10.下列哪种初始化方式对整型数组是合法的( )
A.int arr[] = {1, 2, 3}; B.int arr[3];
C.int arr[3] = {1, 2, 3, 4}; D.int arr[3] = {1, 2};
【答案】A
【详解】选项A中给出了正确的整型数组初始化方式,提供了与数组大小相符合的初始化值。
11.C语言中的一维数组初始化必须满足的条件是( )
A.初始化值的个数不能超过数组的大小
B.初始化值的个数必须与数组的大小相同
C.初始化值的个数可以少于或等于数组的大小
D.不需要满足任何条件,初始化个数没有限制
【答案】C
【详解】初始化一维数组时,可以提供少于或等于数组大小的初始化值,多余的元素会被初始化为0。
12.在C语言中,以下对一维数组初始化说法正确的是( )
A.只能在定义数组时进行初始化,之后无法更改
B.可以在定义数组时进行初始化,也可以在后续代码中进行赋值
C.只能在后续代码中进行赋值,不能在定义数组时进行初始化
D.一维数组无法进行初始化
【答案】B
【详解】一维数组可以在定义时进行初始化,并且在后续代码中也可以对数组进行赋值操作。
13.执行int a[3]={1};后,a[1]的值是( )
A.0 B.1 C.随机值 D.语法错误
【答案】A
14.数组名arr表示的是( )
A.第一个元素的地址 B.所有元素的地址
C.最后一个元素的地址 D.数组长度
【答案】A
15.执行int a[5]={1,2};后,a[4]的值是( )
A.0 B.随机值 C.1 D.编译错误
【答案】A
16.执行下列语句后,a[6]的值为( )
int a[10]={12,23,5,20,3,6,18};
a[6]+=a[2]+a[5]+a[4]-a[3];
A.20 B.12 C.18 D.24
【答案】B
【详解】执行语句 a[6]+=a[2]+a[5]+a[4]-a[3]; 后,a[6] 的新值是初始值 18 加上表达式 5+6+3-20 的结果,即 18 + (-6) = 12。因此,a[6] 的值变为 12。
17.下列哪项是一维数组 b 的正确初始化方式( )
A.int b[5] = {0, 1, 2, 3}; B.int b[5] = {};
C.int b[] = {4, 5, 6, 7, 8}; D.int b[5] = "Hello";
【答案】B
【详解】数组的大小和初始化值的数量不匹配,在C语言中,使用花括号 {} 可以省略数组的初始化值,系统会自动初始化为0。字符串字面量应该用来初始化字符数组,而不是整型数组。
18.在C语言中,关于一维数组的特性,以下叙述正确的是( )
A.数组的大小在定义后可以改变,但数组内的元素必须是同一数据类型。
B.数组的大小在定义后是固定的,但可以包含不同类型的数据。
C.数组的大小在定义后是固定的,且数组内的所有元素必须是同一数据类型。
D.数组的大小是可变的,也可以包含不同类型的数据。
【答案】C
【详解】C语言中的数组是一种固定长度的序列,其大小在数组定义时确定,并在程序的整个运行期间保持不变。此外,数组的所有元素必须是相同的数据类型。
19.在C语言中,以下哪个选项是一维数组 a 的正确声明语句( )
A.int a(10); B.int N=5, a[N];
C.int n; D.#define SIZE 9 int a[SIZE];
【答案】D
【详解】在C语言中,数组的声明不需要使用圆括号。数组的大小在C语言中必须在编译时就确定,不能由运行时的变量值决定。使用预处理器定义了一个宏 SIZE,其值为9,然后声明了一个大小为 SIZE 的整型数组 a。这是一个有效的数组声明语句。
20.下面程序中有错误的行是 (每行程序前面的数字表示行号)( )
1 main()
2 {
3 float a[3]={1};
4 int i;
5 scanf(“%f”,a);
6 for(i=1;i<3;i++) a[0]=a[0]+a[i];
7 printf(“a[0]=%d
”,a[0]);
8 }
A.3 B.6 C.7 D.5
【答案】C
【详解】printf中的格式说明符应该是%f,因为a[0]是float类型的,而不是%d。
二、程序设计题(本大题共4小题,每题10分,共40分)
21.函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中, 接着把a所指数组中的最大值放在a[1]元素中,再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3], 以此类推。例如,若a所指数组中的数据最初排列为: 9、1、4、2、3、6、5、8、7;则按规则移动后,数据排列为: 1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标
#include<stdio.h>
#define N 9
void fun(int a[],int n)
{
int i,j,max,min,px,pn,t;
for(i=0;i<n-1;i+=2)
{
/*******space*******/
/*******space*******/
}
if (pn != i)
{
t = a[i];
a[i] = min;
a[pn] = t;
if(px == i) px =pn;
}
if (px != i+1)
{
t=a[i+1];
a[i+1]=max;
a[px]=t;
}
}
void main()
{
int b[N]={9,1,4,2,3,6,5,8,7}, i;
printf("【The original data:】
");
printf("【");
for (i=0; i<N; i++)
printf("%4d ", b[i]);
printf("】
");
fun(b, N);
printf("【The data after moving:】
");
for (i=0; i<N; i++)
printf("%4d ",b[i]);
printf("
");
}
【答案】max=min=a[i];
px=pn=i;
for(j=i+1;j<n;j++)
{
if (max<a[j]){
max = a[j];
px = j;
}
if (min>a[j]){
min = a[j];
pn = j;
}
}
【详解】把该数组中分为按照每两个分为多轮,每一轮找到当前的最大值和最小值,然后放在指定的位置,进行多次即可。
22.编写函数fun,其功能是:求出1~100之间能被8和9整除,但不同同时被8和9整除的所有整数,并将其放在a所指的数组中,通过n返回这些个数。
#include<stdio.h>
void fun(int *a,int *n)
{
/*******space*******/
/*******space*******/
}
main(){
int b[100],n,k;
fun(b,&n);
for(k=0;k<n;k++)
{
if((k+1)%10==0)
printf("
");
else
printf("%5d",b[k]);
}
}
【答案】int i,j=0;
for(i=1;i<100;i++)
{
if((i%8==0 && i%9!=0) || (i%8!=0 && i%9==0)) a[j++]=i;
}
*n=j;
【详解】函数主要处理满足条件的数满将这些数放在数组中,所以在自定义函数里取出1~100以内的数,注意该条件的判断,将满足的数存放在接受实参b数组的形参a中。
23.函数功能:将一维数组(不超过50个元素)中的最小元素和最大元素交换。输入的第一个值是一维数组元素的个数,然后输入数组的元素值。
#include<stdio.h>
void fun(int a[],int n)
{
Int i,min,max,min_id=0,max_id=0;
/*******space*******/
/*******space*******/
}
void main()
{
int i,a[50],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=max=a[0];
for(i=1;i<n;i++)
{
if(max<a[i]){
max=a[i];
max_id=i;
}
if(min>a[i]){
min=a[i];
min_id=i;
}
}
t=a[max_id];
a[max_id]=a[min_id];
a[min_id]=t;
【详解】假设数组中的第一个值为最大值也为最小值,然后记下最大值和最小值给max和min,同时记下最大值的索引和最小值的索引max_id和min_id。拿着最大值和最小值去和后面所有的值进行比较,一旦找到更大的,则改变最大值和最大值的索引,一旦找到更小的,则改变最小值和最小值的索引。最后拿着最大值索引以及最小值的索引,二者交换位置即可。
24.以下程序的功能是删去一维数组s中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
#include<stdio.h>
int del(int s[],int n){
int i,j=1;
/*******space*******/
/*******space*******/
}
int main(){
Int s[]={2,3,3,3,3,4,4,4,4,4,10,10,10,10,13,13,15,15,18,18};
int i,m,n=sizeof(s)/sizeof(int);
for(i=0;i<n;i++)
printf("%d ",s[i]);
m=del(s,n);
printf("
");
for(i=0;i<m;i++)
printf("%d ",s[i]);
printf("
");
return 1;
}
【答案】for(i=0;i<n;i++){
if(s[i]!=s[j]){
j++;
s[j]=s[i];
}
}
【详解】去重的固定方法,i从0开始,j从1开始,i和j用作判断是否相等的索引,同时j还做重新存放值的索引,当两个不相等时,往j位置存放即可,注意存放时j的索引先+1。
试卷第6页,共6页
试卷第5页,共6页
学科网(北京)股份有限公司
$
编写说明: 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计》考点双析卷专辑,依据省教育厅《湖南省普通高等学校对口招生考试基本要求和考试大纲》编写。“考点双析卷”即围绕一个考点,一份是老师的讲解卷一份是学生的练习卷,助力师生构建 “讲练结合”的学习闭环,特别适用于湖南省普通高等学校对口招生考试第一轮高考复习教学。
本专辑第18卷精准对标湖南省考纲,考试内容及范围【C语言程序设计知识】:
(九)一维数组的定义和使用
湖南省普通高等学校对口招生考试 计算机应用类
《C语言程序设计》考点双析卷 第18卷
一维数组的定义和使用 学生练习卷
时间:45分钟 总分:100分
班级_______ 姓名_______ 学号_______ 成绩_______
一、单项选择题(本大题共20小题,每题3分,共60分)
1.在C语言中,引用数组元素时,其数组下标的数据类型允许是( )
A.整型常量 B.整型表达式
C.整型常量或整型表达式 D.任何类型的表达式
2.若有定义:int ch1[10];,则不能代表数组元素ch1[1]地址的是( )
A.&ch1[0]+1
B.&ch1[l]
C.&ch1[0]++
D.ch1+1
3.假定一个 int型变量占用两个字节,若有定义:int x[5]={0,2,4};则数组x在内存中所占字节数是( )
A.6 B.10 C.20 D.3
4.以下对一维数组的定义中不正确的是( )
A.double x[5]={2.0,0,6.0,8.0,10.0};
B.int y[5]={2,1,3,5,7,9};
C.char z[ ]={‘1’,‘2’,‘3’};
D.char h[ ]={‘\x10’,‘\xa’,‘\x8’};
5.以下对一维数组a的定义中正确的是( )
A.char a(10); B.int a[0..10];
C.int a[10]; D.int c=10; int a[c];
6.有以下程序
#include <stdio.h>
void main()
{
int a[]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{
case 0:
switch(a[i]%2)
{case 0:a[i]++;break;
case 1:a[i]--;}
break;
case 1:a[i]=0;
}
for(i=0;i<4;i++)
printf("%d",a[i]);
printf("
");
}
程序运行后的输出结果是( )
A.2 0 5 0 B.3 3 4 4 C.3 0 4 0 D.0 3 0 4
7.在C语言的一维数组中,以下选项中的值会被默认初始化为0的是( )
A.float数组 B.char数组 C.int数组 D.string数组
8.可以使用下列哪种方式对一维整型数组的所有元素进行赋值( )
A.arr[0] = {1, 2, 3, 4}; B.int arr[4] = {1, 2, 3, 4};
C.arr = {1, 2, 3, 4}; D.int arr[] = {1, 2, 3, 4};
9.在定义一维数组时可以省略数组大小,
A.但必须在初始化时指定数组大小
B.但无法进行初始化
C.但此时数组大小默认为0
D.但必须在后续代码中进行赋值来确定数组大小
10.下列哪种初始化方式对整型数组是合法的( )
A.int arr[] = {1, 2, 3}; B.int arr[3];
C.int arr[3] = {1, 2, 3, 4}; D.int arr[3] = {1, 2};
11.C语言中的一维数组初始化必须满足的条件是( )
A.初始化值的个数不能超过数组的大小
B.初始化值的个数必须与数组的大小相同
C.初始化值的个数可以少于或等于数组的大小
D.不需要满足任何条件,初始化个数没有限制
12.在C语言中,以下对一维数组初始化说法正确的是( )
A.只能在定义数组时进行初始化,之后无法更改
B.可以在定义数组时进行初始化,也可以在后续代码中进行赋值
C.只能在后续代码中进行赋值,不能在定义数组时进行初始化
D.一维数组无法进行初始化
13.执行int a[3]={1};后,a[1]的值是( )
A.0 B.1 C.随机值 D.语法错误
14.数组名arr表示的是( )
A.第一个元素的地址 B.所有元素的地址
C.最后一个元素的地址 D.数组长度
15.执行int a[5]={1,2};后,a[4]的值是( )
A.0 B.随机值 C.1 D.编译错误
16.执行下列语句后,a[6]的值为( )
int a[10]={12,23,5,20,3,6,18};
a[6]+=a[2]+a[5]+a[4]-a[3];
A.20 B.12 C.18 D.24
17.下列哪项是一维数组 b 的正确初始化方式( )
A.int b[5] = {0, 1, 2, 3}; B.int b[5] = {};
C.int b[] = {4, 5, 6, 7, 8}; D.int b[5] = "Hello";
18.在C语言中,关于一维数组的特性,以下叙述正确的是( )
A.数组的大小在定义后可以改变,但数组内的元素必须是同一数据类型。
B.数组的大小在定义后是固定的,但可以包含不同类型的数据。
C.数组的大小在定义后是固定的,且数组内的所有元素必须是同一数据类型。
D.数组的大小是可变的,也可以包含不同类型的数据。
19.在C语言中,以下哪个选项是一维数组 a 的正确声明语句( )
A.int a(10); B.int N=5, a[N];
C.int n; D.#define SIZE 9 int a[SIZE];
20.下面程序中有错误的行是 (每行程序前面的数字表示行号)( )
1 main()
2 {
3 float a[3]={1};
4 int i;
5 scanf(“%f”,a);
6 for(i=1;i<3;i++) a[0]=a[0]+a[i];
7 printf(“a[0]=%d
”,a[0]);
8 }
A.3 B.6 C.7 D.5
二、程序设计题(本大题共4小题,每题10分,共40分)
21.函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中, 接着把a所指数组中的最大值放在a[1]元素中,再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3], 以此类推。例如,若a所指数组中的数据最初排列为: 9、1、4、2、3、6、5、8、7;则按规则移动后,数据排列为: 1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标
#include<stdio.h>
#define N 9
void fun(int a[],int n)
{
int i,j,max,min,px,pn,t;
for(i=0;i<n-1;i+=2)
{
/*******space*******/
/*******space*******/
}
if (pn != i)
{
t = a[i];
a[i] = min;
a[pn] = t;
if(px == i) px =pn;
}
if (px != i+1)
{
t=a[i+1];
a[i+1]=max;
a[px]=t;
}
}
void main()
{
int b[N]={9,1,4,2,3,6,5,8,7}, i;
printf("【The original data:】
");
printf("【");
for (i=0; i<N; i++)
printf("%4d ", b[i]);
printf("】
");
fun(b, N);
printf("【The data after moving:】
");
for (i=0; i<N; i++)
printf("%4d ",b[i]);
printf("
");
}
22.编写函数fun,其功能是:求出1~100之间能被8和9整除,但不同同时被8和9整除的所有整数,并将其放在a所指的数组中,通过n返回这些个数。
#include<stdio.h>
void fun(int *a,int *n)
{
/*******space*******/
/*******space*******/
}
main(){
int b[100],n,k;
fun(b,&n);
for(k=0;k<n;k++)
{
if((k+1)%10==0)
printf("
");
else
printf("%5d",b[k]);
}
}
23.函数功能:将一维数组(不超过50个元素)中的最小元素和最大元素交换。输入的第一个值是一维数组元素的个数,然后输入数组的元素值。
#include<stdio.h>
void fun(int a[],int n)
{
Int i,min,max,min_id=0,max_id=0;
/*******space*******/
/*******space*******/
}
void main()
{
int i,a[50],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]);
}
}
24.以下程序的功能是删去一维数组s中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
#include<stdio.h>
int del(int s[],int n){
int i,j=1;
/*******space*******/
/*******space*******/
}
int main(){
Int s[]={2,3,3,3,3,4,4,4,4,4,10,10,10,10,13,13,15,15,18,18};
int i,m,n=sizeof(s)/sizeof(int);
for(i=0;i<n;i++)
printf("%d ",s[i]);
m=del(s,n);
printf("
");
for(i=0;i<m;i++)
printf("%d ",s[i]);
printf("
");
return 1;
}
试卷第6页,共6页
试卷第5页,共6页
学科网(北京)股份有限公司
$