内容正文:
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第76卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①一维数组的定义;②一维数组元素的引用;③一维数组的初始化。
湖南省《计算机应用类专业综合考纲百套卷》 第76卷
《计算机编程语言——C语言》
一维数组的定义和使用
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.在Visual C++ 2010中,已知int a[8];,以下关于该数组占用内存空间大小说法正确的是( )
A. 8 字节 B. 16 字节 C. 32 字节 D. 无法确定
【答案】C
【解析】数组长度为 8,每个 int 占 4 字节,总空间8*4=32字节。
2.下列一维数组定义语句,语法完全合法的是( )
A. int n=5; int a[n]; B. int a[];
C. int a[3+2]; D. float a[5.0];
【答案】C
【解析】数组长度必须为常量表达式。A 用变量作长度,B 未指定长度且无初始化,D 用浮点数,均非法;C 为常量表达式,合法。
3.以下能对一维数组完成完整初始化的语句是( )
A. int a[5]=(1,2,3,4,5); B. int a[5]={1,2,3,4,5};
C. int a[5]; a={1,2,3,4,5}; D. int a[5]; a[5]={1,2,3,4,5};
【答案】B
【解析】数组初始化必须用{};A 使用括号错误;C、D 不能在定义后整体给数组赋值。
4.已知int a[4]={1,3,5,7};,执行a[1] = a[2] + a[0];后,a[1]的值为( )
A. 4 B. 6 C. 8 D. 12
【答案】B
【解析】a[2]=5,a[0]=1,a[1]=a[2]+a[0]=5+1=6。数组下标从零开始。
5.定义int arr[6]={1,0,1,0,1,0};,执行arr[2] = arr[arr[1]];后,arr[2]的值为( )
A. 0 B. 1 C. 2 D. 6
【答案】B
【解析】arr[1]值为 0,取arr[0]的值 1 赋值给arr[2],结果为 1。
6.若int m[4]={9,7,5,3};,依次执行m[0]=m[3]; m[3]=m[1];,最终m[0]和m[3]为( )
A. 3、7 B. 9、7 C. 3、3 D. 7、3
【答案】A
【解析】第一步m[0]=3,第二步m[3]=7。
7.执行int k[3]={10,20}; k[2] = k[0] + k[1] * 2;,则k[2]的值为( )
A. 30 B. 40 C. 50 D. 60
【答案】C
【解析】 k[2] = k[0] + k[1] * 2 = 10+20*2=50。
8.定义int y[4]={5};,执行y[1]++, y[2] += y[0];后,y[1]和y[2]为( )
A. 0、5 B. 1、5 C. 1、6 D. 0、6
【答案】B
【解析】初始 y [1]=0,自增为 1;y [2]=0+5=5。
9.执行以下代码片段后,变量 sum 的值是( )
int a[5] = {1, 2, 3};
int sum = 0,i;
for(i = 0; i < 5; i++) sum += a[i];
A. 6 B. 3 C. 0 D. 编译错误
【答案】A
【解析】数组 a 被部分初始化,前三个元素为1, 2, 3,后两个元素自动初始化为0。循环将5个元素相加,1+2+3+0+0 = 6。
10.执行以下代码片段后,最终 a[4]的值是( )
int a[5]; int i = 0;
while(i < 5) a[i++] = i;
A. 4 B. 5 C. 0 D. 不确定
【答案】A
【解析】关键在于后置自增 i++ 的求值顺序:先使用 i 的当前值作为数组下标,再使用 i 的当前值进行赋值,最后 i 才自增 1。因此,每次循环实际执行的是 a[i] = i; i++;。数组元素最终会被赋值为与下标相同的值(即 a[0]=0, a[1]=1...),所以 a[4] 的值为 4。
11.设有以下程序段,程序运行后max的值为( )
int b[6] = {3, 1, 4, 1, 5, 9};
int max = b[0], i;
for(i = 1; i < 6; i++)
{ if(b[i] > max)
max = b[i]; }
A. 3 B. 5 C. 9 D. 1
【答案】C
【解析】遍历数组找最大值,数组中最大元素为 9。
12.设有以下程序段,程序运行后res的值是( )
int s[4] = {10, 20, 30, 40};
int res = 0, i;
for(i = 0; i < 4; i++)
{ if(s[i] % 2 == 0)
res += s[i]; }
A. 60 B. 80 C. 100 D. 120
【答案】C
【解析】所有元素均为偶数,累加:10+20+30+40=100,答案为 C。
13.设有以下程序段,程序运行后mul值为( )
int num[4] = {2, 3, 4, 5};
int mul = 1, i;
for(i = 0; i < 4; i++)
mul *= num[i];
A. 60 B. 80 C. 120 D. 150
【答案】C
【解析】1*2*3*4*5=120。
14.设有以下程序段,程序运行后avg值为( )
int n[5] = {4, 6, 8, 10, 12};
int i, avg, sum = 0;
for(i = 0; i < 5; i++)
sum += n[i];
avg = sum / 5;
A. 7 B. 8 C. 9 D. 10
【答案】B
【解析】数组 n 的5个元素之和为 4 + 6 + 8 + 10 + 12 = 40。由于 sum 和 5 均为整型,avg = sum / 5 执行的是整数除法(结果直接截断小数部分),因此 40 / 5 的结果为 8。
15.设有以下程序段,程序运行后flag值为( )
int d[4] = {7, 4, 7, 4};
int i, flag = 1;
for(i = 0; i < 3; i++)
{ if(d[i] != d[i+1])
flag = 0; }
A. 0 B. 1 C. 2 D. 随机值
【答案】A
【解析】相邻元素不相等,flag被赋值为 0。
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.(2022年)下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{int a[]={12,34,54,32};
int N=sizeof(a)/sizeof(int);
int i,j,p,t;
for(i=0;i<N-1;i++){
p=i;
for(j=i+1;j<N;j++)
if(a[p]>a[j])
p=j;
if(p!=i){
t=a[i];a[i]=a[p];a[p]=t;
}}
for(i=0;i<N;i++)
printf("%d+",a[i]);
return 0;
}
【答案】12+32+34+54+
2.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int a[] = {9, 2, 7, 1, 6};
int N = sizeof(a) / sizeof(int);
int i, j, t;
for(i = 0; i < N/2; i++)
{ j = N - 1 - i;
t = a[i];
a[i] = a[j];
a[j] = t; }
for(i = 0; i < N; i++)
printf("%d ", a[i]);
return 0; }
【答案】6 1 7 2 9
3.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int arr[] = {5, 1, 8, 3, 4};
int N = sizeof(arr)/sizeof(int);
int i, count = 0;
for(i = 1; i < N-1; i++)
{
if(arr[i] > arr[i-1] && arr[i] > arr[i+1])
count++;
}
printf("%d", count);
return 0; }
【答案】1
4.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int e[] = {8, 1, 5, 3};
int N = sizeof(e)/sizeof(int);
int i, j, t;
for(i = 0; i < N-1; i++)
{ for(j = 0; j < N-1-i; j++)
{ if(e[j] > e[j+1])
{ t = e[j];
e[j] = e[j+1];
e[j+1] = t;
}
}
}
for(i=0;i<N;i++) printf("%d ",e[i]);
return 0; }
【答案】1 3 5 8
5.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int n[] = {9, 5, 1, 7, 3};
int N = sizeof(n)/sizeof(int);
int i, t;
t = n[0];
for(i = 0; i < N-1; i++)
n[i] = n[i+1];
n[N-1] = t;
for(i=0;i<N;i++) printf("%d ",n[i]);
return 0; }
【答案】5 1 7 3 9
6.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int r[] = {1, 8, 3, 8, 5};
int N = sizeof(r)/sizeof(int);
int i, left = 0, right = 0;
for(i = 0; i < N/2; i++)
left += r[i];
for(i = N/2; i < N; i++)
right += r[i];
printf("%d", right - left);
return 0; }
【答案】7
7.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int arr[] = {2, 9, 5, 7, 3};
int n = sizeof(arr) / sizeof(int);
int i, k = 0;
for(i = 0; i < n; i++)
{ if(arr[i] % 2 != 0 && arr[i] > 4)
{
k = k + arr[i];
}
}
printf("%d", k);
return 0; }
【答案】21
8.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int c[] = {5, 1, 3, 6, 8};
int len = sizeof(c) / sizeof(int);
int i, j, temp;
for(i = 1; i < 3; i++)
{
temp = c[i];
c[i] = c[len - 1 - i];
c[len - 1 - i] = temp;
}
for(i = 0; i < len; i++)
printf("%d ", c[i]);
return 0; }
【答案】5 6 3 1 8
9.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int f[] = {4, 5, 2, 6, 1};
int n = sizeof(f) / sizeof(int);
int i;
for(i = 2; i < n; i++)
{
f[i] = f[i] + f[i-2];
}
for(i = 0; i < n; i++)
printf("%d ", f[i]);
return 0; }
【答案】4 5 6 11 7
10.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int h[] = {7, 2, 5, 8, 3, 6};
int n = sizeof(h) / sizeof(int);
int i, t;
t = h[n-1];
for(i = n-1; i > 1; i--)
{
h[i] = h[i-1];
}
h[2] = t;
for(i = 0; i < n; i++)
printf("%d ", h[i]);
return 0; }
【答案】7 2 6 5 8 3
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.(2023年)有 n 盏灯,编号为 1~n;k 个人,k≤n≤100。第 1 个人把所有灯打开,第 2 个人按下所有编号为 2 倍数的灯开关 (这些灯将关掉),第 3 个人按下所有编号为 3 倍数的灯开关(关掉的灯将打开,开着的灯将关闭),依此类推。问最后有哪些灯开着?下面程序功能是:输入 n 和 k,输出开着的灯编号。如有 7 盏灯,3 个人,则输出 "1-5-6-7"。
#include <stdio.h>
#include <string.h>
#define maxn 101
int a[maxn]={0};
int main()
{
int i,j,n,k,________①_________
printf("n=");
scanf("%d",&n);
printf("k=");
scanf("%d",&k);
for(i=1;i<=k;i++)
for(j=i;j<=n;j++)
if(________②________)
_________③_________
for(i=1;i<=n;i++)
if(________④_________)
{
if(first)
___________⑤__________
else
printf("-");
printf("%d",i);
}
printf("
");
return 0;
}
【答案】①first=1; ②j%i==0 ③a[j]=!a[j];
④a[i]==1 ⑤first=0;
2.下列程序的功能是:找出数组中第二大的数值并输出。
#include "stdio.h"
int main(void)
{ int arr[7];
int i, max1, max2;
int len = sizeof(arr) / sizeof(int);
for(i = 0; i < len; i++)
{ scanf("%d", &arr[i]); }
max1 = max2 = __________①________;
for(i = 1; i < len; i++)
{ if(arr[i] > max1)
{ max2 = max1;
________②________; }
else if(_____________③___________)
{ max2 = arr[i]; }
}
printf("%d", max2);
return 0; }
【答案】①arr[0] ②max1=arr[i] ③arr[i]>max2&&arr[i]!=max1
3.数组首尾元素不参与判断,若中间元素大于左右相邻元素,则为峰点。下列程序的功能是:输入长度为 9 的数组,统计峰点个数并输出所有峰点。
#include "stdio.h"
int main(void)
{ int arr[9];
int i, count = 0;
int len = sizeof(arr) / sizeof(int);
for(i = 0; i < len; i++)
{ scanf("%d", &arr[i]); }
printf("峰点总数:");
for(i = 1; i < _______①_____; i++)
{ if(arr[i]>arr[i-1]&&arr[i]>arr[i+1])
{
_________②________;
}
}
printf("%d
", count);
printf("峰点元素:");
for(i = 1; i < len - 1; i++)
{ if(___________③_________)
{
printf("%d ", arr[i]);
}
}
return 0; }
【答案】①len-1 ②count++ ③arr[i]>arr[i-1]&&arr[i]>arr[i+1]
4.下列程序的功能是:使用选择排序实现升序排列,分别输出原数组和排序后数组。
#include "stdio.h"
int main(void)
{ int arr[6];
int i, j, pos, temp;
int len = sizeof(arr) / sizeof(int);
for(i = 0; i < len; i++)
{ scanf("%d", &arr[i]); }
printf("原数组:");
for(i = 0; i < len; i++)
{ printf("%d ", arr[i]); }
printf("
");
for(i = 0; i < len - 1; i++)
{ _________①_______;
for(j = i + 1; j < len; j++)
{ if(_________②________)
{ pos = j; }
}
________③________;
arr[i] = arr[pos];
________④________;
}
printf("排序后:");
for(i = 0; i < len; i++)
{ printf("%d ", arr[i]); }
return 0; }
【答案】①pos = i ②arr[j] < arr[pos] ③temp = arr[i]
④arr[pos] = temp
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:删除相邻重复元素,只保留一个,输出去重结果。以下程序只允许修改两行。
L1 #include "stdio.h"
L2 int main(void)
L3 {
L4 int arr[8] = {4,4,7,7,7,2,2,9};
L5 int newArr[8];
L6 int i, j = 0;
L7 int len = sizeof(arr) / sizeof(int);
L8 newArr[j++] = arr[0];
L9 for(i = 1; i < len; i++)
L10 {
L11 if(arr[i] == arr[i-1])
L12 {
L13 newArr[j] = arr[i];
L14 }
L15 }
L16 for(i = 0; i < j; i++)
L17 {
L18 printf("%d ", newArr[i]);
L19 }
L20 return 0;
L21 }
【答案】①L11 if(arr[i] != arr[i-1])
②L13 newArr[j++] = arr[i];
2.下列程序的功能是:初始化数组 {1,3,5,7,9,11},输入右移位数n,实现循环右移 n 位并输出。以下程序只允许修改两行。
L1 #include "stdio.h"
L2 int main(void)
L3 {
L4 int arr[6] = {1,3,5,7,9,11};
L5 int n, i, j, temp;
L6 int len = sizeof(arr) / sizeof(int);
L7 scanf("%d", n);
L8 for(i = 0; i < n; i++)
L9 {
L10 temp = arr[len - 1];
L11 for(j = len; j > 0; j--)
L12 {
L13 arr[j] = arr[j-1];
L14 }
L15 arr[0] = temp;
L16 }
L17 for(i = 0; i < len; i++)
L18 {
L19 printf("%d ", arr[i]);
L20 }
L21 return 0;
L22 }
【答案】①L7 scanf("%d", &n);
②L11 for(j = len - 1; j > 0; j--)
3.下列程序的功能是:输入长度为 7 的数组,判断数组是否为回文数组(正序与逆序完全一致),输出判断结果。以下程序只允许修改三行。
L1 #include "stdio.h"
L2 int main(void)
L3 {
L4 int arr[7];
L5 int i, flag = 1;
L6 int len = sizeof(arr) / sizeof(int);
L7 for(i = 0; i < len; i++)
L8 { scanf("%d", &arr[i]); }
L9 for(i = 0; i < len / 2; i++)
L10 { if(arr[i] != arr[len - 1])
L11 { flag = 0;
L12 continue; }
L13 }
L14 if(flag == 0)
L15 printf("是回文数组");
L16 else
L17 printf("不是回文数组");
L18 return 0;
L19 }
【答案】①L10 { if(arr[i] != arr[len - 1 - i])
②L12 break; }
③L14 if(flag == 1)
4.下列程序的功能是:输入长度为 8 的数组,找到最大值、最小值的下标,交换两个位置的元素,输出最终数组。以下程序只允许修改三行。
L1 #include "stdio.h"
L2 int main(void)
L3 {
L4 int arr[8];
L5 int i, max_idx, min_idx, temp;
L6 int len = sizeof(arr) / sizeof(int);
L7 for(i = 0; i < len; i++)
L8 { scanf("%d", &arr[i]); }
L9 max_idx = min_idx = 1;
L10 for(i = 1; i < len; i++)
L11 { if(arr[i] > arr[max_idx])
L12 max_idx = i;
L13 if(arr[i] > arr[min_idx])
L14 min_idx = i; }
L15 temp = arr[min_idx];
L16 arr[max_idx] = arr[min_idx];
L17 arr[min_idx] = temp;
L18 for(i = 0; i < len; i++)
L19 { printf("%d ", arr[i]); }
L20 return 0;
L21 }
【答案】①L9 max_idx = min_idx = 0;
②L13 if(arr[i] < arr[min_idx])
③L15 temp = arr[max_idx];
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第76卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①一维数组的定义;②一维数组元素的引用;③一维数组的初始化。
湖南省《计算机应用类专业综合考纲百套卷》 第76卷
《计算机编程语言——C语言》
一维数组的定义和使用
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.在Visual C++ 2010中,已知int a[8];,以下关于该数组占用内存空间大小说法正确的是( )
A. 8 字节 B. 16 字节 C. 32 字节 D. 无法确定
2.下列一维数组定义语句,语法完全合法的是( )
A. int n=5; int a[n]; B. int a[];
C. int a[3+2]; D. float a[5.0];
3.以下能对一维数组完成完整初始化的语句是( )
A. int a[5]=(1,2,3,4,5); B. int a[5]={1,2,3,4,5};
C. int a[5]; a={1,2,3,4,5}; D. int a[5]; a[5]={1,2,3,4,5};
4.已知int a[4]={1,3,5,7};,执行a[1] = a[2] + a[0];后,a[1]的值为( )
A. 4 B. 6 C. 8 D. 12
5.定义int arr[6]={1,0,1,0,1,0};,执行arr[2] = arr[arr[1]];后,arr[2]的值为( )
A. 0 B. 1 C. 2 D. 6
6.若int m[4]={9,7,5,3};,依次执行m[0]=m[3]; m[3]=m[1];,最终m[0]和m[3]为( )
A. 3、7 B. 9、7 C. 3、3 D. 7、3
7.执行int k[3]={10,20}; k[2] = k[0] + k[1] * 2;,则k[2]的值为( )
A. 30 B. 40 C. 50 D. 60
8.定义int y[4]={5};,执行y[1]++, y[2] += y[0];后,y[1]和y[2]为( )
A. 0、5 B. 1、5 C. 1、6 D. 0、6
9.执行以下代码片段后,变量 sum 的值是( )
int a[5] = {1, 2, 3};
int sum = 0,i;
for(i = 0; i < 5; i++) sum += a[i];
A. 6 B. 3 C. 0 D. 编译错误
10.执行以下代码片段后,最终 a[4]的值是( )
int a[5]; int i = 0;
while(i < 5) a[i++] = i;
A. 4 B. 5 C. 0 D. 不确定
11.设有以下程序段,程序运行后max的值为( )
int b[6] = {3, 1, 4, 1, 5, 9};
int max = b[0], i;
for(i = 1; i < 6; i++)
{ if(b[i] > max)
max = b[i]; }
A. 3 B. 5 C. 9 D. 1
12.设有以下程序段,程序运行后res的值是( )
int s[4] = {10, 20, 30, 40};
int res = 0, i;
for(i = 0; i < 4; i++)
{ if(s[i] % 2 == 0)
res += s[i]; }
A. 60 B. 80 C. 100 D. 120
13.设有以下程序段,程序运行后mul值为( )
int num[4] = {2, 3, 4, 5};
int mul = 1, i;
for(i = 0; i < 4; i++)
mul *= num[i];
A. 60 B. 80 C. 120 D. 150
14.设有以下程序段,程序运行后avg值为( )
int n[5] = {4, 6, 8, 10, 12};
int i, avg, sum = 0;
for(i = 0; i < 5; i++)
sum += n[i];
avg = sum / 5;
A. 7 B. 8 C. 9 D. 10
15.设有以下程序段,程序运行后flag值为( )
int d[4] = {7, 4, 7, 4};
int i, flag = 1;
for(i = 0; i < 3; i++)
{ if(d[i] != d[i+1])
flag = 0; }
A. 0 B. 1 C. 2 D. 随机值
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.(2022年)下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{int a[]={12,34,54,32};
int N=sizeof(a)/sizeof(int);
int i,j,p,t;
for(i=0;i<N-1;i++){
p=i;
for(j=i+1;j<N;j++)
if(a[p]>a[j])
p=j;
if(p!=i){
t=a[i];a[i]=a[p];a[p]=t;
}}
for(i=0;i<N;i++)
printf("%d+",a[i]);
return 0;
}
2.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int a[] = {9, 2, 7, 1, 6};
int N = sizeof(a) / sizeof(int);
int i, j, t;
for(i = 0; i < N/2; i++)
{ j = N - 1 - i;
t = a[i];
a[i] = a[j];
a[j] = t; }
for(i = 0; i < N; i++)
printf("%d ", a[i]);
return 0; }
3.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int arr[] = {5, 1, 8, 3, 4};
int N = sizeof(arr)/sizeof(int);
int i, count = 0;
for(i = 1; i < N-1; i++)
{
if(arr[i] > arr[i-1] && arr[i] > arr[i+1])
count++;
}
printf("%d", count);
return 0; }
4.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int e[] = {8, 1, 5, 3};
int N = sizeof(e)/sizeof(int);
int i, j, t;
for(i = 0; i < N-1; i++)
{ for(j = 0; j < N-1-i; j++)
{ if(e[j] > e[j+1])
{ t = e[j];
e[j] = e[j+1];
e[j+1] = t;
}
}
}
for(i=0;i<N;i++) printf("%d ",e[i]);
return 0; }
5.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int n[] = {9, 5, 1, 7, 3};
int N = sizeof(n)/sizeof(int);
int i, t;
t = n[0];
for(i = 0; i < N-1; i++)
n[i] = n[i+1];
n[N-1] = t;
for(i=0;i<N;i++) printf("%d ",n[i]);
return 0; }
6.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int r[] = {1, 8, 3, 8, 5};
int N = sizeof(r)/sizeof(int);
int i, left = 0, right = 0;
for(i = 0; i < N/2; i++)
left += r[i];
for(i = N/2; i < N; i++)
right += r[i];
printf("%d", right - left);
return 0; }
7.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int arr[] = {2, 9, 5, 7, 3};
int n = sizeof(arr) / sizeof(int);
int i, k = 0;
for(i = 0; i < n; i++)
{ if(arr[i] % 2 != 0 && arr[i] > 4)
{
k = k + arr[i];
}
}
printf("%d", k);
return 0; }
8.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int c[] = {5, 1, 3, 6, 8};
int len = sizeof(c) / sizeof(int);
int i, j, temp;
for(i = 1; i < 3; i++)
{
temp = c[i];
c[i] = c[len - 1 - i];
c[len - 1 - i] = temp;
}
for(i = 0; i < len; i++)
printf("%d ", c[i]);
return 0; }
9.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int f[] = {4, 5, 2, 6, 1};
int n = sizeof(f) / sizeof(int);
int i;
for(i = 2; i < n; i++)
{
f[i] = f[i] + f[i-2];
}
for(i = 0; i < n; i++)
printf("%d ", f[i]);
return 0; }
10.下列程序的运行结果是__________________。
#include "stdio.h"
int main(void)
{ int h[] = {7, 2, 5, 8, 3, 6};
int n = sizeof(h) / sizeof(int);
int i, t;
t = h[n-1];
for(i = n-1; i > 1; i--)
{
h[i] = h[i-1];
}
h[2] = t;
for(i = 0; i < n; i++)
printf("%d ", h[i]);
return 0; }
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.(2023年)有 n 盏灯,编号为 1~n;k 个人,k≤n≤100。第 1 个人把所有灯打开,第 2 个人按下所有编号为 2 倍数的灯开关 (这些灯将关掉),第 3 个人按下所有编号为 3 倍数的灯开关(关掉的灯将打开,开着的灯将关闭),依此类推。问最后有哪些灯开着?下面程序功能是:输入 n 和 k,输出开着的灯编号。如有 7 盏灯,3 个人,则输出 "1-5-6-7"。
#include <stdio.h>
#include <string.h>
#define maxn 101
int a[maxn]={0};
int main()
{
int i,j,n,k,________①_________
printf("n=");
scanf("%d",&n);
printf("k=");
scanf("%d",&k);
for(i=1;i<=k;i++)
for(j=i;j<=n;j++)
if(________②________)
_________③_________
for(i=1;i<=n;i++)
if(________④_________)
{
if(first)
___________⑤__________
else
printf("-");
printf("%d",i);
}
printf("
");
return 0;
}
2.下列程序的功能是:找出数组中第二大的数值并输出。
#include "stdio.h"
int main(void)
{ int arr[7];
int i, max1, max2;
int len = sizeof(arr) / sizeof(int);
for(i = 0; i < len; i++)
{ scanf("%d", &arr[i]); }
max1 = max2 = __________①________;
for(i = 1; i < len; i++)
{ if(arr[i] > max1)
{ max2 = max1;
________②________; }
else if(_____________③___________)
{ max2 = arr[i]; }
}
printf("%d", max2);
return 0; }
3.数组首尾元素不参与判断,若中间元素大于左右相邻元素,则为峰点。下列程序的功能是:输入长度为 9 的数组,统计峰点个数并输出所有峰点。
#include "stdio.h"
int main(void)
{ int arr[9];
int i, count = 0;
int len = sizeof(arr) / sizeof(int);
for(i = 0; i < len; i++)
{ scanf("%d", &arr[i]); }
printf("峰点总数:");
for(i = 1; i < _______①_____; i++)
{ if(arr[i]>arr[i-1]&&arr[i]>arr[i+1])
{
_________②________;
}
}
printf("%d
", count);
printf("峰点元素:");
for(i = 1; i < len - 1; i++)
{ if(___________③_________)
{
printf("%d ", arr[i]);
}
}
return 0; }
4.下列程序的功能是:使用选择排序实现升序排列,分别输出原数组和排序后数组。
#include "stdio.h"
int main(void)
{ int arr[6];
int i, j, pos, temp;
int len = sizeof(arr) / sizeof(int);
for(i = 0; i < len; i++)
{ scanf("%d", &arr[i]); }
printf("原数组:");
for(i = 0; i < len; i++)
{ printf("%d ", arr[i]); }
printf("
");
for(i = 0; i < len - 1; i++)
{ _________①_______;
for(j = i + 1; j < len; j++)
{ if(_________②________)
{ pos = j; }
}
________③________;
arr[i] = arr[pos];
________④________;
}
printf("排序后:");
for(i = 0; i < len; i++)
{ printf("%d ", arr[i]); }
return 0; }
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:删除相邻重复元素,只保留一个,输出去重结果。以下程序只允许修改两行。
L1 #include "stdio.h"
L2 int main(void)
L3 {
L4 int arr[8] = {4,4,7,7,7,2,2,9};
L5 int newArr[8];
L6 int i, j = 0;
L7 int len = sizeof(arr) / sizeof(int);
L8 newArr[j++] = arr[0];
L9 for(i = 1; i < len; i++)
L10 {
L11 if(arr[i] == arr[i-1])
L12 {
L13 newArr[j] = arr[i];
L14 }
L15 }
L16 for(i = 0; i < j; i++)
L17 {
L18 printf("%d ", newArr[i]);
L19 }
L20 return 0;
L21 }
2.下列程序的功能是:初始化数组 {1,3,5,7,9,11},输入右移位数n,实现循环右移 n 位并输出。以下程序只允许修改两行。
L1 #include "stdio.h"
L2 int main(void)
L3 {
L4 int arr[6] = {1,3,5,7,9,11};
L5 int n, i, j, temp;
L6 int len = sizeof(arr) / sizeof(int);
L7 scanf("%d", n);
L8 for(i = 0; i < n; i++)
L9 {
L10 temp = arr[len - 1];
L11 for(j = len; j > 0; j--)
L12 {
L13 arr[j] = arr[j-1];
L14 }
L15 arr[0] = temp;
L16 }
L17 for(i = 0; i < len; i++)
L18 {
L19 printf("%d ", arr[i]);
L20 }
L21 return 0;
L22 }
3.下列程序的功能是:输入长度为 7 的数组,判断数组是否为回文数组(正序与逆序完全一致),输出判断结果。以下程序只允许修改三行。
L1 #include "stdio.h"
L2 int main(void)
L3 {
L4 int arr[7];
L5 int i, flag = 1;
L6 int len = sizeof(arr) / sizeof(int);
L7 for(i = 0; i < len; i++)
L8 { scanf("%d", &arr[i]); }
L9 for(i = 0; i < len / 2; i++)
L10 { if(arr[i] != arr[len - 1])
L11 { flag = 0;
L12 continue; }
L13 }
L14 if(flag == 0)
L15 printf("是回文数组");
L16 else
L17 printf("不是回文数组");
L18 return 0;
L19 }
4.下列程序的功能是:输入长度为 8 的数组,找到最大值、最小值的下标,交换两个位置的元素,输出最终数组。以下程序只允许修改三行。
L1 #include "stdio.h"
L2 int main(void)
L3 {
L4 int arr[8];
L5 int i, max_idx, min_idx, temp;
L6 int len = sizeof(arr) / sizeof(int);
L7 for(i = 0; i < len; i++)
L8 { scanf("%d", &arr[i]); }
L9 max_idx = min_idx = 1;
L10 for(i = 1; i < len; i++)
L11 { if(arr[i] > arr[max_idx])
L12 max_idx = i;
L13 if(arr[i] > arr[min_idx])
L14 min_idx = i; }
L15 temp = arr[min_idx];
L16 arr[max_idx] = arr[min_idx];
L17 arr[min_idx] = temp;
L18 for(i = 0; i < len; i++)
L19 { printf("%d ", arr[i]); }
L20 return 0;
L21 }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$