内容正文:
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第86卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①指针数组与指向指针的指针概念;②main函数带参数;③指针数组与指向指针的指针应用实例;④返回指针值的函数;⑤返回指针值的函数应用实例。
湖南省《计算机应用类专业综合考纲百套卷》 第86卷
《计算机编程语言——C语言》
指针数组、多重指针、返回指针值的函数
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.下列程序代码段的输出结果是( )
#include <stdio.h>
int num[] = {10,20,30};
int *retFun()
{ return num;}
int main()
{ int *p = retFun() + 1;
printf("%d", *p);
return 0; }
A. 10 B. 20 C. 30 D. 乱码
【答案】B
【解析】retFun返回数组首地址,+1指向第二个元素 20。
2.下列程序代码段的输出结果是( )
char *p[] = {"123","456","789"};
char **q = p;
printf("%s", *(q+1));
A. 123 B. 456 C. 789 D. 乱码
【答案】B
【解析】q指向指针数组首元素,q+1指向第二个指针元素,*(q+1)等价于p[1],指向字符串 "456"。
3.下列程序代码段的输出结果是( )
#include <stdio.h>
int *func(int a[])
{ return &a[1];}
int main()
{ int arr[] = {10,20,30};
int *p = func(arr);
printf("%d", *p);
return 0; }
A. 10 B. 20 C. 30 D. 随机值
【答案】B
【解析】函数返回数组第 2 个元素地址,解引用后取值为 20,数组参数传递不会出现内存释放问题。
4.设有定义 char *name[4]={"Zhang","Li","Wang","Zhao"};,执行
printf("%c", name[2][1]); 输出结果是( )
A. W B. a C. n D. g
【答案】B
【解析】name[2]指向字符串 "Wang",name[2][1]取第二个字符a。
5.已有 int a[2][3] = {1,2,3,4,5,6}; int *p[2];,若要让p[0]指向二维数组第一行,合法赋值是( )
A. p[0] = a; B. p[0] = a[0]; C. p = a; D. p = a[0];
【答案】B
【解析】a[0]是二维数组第一行首地址,类型为int*,可赋值给指针数组元素p[0]。
6.下列程序代码段的输出结果是( )
char *str[] = {"A","BC","DEF"};
char **pt = str;
pt++;
printf("%s", *pt);
A. A B. BC C. DEF D. 无输出
【答案】B
【解析】pt初始指向str[0],pt++后指向str[1],解引用输出字符串BC。
7.下列程序代码段的输出结果是( )
#include <stdio.h>
char *fun()
{ static char s[] = "abcd";
return s;}
int main()
{ char *p = fun();
p[1] = 'X';
printf("%s", fun());
return 0; }
A. Abcd B. aXcd C. 乱码 D. 编译错误
【答案】B
【解析】s是静态数组,内存常驻;修改p[1]会改变原数组内容,最终输出aXcd。
8.下列程序代码段的输出结果是( )
char *a[] = {"12","345","6789"};
char **b = a+2;
printf("%d", strlen(*b));
A. 2 B. 3 C. 4 D. 9
【答案】C
【解析】a+2指向第三个字符串"6789",字符串长度为 4。
9.下列程序代码段的输出结果是( )
#include <stdio.h>
#include<string.h>
int x[] = {5,15,25};
int *(*f)() = NULL;
int *getPtr()
{ return x+1;}
int main()
{ f = getPtr;
printf("%d", *f());
return 0; }
A. 5 B. 15 C. 25 D. 0
【答案】B
【解析】f是指向返回指针的函数的指针;getPtr返回x+1(第二个元素地址),解引用取值 15。
10.下列程序代码段的输出结果是( )
#include <stdio.h>
char *test(int n)
{ char *tab[] = {"Error","Warning","OK"};
return tab[n];}
int main()
{ int num = 0;
printf("%s", test(num));
return 0; }
A. Error B. Warning C. OK D. 程序崩溃
【答案】A
【解析】程序中定义了变量 num = 0 并传入 test 函数。在 test 函数内部,定义了指针数组 tab,其首元素(下标为 0)为字符串 "Error"。因此 test(0) 返回该字符串的首地址,最终输出结果为 Error。
11.下列程序代码段的输出结果是( )
#include <stdio.h>
int *fun(int m)
{ static int s = 100;
s += m;
return &s;}
int main()
{ int *p1, *p2;
p1 = fun(10);
p2 = fun(20);
printf("%d ", *p1);
printf("%d", *p2);
return 0; }
A. 110 130 B. 110 110 C. 100 120 D. 130 130
【答案】D
【解析】函数中的 s 是静态局部变量,其值在多次调用间保持并持续累加。首次调用 fun(10) 时,s 从 100 变为 110,p1 指向 s;二次调用 fun(20) 时,s 在上次基础上累加变为 130,p2 同样指向 s。由于 p1 和 p2 指向同一内存地址,最终解引用的值均为 130,故输出 130 130。
12.下列程序代码段的输出结果是( )
char *arr[] = {"C", "CPP", "Java", "Go"};
char **p = arr + 1;
puts(*p);
A. C B. CPP C. Java D. Go
【答案】B
【解析】arr是指针数组,arr+1指向第二个元素arr[1],*p等价于arr[1],指向字符串"CPP"。
13.下列程序代码段的输出结果是( )
char *lang[] = {"A1", "B22", "C333"};
printf("%c", lang[2][2]);
A. C B. 3 C. 空字符 D. 2
【答案】B
【解析】lang[2]指向字符串"C333",下标0:C、1:3、2:3,因此输出字符3。
14.下列程序代码段的输出结果是( )
#include <stdio.h>
int a[] = {11,22,33,44};
int *f()
{ return a + 2;}
int main()
{ int *q = f();
printf("%d", *q);
return 0; }
A. 11 B. 22 C. 33 D. 44
【答案】C
【解析】a是全局数组,a+2指向第三个元素33,函数返回该地址,解引用取值为 33。
15.下列程序代码段的输出结果是( )
char *s[] = {"abc", "1234"};
char **pp = s;
pp++;
printf("%d", strlen(*pp));
A. 3 B. 4 C. 7 D. 随机值
【答案】B
【解析】pp++指向s[1],对应字符串"1234",长度为 4。
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
char *findLong(char *arr[], int n)
{ int i, maxLen = 0, pos = 0;
for(i = 0; i < n; i++)
{
int len = 0;
while(arr[i][len] != '\0')
len++;
if(len > maxLen)
{
maxLen = len;
pos = i;
}
}
return arr[pos];
}
int main()
{
char *strArr[] = {"Hi", "Program", "Code"};
char *res = findLong(strArr, 3);
puts(res);
return 0; }
【答案】Program
2.下列程序的运行结果是__________________。
#include <stdio.h>
int findVal(int *a, int n, int key)
{ int i;
for(i = 0; i < n; i++)
{
if(a[i] == key)
return i;
}
return -1;
}
int *search(int *a, int n, int k)
{
int pos = findVal(a, n, k);
if(pos != -1)
return &a[pos];
return NULL;
}
int main()
{
int arr[] = {5, 17, 29, 33, 46};
int *p = search(arr, 5, 29);
if(p != NULL)
printf("%d", *p);
else
printf("not found");
return 0;}
【答案】29
3.下列程序的运行结果是__________________。
#include <stdio.h>
char *upper(char *s)
{ static char temp[80];
int i = 0;
while(s[i] != '\0')
{ if(s[i] >= 'a' && s[i] <= 'z')
temp[i] = s[i] - 32;
else
temp[i] = s[i];
i++;
}
temp[i] = '\0';
return temp;}
int main()
{ char str[] = "Hello C";
puts(upper(str));
return 0; }
【答案】HELLO C
4.下列程序的运行结果是__________________。
#include <stdio.h>
int *getMid(int arr[], int n)
{
int mid = n / 2;
return &arr[mid];
}
int main()
{
int seq[] = {22, 33, 44, 55, 66, 77};
int *p = getMid(seq, 6);
printf("%d", *p);
return 0;}
【答案】55
5.下列程序的运行结果是__________________。
#include <stdio.h>
char *copyStr(char *dest, char *src)
{ char *start = dest;
while(*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return start;
}
int main()
{ char s1[100];
char *s2 = "Algorithm";
char *out = copyStr(s1, s2);
puts(out);
return 0;}
【答案】Algorithm
6.下列程序的运行结果是__________________。
#include <stdio.h>
char *strCatEx(char *s1, const char *s2)
{ char *p = s1;
while(*p)
p++;
while(*s2)
{ *p = *s2;
p++;
s2++;
}
*p = '\0';
return s1;
}
char *getCombine(char *arr[], int cnt)
{ static char buf[256] = {0};
int i = 0;
for(; i < cnt; i++)
{
strCatEx(buf, arr[i]);
}
return buf;
}
int main()
{ char *words[] = {"C_", "Pointer_", "Array"};
char *res = getCombine(words, 3);
puts(res);
return 0;}
【答案】C_Pointer_Array
7.下列程序的运行结果是__________________。
#include <stdio.h>
int *calcSeries(int n)
{ static int arr[10];
int i;
arr[0] = 1;
for(i = 1; i < n; i++)
{ arr[i] = arr[i-1] * 2; }
return arr;}
int main()
{ int *p = calcSeries(6);
int i;
for(i = 2; i < 5; i++)
{ printf("%d ", *(p + i)); }
return 0; }
【答案】4 8 16
8.下列程序的运行结果是__________________。
#include <stdio.h>
char *filterUpper(char *s)
{ static char temp[128];
int i = 0, k = 0;
while(s[i] != '\0')
{ if(!(s[i] >= 'A' && s[i] <= 'Z'))
{ temp[k++] = s[i]; }
i++;
}
temp[k] = '\0';
return temp;}
int main()
{ char *text[] = {"CodeABC", "123DefG", "HiJK"};
char **pt = text;
puts(filterUpper(*(pt + 1)));
return 0; }
【答案】123ef
9.下列程序的运行结果是__________________。
#include <stdio.h>
int *findSecondMax(int *a, int len)
{ int max = a[0], sec = a[0];
int i;
for(i = 1; i < len; i++)
{ if(a[i] > max)
{ sec = max;
max = a[i]; }
else if(a[i] > sec && a[i] < max)
{ sec = a[i]; }
}
for(i = 0; i < len; i++)
{ if(a[i] == sec)
return &a[i];
}
return NULL; }
int main()
{ int nums[] = {27, 14, 39, 22, 39, 11};
int *p = findSecondMax(nums, 6);
printf("%d", *p);
return 0; }
【答案】27
10.下列程序的运行结果是__________________。
#include <stdio.h>
int testFunc(int x)
{ static int cnt = 0;
cnt += x;
return cnt;}
int *wrapFunc(int a, int b)
{ static int res;
res = testFunc(a) + testFunc(b);
return &res;}
int main()
{ int *r1 = wrapFunc(3, 5);
int *r2 = wrapFunc(2, 4);
printf("%d %d", *r1, *r2);
return 0; }
【答案】24 24
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.下列程序的功能是:使用指针数组存储若干字符串,自定义返回指针的函数找出其中最短的字符串并输出。
#include <stdio.h>
char *getShortest(char *strArr[], int n)
{ int i, minLen, pos = 0;
char *p = _______①______;
minLen = 0;
while (_______②______)
{ minLen++;
p++; }
for (i = 1; i < n; i++)
{ int len = 0;
char *q = strArr[i];
while (*q != '\0')
{ len++;
q++;
}
if (________③________)
{ minLen = len;
______④______;
}
}
return strArr[pos];
}
int main()
{ char *arr[] = {"Language", "C", "Pointer", "Code", "Algorithm"};
int num = sizeof(arr) / sizeof(arr[0]);
char *res = _________⑤________;
printf("最短字符串:%s
", res);
return 0; }
【答案】①strArr[0] ②*p != '\0' ③len < minLen
④pos = i ⑤getShortest(arr, num)
2.下列程序的输出结果是:定义整型数组,设计返回指针的函数筛选出数组中所有偶数,存入静态数组并返回其首地址,最后遍历输出所有偶数。
#include <stdio.h>
int *filterEven(int src[], int n, int *outCnt)
{ static int temp[50];
int i, k = 0;
for (i = 0; i < n; i++)
{ if (_________①________)
{
temp[k++] = ______②______;
}
}
*outCnt = ________③______;
return _______④_______;
}
int main()
{ int data[] = {13, 24, 8, 37, 42, 51, 66, 9};
int count, i;
int *p = filterEven(data, sizeof(data)/sizeof(data[0]), &count);
printf("数组中的偶数:");
for (i = 0; i < count; i++)
{ printf("%d ", *(p + i)); }
return 0; }
【答案】①src[i] % 2 == 0 ②src[i] ③k ④temp
3.下列函数的功能是:自定义返回字符指针的函数,实现字符串整体逆序,主函数传入普通字符串,调用函数后输出逆序结果。
#include <stdio.h>
char *strReverse(char *s)
{ static char buf[100];
int i = 0, j = 0;
while (s[i] != '\0')
{
_______①_______
}
i--;
while (i >= 0)
{
________②_______;
}
buf[j] = _______③_______;
return buf;
}
int main()
{ char str[100],*res;
printf("请输入一串字符:");
scanf("%s", str);
res = strReverse(str);
printf("逆序结果:%s
", res);
return 0; }
【答案】①i++; ②buf[j++] = s[i--] ③'\0'
4.下列程序的功能是自定义返回指针的函数,拼接两个字符串并返回拼接后的字符串地址,主函数输入两个字符串,输出拼接结果。
#include <stdio.h>
char *strJoin(char *s1, char *s2)
{ static char res[200];
int i = 0, j = 0;
while (s1[i] != '\0')
{
res[j++] = s1[i++];
}
_______①________
while (s2[i] != '\0')
{
________②_______;
}
res[j] = '\0';
return res;
}
int main()
{ char s1[100], s2[100],*out;
printf("请输入第一个字符串:");
scanf("%s", s1);
printf("请输入第二个字符串:");
scanf("%s", s2);
_________③_________
printf("拼接结果:%s
", out);
return 0; }
【答案】①i=0; ②res[j++]=s2[i++] ③out=strJoin(s1, s2);
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:利用指针数组存储英文短语,遍历所有内容,过滤掉所有小写字母o,输出处理后的全部字符串。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 void delChar(char *s)
L3 { int i = 0, k = 0;
L4 while (s[i] != '\0')
L5 {
L6 if (s[i] != o)
L7 {
L8 s[i] = s[k++] ;
L9 }
L10 i++;
L11 }
L12 s[k] = '\0';
L13 }
L14 int main()
L15 { char buf[5][50] = {"look", "book", "orange", "open", "good"};
L16 char *pArr[5];
L17 int i;
L18 for (i = 0; i < 5; i++)
L19 { pArr[i] = buf[i];
L20 delChar(pArr[i]);
L21 puts(pArr[i]);
L22 }
L23 return 0; }
【答案】①L6 if (s[i] != 'o')
②L8 s[k++] = s[i];
2.下列程序的功能是:自定义返回指针的函数,提取字符串中的所有数字字符,组成新字符串后返回,主函数输入混合字符串并输出提取结果。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 char *extractNum(char *s)
L3 {
L4 static char numStr[100];
L5 int i = 0, k = 0;
L6 while (s[i] != '\0')
L7 {
L8 if (s[i] >= '0' || s[i] <= '9')
L9 {
L10 numStr[k++] = s[i];
L11 }
L12 i++;
L13 }
L14 numStr[k] = '\0';
L15 return numStr;
L16 }
L17 int main()
L18 { char str[100],*res;
L19 printf("请输入含数字的字符串:");
L20 scanf("%s", str);
L21 res = extractNum(*str);
L22 printf("提取出的数字:%s
", res);
L23 return 0; }
【答案】①L8 if (s[i] >= '0' && s[i] <= '9')
②L21 res = extractNum(str);
3.下列程序的功能是:设计返回指针的函数,将数组中所有元素整体后移一位(最后一位移到首位),返回数组首地址,主函数输出移位后的数组。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int *rightShift(int arr[], int n)
L3 {
L4 int last = arr[n-1];
L5 int i;
L6 for (i = n-1; i > 0; i--)
L7 {
L8 arr[i] = arr[i--];
L9 }
L10 arr[0] = last-1;
L11 return arr;
L12 }
L13 int main()
L14 { int arr[] = {1,2,3,4,5,6};
L15 int len = sizeof(arr)/sizeof(arr[0]);
L16 int *p = rightShift(arr, len);
L17 int i;
L18 printf("移位后数组:");
L19 for (i = 0; i < len; i++)
L20 {
L21 printf("%d ", *p+i);
L22 }
L23 return 0; }
【答案】①L8 arr[i] = arr[i-1];
②L10 arr[0] = last;
③L21 printf("%d ", *(p+i));
4.下列程序的功能是:利用指针数组存储多行文本,统计每行文本的字符数量,并只输出字符数大于 5 的文本行。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int main()
L3 {
L4 char text[6][80]={"hi","computer",
"code","programming","data","function"};
L5 char *txtPtr[6];
L6 int i;
L7 for (i = 0; i < 6; i++)
L8 {
L9 text[i]=txtPtr[i];
L10 }
L11 printf("字符数大于5的行:
");
L12 for (i = 0; i < 6; i++)
L13 {
L14 int cnt = 0;
L15 char q = txtPtr[i];
L16 while (*q != '\0')
L17 {
L18 cnt++;
L19 q++;
L20 }
L21 if (cnt < 5)
L22 {
L23 puts(txtPtr[i]);
L24 }
L25 }
L26 return 0;
L27 }
【答案】①L9 txtPtr[i] = text[i];
②L15 char *q = txtPtr[i];
③L21 if (cnt > 5)
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第86卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①指针数组与指向指针的指针概念;②main函数带参数;③指针数组与指向指针的指针应用实例;④返回指针值的函数;⑤返回指针值的函数应用实例。
湖南省《计算机应用类专业综合考纲百套卷》 第86卷
《计算机编程语言——C语言》
指针数组、多重指针、返回指针值的函数
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.下列程序代码段的输出结果是( )
#include <stdio.h>
int num[] = {10,20,30};
int *retFun()
{ return num;}
int main()
{ int *p = retFun() + 1;
printf("%d", *p);
return 0; }
A. 10 B. 20 C. 30 D. 乱码
2.下列程序代码段的输出结果是( )
char *p[] = {"123","456","789"};
char **q = p;
printf("%s", *(q+1));
A. 123 B. 456 C. 789 D. 乱码
3.下列程序代码段的输出结果是( )
#include <stdio.h>
int *func(int a[])
{ return &a[1];}
int main()
{ int arr[] = {10,20,30};
int *p = func(arr);
printf("%d", *p);
return 0; }
A. 10 B. 20 C. 30 D. 随机值
4.设有定义 char *name[4]={"Zhang","Li","Wang","Zhao"};,执行
printf("%c", name[2][1]); 输出结果是( )
A. W B. a C. n D. g
5.已有 int a[2][3] = {1,2,3,4,5,6}; int *p[2];,若要让p[0]指向二维数组第一行,合法赋值是( )
A. p[0] = a; B. p[0] = a[0]; C. p = a; D. p = a[0];
6.下列程序代码段的输出结果是( )
char *str[] = {"A","BC","DEF"};
char **pt = str;
pt++;
printf("%s", *pt);
A. A B. BC C. DEF D. 无输出
7.下列程序代码段的输出结果是( )
#include <stdio.h>
char *fun()
{ static char s[] = "abcd";
return s;}
int main()
{ char *p = fun();
p[1] = 'X';
printf("%s", fun());
return 0; }
A. Abcd B. aXcd C. 乱码 D. 编译错误
8.下列程序代码段的输出结果是( )
char *a[] = {"12","345","6789"};
char **b = a+2;
printf("%d", strlen(*b));
A. 2 B. 3 C. 4 D. 9
9.下列程序代码段的输出结果是( )
#include <stdio.h>
#include<string.h>
int x[] = {5,15,25};
int *(*f)() = NULL;
int *getPtr()
{ return x+1;}
int main()
{ f = getPtr;
printf("%d", *f());
return 0; }
A. 5 B. 15 C. 25 D. 0
10.下列程序代码段的输出结果是( )
#include <stdio.h>
char *test(int n)
{ char *tab[] = {"Error","Warning","OK"};
return tab[n];}
int main()
{ int num = 0;
printf("%s", test(num));
return 0; }
A. Error B. Warning C. OK D. 程序崩溃
11.下列程序代码段的输出结果是( )
#include <stdio.h>
int *fun(int m)
{ static int s = 100;
s += m;
return &s;}
int main()
{ int *p1, *p2;
p1 = fun(10);
p2 = fun(20);
printf("%d ", *p1);
printf("%d", *p2);
return 0; }
A. 110 130 B. 110 110 C. 100 120 D. 130 130
12.下列程序代码段的输出结果是( )
char *arr[] = {"C", "CPP", "Java", "Go"};
char **p = arr + 1;
puts(*p);
A. C B. CPP C. Java D. Go
13.下列程序代码段的输出结果是( )
char *lang[] = {"A1", "B22", "C333"};
printf("%c", lang[2][2]);
A. C B. 3 C. 空字符 D. 2
14.下列程序代码段的输出结果是( )
#include <stdio.h>
int a[] = {11,22,33,44};
int *f()
{ return a + 2;}
int main()
{ int *q = f();
printf("%d", *q);
return 0; }
A. 11 B. 22 C. 33 D. 44
15.下列程序代码段的输出结果是( )
char *s[] = {"abc", "1234"};
char **pp = s;
pp++;
printf("%d", strlen(*pp));
A. 3 B. 4 C. 7 D. 随机值
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
char *findLong(char *arr[], int n)
{ int i, maxLen = 0, pos = 0;
for(i = 0; i < n; i++)
{
int len = 0;
while(arr[i][len] != '\0')
len++;
if(len > maxLen)
{
maxLen = len;
pos = i;
}
}
return arr[pos];
}
int main()
{
char *strArr[] = {"Hi", "Program", "Code"};
char *res = findLong(strArr, 3);
puts(res);
return 0; }
2.下列程序的运行结果是__________________。
#include <stdio.h>
int findVal(int *a, int n, int key)
{ int i;
for(i = 0; i < n; i++)
{
if(a[i] == key)
return i;
}
return -1;
}
int *search(int *a, int n, int k)
{
int pos = findVal(a, n, k);
if(pos != -1)
return &a[pos];
return NULL;
}
int main()
{
int arr[] = {5, 17, 29, 33, 46};
int *p = search(arr, 5, 29);
if(p != NULL)
printf("%d", *p);
else
printf("not found");
return 0;}
3.下列程序的运行结果是__________________。
#include <stdio.h>
char *upper(char *s)
{ static char temp[80];
int i = 0;
while(s[i] != '\0')
{ if(s[i] >= 'a' && s[i] <= 'z')
temp[i] = s[i] - 32;
else
temp[i] = s[i];
i++;
}
temp[i] = '\0';
return temp;}
int main()
{ char str[] = "Hello C";
puts(upper(str));
return 0; }
4.下列程序的运行结果是__________________。
#include <stdio.h>
int *getMid(int arr[], int n)
{
int mid = n / 2;
return &arr[mid];
}
int main()
{
int seq[] = {22, 33, 44, 55, 66, 77};
int *p = getMid(seq, 6);
printf("%d", *p);
return 0;}
5.下列程序的运行结果是__________________。
#include <stdio.h>
char *copyStr(char *dest, char *src)
{ char *start = dest;
while(*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return start;
}
int main()
{ char s1[100];
char *s2 = "Algorithm";
char *out = copyStr(s1, s2);
puts(out);
return 0;}
6.下列程序的运行结果是__________________。
#include <stdio.h>
char *strCatEx(char *s1, const char *s2)
{ char *p = s1;
while(*p)
p++;
while(*s2)
{ *p = *s2;
p++;
s2++;
}
*p = '\0';
return s1;
}
char *getCombine(char *arr[], int cnt)
{ static char buf[256] = {0};
int i = 0;
for(; i < cnt; i++)
{
strCatEx(buf, arr[i]);
}
return buf;
}
int main()
{ char *words[] = {"C_", "Pointer_", "Array"};
char *res = getCombine(words, 3);
puts(res);
return 0;}
7.下列程序的运行结果是__________________。
#include <stdio.h>
int *calcSeries(int n)
{ static int arr[10];
int i;
arr[0] = 1;
for(i = 1; i < n; i++)
{ arr[i] = arr[i-1] * 2; }
return arr;}
int main()
{ int *p = calcSeries(6);
int i;
for(i = 2; i < 5; i++)
{ printf("%d ", *(p + i)); }
return 0; }
8.下列程序的运行结果是__________________。
#include <stdio.h>
char *filterUpper(char *s)
{ static char temp[128];
int i = 0, k = 0;
while(s[i] != '\0')
{ if(!(s[i] >= 'A' && s[i] <= 'Z'))
{ temp[k++] = s[i]; }
i++;
}
temp[k] = '\0';
return temp;}
int main()
{ char *text[] = {"CodeABC", "123DefG", "HiJK"};
char **pt = text;
puts(filterUpper(*(pt + 1)));
return 0; }
9.下列程序的运行结果是__________________。
#include <stdio.h>
int *findSecondMax(int *a, int len)
{ int max = a[0], sec = a[0];
int i;
for(i = 1; i < len; i++)
{ if(a[i] > max)
{ sec = max;
max = a[i]; }
else if(a[i] > sec && a[i] < max)
{ sec = a[i]; }
}
for(i = 0; i < len; i++)
{ if(a[i] == sec)
return &a[i];
}
return NULL; }
int main()
{ int nums[] = {27, 14, 39, 22, 39, 11};
int *p = findSecondMax(nums, 6);
printf("%d", *p);
return 0; }
10.下列程序的运行结果是__________________。
#include <stdio.h>
int testFunc(int x)
{ static int cnt = 0;
cnt += x;
return cnt;}
int *wrapFunc(int a, int b)
{ static int res;
res = testFunc(a) + testFunc(b);
return &res;}
int main()
{ int *r1 = wrapFunc(3, 5);
int *r2 = wrapFunc(2, 4);
printf("%d %d", *r1, *r2);
return 0; }
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.下列程序的功能是:使用指针数组存储若干字符串,自定义返回指针的函数找出其中最短的字符串并输出。
#include <stdio.h>
char *getShortest(char *strArr[], int n)
{ int i, minLen, pos = 0;
char *p = _______①______;
minLen = 0;
while (_______②______)
{ minLen++;
p++; }
for (i = 1; i < n; i++)
{ int len = 0;
char *q = strArr[i];
while (*q != '\0')
{ len++;
q++;
}
if (________③________)
{ minLen = len;
______④______;
}
}
return strArr[pos];
}
int main()
{ char *arr[] = {"Language", "C", "Pointer", "Code", "Algorithm"};
int num = sizeof(arr) / sizeof(arr[0]);
char *res = _________⑤________;
printf("最短字符串:%s
", res);
return 0; }
2.下列程序的输出结果是:定义整型数组,设计返回指针的函数筛选出数组中所有偶数,存入静态数组并返回其首地址,最后遍历输出所有偶数。
#include <stdio.h>
int *filterEven(int src[], int n, int *outCnt)
{ static int temp[50];
int i, k = 0;
for (i = 0; i < n; i++)
{ if (_________①________)
{
temp[k++] = ______②______;
}
}
*outCnt = ________③______;
return _______④_______;
}
int main()
{ int data[] = {13, 24, 8, 37, 42, 51, 66, 9};
int count, i;
int *p = filterEven(data, sizeof(data)/sizeof(data[0]), &count);
printf("数组中的偶数:");
for (i = 0; i < count; i++)
{ printf("%d ", *(p + i)); }
return 0; }
3.下列函数的功能是:自定义返回字符指针的函数,实现字符串整体逆序,主函数传入普通字符串,调用函数后输出逆序结果。
#include <stdio.h>
char *strReverse(char *s)
{ static char buf[100];
int i = 0, j = 0;
while (s[i] != '\0')
{
_______①_______
}
i--;
while (i >= 0)
{
________②_______;
}
buf[j] = _______③_______;
return buf;
}
int main()
{ char str[100],*res;
printf("请输入一串字符:");
scanf("%s", str);
res = strReverse(str);
printf("逆序结果:%s
", res);
return 0; }
4.下列程序的功能是自定义返回指针的函数,拼接两个字符串并返回拼接后的字符串地址,主函数输入两个字符串,输出拼接结果。
#include <stdio.h>
char *strJoin(char *s1, char *s2)
{ static char res[200];
int i = 0, j = 0;
while (s1[i] != '\0')
{
res[j++] = s1[i++];
}
_______①________
while (s2[i] != '\0')
{
________②_______;
}
res[j] = '\0';
return res;
}
int main()
{ char s1[100], s2[100],*out;
printf("请输入第一个字符串:");
scanf("%s", s1);
printf("请输入第二个字符串:");
scanf("%s", s2);
_________③_________
printf("拼接结果:%s
", out);
return 0; }
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:利用指针数组存储英文短语,遍历所有内容,过滤掉所有小写字母o,输出处理后的全部字符串。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 void delChar(char *s)
L3 { int i = 0, k = 0;
L4 while (s[i] != '\0')
L5 {
L6 if (s[i] != o)
L7 {
L8 s[i] = s[k++] ;
L9 }
L10 i++;
L11 }
L12 s[k] = '\0';
L13 }
L14 int main()
L15 { char buf[5][50] = {"look", "book", "orange", "open", "good"};
L16 char *pArr[5];
L17 int i;
L18 for (i = 0; i < 5; i++)
L19 { pArr[i] = buf[i];
L20 delChar(pArr[i]);
L21 puts(pArr[i]);
L22 }
L23 return 0; }
2.下列程序的功能是:自定义返回指针的函数,提取字符串中的所有数字字符,组成新字符串后返回,主函数输入混合字符串并输出提取结果。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 char *extractNum(char *s)
L3 {
L4 static char numStr[100];
L5 int i = 0, k = 0;
L6 while (s[i] != '\0')
L7 {
L8 if (s[i] >= '0' || s[i] <= '9')
L9 {
L10 numStr[k++] = s[i];
L11 }
L12 i++;
L13 }
L14 numStr[k] = '\0';
L15 return numStr;
L16 }
L17 int main()
L18 { char str[100],*res;
L19 printf("请输入含数字的字符串:");
L20 scanf("%s", str);
L21 res = extractNum(*str);
L22 printf("提取出的数字:%s
", res);
L23 return 0; }
3.下列程序的功能是:设计返回指针的函数,将数组中所有元素整体后移一位(最后一位移到首位),返回数组首地址,主函数输出移位后的数组。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int *rightShift(int arr[], int n)
L3 {
L4 int last = arr[n-1];
L5 int i;
L6 for (i = n-1; i > 0; i--)
L7 {
L8 arr[i] = arr[i--];
L9 }
L10 arr[0] = last-1;
L11 return arr;
L12 }
L13 int main()
L14 { int arr[] = {1,2,3,4,5,6};
L15 int len = sizeof(arr)/sizeof(arr[0]);
L16 int *p = rightShift(arr, len);
L17 int i;
L18 printf("移位后数组:");
L19 for (i = 0; i < len; i++)
L20 {
L21 printf("%d ", *p+i);
L22 }
L23 return 0; }
4.下列程序的功能是:利用指针数组存储多行文本,统计每行文本的字符数量,并只输出字符数大于 5 的文本行。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int main()
L3 {
L4 char text[6][80]={"hi","computer",
"code","programming","data","function"};
L5 char *txtPtr[6];
L6 int i;
L7 for (i = 0; i < 6; i++)
L8 {
L9 text[i]=txtPtr[i];
L10 }
L11 printf("字符数大于5的行:
");
L12 for (i = 0; i < 6; i++)
L13 {
L14 int cnt = 0;
L15 char q = txtPtr[i];
L16 while (*q != '\0')
L17 {
L18 cnt++;
L19 q++;
L20 }
L21 if (cnt < 5)
L22 {
L23 puts(txtPtr[i]);
L24 }
L25 }
L26 return 0;
L27 }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$