内容正文:
编写说明:江苏省对口招生计算机类《考纲百套卷》,依据《江苏省计算机类专业综合理论考试大纲》编写。本专辑涵盖5门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第26卷为专业核心模块训练卷,按《C语言》中"C语言卷13——函数的定义、调用与参数传递"范围和要求编写。具体内容为:掌握函数的定义方法;掌握形式参数与实在参数,参数值的传递。
江苏省对口招生职业技能考试
C语言 试卷
(C语言卷13——函数的定义、调用与参数传递)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. 下列关于函数定义,正确的是( )
A.函数定义格式:类型 函数名(参数) 函数体 B.函数定义可以嵌套
C.函数定义不能省略返回类型 D.函数名可以省略
2. 想要定义一个没有返回值函数,返回类型应该是( )
A.void类型 B.int类型 C.char类型 D.null类型
3. 下列关于函数调用,正确的是( )
A.函数调用时参数个数必须与被调用函数定义时相同 B.函数调用时参数类型必须完全相同
C.函数不能调用自己(递归) D.函数必须在main函数之前定义
4. 下列关于C语言函数的形参和实参,说法错误的是( )
A. 形参在函数调用时才分配内存空间
B. 实参可以是常量、变量或表达式
C. 形参的作用域是整个程序
D. 实参和形参之间是值传递关系
5. 下列关于实际参数(实参),正确的是( )
A.实参可以是常量、变量或表达式 B.实参必须在函数定义时确定
C.实参和形参占用同一内存单元 D.实参必须和形参同名
6. 下列关于参数传递,正确的是( )
A.C语言函数参数传递是值传递 B.参数传递时形参和实参占用同一内存单元
C.数组作为整体传递 D.参数传递是地址传递(引用传递)
7. 想要在函数间传递大量数据,应该使用( )
A.值传递 B.地址传递 C.全局变量 D.B和C都可以
8. 下列关于函数声明(函数原型),正确的是( )
A.函数声明可以省略参数名 B.函数声明必须和函数定义完全相同
C.函数声明可以省略返回类型 D.函数声明必须放在函数调用之后
9. 想要在函数调用前定义函数,可以( )
A.在函数调用前定义函数 B.在函数调用前写函数声明
C.将函数定义在main函数内部 D.A和B都可以
10. 下列关于递归函数,正确的是( )
A.递归函数不能调用自己 B.递归函数必须有递归出口条件
C.递归函数比循环效率高 D.递归函数不能使用局部变量
11. 下列函数定义正确的是( )
A.int fun(int a,b) { }
B.void fun(int a;int b) { }
C.int fun(int a,int b) { }
D.void fun() { return 0; }
12. 以下关于函数 return 语句的说法,正确的是( )
A. 所有非void函数必须至少有一个return语句
B. void函数中不能出现return语句
C. return语句可以返回多个值,用逗号分隔
D. 函数中return语句执行后,函数立即结束
13. 想要从函数返回多个值,应该( )
A.使用多个return语句 B.使用指针参数 C.使用全局变量 D.B和C都可以
14. 下列关于数组作为函数参数,正确的是( )
A.数组作为整体传递 B.数组传递的是首元素地址
C.数组不能在函数中修改 D.数组作为函数参数时必须指定大小
15. 下列关于函数的存储类型,正确的是( )
A.函数默认是extern存储类型 B.函数不能声明为static
C.函数必须声明为extern D.static函数可以被其他文件调用
16. 想要限制函数只能被本文件使用,应该使用( )
A.extern关键字 B.static关键字 C.void关键字 D.const关键字
17. 下列关于函数的调用,错误的是( )
A.函数可以调用自己 B.函数可以先调用后定义
C.函数不能调用main函数 D.函数可以嵌套调用
18. 下列关于return语句,正确的是( )
A.void函数不能有return语句 B.return语句后面必须有表达式
C.return语句可以出现在函数任何位置 D.一个函数只能有一个return语句
19. 想要在函数间传递字符串,应该使用( )
A.值传递 B.传递字符数组名
C.传递字符串字面量 D.B和C都可以
20. 以下关于函数声明(原型)和函数定义的说法,正确的是( )
// 函数声明
int max(int, int);
// 函数定义
int max(int a, int b) {
return a > b ? a : b;
}
A. 声明中的参数名可以省略,定义中的参数名也可以省略
B. 声明和定义的参数名必须完全一致
C. 声明中的参数名只是为了文档说明,编译时被忽略
D. 定义中的参数名是为了在函数体内使用,声明中参数名没有实际作用但可以保留
二、判断题(共10题,每题1分,共10分)
21. C语言函数参数传递是值传递( )
22. 函数定义可以嵌套(在一个函数内定义另一个函数)( )
23. 数组作为函数参数时,传递的是数组首元素的地址( )
24. void类型的函数不能有任何return语句( )
25. 函数声明(函数原型)可以省略参数名( )
26. 递归函数必须有递归出口条件,否则会无限递归( )
27. static函数可以被其他文件中的函数调用( )
28. 函数可以调用自己,这称为递归调用( )
29. 想要从函数返回多个值,只能使用全局变量( )
30. 函数必须在main函数之前定义,否则不能调用( )
三、填空题(共10空,每空2分,共20分)
31. C语言函数定义的基本格式是:____ 函数名(参数列表) {函数体}。
32. 想要定义没有返回值的函数,返回类型应该是____。
33. C语言函数参数传递方式是____传递。
34. 形参只在函数____时分配内存。
35. 想要在函数间传递大量数据,可以传递____(填地址或值)。
36. 函数声明(函数原型)可以省略____名。
37. 递归函数必须设置____条件,否则会无限递归。
38. 想要限制函数只能被本文件使用,可以使用____关键字。
39. 数组作为函数参数时,传递的是数组____的地址。
40. 想要从函数返回多个值,可以使用____参数。
四、程序综合题(共3题,每题10分,共30分)
41. 程序阅读题:阅读下列程序,写出运行结果。
#include <stdio.h>
void swap(int a,int b)
{
int t;
t=a;a=b;b=t;
}
int main()
{
int x=3,y=5;
swap(x,y);
printf("x=%d,y=%d
",x,y);
return 0;
}
42. 程序填空题:以下程序通过函数求数组元素的和。请将①~④表示的内容填写完整。
#include <stdio.h>
int sum(int a[],int n)
{
int i,s=0;
for(i=0;i<n;i++)
①____;
②____;
}
int main()
{
int a[5]={1,2,3,4,5};
int r=sum(a,5);
printf("sum=%d
",③____);
return ④____;
}
43.文件satisfy.dat存储客户编号和满意度等级(优秀/良好/及格/不及格)。按等级优先级(优秀>良好>及格>不及格)排序,相同等级按编号升序排列。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 150
int grade_level(char g[]);
int main()
{
FILE *fp;
int i=0,n;
char cid[N][10],grade[N][10];
fp=fopen("satisfy.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s%s",cid[i],grade[i]);
①;
}
n=i;
fclose(fp);
int j,p;
char t1[10],t2[10];
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
{
int lv1=grade_level(grade[p]);
int lv2=grade_level(grade[j]);
if(②||(lv1==lv2&&strcmp(cid[p],cid[j])>0))
p=j;
}
if(p!=i)
{
strcpy(t1,cid[p]);strcpy(cid[p],cid[i]);strcpy(cid[i],t1);
strcpy(t2,grade[p]);strcpy(grade[p],grade[i]);strcpy(grade[i],t2);
}
}
for(i=0;i<n;i++)
printf("%s %s
",cid[i],grade[i]);
return 0;
}
int grade_level(char g[])
{
if(strcmp(g,"优秀")==0)return 4;
if(strcmp(g,"良好")==0)return 3;
if(strcmp(g,"及格")==0)return 2;
return 1;
}
学科网(北京)股份有限公司
$
编写说明:江苏省对口招生计算机类《考纲百套卷》,依据《江苏省计算机类专业综合理论考试大纲》编写。本专辑涵盖5门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第26卷为专业核心模块训练卷,按《C语言》中"C语言卷13——函数的定义、调用与参数传递"范围和要求编写。具体内容为:掌握函数的定义方法;掌握形式参数与实在参数,参数值的传递。
江苏省对口招生职业技能考试
C语言 试卷
(C语言卷13——函数的定义、调用与参数传递)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. 下列关于函数定义,正确的是( )
A.函数定义格式:类型 函数名(参数) 函数体 B.函数定义可以嵌套(函数内定义函数)
C.函数定义不能省略返回类型 D.函数名可以省略
【答案】A
【解析】函数定义格式为:返回类型 函数名(参数列表) {函数体}。
2. 想要定义一个没有返回值函数,返回类型应该是( )
A.void类型 B.int类型 C.char类型 D.null类型
【答案】A
【解析】void表示函数没有返回值。
3. 下列关于函数调用,正确的是( )
A.函数调用时参数个数必须与被调用函数定义时相同 B.函数调用时参数类型必须完全相同
C.函数不能调用自己(递归) D.函数必须在main函数之前定义
【答案】A
【解析】函数调用时实参个数必须与形参个数相同。
4. 下列关于C语言函数的形参和实参,说法错误的是( )
A. 形参在函数调用时才分配内存空间
B. 实参可以是常量、变量或表达式
C. 形参的作用域是整个程序
D. 实参和形参之间是值传递关系
【答案】C
【解析】 形参的作用域仅限于函数内部,不是整个程序。A正确:形参只在调用时分配栈内存;B正确:实参可以是任意有确定值的表达式;D正确:C语言采用值传递,形参是实参的副本。
5. 下列关于实际参数(实参),正确的是( )
A.实参可以是常量、变量或表达式 B.实参必须在函数定义时确定 C.实参和形参占用同一内存单元 D.实参必须和形参同名
【答案】A
【解析】实参可以是常量、变量或表达式,在进行函数调用时求值。
6. 下列关于参数传递,正确的是( )
A.C语言函数参数传递是值传递 B.参数传递时形参和实参占用同一内存单元
C.数组作为整体传递 D.参数传递是地址传递(引用传递)
【答案】A
【解析】C语言函数参数传递是值传递,形参是实参的副本。
7. 想要在函数间传递大量数据,应该使用( )
A.值传递(复制所有数据) B.地址传递(传递指针) C.全局变量(不推荐) D.B和C都可以
【答案】D
【解析】可以用指针传递地址,也可以使用全局变量(但不推荐)。
8. 下列关于函数声明(函数原型),正确的是( )
A.函数声明可以省略参数名 B.函数声明必须和函数定义完全相同 C.函数声明可以省略返回类型 D.函数声明必须放在函数调用之后
【答案】A
【解析】函数声明(原型)可以只写参数类型,省略参数名。
9. 想要在函数调用前定义函数,可以( )
A.在函数调用前定义函数 B.在函数调用前写函数声明 C.将函数定义在main函数内部 D.A和B都可以
【答案】D
【解析】可以在调用前定义函数,也可以在调用前写函数声明。
10. 下列关于递归函数,正确的是( )
A.递归函数不能调用自己 B.递归函数必须有递归出口条件 C.递归函数比循环效率高 D.递归函数不能使用局部变量
【答案】B
【解析】递归函数必须设置递归出口条件,否则会无限递归。
11. 下列函数定义正确的是( )
A.int fun(int a,b) { }(b缺少类型)
B.void fun(int a;int b) { }(分号错误)
C.int fun(int a,int b) { }(正确)
D.void fun() { return 0; }(返回类型不匹配)
【答案】C
【解析】函数定义时参数必须分别指定类型。
12. 以下关于函数 return 语句的说法,正确的是( )
A. 所有非void函数必须至少有一个return语句
B. void函数中不能出现return语句
C. return语句可以返回多个值,用逗号分隔
D. 函数中return语句执行后,函数立即结束
【答案】D
【解析】A :非void函数如果所有分支都有返回值则可以,但编译时可能警告,语法上不强制"必须"
B :void函数可以写 return; 提前返回
C :return只能返回一个值(可以返回结构体封装多个值,但不能用逗号返回多个)
D :return执行后立即结束当前函数,返回调用处
13. 想要从函数返回多个值,应该( )
A.使用多个return语句 B.使用指针参数(传递地址) C.使用全局变量(不推荐) D.B和C都可以
【答案】D
【解析】可以用指针参数返回多个值,也可以使用全局变量(但不推荐)。
14. 下列关于数组作为函数参数,正确的是( )
A.数组作为整体传递(复制所有元素) B.数组传递的是首元素地址
C.数组不能在函数中修改 D.数组作为函数参数时必须指定大小
【答案】B
【解析】数组作为函数参数时,传递的是数组首元素的地址(指针)。
15. 下列关于函数的存储类型,正确的是( )
A.函数默认是extern存储类型 B.函数不能声明为static
C.函数必须声明为extern D.static函数可以被其他文件调用
【答案】A
【解析】函数默认具有extern存储类型,可以被其他文件调用。
16. 想要限制函数只能被本文件使用,应该使用( )
A.extern关键字 B.static关键字 C.void关键字 D.const关键字
【答案】B
【解析】static函数只能被本文件中的函数调用。
17. 下列关于函数的调用,错误的是( )
A.函数可以调用自己(递归) B.函数可以先调用后定义(需要函数声明)
C.函数不能调用main函数 D.函数可以嵌套调用
【答案】C
【解析】main函数也可以被其他函数调用(虽然不常见)。
18. 下列关于return语句,正确的是( )
A.void函数不能有return语句 B.return语句后面必须有表达式
C.return语句可以出现在函数任何位置 D.一个函数只能有一个return语句
【答案】C
【解析】return语句可以出现在函数任何位置,用于提前返回。
19. 想要在函数间传递字符串,应该使用( )
A.值传递(复制字符串) B.传递字符数组名(地址) C.传递字符串字面量 D.B和C都可以
【答案】D
【解析】可以传递字符数组名(地址),也可以传递字符串字面量(地址常量)。
20. 以下关于函数声明(原型)和函数定义的说法,正确的是( )
// 函数声明
int max(int, int);
// 函数定义
int max(int a, int b) {
return a > b ? a : b;
}
A. 声明中的参数名可以省略,定义中的参数名也可以省略
B. 声明和定义的参数名必须完全一致
C. 声明中的参数名只是为了文档说明,编译时被忽略
D. 定义中的参数名是为了在函数体内使用,声明中参数名没有实际作用但可以保留
【答案】D
【解析】A :定义中参数名不能省略,否则函数体内无法引用参数
B :参数名不一致完全合法,编译器只检查类型
C :声明中的参数名虽然被编译器忽略,但不能简单说"为了文档",因为它确实会被检查类型是否匹配——更准确的说法是"声明中参数名是可选的,仅起文档作用"(但C选项后半句"编译时被忽略"没错,只是表述不完整);实际上D更严谨
D :定义必须命名参数以便使用,声明中参数名是可选且无实际编译影响的
二、判断题(共10题,每题1分,共10分)
21. C语言函数参数传递是值传递( )
【答案】√
【解析】C语言函数参数传递是值传递,形参是实参的副本。
22. 函数定义可以嵌套(在一个函数内定义另一个函数)( )
【答案】×
【解析】C语言不允许函数嵌套定义,但可以嵌套调用。
23. 数组作为函数参数时,传递的是数组首元素的地址( )
【答案】√
【解析】数组名是常量指针,传递的是首元素地址。
24. void类型的函数不能有任何return语句( )
【答案】×
【解析】void函数可以有不带值的return;语句,用于提前返回。
25. 函数声明(函数原型)可以省略参数名( )
【答案】√
【解析】函数声明只需指定参数类型,参数名可以省略。
26. 递归函数必须有递归出口条件,否则会无限递归( )
【答案】√
【解析】递归函数必须设置递归出口条件。
27. static函数可以被其他文件中的函数调用( )
【答案】×
【解析】static函数只能被本文件中的函数调用。
28. 函数可以调用自己,这称为递归调用( )
【答案】√
【解析】函数调用自己是合法的,称为递归调用。
29. 想要从函数返回多个值,只能使用全局变量( )
【答案】×
【解析】也可以用指针参数(传递地址)来返回多个值。
30. 函数必须在main函数之前定义,否则不能调用( )
【答案】×
【解析】可以在调用前写函数声明,函数定义可以在任何位置。
三、填空题(共10空,每空2分,共20分)
31. C语言函数定义的基本格式是:____ 函数名(参数列表) {函数体}。
【答案】返回类型
【解析】函数定义格式为:返回类型 函数名(参数列表) {函数体}。
32. 想要定义没有返回值的函数,返回类型应该是____。
【答案】void
【解析】void表示函数没有返回值。
33. C语言函数参数传递方式是____传递。
【答案】值
【解析】C语言函数参数传递是值传递。
34. 形参只在函数____时分配内存。
【答案】调用
【解析】形参在函数被调用时分配内存。
35. 想要在函数间传递大量数据,可以传递____(填地址或值)。
【答案】地址(指针)
【解析】传递指针可以避免复制大量数据。
36. 函数声明(函数原型)可以省略____名。
【答案】参数
【解析】函数声明只需指定参数类型。
37. 递归函数必须设置____条件,否则会无限递归。
【答案】递归出口
【解析】递归必须能到达出口条件。
38. 想要限制函数只能被本文件使用,可以使用____关键字。
【答案】static
【解析】static函数具有文件作用域。
39. 数组作为函数参数时,传递的是数组____的地址。
【答案】首元素
【解析】数组名是首元素的地址。
40. 想要从函数返回多个值,可以使用____参数。
【答案】指针(地址)
【解析】指针参数可以实现“多值返回”。
四、程序综合题(共3题,每题10分,共30分)
41. 程序阅读题:阅读下列程序,写出运行结果。
#include <stdio.h>
void swap(int a,int b)
{
int t;
t=a;a=b;b=t;
}
int main()
{
int x=3,y=5;
swap(x,y);
printf("x=%d,y=%d
",x,y);
return 0;
}
【答案】x=3,y=5
【解析】
函数 swap 采用值传递,形参 a、b 的交换不会影响实参 x、y;
调用 swap 后 x、y 仍保持原值 3 和 5;
最终按格式输出 x=3,y=5。
42. 程序填空题:以下程序通过函数求数组元素的和。请将①~④表示的内容填写完整。
#include <stdio.h>
int sum(int a[],int n)
{
int i,s=0;
for(i=0;i<n;i++)
①____;
②____;
}
int main()
{
int a[5]={1,2,3,4,5};
int r=sum(a,5);
printf("sum=%d
",③____);
return ④____;
}
【答案】① s+=a [i] ② return s ③ r ④ 0
【解析】
① 循环累加数组元素到变量 s 中;
② 将累加和 s 作为函数返回值;
③ 输出接收返回值的变量 r;
④ main 函数正常结束返回 0。
43.文件satisfy.dat存储客户编号和满意度等级(优秀/良好/及格/不及格)。按等级优先级(优秀>良好>及格>不及格)排序,相同等级按编号升序排列。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 150
int grade_level(char g[]);
int main()
{
FILE *fp;
int i=0,n;
char cid[N][10],grade[N][10];
fp=fopen("satisfy.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s%s",cid[i],grade[i]);
①;
}
n=i;
fclose(fp);
int j,p;
char t1[10],t2[10];
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
{
int lv1=grade_level(grade[p]);
int lv2=grade_level(grade[j]);
if(②||(lv1==lv2&&strcmp(cid[p],cid[j])>0))
p=j;
}
if(p!=i)
{
strcpy(t1,cid[p]);strcpy(cid[p],cid[i]);strcpy(cid[i],t1);
strcpy(t2,grade[p]);strcpy(grade[p],grade[i]);strcpy(grade[i],t2);
}
}
for(i=0;i<n;i++)
printf("%s %s
",cid[i],grade[i]);
return 0;
}
int grade_level(char g[])
{
if(strcmp(g,"优秀")==0)return 4;
if(strcmp(g,"良好")==0)return 3;
if(strcmp(g,"及格")==0)return 2;
return 1;
}
【答案】① i++ ② lv1 < lv2
【解析】
① 每读取一条数据,下标 i 自增 1 统计总人数;
② 按等级优先级排序,等级值越小优先级越低,满足 lv1 < lv2 则交换。
学科网(北京)股份有限公司
$