内容正文:
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第85卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①多维数组指针的概念;②指向多维数组的指针变量;③指向数组的指针作为函数参数;④字符串的表示形式;⑤字符指针遍历字符串;⑥字符指针的应用。
湖南省《计算机应用类专业综合考纲百套卷》 第85卷
《计算机编程语言——C语言》
通过指针引用多维数组和遍历字符串
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.设有定义 int a[2][3], *p = a[0];,以下能正确引用数组元素a[1][2]的是( )
A. *(p+5) B. *(p+4) C. *(a+1)+2 D. *(*(a+2)+1)
2.定义 int a[3][4]; int (*p)[4] = a;,则p++执行后,p的变化是( )
A. 向后移动 1 个 int 元素 B. 向后移动 4 个 int 元素
C. 向后移动 3 个 int 元素 D. 地址不发生变化
3.设有语句:char s[] = "hello"; char *p = s; 执行 p = p + 2; 后,*p的值是( )
A. 'l' B. 'e' C. 'h' D. 'o'
4.若有 int a[3][2] = {1,2,3,4,5,6}; int *q = &a[0][0];,表达式*(q+3)的值为( )
A. 3 B. 4 C. 5 D. 6
5.执行以下程序段的输出结果是( )
int arr[3][2] = {10,20,30,40,50,60};
int *p = arr[0];
printf("%d", *(p + 4));
A. 40 B. 50 C. 60 D. 30
6.执行以下程序段的输出结果是( )
char str[] = "abcdef";
char *s = str + 3;
*s = 'X';
puts(str);
A. abcXef B. abcdef C. abXdef D. 程序报错
7.已知int占 4 字节,该程序输出为( )
int a[2][4];
int (*pt)[4] = a;
pt++;
printf("%d", pt - a);
A. 1 B. 4 C. 16 D. 0
8.执行以下程序段的输出结果是( )
char *p = "test";
int cnt = 0;
while(*p)
{ cnt++;
p++;}
printf("%d", cnt);
A. 3 B. 4 C. 5 D. 0
9.执行以下程序段的输出结果是( )
int a[2][3] = {1,2,3,4,5,6};
int (*p)[3] = a;
printf("%d", *(*(p+1)+1));
A. 2 B. 4 C. 5 D. 6
10.执行以下程序段的输出结果是( )
char s1[20] = "apple";
char s2[] = "pear";
strcpy(s1, s2);
puts(s1);
A. pear B. applepear C. pearle D. 乱码
11.执行以下程序段的输出结果是( )
int a[3][4] = { {1,2}, {3,4,5} };
int (*p)[4] = a;
printf("%d", *(*(p+2)));
A. 0 B. 1 C. 3 D. 随机值
12.下列代码中,能够正确遍历二维数组所有元素的是( )
int m[2][2] = {1,2,3,4};
int *ptr = m[0];
A. while(ptr < m) { printf("%d",*ptr); ptr++; }
B. while(ptr < m+2) { printf("%d",*ptr); ptr++; }
C. while(ptr < m[0]+4) { printf("%d",*ptr); ptr++; }
D. while(*ptr) { printf("%d",*ptr); ptr++; }
13.执行以下程序段的输出结果是( )
char str[] = "ab\0cd\0ef";
char *p = str;
while(*p)
{ putchar(*p);
p++;}
A. Abcd B. ab C. abcdef D. ab cd ef
14.执行以下程序段的输出结果是( )
char s1[15] = "basketball";
char s2[] = "ball";
strcpy(s1+4, s2);
puts(s1);
A. Basketball B. basketball C. baskball D. basket
15.执行以下程序段的输出结果是( )
char *p = "programming";
while(*++p)
{ if(*p == 'm')
break; }
putchar(*p);
A. r B. m C. g D. i
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.(2026年)下列程序的运行结果是__________________。
#include <stdio.h>
int main(){
char s[]="abcdef";
char *p=s;
*(p++)+=1;
++*p;
printf("%s",s);
return 0;
}
2.下列程序的运行结果是__________________。
#include <stdio.h>
int getRowSum(int (*arr)[4], int row)
{
int i, sum = 0;
for(i = 0; i < 4; i++)
sum += arr[row][i];
return sum;
}
int main()
{
int a[3][4] = {{2,4,6,8},{1,3,5,7},{9,1,2,3}};
printf("%d", getRowSum(a, 2));
return 0;
}
3.下列程序的运行结果是__________________。
#include <stdio.h>
void printStr(char *s)
{
if (!*s)
return;
putchar(*s);
printStr(s + 1);
putchar(*s);
}
int main()
{
char buf[] = "ab";
printStr(buf);
return 0;
}
4.下列程序的运行结果是__________________。
#include <stdio.h>
#include <string.h>
void reverse(char s[])
{
int i, j;
char t;
j = strlen(s) - 1;
for(i = 0; i < j; i++, j--)
{
t = s[i];
s[i] = s[j];
s[j] = t;
}
}
int main()
{
char str[] = "sky";
reverse(str);
puts(str);
return 0;
}
5.下列程序的运行结果是__________________。
#include <stdio.h>
void swapCase(char *s)
{
while (*s)
{
if (*s >= 'a' && *s <= 'z')
*s -= 32;
else if (*s >= 'A' && *s <= 'Z')
*s += 32;
s++;
}
}
int main()
{
char str[] = "HeLLoWoRLd";
swapCase(str);
puts(str);
return 0;
}
6.下列程序的运行结果是__________________。
#include <stdio.h>
int findMax(int (*arr)[3], int rows)
{
int i, j, max = arr[0][0];
for(i = 0; i < rows; i++)
for(j = 0; j < 3; j++)
if (arr[i][j] > max)
max = arr[i][j];
return max;
}
int main()
{
int num[4][3] = {{5,1,9},{2,7,4},{8,3,6},{0,2,1}};
printf("%d", findMax(num, 4));
return 0;
}
7.下列程序的运行结果是__________________。
#include <stdio.h>
int wordCount(char *s)
{
int count = 0;
int flag = 0;
while (*s)
{
if (*s == ' ')
flag = 0;
else if (flag == 0)
{
flag = 1;
count++;
}
s++;
}
return count;
}
int main()
{
char sentence[] = "I love C pointer";
printf("%d", wordCount(sentence));
return 0;
}
8.下列程序的运行结果是__________________。
#include <stdio.h>
void delChar(char s[], char ch)
{
int i = 0, k = 0;
while (s[i])
{
if (s[i] != ch)
s[k++] = s[i];
i++;
}
s[k] = '\0';
}
int main()
{
char str[] = "abacada";
delChar(str, 'a');
puts(str);
return 0;
}
9.下列程序的运行结果是__________________。
#include <stdio.h>
void calcOddEven(int *arr, int len, int *odd, int *even)
{ int i;
*odd = 0;
*even = 0;
for(i = 0; i < len; i++)
{
if (arr[i] % 2 == 1)
*odd += arr[i];
else
*even += arr[i];
}
}
int main()
{
int a[6] = {1,2,3,4,5,6};
int o, e;
calcOddEven(a, 6, &o, &e);
printf("%d %d", o, e);
return 0;
}
10.下列程序的运行结果是__________________。
#include <stdio.h>
#include <string.h>
int isPalin(char s[])
{
int l = 0, r = strlen(s) - 1;
while (l < r)
{
if (s[l] != s[r])
return 0;
l++;
r--;
}
return 1;
}
int main()
{
char str1[] = "level";
char str2[] = "hello";
printf("%d %d", isPalin(str1), isPalin(str2));
return 0;
}
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.(2022年)下列程序的功能是从存放成绩的二维数组中,找到并输出最大值及其所在行号与列号。运行结果为:“max=92,row=3,col=4”。
#include "stdio.h"
#define CLASS 3
____________①______________
int main(void)
{
int score[CLASS][4]={81,72,73,64,65,86,77,88,91,90,85,92};
int maxScore,row,col;
/* maxScore存放最大值,row指所在行号,col指所在列号*/
maxScore=___________②____________;
printf("max=%d,row=%d,col=%d
" ,maxScore,row+1,col+1);
return 0;
}
int FindMax(int *p, int m,int n,int *pRow, int *pCol)
{int i,j,max;
max=_____③______;
*pRow=0; *pCol=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(_________④__________)
{
max=p[i*n+j];
*pRow=i;
*pCol=j;
}}}
__________⑤_________
}
2.下列程序的功能是:定义 5 行 3 列二维整型数组,以行指针作为函数参数,自定义函数查找二维数组中每一行的最小值,并将每行最小值存入一维数组中带回主函数,最后逐行输出原数组与每行最小值。
#include <stdio.h>
void getRowMin(int (*arr)[3], int row, int minArr[])
{ int i, j;
for (i = 0; i < row; i++)
{ minArr[i] = _______①______;
for (j = 1; j < 3; j++)
{ if (___________②___________)
__________③___________
}
}
}
int main()
{ int num[5][3]={ {22,11,33},{9,56,27},
{41,18,35},{72,63,81},{14,90,6}};
int rowMin[5];
int i, j;
getRowMin(num, 5, rowMin);
printf("原二维数组及每行最小值:
");
for (i = 0; i < 5; i++)
{ for (j = 0; j < 3; j++)
{
printf("%d\t", num[i][j]);
}
printf("本行最小值:%d
", rowMin[i]);
}
return 0; }
3.下列程序的功能是:设计简易密码翻译程序。
规则:大写字母向后循环偏移 4 位(A→E,X→B),小写字母向前循环偏移 2 位(a→y,b→z);数字整体加 5,超过 9 则取个位;符号、空格保持不变。
#include <stdio.h>
void caesarCode(char *str)
{ while (___________①__________)
{
if (*str >= 'A' && *str <= 'Z')
{
*str = __________②_________;
}
else if (*str >= 'a' && *str <= 'z')
{
*str = ___________③_________;
}
else if (*str >= '0' && *str <= '9')
{
*str = ___________④_________;
}
str++;
}
}
int main()
{ char pwd[200];
printf("请输入明文(字母/数字/符号):");
gets(pwd);
caesarCode(pwd);
printf("加密密文:%s
", pwd);
return 0; }
4.下列程序的功能是:检测句子中是否出现连续重复单词(空格分隔),利用字符指针遍历判断,存在重复单词返回 1,否则返回 0。
#include <stdio.h>
#include <string.h>
int checkRepeatWord(char *s)
{ char buf1[50], buf2[50];
int i = 0, k = 0;
while (*s != '\0')
{ if (*s == ' ')
{ buf1[k] = '\0';
k = 0;
s++;
while (*s == ' ') s++;
while (___________①_________)
{ buf2[k++] = *s;
s++;
}
buf2[k] = '\0';
if (________②________ == 0)
return 1;
strcpy(buf1, buf2);
k = 0;
}
else
{
_________③_________;
s++;
}
}
return 0;
}
int main()
{ char str[250];
printf("请输入句子:");
gets(str);
if (checkRepeatWord(str))
printf("检测到连续重复单词!
");
else
printf("无连续重复单词
");
return 0; }
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:利用字符指针遍历字符串,自定义函数实现过滤功能:删除字符串中所有数字字符,其余字符保留;主函数接收用户输入字符串,处理后输出新字符串。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 void delDigit(char *str)
L3 { int i = 0, k = 0;
L4 while (str[i] != '\0')
L5 {
L6 if (!(str[i] > '0' && str[i] < '9'))
L7 {
L8 str[i] = str[k];
L9 k++;
L10 }
L11 i++;
L12 }
L13 str[k] = '\0';
L14 }
L15 int main()
L16 { char s[120];
L17 printf("请输入字符串:");
L18 gets(s);
L19 delDigit(s);
L20 printf("删除数字后:%s
", s);
L21 return 0;
L22 }
2.简易模拟摩斯规则:将字符串中的数字 0~9 依次替换为 # * & @ ! $ % ^ ( ),字母和符号不变,字符指针实现原地替换。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 void morseSim(char *s)
L3 {
L4 char table[] = "#*&@!$%^()";
L5 while (*s != '\0')
L6 {
L7 if (*s >= '0' && *s <= '9')
L8 {
L9 int idx = *s - 0;
L10 s = table[idx];
L11 }
L12 s++;
L13 }
L14 }
L15 int main()
L16 {
L17 char info[200];
L18 printf("请输入含数字的字符串:");
L19 gets(info);
L20 morseSim(info);
L21 printf("转换结果:%s
", info);
L22 return 0; }
3.下列程序的功能是:4 行 4 列数字方阵,行指针作函数参数,实现每一行所有元素整体向左平移一位,最左侧元素移动到本行末尾,输出平移前后的方阵。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 void leftMove(int (*mat)[4], int row)
L3 {
L4 int i, j, temp;
L5 for (i = 0; i < row; i++)
L6 {
L7 temp = mat[0][0];
L8 for (j = 0; j < 3; j++)
L9 mat[i][j] = mat[i+1][j+1];
L10 mat[i][i] = temp;
L11 }
L12 }
L13 void printMat(int (*mat)[4], int row)
L14 {
L15 int i, j;
L16 for (i = 0; i < row; i++)
L17 {
L18 for (j = 0; j < 4; j++)
L19 printf("%3d", mat[i][j]);
L20 printf("
");
L21 }
L22 }
L23 int main()
L24 {
L25 int data[4][4] = {{1,2,3,4},{5,6,7,8},
{9,10,11,12},{13,14,15,16}};
L26 printf("平移前:
");
L27 printMat(data, 4);
L28 leftMove(data, 4);
L29 printf("左移一位后:
");
L30 printMat(data, 4);
L31 return 0; }
4.下列程序的功能是:利用字符指针实现字符串分段替换:将字符串中所有连续的空格替换为单个空格(压缩多余空格)。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 void compressSpace(char *s)
L3 {
L4 int i = 0, k = 0;
L5 int flag = 0;
L6 while (s[i] != '\0')
L7 {
L8 if (s[i] == ' ')
L9 {
L10 if (flag != 0)
L11 {
L12 s[k] = ' ';
L13 flag = 1;
L14 }
L15 }
L16 else
L17 {
L18 s[k] = s[i];
L19 flag = 0;
L20 }
L21 i++;
L22 }
L23 s[k] = '\0';
L24 }
L25 int main()
L26 {
L27 char buf[200];
L28 printf("请输入带连续空格的文本:");
L29 gets(buf);
L30 compressSpace(buf);
L31 printf("空格压缩后:%s
", buf);
L32 return 0; }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第85卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①多维数组指针的概念;②指向多维数组的指针变量;③指向数组的指针作为函数参数;④字符串的表示形式;⑤字符指针遍历字符串;⑥字符指针的应用。
湖南省《计算机应用类专业综合考纲百套卷》 第85卷
《计算机编程语言——C语言》
通过指针引用多维数组和遍历字符串
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.设有定义 int a[2][3], *p = a[0];,以下能正确引用数组元素a[1][2]的是( )
A. *(p+5) B. *(p+4) C. *(a+1)+2 D. *(*(a+2)+1)
【答案】A
【解析】二维数组按行连续存储,a[1][2] 是整体第 5 个元素,p指向首元素,p+5 指向该元素,解引用取值。
2.定义 int a[3][4]; int (*p)[4] = a;,则p++执行后,p的变化是( )
A. 向后移动 1 个 int 元素 B. 向后移动 4 个 int 元素
C. 向后移动 3 个 int 元素 D. 地址不发生变化
【答案】B
【解析】int (*p)[4] 是行指针,指向包含 4 个 int 的一维数组,p++ 跳转到下一行,跨越 4 个元素。
3.设有语句:char s[] = "hello"; char *p = s; 执行 p = p + 2; 后,*p的值是( )
A. 'l' B. 'e' C. 'h' D. 'o'
【答案】A
【解析】s[0]='h'、s[1]='e'、s[2]='l',p+2指向s[2]。
4.若有 int a[3][2] = {1,2,3,4,5,6}; int *q = &a[0][0];,表达式*(q+3)的值为( )
A. 3 B. 4 C. 5 D. 6
【答案】B
【解析】二维数组顺序存储:1,2,3,4,5,6,q+3指向第 4 个元素 4。
5.执行以下程序段的输出结果是( )
int arr[3][2] = {10,20,30,40,50,60};
int *p = arr[0];
printf("%d", *(p + 4));
A. 40 B. 50 C. 60 D. 30
【答案】B
【解析】二维数组行优先连续存储,元素依次为 10,20,30,40,50,60;p指向首元素,p+4指向第 5 个元素 50。
6.执行以下程序段的输出结果是( )
char str[] = "abcdef";
char *s = str + 3;
*s = 'X';
puts(str);
A. abcXef B. abcdef C. abXdef D. 程序报错
【答案】A
【解析】str是字符数组,存储在可读可写栈区;str+3指向字符d,修改为X,最终输出 abcXef。
7.已知int占 4 字节,该程序输出为( )
int a[2][4];
int (*pt)[4] = a;
pt++;
printf("%d", pt - a);
A. 1 B. 4 C. 16 D. 0
【答案】A
【解析】两个同类型行指针相减,结果为行数差值,不是字节数;pt++跳转至下一行,差值为 1。
8.执行以下程序段的输出结果是( )
char *p = "test";
int cnt = 0;
while(*p)
{ cnt++;
p++;}
printf("%d", cnt);
A. 3 B. 4 C. 5 D. 0
【答案】B
【解析】while(*p)判断字符是否非\0,字符串test共 4 个有效字符,循环执行 4 次。
9.执行以下程序段的输出结果是( )
int a[2][3] = {1,2,3,4,5,6};
int (*p)[3] = a;
printf("%d", *(*(p+1)+1));
A. 2 B. 4 C. 5 D. 6
【答案】C
【解析】p+1指向第 1 行,*(p+1)为第 1 行首地址,+1指向该行第 1 列元素,取值为 5。
10.执行以下程序段的输出结果是( )
char s1[20] = "apple";
char s2[] = "pear";
strcpy(s1, s2);
puts(s1);
A. pear B. applepear C. pearle D. 乱码
【答案】A
【解析】strcpy会连同\0一起覆盖目标字符串,执行后s1完整存储字符串pear。
11.执行以下程序段的输出结果是( )
int a[3][4] = { {1,2}, {3,4,5} };
int (*p)[4] = a;
printf("%d", *(*(p+2)));
A. 0 B. 1 C. 3 D. 随机值
【答案】A
【解析】二维数组部分初始化,未显式赋值的元素自动初始化为 0。p+2指向第 2 行,*(*(p+2))取该行首个元素,值为 0。
12.下列代码中,能够正确遍历二维数组所有元素的是( )
int m[2][2] = {1,2,3,4};
int *ptr = m[0];
A. while(ptr < m) { printf("%d",*ptr); ptr++; }
B. while(ptr < m+2) { printf("%d",*ptr); ptr++; }
C. while(ptr < m[0]+4) { printf("%d",*ptr); ptr++; }
D. while(*ptr) { printf("%d",*ptr); ptr++; }
【答案】C
【解析】数组共 4 个元素,m[0]+4指向数组末尾下一位;A、B 地址判断错误,D 无结束条件。
13.执行以下程序段的输出结果是( )
char str[] = "ab\0cd\0ef";
char *p = str;
while(*p)
{ putchar(*p);
p++;}
A. Abcd B. ab C. abcdef D. ab cd ef
【答案】B
【解析】while(*p)以\0作为循环终止条件,遍历到第一个\0时循环结束,仅输出ab。
14.执行以下程序段的输出结果是( )
char s1[15] = "basketball";
char s2[] = "ball";
strcpy(s1+4, s2);
puts(s1);
A. Basketball B. basketball C. baskball D. basket
【答案】C
【解析】strcpy(s1+4, s2) 会将 s2 的内容("ball")连同结束符 \0 一起复制到 s1 从索引 4 开始的位置,这会覆盖掉 s1 中原有的 "tball"。因此,原字符串 "basketball" 的前4个字符 "bask" 保持不变,从第5个字符开始被替换为 "ball",最终拼接结果为 "baskball",选 C。
15.执行以下程序段的输出结果是( )
char *p = "programming";
while(*++p)
{ if(*p == 'm')
break; }
putchar(*p);
A. r B. m C. g D. i
【答案】B
【解析】*++p为先自增再取值,指针向后遍历,遇到字符m执行break,最终输出m。
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.(2026年)下列程序的运行结果是__________________。
#include <stdio.h>
int main(){
char s[]="abcdef";
char *p=s;
*(p++)+=1;
++*p;
printf("%s",s);
return 0;
}
【答案】bccdef
2.下列程序的运行结果是__________________。
#include <stdio.h>
int getRowSum(int (*arr)[4], int row)
{
int i, sum = 0;
for(i = 0; i < 4; i++)
sum += arr[row][i];
return sum;
}
int main()
{
int a[3][4] = {{2,4,6,8},{1,3,5,7},{9,1,2,3}};
printf("%d", getRowSum(a, 2));
return 0;
}
【答案】15
3.下列程序的运行结果是__________________。
#include <stdio.h>
void printStr(char *s)
{
if (!*s)
return;
putchar(*s);
printStr(s + 1);
putchar(*s);
}
int main()
{
char buf[] = "ab";
printStr(buf);
return 0;
}
【答案】abba
4.下列程序的运行结果是__________________。
#include <stdio.h>
#include <string.h>
void reverse(char s[])
{
int i, j;
char t;
j = strlen(s) - 1;
for(i = 0; i < j; i++, j--)
{
t = s[i];
s[i] = s[j];
s[j] = t;
}
}
int main()
{
char str[] = "sky";
reverse(str);
puts(str);
return 0;
}
【答案】yks
5.下列程序的运行结果是__________________。
#include <stdio.h>
void swapCase(char *s)
{
while (*s)
{
if (*s >= 'a' && *s <= 'z')
*s -= 32;
else if (*s >= 'A' && *s <= 'Z')
*s += 32;
s++;
}
}
int main()
{
char str[] = "HeLLoWoRLd";
swapCase(str);
puts(str);
return 0;
}
【答案】hEllOwOrlD
6.下列程序的运行结果是__________________。
#include <stdio.h>
int findMax(int (*arr)[3], int rows)
{
int i, j, max = arr[0][0];
for(i = 0; i < rows; i++)
for(j = 0; j < 3; j++)
if (arr[i][j] > max)
max = arr[i][j];
return max;
}
int main()
{
int num[4][3] = {{5,1,9},{2,7,4},{8,3,6},{0,2,1}};
printf("%d", findMax(num, 4));
return 0;
}
【答案】9
7.下列程序的运行结果是__________________。
#include <stdio.h>
int wordCount(char *s)
{
int count = 0;
int flag = 0;
while (*s)
{
if (*s == ' ')
flag = 0;
else if (flag == 0)
{
flag = 1;
count++;
}
s++;
}
return count;
}
int main()
{
char sentence[] = "I love C pointer";
printf("%d", wordCount(sentence));
return 0;
}
【答案】4
8.下列程序的运行结果是__________________。
#include <stdio.h>
void delChar(char s[], char ch)
{
int i = 0, k = 0;
while (s[i])
{
if (s[i] != ch)
s[k++] = s[i];
i++;
}
s[k] = '\0';
}
int main()
{
char str[] = "abacada";
delChar(str, 'a');
puts(str);
return 0;
}
【答案】bcd
9.下列程序的运行结果是__________________。
#include <stdio.h>
void calcOddEven(int *arr, int len, int *odd, int *even)
{ int i;
*odd = 0;
*even = 0;
for(i = 0; i < len; i++)
{
if (arr[i] % 2 == 1)
*odd += arr[i];
else
*even += arr[i];
}
}
int main()
{
int a[6] = {1,2,3,4,5,6};
int o, e;
calcOddEven(a, 6, &o, &e);
printf("%d %d", o, e);
return 0;
}
【答案】9 12
10.下列程序的运行结果是__________________。
#include <stdio.h>
#include <string.h>
int isPalin(char s[])
{
int l = 0, r = strlen(s) - 1;
while (l < r)
{
if (s[l] != s[r])
return 0;
l++;
r--;
}
return 1;
}
int main()
{
char str1[] = "level";
char str2[] = "hello";
printf("%d %d", isPalin(str1), isPalin(str2));
return 0;
}
【答案】1 0
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.(2022年)下列程序的功能是从存放成绩的二维数组中,找到并输出最大值及其所在行号与列号。运行结果为:“max=92,row=3,col=4”。
#include "stdio.h"
#define CLASS 3
____________①______________
int main(void)
{
int score[CLASS][4]={81,72,73,64,65,86,77,88,91,90,85,92};
int maxScore,row,col;
/* maxScore存放最大值,row指所在行号,col指所在列号*/
maxScore=___________②____________;
printf("max=%d,row=%d,col=%d
" ,maxScore,row+1,col+1);
return 0;
}
int FindMax(int *p, int m,int n,int *pRow, int *pCol)
{int i,j,max;
max=_____③______;
*pRow=0; *pCol=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(_________④__________)
{
max=p[i*n+j];
*pRow=i;
*pCol=j;
}}}
__________⑤_________
}
【答案】①int FindMax(int *p, int m,int n,int *pRow, int *pCol);
或 int FindMax(int *, int,int,int *, int *);
②FindMax(score[0],CLASS,4,&row,&col)
或 FindMax(score[0][0],CLASS,4,&row,&col)
③p[0] ④max<p[i*n+j] ⑤return max;
2.下列程序的功能是:定义 5 行 3 列二维整型数组,以行指针作为函数参数,自定义函数查找二维数组中每一行的最小值,并将每行最小值存入一维数组中带回主函数,最后逐行输出原数组与每行最小值。
#include <stdio.h>
void getRowMin(int (*arr)[3], int row, int minArr[])
{ int i, j;
for (i = 0; i < row; i++)
{ minArr[i] = _______①______;
for (j = 1; j < 3; j++)
{ if (___________②___________)
__________③___________
}
}
}
int main()
{ int num[5][3]={ {22,11,33},{9,56,27},
{41,18,35},{72,63,81},{14,90,6}};
int rowMin[5];
int i, j;
getRowMin(num, 5, rowMin);
printf("原二维数组及每行最小值:
");
for (i = 0; i < 5; i++)
{ for (j = 0; j < 3; j++)
{
printf("%d\t", num[i][j]);
}
printf("本行最小值:%d
", rowMin[i]);
}
return 0; }
【答案】①arr[i][0] ②arr[i][j] < minArr[i]
③minArr[i] = arr[i][j];
3.下列程序的功能是:设计简易密码翻译程序。
规则:大写字母向后循环偏移 4 位(A→E,X→B),小写字母向前循环偏移 2 位(a→y,b→z);数字整体加 5,超过 9 则取个位;符号、空格保持不变。
#include <stdio.h>
void caesarCode(char *str)
{ while (___________①__________)
{
if (*str >= 'A' && *str <= 'Z')
{
*str = __________②_________;
}
else if (*str >= 'a' && *str <= 'z')
{
*str = ___________③_________;
}
else if (*str >= '0' && *str <= '9')
{
*str = ___________④_________;
}
str++;
}
}
int main()
{ char pwd[200];
printf("请输入明文(字母/数字/符号):");
gets(pwd);
caesarCode(pwd);
printf("加密密文:%s
", pwd);
return 0; }
【答案】①*str != '\0' ②(*str - 'A' + 4) % 26 + 'A'
③(*str - 'a' - 2 + 26) % 26 + 'a'
④(*str - '0' + 5) % 10 + '0'
4.下列程序的功能是:检测句子中是否出现连续重复单词(空格分隔),利用字符指针遍历判断,存在重复单词返回 1,否则返回 0。
#include <stdio.h>
#include <string.h>
int checkRepeatWord(char *s)
{ char buf1[50], buf2[50];
int i = 0, k = 0;
while (*s != '\0')
{ if (*s == ' ')
{ buf1[k] = '\0';
k = 0;
s++;
while (*s == ' ') s++;
while (___________①_________)
{ buf2[k++] = *s;
s++;
}
buf2[k] = '\0';
if (________②________ == 0)
return 1;
strcpy(buf1, buf2);
k = 0;
}
else
{
_________③_________;
s++;
}
}
return 0;
}
int main()
{ char str[250];
printf("请输入句子:");
gets(str);
if (checkRepeatWord(str))
printf("检测到连续重复单词!
");
else
printf("无连续重复单词
");
return 0; }
【答案】①*s != ' ' && *s != '\0' ②strcmp(buf1, buf2)
③buf1[k++] = *s
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:利用字符指针遍历字符串,自定义函数实现过滤功能:删除字符串中所有数字字符,其余字符保留;主函数接收用户输入字符串,处理后输出新字符串。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 void delDigit(char *str)
L3 { int i = 0, k = 0;
L4 while (str[i] != '\0')
L5 {
L6 if (!(str[i] > '0' && str[i] < '9'))
L7 {
L8 str[i] = str[k];
L9 k++;
L10 }
L11 i++;
L12 }
L13 str[k] = '\0';
L14 }
L15 int main()
L16 { char s[120];
L17 printf("请输入字符串:");
L18 gets(s);
L19 delDigit(s);
L20 printf("删除数字后:%s
", s);
L21 return 0;
L22 }
【答案】①L6 if (!(str[i] >= '0' && str[i] <= '9'))
②L8 str[k] = str[i];
2.简易模拟摩斯规则:将字符串中的数字 0~9 依次替换为 # * & @ ! $ % ^ ( ),字母和符号不变,字符指针实现原地替换。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 void morseSim(char *s)
L3 {
L4 char table[] = "#*&@!$%^()";
L5 while (*s != '\0')
L6 {
L7 if (*s >= '0' && *s <= '9')
L8 {
L9 int idx = *s - 0;
L10 s = table[idx];
L11 }
L12 s++;
L13 }
L14 }
L15 int main()
L16 {
L17 char info[200];
L18 printf("请输入含数字的字符串:");
L19 gets(info);
L20 morseSim(info);
L21 printf("转换结果:%s
", info);
L22 return 0; }
【答案】①L9 int idx = *s - '0';
②L10 *s = table[idx];
3.下列程序的功能是:4 行 4 列数字方阵,行指针作函数参数,实现每一行所有元素整体向左平移一位,最左侧元素移动到本行末尾,输出平移前后的方阵。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 void leftMove(int (*mat)[4], int row)
L3 {
L4 int i, j, temp;
L5 for (i = 0; i < row; i++)
L6 {
L7 temp = mat[0][0];
L8 for (j = 0; j < 3; j++)
L9 mat[i][j] = mat[i+1][j+1];
L10 mat[i][i] = temp;
L11 }
L12 }
L13 void printMat(int (*mat)[4], int row)
L14 {
L15 int i, j;
L16 for (i = 0; i < row; i++)
L17 {
L18 for (j = 0; j < 4; j++)
L19 printf("%3d", mat[i][j]);
L20 printf("
");
L21 }
L22 }
L23 int main()
L24 {
L25 int data[4][4] = {{1,2,3,4},{5,6,7,8},
{9,10,11,12},{13,14,15,16}};
L26 printf("平移前:
");
L27 printMat(data, 4);
L28 leftMove(data, 4);
L29 printf("左移一位后:
");
L30 printMat(data, 4);
L31 return 0; }
【答案】①L7 temp = mat[i][0];
②L9 mat[i][j] = mat[i][j+1];
③L10 mat[i][3] = temp;
4.下列程序的功能是:利用字符指针实现字符串分段替换:将字符串中所有连续的空格替换为单个空格(压缩多余空格)。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 void compressSpace(char *s)
L3 {
L4 int i = 0, k = 0;
L5 int flag = 0;
L6 while (s[i] != '\0')
L7 {
L8 if (s[i] == ' ')
L9 {
L10 if (flag != 0)
L11 {
L12 s[k] = ' ';
L13 flag = 1;
L14 }
L15 }
L16 else
L17 {
L18 s[k] = s[i];
L19 flag = 0;
L20 }
L21 i++;
L22 }
L23 s[k] = '\0';
L24 }
L25 int main()
L26 {
L27 char buf[200];
L28 printf("请输入带连续空格的文本:");
L29 gets(buf);
L30 compressSpace(buf);
L31 printf("空格压缩后:%s
", buf);
L32 return 0; }
【答案】①L10 if (flag == 0)
②L12 s[k++] = ' ';
③L18 s[k++] = s[i];
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$