内容正文:
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第92卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①一维数组的定义和使用;②二维数组的定义和使用;③字符数组的定义和使用。
湖南省《计算机应用类专业综合考纲百套卷》 第92卷
《计算机编程语言——C语言》
数组
专题训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.设有代码:char s[] = "a\0bcdef"; printf("%d", strlen(s)); 输出值为( )
A. 7 B. 1 C. 6 D. 8
【答案】B
【解析】strlen 遇见第一个\0立刻停止统计,仅统计 'a' 长度 1。
2.下列操作无法给字符数组整体完成字符串赋值、编译报错的是( )
A. char s[20] = "student";
B. char s[20]; strcpy(s,"student");
C. char s[20]; s = "student";
D. char s[] = "student";
【答案】C
【解析】数组名是常量地址,不能直接用=整体赋值,仅初始化、strcpy 拷贝合法。
3.设有定义 int arr[2][4] = {{1,3},{5}}; 表达式arr[1][3]的值为( )
A. 随机垃圾值 B. 0 C. 5 D. 3
【答案】B
【解析】二维数组分段不完全初始化,该行未赋值元素全部自动补 0。
4.设有语句:char str[4][12] = {"java","c","python"}; 执行printf("%d", strlen(str[2]));输出结果( )
A. 6 B. 12 C. 3 D. 48
【答案】A
【解析】str[2]存储字符串"python",有效字符 6 个,strlen 不计末尾\0。
5.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ char str[5] = {'1','2','3'};
int i = 0, cnt = 0;
while(str[i] != '\0')
{ cnt++; i++; }
printf("%d", cnt);
return 0; }
A. 3 B. 5 C. 随机数 D. 死循环无输出
【答案】A
【解析】字符数组不完全初始化,str [3]、str [4] 自动填充\0;循环遍历 i=0、1、2,计数 3 次,i=3 时循环终止。
6.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ int a[5] = {0};
int i, sum = 0;
for(i = 0; i < 5; i++)
sum += a[i];
printf("%d", sum);
return 0; }
A. 10 B. 0 C. 随机值 D. 编译报错
【答案】B
【解析】数组初始化仅写{0},C 语言规则会将数组内所有元素统一赋值为 0,循环累加总和为 0。
7.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ char text[10] = {'a','b','c'};
int i = 0;
while(text[i])
{ putchar(text[i]);
i++; }
return 0; }
A. abc B. abc 后面乱码 C. 无输出 D. 死循环
【答案】A
【解析】数组剩余下标 text [3]~text [9] 自动补\0,\0逻辑值为假;循环输出 i=0、1、2 对应 a、b、c,i=3 循环终止。
8.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ int arr[] = {1,3,5,7,9};
printf("%d", arr[arr[1]]);
return 0; }
A. 7 B. 5 C. 随机值 D. 3
【答案】A
【解析】arr [1] 等于 3,等价访问 arr [3],数组下标 3 存储数字 7。
9.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ int arr[6] = {2,4,6},i, res = 0;
for(i = 0; i < 6; i++)
{ if(arr[i] % 2 == 0)
res += arr[i];}
printf("%d", res);
return 0; }
A. 12 B. 18 C. 24 D. 随机值
【答案】A
【解析】不完全初始化 arr [3]、arr [4]、arr [5]=0;0 也是偶数,累加 2+4+6+0+0+0=12。
10.执行以下程序的输出结果是( )
#include <stdio.h>
#include<string.h>
int main(void)
{ char str[7] = {"test"};
int len1, len2;
len1 = sizeof(str);
len2 = strlen(str);
printf("%d %d", len1, len2);
return 0; }
A. 7 4 B. 4 7 C. 7 5 D. 5 4
【答案】A
【解析】str 固定数组长度 7,sizeof 得到 7;字符串 test4 个可见字符,strlen 不计\0,结果 4。
11.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ char buf[6] = {'5','7','9'};
int i, count = 0;
for(i = 0; buf[i] != '\0'; i++)
{ if((buf[i] - '0') % 3 == 0)
count++; }
printf("%d", count);
return 0; }
A. 1 B. 2 C. 3 D. 0
【答案】A
【解析】数组剩余 buf [3]、buf [4]、buf [5] 自动填充\0;有效数字 5、7、9,仅 9 能整除 3,计数为 1。
12.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ int two[4][2] = {{1},{3,5},{7},{9}};
int i, sum = 0;
for(i = 0; i < 4; i++)
sum += two[i][1];
printf("%d", sum);
return 0; }
A. 14 B. 5 C. 24 D. 0
【答案】B
【解析】二维数组未完全初始化的元素自动补 0,因此 two[0][1]=0、two[1][1]=5、two[2][1]=0、two[3][1]=0,累加得 0+5+0+0=5,选 B。
13.下列选项中,有关二维数组初始化语句,语法完全合法的是( )
A. int mat[3][] = {1,2,3,4};
B. int mat[][4] = {{1},{2,3,4,5}};
C. int mat[2][3] = {1,2,3,4,5,6,7};
D. int mat[][2] = { };
【答案】B
【解析】A 缺省列数报错;C 初始化数据超出数组总容量;D 空初始化列表标准 C 语法报错;仅 B 合法,编译器自动计算行数。
14.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ char word[15] = {'c',' ','l','a','n','g'};
int i, letter = 0;
for(i = 0; word[i] != '\0'; i++)
{ if(word[i] != ' ')
letter++; }
printf("%d", letter);
return 0; }
A. 5 B. 6 C. 7 D. 0
【答案】A
【解析】字符依次为 c、空格、l、a、n、g,空格不计入,有效字母共 5 个。
15.执行以下程序的输出结果是( )
#include <stdio.h>
#include<math.h>
int main(void)
{ int a[8] = {4, 9, 16, 25};
int i, count = 0;
for(i = 0; i < 8; i++)
{ if(a[i] != 0 && a[i] % (int)sqrt(a[i]) == 0)
count++; }
printf("%d", count);
return 0; }
A. 0 B. 2 C. 4 D. 8
【答案】C
【解析】数组不完全初始化,后 4 个元素全部为 0,0 会跳过 if 判断;前 4 个数字 4、9、16、25 均为完全平方数,满足整除条件,循环计数 4 次。
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ int arr[9] = {18, 25, 12, 35, 48};
int i, total = 0;
for(i = 0; i < 9; i++)
{
if(arr[i] != 0 && arr[i] % 6 == 0)
{
int ten = arr[i] / 10;
int one = arr[i] % 10;
if(ten < one)
total += arr[i];
}
}
printf("%d", total);
return 0;
}
【答案】78
2.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int num[7] = {9, 16, 25, 36};
int i, cnt = 0,root;
for(i = 0; i < 7; i++)
{
if(num[i] == 0)
continue;
root = 1;
while(root * root < num[i])
root++;
if(root * root == num[i] && root % 3 == 0)
cnt++;
}
printf("%d", cnt);
return 0;
}
【答案】2
3.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
char buf[8] = {'1','4','7','2'};
int i,res = 0;
for(i = 0; buf[i] != '\0'; i++)
{
int val = buf[i] - '0';
if(val % 3 == 1)
res = res * 10 + val;
}
printf("%d", res);
return 0;
}
【答案】147
4.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int mat[][3] = {5,10,15,20,25};
int i,j,product = 1;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(i == j && mat[i][j] % 5 == 0)
product += mat[i][j];
}
}
printf("%d", product);
return 0;
}
【答案】31
5.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int arr[7] = {15, 21, 27, 33};
int sum = 0,i,a,b;
for(i = 0; i < 7; i++)
{
if(arr[i] == 0)
continue;
a = arr[i] / 10;
b = arr[i] % 10;
if((a + b) % 3 == 0)
sum += arr[i];
}
printf("%d", sum);
return 0;
}
【答案】96
6.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int seq[10] = {5,12,17,24,31,36};
int i, limit, sum, idx;
sum = 0;
limit = seq[3];
for(i = 0; i < limit; i++)
{
if(i >= 10)
break;
idx = seq[i];
if(idx < 10 && seq[idx] % 7 == 5)
sum = sum + seq[idx];
}
printf("%d", sum);
return 0;
}
【答案】20
7.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
char text[14] = {'3','8','1','9','4','7','2'};
int i, resOdd, resEven, num;
resOdd = 0;
resEven = 0;
for(i = 0; text[i] != '\0'; i++)
{
num = text[i] - '0';
if(num % 2 == 1)
resOdd = resOdd * 10 + num;
else
resEven = resEven * 10 + num;
}
printf("%d# %d", resOdd, resEven);
return 0;
}
【答案】3197# 842
8.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int arr[8] = {5,6,9,25,36,76,81};
int i, sum, square, tmp, bit;
sum = 0;
for(i = 0; i < 8; i++)
{
if(arr[i] == 0)
continue;
square = arr[i] * arr[i];
tmp = arr[i];
bit = 1;
while(tmp > 0)
{
bit = bit * 10;
tmp = tmp / 10;
}
if(square % bit == arr[i])
sum = sum + arr[i];
}
printf("%d", sum);
return 0;
}
【答案】112
9.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int path[20] = {19};
int i, pos, num, evenSum;
pos = 1;
evenSum = 0;
num = path[0];
while(num != 1 && pos < 20)
{
if(num % 2 == 0)
{
evenSum = evenSum + num;
num = num / 2;
}
else
num = num * 3 + 1;
path[pos] = num;
pos = pos + 1;
}
printf("%d", evenSum);
return 0;
}
【答案】422
10.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
char buf[12] = {'2','5','7','1','9','3'};
int i, hasZero, res, num;
hasZero = 0;
res = 0;
for(i = 0; buf[i] != '\0'; i++)
{
num = buf[i] - '0';
if(num == 0)
hasZero = 1;
res = res * 10 + num;
}
if(hasZero == 1)
printf("0");
else
printf("%d", res);
return 0;
}
【答案】257193
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.下列程序的功能是:输入字符串,找出其中长度最长的回文子串并输出。
#include <stdio.h>
#include <string.h>
int main(void)
{ char str[100], maxPal[100];
int len, i, j, k, l, maxLen, nowLen;
gets(str);
len = strlen(str);
maxLen = 0;
for(i = 0; i < len; i++)
{
for(j = i; j < len; j++)
{ l = 1;
for(k = 0; k <= (j - i) / 2; k++)
{ if(_____________①___________)
{
l = 0;
_________②_________
}
}
if(l == 1)
{ nowLen = ________③_______
if(nowLen > maxLen)
{
maxLen = nowLen;
for(k = 0; k < nowLen; k++)
maxPal[k] = _______④_______
___________⑤___________
}
}
}
}
printf("最长回文子串:%s
", maxPal);
return 0; }
【答案】①str[i + k] != str[j - k] ②break; ③j - i + 1;
④str[i + k]; ⑤maxPal[nowLen] = '\0';
2.下列程序的功能是:用户依次输入 16 个整数存入 4×4 二维方阵;分别计算主对角线所有元素之和、反对角线所有元素之和,输出两者差值;严格遍历上三角区域(j>i),筛选能被 6 整除且不为 0 的数字,累乘输出乘积;无符合数字则乘积默认 1。
#include <stdio.h>
int main(void)
{ int mat[4][4];
int i, j, input, sumMain, sumAnti, product, val;
sumMain = 0;
sumAnti = 0;
product = 1;
printf("请依次输入16个整数填充4阶方阵:
");
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
scanf("%d", &mat[i][j]);
}
}
for(i = 0; i < 4; i++)
{
sumMain = _________①_________
sumAnti = _________②_________
}
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
if(j > i)
{
val = mat[i][j];
if(__________③__________)
product = product * val;
}
}
}
printf("主对角线总和:%d
", sumMain);
printf("反对角线总和:%d
", sumAnti);
printf("对角线差值(主-反对角):%d
", _________④________);
printf("上三角6的倍数累乘结果:%d
", product);
return 0;
}
【答案】①sumMain + mat[i][i]; ②sumAnti + mat[i][3 - i];
③val != 0 && val % 6 == 0 ④sumMain - sumAnti
3.下列程序的功能是:输入 8 个整数存入一维数组;双层循环遍历查找最长严格连续递增子序列;输出最长序列全部数字,同时打印序列长度;存在多个等长最长序列仅输出第一个。
#include <stdio.h>
int main(void)
{
int arr[8];
int i, start, maxStart, curLen, maxLen, j;
maxLen = 1;
maxStart = 0;
printf("请输入8个整数:");
for(i = 0; i < 8; i++)
{
scanf("%d", &arr[i]);
}
for(start = 0; start < 8; start++)
{
curLen = 1;
for(j = start + 1; j < 8; j++)
{
if(arr[j] > arr[j - 1])
__________①_________
else
_________②_________
}
if(curLen > maxLen)
{
maxLen = curLen;
maxStart = start;
}
}
printf("最长连续递增子序列长度:%d
", maxLen);
printf("序列元素:");
for(i = maxStart; i < ________③______; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
【答案】①curLen = curLen + 1; ②break;
③maxStart + maxLen
4.下列程序的功能是:删除数组中所有完全平方数,输出剩余数组元素。
#include <stdio.h>
int main(void)
{
int arr[9];
int i, j, root, val, idx;
idx = 0;
printf("输入9个整数:");
for(i = 0; i < 9; i++)
{
scanf("%d", &arr[i]);
}
for(i = 0; i < 9; i++)
{
val = arr[i];
if(val <= 0)
{
arr[idx] = val;
idx = idx + 1;
_______①_______
}
root = 1;
while(root * root < val)
root = root + 1;
if(________②________)
{
________③_______
idx = idx + 1;
}
}
printf("删除完全平方数后的数组元素:");
for(i = 0; i < idx; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
【答案】①continue; ②root * root != val ③arr[idx] = val;
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:空心菱形图案打印,输入层数 k,用二维字符数组存储图案后统一输出。以下程序只允许修改两行。
L1. #include <stdio.h>
L2. int main(void)
L3. {
L4. char pic[30][30];
L5. int k, i, j, mid;
L6. printf("输入菱形层数(≥3):");
L7. scanf("%d", &k);
L8. if(k <= 2)
L9. {
L10. printf("层数过小,无法打印
");
L11. return 0;
L12. }
L13. mid = k - 1;
L14. for(i = 0; i < 2 * k - 1; i++)
L15. {
L16. for(j = 0; j < 2 * k - 1; j++)
L17. {
L18. pic[i][j] = ' ';
L19. }
L20. }
L21. for(i = 0; i < k; i++)
L22. {
L23. int left = mid - i;
L24. int right = mid - i;
L25. pic[i][left] = '*';
L26. pic[i][right] = '*';
L27. }
L28. for(i = k; i < 2 * k - 1; i++)
L29. {
L30. int dis = 2 * k - 2;
L31. int left = mid - dis;
L32. int right = mid + dis;
L33. pic[i][left] = '*';
L34. pic[i][right] = '*';
L35. }
L36. for(i = 0; i < 2 * k - 1; i++)
L37. {
L38. for(j = 0; j < 2 * k - 1; j++)
L39. {
L40. printf("%c", pic[i][j]);
L41. }
L42. printf("
");
L43. }
L44. return 0;
L45. }
【答案】①L24. int right = mid + i;
②L30. int dis = 2 * k - 2 - i;
2.下列程序的功能是:提取字符串内全部大写字母,逆序拼接为新字符串输出,若输入:“A5bC9dE7F”,则输出“FECA”。以下程序只允许修改三行。
L1. #include <stdio.h>
L2. int main(void)
L3. {
L4. char str[60], upperBuf[60];
L5. int i, idx, len, t;
L6. idx = 0;
L7. printf("请输入混合字符字符串:");
L8. scanf("%s", str);
L9. for(i = 0; str[i] != '\0'; i++)
L10. {
L11. if(str[i] >= 'A' && str[i] <= 'Z')
L12. {
L13. upperBuf[idx] = str[i];
L14. idx+1;
L15. }
L16. }
L17. upperBuf[idx] = '\0';
L18. len = idx;
L19. for(i = 0; i < len / 2; i++)
L20. {
L21. t = upperBuf[i];
L22. upperBuf[i] = upperBuf[len - 1];
L23. upperBuf[len - 1] = t;
L24. }
L25. printf("提取大写字母并逆序:%s
", upperBuf);
L26. return 0;
L27. }
【答案】①L14. idx++;
②L22. upperBuf[i] = upperBuf[len - 1 - i];
③L23. upperBuf[len - 1 - i] = t;
3.下列程序的功能是:输入 16 个整数存入 4×4 方阵,计算上三角区域所有数字平均值(不含对角线)。以下程序只允许修改两行。
输入:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出:6
L1. #include <stdio.h>
L2. int main(void)
L3. {
L4. int mat[4][4];
L5. int i, j, sum, count, avg;
L6. sum = 0;
L7. count = 0;
L8. printf("输入4阶方阵16个整数:
");
L9. for(i = 0; i < 4; i++)
L10. for(j = 0; j < 4; j++)
L11. scanf("%d", &mat[i][j]);
L12. for(i = 0; i < 4; i++)
L13. {
L14. for(j = 0; j < 4; j++)
L15. {
L16. if(j < i)
L17. {
L18. sum += mat[i][j];
L19. count++;
L20. }
L21. }
L22. }
L23. if(count = 0)
L24. avg = 0;
L25. else
L26. avg = sum / count;
L27. printf("%d
", avg);
L28. return 0;
L29. }
【答案】①L16. if(j > i)
②L23. if(count == 0)
4.下列程序的功能是:判断字符串是否为回文字符串(忽略数字,仅对比字母)。以下程序只允许修改三行。
L1. #include <stdio.h>
L2. int main(void)
L3. {
L4. char str[50], letter[50];
L5. int i, j, len, flag;
L6. len = 0;
L7. flag = 1;
L8. printf("输入混合数字字母字符串:");
L9. scanf("%s", str);
L10. for(i = 0; str[i] != '\0'; i++)
L11. {
L12. if((str[i]>='a'&&str[i]<='z'))
L13. {
L14. letter[len] = str[i];
L15. len = len + 1;
L16. }
L17. }
L18. letter[len] = '\0';
L19. for(i = 0, j = len-1; i < j; i++, j++)
L20. {
L21. if(letter[i] == letter[j])
L22. {
L23. flag = 0;
L24. break;
L25. }
L26. }
L27. printf("提取纯字母字符串:%s
", letter);
L28. if(flag == 1)
L29. printf("该字符串是回文字符串
");
L30. else
L31. printf("该字符串不是回文字符串
");
L32. return 0;
L33. }
【答案】
①L12.if((str[i]>='a'&&str[i]<='z')||(str[i]>= 'A'&&str[i]<='Z'))
②L19. for(i = 0, j = len - 1; i < j; i++, j--)
③L21. if(letter[i] != letter[j])
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第92卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①一维数组的定义和使用;②二维数组的定义和使用;③字符数组的定义和使用。
湖南省《计算机应用类专业综合考纲百套卷》 第92卷
《计算机编程语言——C语言》
数组
专题训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.设有代码:char s[] = "a\0bcdef"; printf("%d", strlen(s)); 输出值为( )
A. 7 B. 1 C. 6 D. 8
2.下列操作无法给字符数组整体完成字符串赋值、编译报错的是( )
A. char s[20] = "student";
B. char s[20]; strcpy(s,"student");
C. char s[20]; s = "student";
D. char s[] = "student";
3.设有定义 int arr[2][4] = {{1,3},{5}}; 表达式arr[1][3]的值为( )
A. 随机垃圾值 B. 0 C. 5 D. 3
4.设有语句:char str[4][12] = {"java","c","python"}; 执行printf("%d", strlen(str[2]));输出结果( )
A. 6 B. 12 C. 3 D. 48
5.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ char str[5] = {'1','2','3'};
int i = 0, cnt = 0;
while(str[i] != '\0')
{ cnt++; i++; }
printf("%d", cnt);
return 0; }
A. 3 B. 5 C. 随机数 D. 死循环无输出
6.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ int a[5] = {0};
int i, sum = 0;
for(i = 0; i < 5; i++)
sum += a[i];
printf("%d", sum);
return 0; }
A. 10 B. 0 C. 随机值 D. 编译报错
7.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ char text[10] = {'a','b','c'};
int i = 0;
while(text[i])
{ putchar(text[i]);
i++; }
return 0; }
A. abc B. abc 后面乱码 C. 无输出 D. 死循环
8.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ int arr[] = {1,3,5,7,9};
printf("%d", arr[arr[1]]);
return 0; }
A. 7 B. 5 C. 随机值 D. 3
9.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ int arr[6] = {2,4,6},i, res = 0;
for(i = 0; i < 6; i++)
{ if(arr[i] % 2 == 0)
res += arr[i];}
printf("%d", res);
return 0; }
A. 12 B. 18 C. 24 D. 随机值
10.执行以下程序的输出结果是( )
#include <stdio.h>
#include<string.h>
int main(void)
{ char str[7] = {"test"};
int len1, len2;
len1 = sizeof(str);
len2 = strlen(str);
printf("%d %d", len1, len2);
return 0; }
A. 7 4 B. 4 7 C. 7 5 D. 5 4
11.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ char buf[6] = {'5','7','9'};
int i, count = 0;
for(i = 0; buf[i] != '\0'; i++)
{ if((buf[i] - '0') % 3 == 0)
count++; }
printf("%d", count);
return 0; }
A. 1 B. 2 C. 3 D. 0
12.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ int two[4][2] = {{1},{3,5},{7},{9}};
int i, sum = 0;
for(i = 0; i < 4; i++)
sum += two[i][1];
printf("%d", sum);
return 0; }
A. 14 B. 5 C. 24 D. 0
13.下列选项中,有关二维数组初始化语句,语法完全合法的是( )
A. int mat[3][] = {1,2,3,4};
B. int mat[][4] = {{1},{2,3,4,5}};
C. int mat[2][3] = {1,2,3,4,5,6,7};
D. int mat[][2] = { };
14.执行以下程序的输出结果是( )
#include <stdio.h>
int main(void)
{ char word[15] = {'c',' ','l','a','n','g'};
int i, letter = 0;
for(i = 0; word[i] != '\0'; i++)
{ if(word[i] != ' ')
letter++; }
printf("%d", letter);
return 0; }
A. 5 B. 6 C. 7 D. 0
15.执行以下程序的输出结果是( )
#include <stdio.h>
#include<math.h>
int main(void)
{ int a[8] = {4, 9, 16, 25};
int i, count = 0;
for(i = 0; i < 8; i++)
{ if(a[i] != 0 && a[i] % (int)sqrt(a[i]) == 0)
count++; }
printf("%d", count);
return 0; }
A. 0 B. 2 C. 4 D. 8
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ int arr[9] = {18, 25, 12, 35, 48};
int i, total = 0;
for(i = 0; i < 9; i++)
{
if(arr[i] != 0 && arr[i] % 6 == 0)
{
int ten = arr[i] / 10;
int one = arr[i] % 10;
if(ten < one)
total += arr[i];
}
}
printf("%d", total);
return 0;
}
2.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int num[7] = {9, 16, 25, 36};
int i, cnt = 0,root;
for(i = 0; i < 7; i++)
{
if(num[i] == 0)
continue;
root = 1;
while(root * root < num[i])
root++;
if(root * root == num[i] && root % 3 == 0)
cnt++;
}
printf("%d", cnt);
return 0;
}
3.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
char buf[8] = {'1','4','7','2'};
int i,res = 0;
for(i = 0; buf[i] != '\0'; i++)
{
int val = buf[i] - '0';
if(val % 3 == 1)
res = res * 10 + val;
}
printf("%d", res);
return 0;
}
4.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int mat[][3] = {5,10,15,20,25};
int i,j,product = 1;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(i == j && mat[i][j] % 5 == 0)
product += mat[i][j];
}
}
printf("%d", product);
return 0;
}
5.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int arr[7] = {15, 21, 27, 33};
int sum = 0,i,a,b;
for(i = 0; i < 7; i++)
{
if(arr[i] == 0)
continue;
a = arr[i] / 10;
b = arr[i] % 10;
if((a + b) % 3 == 0)
sum += arr[i];
}
printf("%d", sum);
return 0;
}
6.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int seq[10] = {5,12,17,24,31,36};
int i, limit, sum, idx;
sum = 0;
limit = seq[3];
for(i = 0; i < limit; i++)
{
if(i >= 10)
break;
idx = seq[i];
if(idx < 10 && seq[idx] % 7 == 5)
sum = sum + seq[idx];
}
printf("%d", sum);
return 0;
}
7.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
char text[14] = {'3','8','1','9','4','7','2'};
int i, resOdd, resEven, num;
resOdd = 0;
resEven = 0;
for(i = 0; text[i] != '\0'; i++)
{
num = text[i] - '0';
if(num % 2 == 1)
resOdd = resOdd * 10 + num;
else
resEven = resEven * 10 + num;
}
printf("%d# %d", resOdd, resEven);
return 0;
}
8.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int arr[8] = {5,6,9,25,36,76,81};
int i, sum, square, tmp, bit;
sum = 0;
for(i = 0; i < 8; i++)
{
if(arr[i] == 0)
continue;
square = arr[i] * arr[i];
tmp = arr[i];
bit = 1;
while(tmp > 0)
{
bit = bit * 10;
tmp = tmp / 10;
}
if(square % bit == arr[i])
sum = sum + arr[i];
}
printf("%d", sum);
return 0;
}
9.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int path[20] = {19};
int i, pos, num, evenSum;
pos = 1;
evenSum = 0;
num = path[0];
while(num != 1 && pos < 20)
{
if(num % 2 == 0)
{
evenSum = evenSum + num;
num = num / 2;
}
else
num = num * 3 + 1;
path[pos] = num;
pos = pos + 1;
}
printf("%d", evenSum);
return 0;
}
10.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
char buf[12] = {'2','5','7','1','9','3'};
int i, hasZero, res, num;
hasZero = 0;
res = 0;
for(i = 0; buf[i] != '\0'; i++)
{
num = buf[i] - '0';
if(num == 0)
hasZero = 1;
res = res * 10 + num;
}
if(hasZero == 1)
printf("0");
else
printf("%d", res);
return 0;
}
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.下列程序的功能是:输入字符串,找出其中长度最长的回文子串并输出。
#include <stdio.h>
#include <string.h>
int main(void)
{ char str[100], maxPal[100];
int len, i, j, k, l, maxLen, nowLen;
gets(str);
len = strlen(str);
maxLen = 0;
for(i = 0; i < len; i++)
{
for(j = i; j < len; j++)
{ l = 1;
for(k = 0; k <= (j - i) / 2; k++)
{ if(_____________①___________)
{
l = 0;
_________②_________
}
}
if(l == 1)
{ nowLen = ________③_______
if(nowLen > maxLen)
{
maxLen = nowLen;
for(k = 0; k < nowLen; k++)
maxPal[k] = _______④_______
___________⑤___________
}
}
}
}
printf("最长回文子串:%s
", maxPal);
return 0; }
2.下列程序的功能是:用户依次输入 16 个整数存入 4×4 二维方阵;分别计算主对角线所有元素之和、反对角线所有元素之和,输出两者差值;严格遍历上三角区域(j>i),筛选能被 6 整除且不为 0 的数字,累乘输出乘积;无符合数字则乘积默认 1。
#include <stdio.h>
int main(void)
{ int mat[4][4];
int i, j, input, sumMain, sumAnti, product, val;
sumMain = 0;
sumAnti = 0;
product = 1;
printf("请依次输入16个整数填充4阶方阵:
");
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
scanf("%d", &mat[i][j]);
}
}
for(i = 0; i < 4; i++)
{
sumMain = _________①_________
sumAnti = _________②_________
}
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
if(j > i)
{
val = mat[i][j];
if(__________③__________)
product = product * val;
}
}
}
printf("主对角线总和:%d
", sumMain);
printf("反对角线总和:%d
", sumAnti);
printf("对角线差值(主-反对角):%d
", _________④________);
printf("上三角6的倍数累乘结果:%d
", product);
return 0;
}
3.下列程序的功能是:输入 8 个整数存入一维数组;双层循环遍历查找最长严格连续递增子序列;输出最长序列全部数字,同时打印序列长度;存在多个等长最长序列仅输出第一个。
#include <stdio.h>
int main(void)
{
int arr[8];
int i, start, maxStart, curLen, maxLen, j;
maxLen = 1;
maxStart = 0;
printf("请输入8个整数:");
for(i = 0; i < 8; i++)
{
scanf("%d", &arr[i]);
}
for(start = 0; start < 8; start++)
{
curLen = 1;
for(j = start + 1; j < 8; j++)
{
if(arr[j] > arr[j - 1])
__________①_________
else
_________②_________
}
if(curLen > maxLen)
{
maxLen = curLen;
maxStart = start;
}
}
printf("最长连续递增子序列长度:%d
", maxLen);
printf("序列元素:");
for(i = maxStart; i < ________③______; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
4.下列程序的功能是:删除数组中所有完全平方数,输出剩余数组元素。
#include <stdio.h>
int main(void)
{
int arr[9];
int i, j, root, val, idx;
idx = 0;
printf("输入9个整数:");
for(i = 0; i < 9; i++)
{
scanf("%d", &arr[i]);
}
for(i = 0; i < 9; i++)
{
val = arr[i];
if(val <= 0)
{
arr[idx] = val;
idx = idx + 1;
_______①_______
}
root = 1;
while(root * root < val)
root = root + 1;
if(________②________)
{
________③_______
idx = idx + 1;
}
}
printf("删除完全平方数后的数组元素:");
for(i = 0; i < idx; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:空心菱形图案打印,输入层数 k,用二维字符数组存储图案后统一输出。以下程序只允许修改两行。
L1. #include <stdio.h>
L2. int main(void)
L3. {
L4. char pic[30][30];
L5. int k, i, j, mid;
L6. printf("输入菱形层数(≥3):");
L7. scanf("%d", &k);
L8. if(k <= 2)
L9. {
L10. printf("层数过小,无法打印
");
L11. return 0;
L12. }
L13. mid = k - 1;
L14. for(i = 0; i < 2 * k - 1; i++)
L15. {
L16. for(j = 0; j < 2 * k - 1; j++)
L17. {
L18. pic[i][j] = ' ';
L19. }
L20. }
L21. for(i = 0; i < k; i++)
L22. {
L23. int left = mid - i;
L24. int right = mid - i;
L25. pic[i][left] = '*';
L26. pic[i][right] = '*';
L27. }
L28. for(i = k; i < 2 * k - 1; i++)
L29. {
L30. int dis = 2 * k - 2;
L31. int left = mid - dis;
L32. int right = mid + dis;
L33. pic[i][left] = '*';
L34. pic[i][right] = '*';
L35. }
L36. for(i = 0; i < 2 * k - 1; i++)
L37. {
L38. for(j = 0; j < 2 * k - 1; j++)
L39. {
L40. printf("%c", pic[i][j]);
L41. }
L42. printf("
");
L43. }
L44. return 0;
L45. }
2.下列程序的功能是:提取字符串内全部大写字母,逆序拼接为新字符串输出,若输入:“A5bC9dE7F”,则输出“FECA”。以下程序只允许修改三行。
L1. #include <stdio.h>
L2. int main(void)
L3. {
L4. char str[60], upperBuf[60];
L5. int i, idx, len, t;
L6. idx = 0;
L7. printf("请输入混合字符字符串:");
L8. scanf("%s", str);
L9. for(i = 0; str[i] != '\0'; i++)
L10. {
L11. if(str[i] >= 'A' && str[i] <= 'Z')
L12. {
L13. upperBuf[idx] = str[i];
L14. idx+1;
L15. }
L16. }
L17. upperBuf[idx] = '\0';
L18. len = idx;
L19. for(i = 0; i < len / 2; i++)
L20. {
L21. t = upperBuf[i];
L22. upperBuf[i] = upperBuf[len - 1];
L23. upperBuf[len - 1] = t;
L24. }
L25. printf("提取大写字母并逆序:%s
", upperBuf);
L26. return 0;
L27. }
3.下列程序的功能是:输入 16 个整数存入 4×4 方阵,计算上三角区域所有数字平均值(不含对角线)。以下程序只允许修改两行。
输入:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出:6
L1. #include <stdio.h>
L2. int main(void)
L3. {
L4. int mat[4][4];
L5. int i, j, sum, count, avg;
L6. sum = 0;
L7. count = 0;
L8. printf("输入4阶方阵16个整数:
");
L9. for(i = 0; i < 4; i++)
L10. for(j = 0; j < 4; j++)
L11. scanf("%d", &mat[i][j]);
L12. for(i = 0; i < 4; i++)
L13. {
L14. for(j = 0; j < 4; j++)
L15. {
L16. if(j < i)
L17. {
L18. sum += mat[i][j];
L19. count++;
L20. }
L21. }
L22. }
L23. if(count = 0)
L24. avg = 0;
L25. else
L26. avg = sum / count;
L27. printf("%d
", avg);
L28. return 0;
L29. }
4.下列程序的功能是:判断字符串是否为回文字符串(忽略数字,仅对比字母)。以下程序只允许修改三行。
L1. #include <stdio.h>
L2. int main(void)
L3. {
L4. char str[50], letter[50];
L5. int i, j, len, flag;
L6. len = 0;
L7. flag = 1;
L8. printf("输入混合数字字母字符串:");
L9. scanf("%s", str);
L10. for(i = 0; str[i] != '\0'; i++)
L11. {
L12. if((str[i]>='a'&&str[i]<='z'))
L13. {
L14. letter[len] = str[i];
L15. len = len + 1;
L16. }
L17. }
L18. letter[len] = '\0';
L19. for(i = 0, j = len-1; i < j; i++, j++)
L20. {
L21. if(letter[i] == letter[j])
L22. {
L23. flag = 0;
L24. break;
L25. }
L26. }
L27. printf("提取纯字母字符串:%s
", letter);
L28. if(flag == 1)
L29. printf("该字符串是回文字符串
");
L30. else
L31. printf("该字符串不是回文字符串
");
L32. return 0;
L33. }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$