内容正文:
编写说明:江苏省对口招生计算机类《考纲百套卷》,依据《江苏省计算机类专业综合理论考试大纲》编写。本专辑涵盖5门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第27卷为专业核心模块训练卷,按《C语言》中"C语言卷14——库函数、函数类型返回值、局部变量与全局变量"范围和要求编写。具体内容为:理解库函数的正确调用;理解函数的类型和返回值;理解函数的调用;理解局部变量和全局变量。
江苏省对口招生职业技能考试
C语言 试卷
(C语言卷14——库函数、函数类型返回值、局部变量与全局变量)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. 下列关于库函数,正确的是( )
A.库函数需要用户自己实现 B.使用库函数需要包含相应的头文件
C.库函数不能直接使用,必须重新实现 D.库函数只能用于特定操作系统
2. 想要使用数学函数sin、cos、sqrt等,应该包含头文件( )
A.<stdio.h> B.<stdlib.h> C.<math.h> D.<string.h>
3. 下列关于函数返回值,正确的是( )
A.所有函数都必须有返回值
B.void函数没有返回值
C.函数的返回值类型必须与函数定义时的返回类型一致
D.函数可以通过return语句返回多个值
4. 想要从函数返回一个整型值,函数定义时返回类型应该是( )
A.void B.int C.char D.float
5. 下列关于return语句,正确的是( )
A.return语句只能出现在函数末尾 B.void函数不能有return语句
C.return语句可以提前结束函数执行 D.一个函数只能有一个return语句
6. 想要从函数返回表达式的值,应该使用( )
A.return 表达式; B.return; C.exit(表达式); D.break;
7. 下列关于局部变量,正确的是( )
A.局部变量在函数外部定义
B.局部变量只在定义它的函数内部有效
C.局部变量在程序整个运行期间都有效
D.局部变量可以与全局变量同名且不影响
8. 下列关于全局变量,正确的是( )
A.全局变量只能在main函数中定义
B.全局变量在函数外部定义,可以被多个函数共享
C.全局变量名不能与局部变量同名
D.全局变量必须定义在程序开头
9. 当局部变量与全局变量同名时,在局部变量的作用域内( )
A.全局变量优先 B.局部变量优先 C.编译错误 D.运行错误
10. 想要在函数内部访问被屏蔽的全局变量,可以使用( )
A.:: 作用域运算符 B.extern关键字
C.无法访问 D.以上都不对
11. 下列关于变量的存储类型,正确的是( )
A.auto关键字必须显式书写 B.局部变量默认是auto存储类型
C.全局变量可以是auto存储类型 D.static局部变量在函数调用间不保留值
12. 想要使局部变量在函数调用间保留值,应该使用( )
A.auto关键字 B.register关键字 C.static关键字 D.extern关键字
13. 下列关于register变量,正确的是( )
A.register变量一定存储在CPU寄存器中
B.register变量不能取地址
C.register变量比auto变量快很多
D.register变量可以用于所有数据类型
14. 想要在多个源文件间共享全局变量,应该使用( )
A.static关键字 B.extern关键字 C.auto关键字 D.register关键字
15. 下列关于static全局变量,正确的是( )
A.static全局变量可以被其他文件使用
B.static全局变量只能被本文件使用
C.static全局变量不保留值
D.static全局变量必须定义在main函数之前
16. 想要使用随机数函数rand(),应该包含头文件( )
A.<stdio.h> B.<stdlib.h> C.<math.h> D.<time.h>
17. 下列关于函数的返回类型,错误的是( )
A.函数可以返回基本类型 B.函数可以返回指针类型
C.函数可以返回数组类型 D.函数可以返回结构体类型
18. 想要使全局变量只在定义它的文件内有效,应该使用( )
A.auto关键字 B.register关键字 C.static关键字 D.extern关键字
19. 下列关于库函数的调用,正确的是( )
A.库函数调用时不需要包含头文件 B.库函数调用时需要包含相应的头文件
C.库函数可以由用户重新定义 D.所有库函数都在stdio.h中
20. 想要在程序开始时初始化全局变量,应该( )
A.在定义时初始化 B.在main函数开始时初始化
C.使用专门的初始化函数 D.全局变量不能初始化
二、判断题(共10题,每题1分,共10分)
21. 使用库函数需要包含相应的头文件( )
22. void函数可以没有return语句,也可以有带值的return语句( )
23. 局部变量只在定义它的函数内部有效( )
24. 全局变量可以被本文件中的所有函数共享( )
25. 当局部变量与全局变量同名时,局部变量优先( )
26. static局部变量在函数调用间保留值( )
27. register变量一定存储在CPU寄存器中( )
28. static全局变量可以被其他文件使用( )
29. 全局变量在定义时可以初始化,初始值必须是常量表达式( )
30. 函数可以返回结构体类型的值( )
三、填空题(共10空,每空2分,共20分)
31. 使用数学库函数sin、cos等,需要包含头文件____。
32. void类型的函数____(填有或没有)返回值。
33. 想要从函数返回一个值,应该使用____语句。
34. 局部变量具有____作用域。
35. 全局变量在函数____定义,具有文件作用域。
36. 当局部变量与全局变量同名时,____变量优先。
37. 想要使局部变量在函数调用间保留值,可以使用____关键字。
38. 想要在多个源文件间共享全局变量,应该使用____关键字声明。
39. 想要使全局变量只在定义它的文件内有效,可以使用____关键字。
40. 使用随机数函数rand()需要包含头文件____。
四、程序综合题(共3题,每题10分,共30分)
41. 程序填空题:以下程序用递归函数求阶乘。请将①~④表示的内容填写完整。
#include <stdio.h>
long fac(int n)
{
if(①____)
return 1;
else
return ②____;
}
int main()
{
int n=5;
printf("%d!=%ld
",n,③____);
return ④____;
}
42.文件vote.dat存储N条问卷记录,每条记录包含问卷ID和投票选项(A/B/C)。将相同选项的记录分别输出到A.txt、B.txt、C.txt,且每组内按问卷ID升序排列。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 200
void sort_by_id(char id[][10],char opt[],int n);
int main()
{
FILE *fp,*fa,*fb,*fc;
int i=0,n;
char qid[N][10],opt[N];
fp=fopen("vote.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s",qid[i]);
fgetc(fp);
opt[i]=fgetc(fp);
①;
}
n=i;
fclose(fp);
sort_by_id(qid,opt,n);
fa=fopen("A.txt","w");
fb=fopen("B.txt","w");
fc=fopen("C.txt","w");
for(i=0;i<n;i++)
{
if(opt[i]=='A')fprintf(fa,"%s
",qid[i]);
else if(opt[i]=='B')fprintf(fb,"%s
",qid[i]);
else if(opt[i]=='C')fprintf(fc,"%s
",qid[i]);
}
fclose(fa);fclose(fb);fclose(fc);
return 0;
}
void sort_by_id(char id[][10],char opt[],int n)
{
int i,j,p;
char tid[10],topt;
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
if(②)
p=j;
if(p!=i)
{
strcpy(tid,id[p]);strcpy(id[p],id[i]);strcpy(id[i],tid);
topt=opt[p];opt[p]=opt[i];opt[i]=topt;
}
}
}
43.文件answer.dat存储问卷答案(答案字符串)。去掉重复答案后,按字典序升序输出所有不重复的答案。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
void sort_str(char s[][20],int n);
int main()
{
FILE *fp;
int i=0,n,j,k,cnt=0;
char ans[N][20],unq[N][20];
fp=fopen("answer.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s",ans[i]);
①;
}
n=i;
fclose(fp);
sort_str(ans,n);
strcpy(unq[0],ans[0]);
cnt=1;
for(i=1;i<n;i++)
{
for(k=0;k<cnt;k++)
if(②)break;
if(k==cnt)
{
strcpy(unq[cnt],ans[i]);
cnt++;
}
}
for(i=0;i<cnt;i++)
printf("%s
",unq[i]);
return 0;
}
void sort_str(char s[][20],int n)
{
int i,j;
char t[20];
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(s[i],s[j])>0)
{
strcpy(t,s[i]);strcpy(s[i],s[j]);strcpy(s[j],t);
}
}
学科网(北京)股份有限公司
$
编写说明:江苏省对口招生计算机类《考纲百套卷》,依据《江苏省计算机类专业综合理论考试大纲》编写。本专辑涵盖5门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第27卷为专业核心模块训练卷,按《C语言》中"C语言卷14——库函数、函数类型返回值、局部变量与全局变量"范围和要求编写。具体内容为:理解库函数的正确调用;理解函数的类型和返回值;理解函数的调用;理解局部变量和全局变量。
江苏省对口招生职业技能考试
C语言 试卷
(C语言卷14——库函数、函数类型返回值、局部变量与全局变量)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. 下列关于库函数,正确的是( )
A.库函数需要用户自己实现 B.使用库函数需要包含相应的头文件
C.库函数不能直接使用,必须重新实现 D.库函数只能用于特定操作系统
【答案】B
【解析】使用库函数需要包含相应的头文件,如stdio.h、math.h等。
2. 想要使用数学函数sin、cos、sqrt等,应该包含头文件( )
A.<stdio.h> B.<stdlib.h> C.<math.h> D.<string.h>
【答案】C
【解析】数学函数在math.h中声明。
3. 下列关于函数返回值,正确的是( )
A.所有函数都必须有返回值 B.void函数没有返回值
C.函数的返回值类型必须与函数定义时的返回类型一致 D.函数可以通过return语句返回多个值
【答案】B
【解析】void函数没有返回值,不能使用带值的return语句。
4. 想要从函数返回一个整型值,函数定义时返回类型应该是( )
A.void B.int C.char D.float
【答案】B
【解析】返回整型值,返回类型应为int。
5. 下列关于return语句,正确的是( )
A.return语句只能出现在函数末尾 B.void函数不能有return语句
C.return语句可以提前结束函数执行 D.一个函数只能有一个return语句
【答案】C
【解析】return语句可用于提前结束函数执行。
6. 想要从函数返回表达式的值,应该使用( )
A.return 表达式; B.return; C.exit(表达式); D.break;
【答案】A
【解析】return 表达式; 用于返回表达式的值。
7. 下列关于局部变量,正确的是( )
A.局部变量在函数外部定义 B.局部变量只在定义它的函数内部有效
C.局部变量在程序整个运行期间都有效 D.局部变量可以与全局变量同名且不影响
【答案】B
【解析】局部变量具有函数作用域,只在定义它的函数内有效。
8. 下列关于全局变量,正确的是( )
A.全局变量只能在main函数中定义 B.全局变量在函数外部定义,可以被多个函数共享
C.全局变量名不能与局部变量同名 D.全局变量必须定义在程序开头
【答案】B
【解析】全局变量在函数外部定义,具有文件作用域,可以被多个函数共享。
9. 当局部变量与全局变量同名时,在局部变量的作用域内( )
A.全局变量优先 B.局部变量优先(局部屏蔽全局) C.编译错误 D.运行错误
【答案】B
【解析】当局部变量与全局变量同名时,局部变量优先(局部屏蔽全局)。
10. 想要在函数内部访问被屏蔽的全局变量,可以使用( )
A.:: 作用域运算符(C++才有) B.extern关键字
C.无法访问 D.以上都不对
【答案】D
【解析】标准C语言没有机制在局部变量作用域内访问被屏蔽的全局变量。
11. 下列关于变量的存储类型,正确的是( )
A.auto关键字必须显式书写 B.局部变量默认是auto存储类型
C.全局变量可以是auto存储类型 D.static局部变量在函数调用间不保留值
【答案】B
【解析】局部变量默认是auto存储类型,auto关键字通常省略。
12. 想要使局部变量在函数调用间保留值,应该使用( )
A.auto关键字 B.register关键字 C.static关键字 D.extern关键字
【答案】C
【解析】static局部变量在函数调用间保留值,只在第一次进入函数时初始化。
13. 下列关于register变量,正确的是( )
A.register变量一定存储在CPU寄存器中 B.register变量不能取地址
C.register变量比auto变量快很多 D.register变量可以用于所有数据类型
【答案】B
【解析】register变量建议编译器将其放入寄存器,但不能对其使用&取地址符。
14. 想要在多个源文件间共享全局变量,应该使用( )
A.static关键字 B.extern关键字 C.auto关键字 D.register关键字
【答案】B
【解析】在一个文件中定义全局变量,在其他文件中用extern声明后使用。
15. 下列关于static全局变量,正确的是( )
A.static全局变量可以被其他文件使用 B.static全局变量只能被本文件使用
C.static全局变量不保留值 D.static全局变量必须定义在main函数之前
【答案】B
【解析】static全局变量具有文件作用域,只能被本文件使用。
16. 想要使用随机数函数rand(),应该包含头文件( )
A.<stdio.h> B.<stdlib.h> C.<math.h> D.<time.h>
【答案】B
【解析】rand()和srand()在stdlib.h中声明。
17. 下列关于函数的返回类型,错误的是( )
A.函数可以返回基本类型 B.函数可以返回指针类型 C.函数可以返回数组类型 D.函数可以返回结构体类型
【答案】C
【解析】函数不能直接返回数组类型,但可以返回指向数组的指针。
18. 想要使全局变量只在定义它的文件内有效,应该使用( )
A.auto关键字 B.register关键字 C.static关键字 D.extern关键字
【答案】C
【解析】static全局变量具有文件作用域。
19. 下列关于库函数的调用,正确的是( )
A.库函数调用时不需要包含头文件 B.库函数调用时需要包含相应的头文件
C.库函数可以由用户重新定义 D.所有库函数都在stdio.h中
【答案】B
【解析】使用库函数需要包含相应的头文件。
20. 想要在程序开始时初始化全局变量,应该( )
A.在定义时初始化 B.在main函数开始时初始化 C.使用专门的初始化函数 D.全局变量不能初始化
【答案】A
【解析】全局变量在定义时可以初始化,初始值必须是常量表达式。
二、判断题(共10题,每题1分,共10分)
21. 使用库函数需要包含相应的头文件( )
【答案】√
【解析】库函数声明在头文件中,使用时应包含相应头文件。
22. void函数可以没有return语句,也可以有带值的return语句( )
【答案】×
【解析】void函数不能有带值的return语句,但可以有不带值的return;。
23. 局部变量只在定义它的函数内部有效( )
【答案】√
【解析】局部变量具有函数作用域。
24. 全局变量可以被本文件中的所有函数共享( )
【答案】√
【解析】全局变量具有文件作用域。
25. 当局部变量与全局变量同名时,局部变量优先( )
【答案】√
【解析】局部变量屏蔽同名全局变量。
26. static局部变量在函数调用间保留值( )
【答案】√
【解析】static局部变量的值在函数调用间保留。
27. register变量一定存储在CPU寄存器中( )
【答案】×
【解析】register只是建议,编译器可以忽略。
28. static全局变量可以被其他文件使用( )
【答案】×
【解析】static全局变量只能被本文件使用。
29. 全局变量在定义时可以初始化,初始值必须是常量表达式( )
【答案】√
【解析】全局变量的初始值必须是编译时可求值的常量表达式。
30. 函数可以返回结构体类型的值( )
【答案】√
【解析】C语言函数可以返回结构体类型的值。
三、填空题(共10空,每空2分,共20分)
31. 使用数学库函数sin、cos等,需要包含头文件____。
【答案】math.h
【解析】数学函数在<math.h>中声明。
32. void类型的函数____(填有或没有)返回值。
【答案】没有
【解析】void表示函数没有返回值。
33. 想要从函数返回一个值,应该使用____语句。
【答案】return
【解析】return语句用于从函数返回值。
34. 局部变量具有____作用域。
【答案】函数(块)
【解析】局部变量只在定义它的函数(或块)内有效。
35. 全局变量在函数____定义,具有文件作用域。
【答案】外部(函数外部)
【解析】全局变量定义在函数外部。
36. 当局部变量与全局变量同名时,____变量优先。
【答案】局部
【解析】局部变量屏蔽同名全局变量。
37. 想要使局部变量在函数调用间保留值,可以使用____关键字。
【答案】static
【解析】static局部变量在函数调用间保留值。
38. 想要在多个源文件间共享全局变量,应该使用____关键字声明。
【答案】extern
【解析】用extern声明其他文件中定义的全局变量。
39. 想要使全局变量只在定义它的文件内有效,可以使用____关键字。
【答案】static
【解析】static全局变量具有文件作用域。
40. 使用随机数函数rand()需要包含头文件____。
【答案】stdlib.h
【解析】rand()在<stdlib.h>中声明。
四、程序综合题(共3题,每题10分,共30分)
41. 程序填空题:以下程序用递归函数求阶乘。请将①~④表示的内容填写完整。
#include <stdio.h>
long fac(int n)
{
if(①____)
return 1;
else
return ②____;
}
int main()
{
int n=5;
printf("%d!=%ld
",n,③____);
return ④____;
}
【答案】① n==0 ② n*fac (n-1) ③ fac (n) ④ 0
【解析】
① 递归终止条件:n 等于 0 时阶乘结果为 1;
② 递归公式:n 的阶乘等于 n 乘以 n-1 的阶乘;
③ 调用递归函数 fac (n) 计算 5 的阶乘并输出;
④ main 函数正常结束,返回值固定为 0。
42.文件vote.dat存储N条问卷记录,每条记录包含问卷ID和投票选项(A/B/C)。将相同选项的记录分别输出到A.txt、B.txt、C.txt,且每组内按问卷ID升序排列。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 200
void sort_by_id(char id[][10],char opt[],int n);
int main()
{
FILE *fp,*fa,*fb,*fc;
int i=0,n;
char qid[N][10],opt[N];
fp=fopen("vote.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s",qid[i]);
fgetc(fp);
opt[i]=fgetc(fp);
①;
}
n=i;
fclose(fp);
sort_by_id(qid,opt,n);
fa=fopen("A.txt","w");
fb=fopen("B.txt","w");
fc=fopen("C.txt","w");
for(i=0;i<n;i++)
{
if(opt[i]=='A')fprintf(fa,"%s
",qid[i]);
else if(opt[i]=='B')fprintf(fb,"%s
",qid[i]);
else if(opt[i]=='C')fprintf(fc,"%s
",qid[i]);
}
fclose(fa);fclose(fb);fclose(fc);
return 0;
}
void sort_by_id(char id[][10],char opt[],int n)
{
int i,j,p;
char tid[10],topt;
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
if(②)
p=j;
if(p!=i)
{
strcpy(tid,id[p]);strcpy(id[p],id[i]);strcpy(id[i],tid);
topt=opt[p];opt[p]=opt[i];opt[i]=topt;
}
}
}
【答案】① i++ ② strcmp (id [p],id [j])>0
【解析】
① 每读取一条记录,下标 i 自增 1,统计总记录数;
② 按 ID 升序排序,ID 大的向后排,满足条件则更新位置。
43.文件answer.dat存储问卷答案(答案字符串)。去掉重复答案后,按字典序升序输出所有不重复的答案。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
void sort_str(char s[][20],int n);
int main()
{
FILE *fp;
int i=0,n,j,k,cnt=0;
char ans[N][20],unq[N][20];
fp=fopen("answer.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s",ans[i]);
①;
}
n=i;
fclose(fp);
sort_str(ans,n);
strcpy(unq[0],ans[0]);
cnt=1;
for(i=1;i<n;i++)
{
for(k=0;k<cnt;k++)
if(②)break;
if(k==cnt)
{
strcpy(unq[cnt],ans[i]);
cnt++;
}
}
for(i=0;i<cnt;i++)
printf("%s
",unq[i]);
return 0;
}
void sort_str(char s[][20],int n)
{
int i,j;
char t[20];
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(s[i],s[j])>0)
{
strcpy(t,s[i]);strcpy(s[i],s[j]);strcpy(s[j],t);
}
}
【答案】① i++ ② strcmp (unq [k],ans [i])==0
【解析】
① 每读取一条答案,下标 i 自增 1,统计总记录数;
② 判断当前答案是否已存在,存在则跳出循环不重复保存。
学科网(北京)股份有限公司
$