内容正文:
《编程语言基础——C语言》高等教育出版社(第五版)
第六章 函数 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共25小题,每题2分,共50分)
1.以下叙述正确的是( )
A.在C程序中,主函数必须位于程序的最前面
B.在C程序中,一行只能写一条语句
C.C程序的基本结构是程序行
D.C语句是完成某种程序功能的最小单位
2.C语言规定,在一个C程序中,主函数的位置( )
A.必须在开始 B.必须在最后
C.可以任意 D.必须在系统调用的库后
3.下列叙述中正确的是( )
A.构成C程序的基本单位是函数
B.可以在一个函数中定义另一个函数
C.main()函数必须放在其它函数之前
D.所有被调用函数一定要在调用之前进行定义
4.以下说法中正确的是( )
A.C语言程序总是从第一个函数开始
B.在C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序总是从main()函数开始执行
D.C语言程序中的main()函数必须放在程序的开始部分
5.在C语言中,以下正确的说法是( )
A.实参和其对应的形参各占用独立的存储单元
B.实参和与其对应的形参共占用一个存储单元
C.只有当实参和其对应的形参同名时才共占用相同的存储单元
D.形参是虚拟的,不占用存储单元
6.在C语言中,以下不正确的说法是( )
A.实参可以是常量,变量或表达式
B.形参可以是常量,变量或表达式
C.实参可以为任意类型
D.如果形参和实参的类型不一致,以形参类型为准
7.被调用函数调用结束后,返回到( )
A.主调函数中该被调函数调用语句处
B.主函数调用该被调函数调用语句处
C.主调函数中该被调函数调用语句的前一语句
D.主调函数中该被调函数调用语句的后一语句
8.有如下函数调用语句:fun(rec1,rec2+rec3,(rec4,rec5));在该函数调用语句中,含有的实参个数是( )
A.2 B.3 C.4 D.5
9.下列程序的结果是( )
#include<stdio.h>
int fun(int x,int y)
{return(x+y);}
main()
{int a=1,b=2,c=3,sum;
sum=fun((a++,b++,a+b),c++);
printf("%d
",sum);}
A.6 B.7 C.8 D.9
10.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( )
A.float型 B.long型 C.int型 D.double型
11.C语言规定,程序中各函数之间( )
A.既允许直接递归调用也允许间接递归调用
B.不允许直接递归调用也不允许间接递归调用
C.允许直接递归调用不允许简介递归调用
D.不允许直接递归调用允许间接递归调用
12.下列程序的结果是( )
#include<stdio.h>
long fun(int n)
{long s;
if(n==1||n==2) s=2;
else s=n-fun(n-1);
return s;}
main()
{printf("%ld
",fun(3));}
A.1 B.2 C.3 D.4
13.下列程序的结果是( )
#include<stdio.h>
int fun(int x)
{int p;
if(x==0||x==1) p=3;
else p=x-fun(x-2);
return p;}
main(){printf("%d
",fun(7));}
A.2 B.3 C.4 D.5
14.下列程序的输出结果是( )
int fun(int b[],int n)
{int i,s=0;
for(i=0;i<n;i+=2)
s+=b[i];
return s;}
main()
{int a[]={1,2,3,4,5},s;
s=fun(a,5);
printf("%d
",s);}
A.7 B.8 C.9 D.10
15.数组名作为函数调用的实参,传递给形参的是( )
A.数组的首地址 B.数组的第一个元素的值
C.数组中全部元素的值 D.数组元素的个数
16.下列程序的输出结果是( )
#include<stdio.h>
int f(int b[],int m,int n)
{int i,s=0;
for(i=m;i<n;i=i+2) s=s+b[i];
return s;}
main()
{int x,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d
",x);}
A.10 B.18 C.8 D.15
17.设有说明int (*ptr)[m];其中标识符ptr是( )
A.m个指向整型变量的指针
B.指向m个整型变量的函数指针
C.一个指向具有m个整型元素的一维数组的指针
D.具有m个指针元素的一维指针数组,每个元素都只能指向整型量
18.设有说明:int (*ptr)[8];则ptr是( )
A.指向整型变量的指针
B.指向函数的指针,该函数的返回值为int数据
C.指向一维数组的指针,该数组的基类型为int
D.长度为8的一维数组
19.若有定义int *p[3];则以下叙述中正确的是( )
A.定义了一个基类型为int的指针变量p,该变量具有三个指针
B.定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C.定义了一个名为*p的整型数组,则数组含有三个int类型元素
D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
20.在C语言中,如果在一个函数中的复合语句中定义了一个变量,则该变量( )
A.只在该复合语句中有定义
B.在该函数中有定义
C.在本程序范围内有定义
D.为非法变量
21. 在C语言中,以下不正确的是( )
A.在不同函数中可以使用相同名字的变量
B.形式参数是局部变量
C.在函数内定义的变量侄子啊本函数范围内有定义
D.在函数内的复合语句中定义的变量在本函数范围内有定义
22.在下列叙述中,错误的一条是( )
A.主函数main中定义的变量在整个文件或程序中有效
B、不同函数中,可以使用相同名字的变量
C.函数中的形式参数是局部变量
D.在一个函数内部,可在复合语句中定义变量,这些变量只在本复合语句中有效
23.在C语言中,以下不正确的是( )
A.形参的存储单元是动态分配的
B.函数中的局部变量都是动态存储
C.全局变量都是静态存储
D.动态存储的变量的存储空间在函数结束调用后就被释放了
24.在C语言中,变量的隐含存储类别是( )
A.auto B.static C.extern D.register
25.下列程序的输出结果是( )
#include<stdio.h>
void fun(int x)
{x=20;}
main()
{int x=10;
fun(x);
printf("x=%d
",x);}
A.10 B.x=10 C.20 D.x=20
二、简答题(本题共5小题,每题6分,共30分)
26. 以下程序的输出结果是【 】。
int fun(int x,int y)
{
int z;
z=x+y;
return z;}
main(){
int a=3,b=5,s;
s=fun(a,b);
printf("%d
",s);}
27. 以下程序的运行结果是【 】。
int fun(int x,int y)
{return x+y;}
main()
{int a=3,b=2,c=5,d;
d=fun(fun(a,b),c);
printf("%d
",d);}
28. 以下程序的运行结果是【 】。
#include<stdio.h>
int f(int x,int y)
{return((y-x)*x);}
main()
{int a=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d
",d);}
29. 以下程序的运行结果是【 】。
int fun(int x)
{int y;
if(x>1) y=fun(x-1)+2;
else y=2;
return y;}
main(){printf("%d
",fun(3));}
30. 以下程序的运行结果是【 】。
#include<stdio.h>
int f(int x)
{int y;
if(x==0||x==1) return 3;
else y=x*x-f(x-2);
return y;}
main(){printf("%d
",fun(3));}
三、案例分析题(本题共2小题,共20分)
31.编写一个函数,将某已知数组的奇数项合成一个新的数组。在主函数中调用该函数,并输出新数组的内容。
32.编写一个函数,将两个两位数的正整数A和B合并形成一个整数C。合并的方式是:将A数的十位数和个位数依次放在C数的个位数和十位数上,B数的十位数和个位数依次放在C数的百位数和千位数上。例如:当A=16,B=35时,C=5361。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
《编程语言基础——C语言》高等教育出版社(第五版)
第六章 函数 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共25小题,每题2分,共50分)
1.以下叙述正确的是( )
A.在C程序中,主函数必须位于程序的最前面
B.在C程序中,一行只能写一条语句
C.C程序的基本结构是程序行
D.C语句是完成某种程序功能的最小单位
答案:D
2.C语言规定,在一个C程序中,主函数的位置( )
A.必须在开始 B.必须在最后
C.可以任意 D.必须在系统调用的库后
答案:C
3.下列叙述中正确的是( )
A.构成C程序的基本单位是函数
B.可以在一个函数中定义另一个函数
C.main()函数必须放在其它函数之前
D.所有被调用函数一定要在调用之前进行定义
答案:A
4.以下说法中正确的是( )
A.C语言程序总是从第一个函数开始
B.在C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序总是从main()函数开始执行
D.C语言程序中的main()函数必须放在程序的开始部分
答案:C
5.在C语言中,以下正确的说法是( )
A.实参和其对应的形参各占用独立的存储单元
B.实参和与其对应的形参共占用一个存储单元
C.只有当实参和其对应的形参同名时才共占用相同的存储单元
D.形参是虚拟的,不占用存储单元
答案:A
6.在C语言中,以下不正确的说法是( )
A.实参可以是常量,变量或表达式
B.形参可以是常量,变量或表达式
C.实参可以为任意类型
D.如果形参和实参的类型不一致,以形参类型为准
答案:B
7.被调用函数调用结束后,返回到( )
A.主调函数中该被调函数调用语句处
B.主函数调用该被调函数调用语句处
C.主调函数中该被调函数调用语句的前一语句
D.主调函数中该被调函数调用语句的后一语句
答案:A
8.有如下函数调用语句:fun(rec1,rec2+rec3,(rec4,rec5));在该函数调用语句中,含有的实参个数是( )
A.2 B.3 C.4 D.5
答案:B
9.下列程序的结果是( )
#include<stdio.h>
int fun(int x,int y)
{return(x+y);}
main()
{int a=1,b=2,c=3,sum;
sum=fun((a++,b++,a+b),c++);
printf("%d
",sum);}
A.6 B.7 C.8 D.9
答案:C
10.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( )
A.float型 B.long型 C.int型 D.double型
答案:C
11.C语言规定,程序中各函数之间( )
A.既允许直接递归调用也允许间接递归调用
B.不允许直接递归调用也不允许间接递归调用
C.允许直接递归调用不允许简介递归调用
D.不允许直接递归调用允许间接递归调用
答案:A
12.下列程序的结果是( )
#include<stdio.h>
long fun(int n)
{long s;
if(n==1||n==2) s=2;
else s=n-fun(n-1);
return s;}
main()
{printf("%ld
",fun(3));}
A.1 B.2 C.3 D.4
答案:A
13.下列程序的结果是( )
#include<stdio.h>
int fun(int x)
{int p;
if(x==0||x==1) p=3;
else p=x-fun(x-2);
return p;}
main(){printf("%d
",fun(7));}
A.2 B.3 C.4 D.5
答案:A
14.下列程序的输出结果是( )
int fun(int b[],int n)
{int i,s=0;
for(i=0;i<n;i+=2)
s+=b[i];
return s;}
main()
{int a[]={1,2,3,4,5},s;
s=fun(a,5);
printf("%d
",s);}
A.7 B.8 C.9 D.10
答案:C
15.数组名作为函数调用的实参,传递给形参的是( )
A.数组的首地址 B.数组的第一个元素的值
C.数组中全部元素的值 D.数组元素的个数
答案:A
16.下列程序的输出结果是( )
#include<stdio.h>
int f(int b[],int m,int n)
{int i,s=0;
for(i=m;i<n;i=i+2) s=s+b[i];
return s;}
main()
{int x,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d
",x);}
A.10 B.18 C.8 D.15
答案:A
17.设有说明int (*ptr)[m];其中标识符ptr是( )
A.m个指向整型变量的指针
B.指向m个整型变量的函数指针
C.一个指向具有m个整型元素的一维数组的指针
D.具有m个指针元素的一维指针数组,每个元素都只能指向整型量
答案:C
18.设有说明:int (*ptr)[8];则ptr是( )
A.指向整型变量的指针
B.指向函数的指针,该函数的返回值为int数据
C.指向一维数组的指针,该数组的基类型为int
D.长度为8的一维数组
答案:C
19.若有定义int *p[3];则以下叙述中正确的是( )
A.定义了一个基类型为int的指针变量p,该变量具有三个指针
B.定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C.定义了一个名为*p的整型数组,则数组含有三个int类型元素
D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
答案:B
20.在C语言中,如果在一个函数中的复合语句中定义了一个变量,则该变量( )
A.只在该复合语句中有定义
B.在该函数中有定义
C.在本程序范围内有定义
D.为非法变量
答案:A
21. 在C语言中,以下不正确的是( )
A.在不同函数中可以使用相同名字的变量
B.形式参数是局部变量
C.在函数内定义的变量侄子啊本函数范围内有定义
D.在函数内的复合语句中定义的变量在本函数范围内有定义
答案:D
22.在下列叙述中,错误的一条是( )
A.主函数main中定义的变量在整个文件或程序中有效
B、不同函数中,可以使用相同名字的变量
C.函数中的形式参数是局部变量
D.在一个函数内部,可在复合语句中定义变量,这些变量只在本复合语句中有效
答案: A
23.在C语言中,以下不正确的是( )
A.形参的存储单元是动态分配的
B.函数中的局部变量都是动态存储
C.全局变量都是静态存储
D.动态存储的变量的存储空间在函数结束调用后就被释放了
答案:B
24.在C语言中,变量的隐含存储类别是( )
A.auto B.static C.extern D.register
答案:A
25.下列程序的输出结果是( )
#include<stdio.h>
void fun(int x)
{x=20;}
main()
{int x=10;
fun(x);
printf("x=%d
",x);}
A.10 B.x=10 C.20 D.x=20
答案:B
二、简答题(本题共5小题,每题6分,共30分)
26. 以下程序的输出结果是【 】。
int fun(int x,int y)
{
int z;
z=x+y;
return z;}
main(){
int a=3,b=5,s;
s=fun(a,b);
printf("%d
",s);}
答案:8
27. 以下程序的运行结果是【 】。
int fun(int x,int y)
{return x+y;}
main()
{int a=3,b=2,c=5,d;
d=fun(fun(a,b),c);
printf("%d
",d);}
答案:10
28. 以下程序的运行结果是【 】。
#include<stdio.h>
int f(int x,int y)
{return((y-x)*x);}
main()
{int a=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d
",d);}
答案:9
29. 以下程序的运行结果是【 】。
int fun(int x)
{int y;
if(x>1) y=fun(x-1)+2;
else y=2;
return y;}
main(){printf("%d
",fun(3));}
答案:6
30. 以下程序的运行结果是【 】。
#include<stdio.h>
int f(int x)
{int y;
if(x==0||x==1) return 3;
else y=x*x-f(x-2);
return y;}
main(){printf("%d
",fun(3));}
答案:6
三、案例分析题(本题共2小题,共20分)
31.编写一个函数,将某已知数组的奇数项合成一个新的数组。在主函数中调用该函数,并输出新数组的内容。
【参考程序】#include <stdio.h>
int fun(int a[], int b[]) {
int i, k = 0;
for (i = 0; i < 10; i++) {
if (i % 2 != 0) {
b[k] = a[i];
k++;
}
}
return k;
}
main() {
int a[10], b[10], n, i;
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
n = fun(a, b);
for (i = 0; i < n; i++)
printf("%d ", b[i]);
}
32.编写一个函数,将两个两位数的正整数A和B合并形成一个整数C。合并的方式是:将A数的十位数和个位数依次放在C数的个位数和十位数上,B数的十位数和个位数依次放在C数的百位数和千位数上。例如:当A=16,B=35时,C=5361。
【参考程序】#include <stdio.h>
int fun(int x, int y) {
int m, n; //m是a的十位,n是a的个位
int p, q; //p是b的十位,q是b的个位
int c;
m = x / 10;
n = x % 10;
p = y / 10;
q = y % 10;
c = m + n * 10 + p * 100 + q * 1000;
return c;
}
main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d", fun(a, b));
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$