内容正文:
《编程语言基础——C语言》高等教育出版社(第五版)
第六章 函数 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题2分,共40分)
1. C语言规定,简单变量作为实参时,它对应形参之间的数据传递方式是( )
A.地址传递
B.单向值传递
C.由实参传给形参,再由形参传回给实参
D.由用户指定传递方式
2. 在C语言中,关于函数的说法不正确的一项是( )
A.实参可以是常量、变量或表达式
B.实参与对应的形参占用共同的存储单元
C.实参与形参的类型不一致时,以形参的类型为准
D.函数的类型与返回值的类型不一致时,以函数的类型为准
3. 若在程序中,使用数组名作为函数调用的实参,则传递给形参的是( )
A.数组的首地址
B.数组的第一个元素的值
C.数组中全部元素的值
D.数组元素的个数
4. 下列关于函数的叙述中,正确的一项是( )
A.调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B.C函数既可以嵌套定义又可以递归调用
C.函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
5. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int fun( int n)
{ int m=0,f=-1,i;
for(i=1;i<=n;i++)
{ m=m+i* f;
f=-f ; }
return m;}
main( )
{ printf("m=%d
", fun(20));
getch();}
A.m=10 B.m=-10 C.m=11 D.m=-11
6. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int fun(int a, int b)
{ if(a>b) return(a*b);
else return(a-b); }
int main( )
{ int x=8, y=16, z=6, r;
r=fun(fun(x,y),2*z);
printf("%d
", r);
getch();}
A.20 B.-20 C.-19 D.19
7. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int f(int x, int y)
{ return (y-x)*x; }
int main( )
{int a=8,b=9,c=10,d;
d=f(f(a,c),f(a,b)-f(c,b));
printf("%d
",d);getch();}
A.32 B.-32 C.42 D.-42
8. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
void num( )
{extern int x,y;int a=15,b=10;
x=a*b; y=a+b;}
int x,y;
int main( )
{ int a=9,b=6;
x=a+b;y=a-b;
num( );
printf("%d,%d
",x,y);getch();}
A. 150,25 B.15,3 C.3,15 D.不确定值
9. 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( )
A. extern B.register C.static D.auto
10. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int f(int a);
int main( )
{ int a=2,i;
for(i=0;i<2;i++) printf("%2d",f(a));getch();}
int f(int a)
{ int b=0;static int c=3;
b++;c++;
return(a+ b+c);}
A.7 9 B.7 8 C.7 7 D.7 10
11. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
void fun(int x)
{ if(x/2>0) fun(x/2-2);
printf("%d ",x);}
int main( )
{ fun(10);
printf("
");getch();}
A.-1 3 B.3 10 C.3 D. -1 3 10
12. 以下程序的运行结果( )
#include<stdio.h>
#include<conio.h>
double max (double a,double b);
int main( )
{double x=8,y=11;
printf("%lf
",max(y,x));getch();}
double max(double a,double b)
{return(a>b ? b-a:a-b);}
A.3.000000 B. -3.000000 C.-3 D.3
13. 若定义时没有指定函数的返回值类型,则该函数的隐含类型是( )
A.float B.int C.long D.double
14. 对于一个正常运行和正常退出的程序,以下叙述正确的是( )
A.程序从 main()函数第一条可执行语句开始执行,在main函数结束
B.程序的执行总是从程序的第一个函数开始,在main(函数结束
C.程序的执行总是从main()函数开始,在最后一个函数中结束
D.从程序的第一个函数开始,在程序的最后一个函数中结束
15. 以下说法正确的是( )
A.实参和与其对应的形参各自占用独立的存储单元
B.实参和与其对应的形参共同占用相同的存储单元
C.当实参和与其对应的形参同名时才共同占用相同的存储单元
D.形参是虚拟的,在函数没被调用时不占用存储单元
16. 调用一个没有return语句的函数,以下说法正确的是( )
A.该函数没有返回值 B.该函数返回若干个系统默认值
C.该函数返回一个用户希望的值 D.该函数返回一个随机数
17. 关于函数声明,以下不正确的说法是( )
A.如果函数定义出现在函数调用之前,可以不必加函数原型声明
B.一个函数的原型只需要在所有主调函数之前声明一次
C.函数在调用之前,一定要声明函数原型,保证编译系统进行全面的调用检查
D.调用标准库函数前不需要函数原型声明
18. 函数的实参与形参应有如下关系( )
A.个数相同 B.顺序相同
C.类型相同或兼容 D.上述三点均需具备
19. 关于递归函数以下说法错误的是( )
A.C语言允许直接递归调用和间接递归调用
B.递归函数通常有出口结束递归
C.递归函数的效率一定比功能等价的非递归函数效率低许多
D.递归函数通常有书写简单和形式直观的优点
20. 关于用数组名作为函数参数以下叙述中不正确的是( )
A.实参向形参传递的是数组的起始地址
B.实参向形参传递的是首个元素的地址
C.函数体可以用sizeof()运算符测试数组的大小
D.形参和实参指向同一数组,函数体修改形参数组元素则实参数组
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int max(int x,int y);
int main( )
{ int a=8,b=2,c;
c=max(a,b);
printf("max is %d
",c);
getch();}
int max(int x,int y)
{ int z;z=(x>y)? x:y;
return(z);}
22. 若输入的值是-189,则以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
void fun(int n);
int main( )
{ int n;
scanf("%d",&n);printf("%d=",n);
if(n<0) printf("-");n=abs(n);
fun(n);getch();}
void fun(int n)
{int k,r;
for(k=2;k<=n/2;k++)
{r=n%k;
while(r==0)
{printf("%d",k);n=n/k;
if(n>1) printf(" * ");r=n%k;}}
if(n!=1) printf("%d
",n);}
23. 若输入一个整数20,则以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int sub(int a);
int main( )
{ int a,e[10],c,i=0;
printf("输入一整数
");
scanf("%d",&a);
while(a!=0)
{ c=sub(a);a=a/2;e[i]=c;i++; }
for(;i>0; i--)printf("%d",e[i-1]);
getch();}
int sub(int a)
{ int c;c=a%2;return c;}
24. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include <math.h>
int fun(int y, int x)
{int z;z=abs(x+y);return(z);}
int main( )
{int a=-1,b=-5,c;
c=fun(a,b);
printf("%d",c);getch();}
25. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include <math.h>
int sub(int n);
int main( )
{ int i=15;
printf("%d
",sub(i));getch();}
int sub(int n)
{ int a;if(n==1) return 1;
a=n+sub(n-1);return(a); }
26. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include <math.h>
void f(int a[ ])
{ int i=0;
while(a[i]<=10)
{ printf("%d ",a[i]); i++; } }
int main( )
{int a[ ]={1,8,3,9,11,9,7};f(a+1);
getch();}
27. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int func(int a[ ] [3]);
int main( )
{ int a[3][3]={1,3,5,7,9,11,13,15,17};int sum;
sum=func(a);printf("sum=%d
",sum);
getch();}
int func(int a[ ][3])
{int i,j,sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{ a[i][j]=i+j;
if(i==j) sum=sum+a[i][j];}
return(sum);}
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
28. 以下函数 fun的功能是:将输入的大写字母,先转换为与其对应的小写字母, 然后再转换成该小写字母后的第3个字母,返回后输出。例如,若输入的字母为E,输出的字母则为h,若输入的字母为Y,输出的字母则为b。请填空。
#include<stdio.h>
#include<conio.h>
char fun(char c)
{【1】;
if(【2】) c=c+3;
else if(c>='x'&&c<='z') 【3】;
return c;}
main( )
{ char c; c=【4】;
c=fun(c);putchar(c);getch();}
29. 以下函数 fun的功能是:统计一个数中位值为零的个数,以及位值为1的个数。若输入1110011011,则输出位值为零的个数为3,位值为1的个数为7,请填空。
#include<stdio.h>
#include<conio.h>
void fun(long n)
{int coun0=0,counl=0,m;
do
{m=【1】;
if(m==0) coun0++;
if(m==1) counl++;n=【2】;
} while(【3】);
printf("coun0=%d,counl=%d
",coun0,counl);}
int main( )
{long n;
printf("input n:
");scanf("%ld",&n);printf("n=%ld
",n);
【4】;getch();}
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共15分)
30. 下列程序的功能是打印出1000以内的所有水仙花数,该程序有三处错误,请改正。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 int f(int n)
L4 {int i,j,k;
L5 i=n/100;
L6 j=n%10-i* 10;
L7 k=n%10;
L8 if(i*100+j* 10+k==i*3+j*3+k*3) return n;
L9 else return 0;}
L10 int main( )
L11 { int n,k;
L12 for(n=100;n<1000;n++)
L13 { k=f(n);
L14 if(k==0) printf("%d ",k);}
L15 printf("
"); getch();}
以下程序的功能是用二分法求方程的根,并要求绝对误差不超过0.001。程序中有二处错误,请改正。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 float f(float x);
L4 {return(2*x*x*x-4*x*x+3*x-6);}
L5 int main( )
L6 { float m=-100,n=90,r;
L7 r=(m+n)/2;
L8 while(f(r) * f(n)!=0)
L9 {if(f(r)*f(n)>0) m=r;
L10 else n=r;
L11 if(n-m<0.001) break;
L12 r=(m+n)/2;}
L13 printf("The fang cheng jie is %6.3f
",r);
L14 getch();}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
《编程语言基础——C语言》高等教育出版社(第五版)
第六章 函数 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题2分,共40分)
1.C语言规定,简单变量作为实参时,它对应形参之间的数据传递方式是( )
A.地址传递
B.单向值传递
C.由实参传给形参,再由形参传回给实参
D.由用户指定传递方式
答案:B
2.在C语言中,关于函数的说法不正确的一项是( )
A.实参可以是常量、变量或表达式
B.实参与对应的形参占用共同的存储单元
C.实参与形参的类型不一致时,以形参的类型为准
D.函数的类型与返回值的类型不一致时,以函数的类型为准
答案:B
3.若在程序中,使用数组名作为函数调用的实参,则传递给形参的是( )
A.数组的首地址
B.数组的第一个元素的值
C.数组中全部元素的值
D.数组元素的个数
答案:A
4.下列关于函数的叙述中,正确的一项是( )
A.调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B.C函数既可以嵌套定义又可以递归调用
C.函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
答案:A
5.以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int fun( int n)
{ int m=0,f=-1,i;
for(i=1;i<=n;i++)
{ m=m+i* f;
f=-f ; }
return m;}
main( )
{ printf("m=%d
", fun(20));
getch();}
A.m=10 B.m=-10 C.m=11 D.m=-11
答案:A
6.以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int fun(int a, int b)
{ if(a>b) return(a*b);
else return(a-b); }
int main( )
{ int x=8, y=16, z=6, r;
r=fun(fun(x,y),2*z);
printf("%d
", r);
getch();}
A.20 B.-20 C.-19 D.19
答案:B
7.以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int f(int x, int y)
{ return (y-x)*x; }
int main( )
{int a=8,b=9,c=10,d;
d=f(f(a,c),f(a,b)-f(c,b));
printf("%d
",d);getch();}
A.32 B.-32 C.42 D.-42
答案:A
8.以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
void num( )
{extern int x,y;int a=15,b=10;
x=a*b; y=a+b;}
int x,y;
int main( )
{ int a=9,b=6;
x=a+b;y=a-b;
num( );
printf("%d,%d
",x,y);getch();}
A. 150,25 B.15,3 C.3,15 D.不确定值
答案:A
9.在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( )
A. extern B.register C.static D.auto
答案:C
10.以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int f(int a);
int main( )
{ int a=2,i;
for(i=0;i<2;i++) printf("%2d",f(a));getch();}
int f(int a)
{ int b=0;static int c=3;
b++;c++;
return(a+ b+c);}
A.7 9 B.7 8 C.7 7 D.7 10
答案:B
11.以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
void fun(int x)
{ if(x/2>0) fun(x/2-2);
printf("%d ",x);}
int main( )
{ fun(10);
printf("
");getch();}
A.-1 3 B.3 10 C.3 D. -1 3 10
答案:D
12.以下程序的运行结果( )
#include<stdio.h>
#include<conio.h>
double max (double a,double b);
int main( )
{double x=8,y=11;
printf("%lf
",max(y,x));getch();}
double max(double a,double b)
{return(a>b ? b-a:a-b);}
A.3.000000 B. -3.000000 C.-3 D.3
答案:B
13.若定义时没有指定函数的返回值类型,则该函数的隐含类型是( )
A.float B.int C.long D.double
答案:B
14.对于一个正常运行和正常退出的程序,以下叙述正确的是( )
A.程序从 main()函数第一条可执行语句开始执行,在main函数结束
B.程序的执行总是从程序的第一个函数开始,在main(函数结束
C.程序的执行总是从main()函数开始,在最后一个函数中结束
D.从程序的第一个函数开始,在程序的最后一个函数中结束
答案:A
15.以下说法正确的是( )
A.实参和与其对应的形参各自占用独立的存储单元
B.实参和与其对应的形参共同占用相同的存储单元
C.当实参和与其对应的形参同名时才共同占用相同的存储单元
D.形参是虚拟的,在函数没被调用时不占用存储单元
答案:D
16.调用一个没有return语句的函数,以下说法正确的是( )
A.该函数没有返回值 B.该函数返回若干个系统默认值
C.该函数返回一个用户希望的值 D.该函数返回一个随机数
答案:A
17.关于函数声明,以下不正确的说法是( )
A.如果函数定义出现在函数调用之前,可以不必加函数原型声明
B.一个函数的原型只需要在所有主调函数之前声明一次
C.函数在调用之前,一定要声明函数原型,保证编译系统进行全面的调用检查
D.调用标准库函数前不需要函数原型声明
答案:C
18.函数的实参与形参应有如下关系( )
A.个数相同 B.顺序相同
C.类型相同或兼容 D.上述三点均需具备
答案:D
19.关于递归函数以下说法错误的是( )
A.C语言允许直接递归调用和间接递归调用
B.递归函数通常有出口结束递归
C.递归函数的效率一定比功能等价的非递归函数效率低许多
D.递归函数通常有书写简单和形式直观的优点
答案:C
20.关于用数组名作为函数参数以下叙述中不正确的是( )
A.实参向形参传递的是数组的起始地址
B.实参向形参传递的是首个元素的地址
C.函数体可以用sizeof()运算符测试数组的大小
D.形参和实参指向同一数组,函数体修改形参数组元素则实参数组
答案:C
二、程序运行结果题(本题共7小题,每题3分,共21分)
21.以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int max(int x,int y);
int main( )
{ int a=8,b=2,c;
c=max(a,b);
printf("max is %d
",c);
getch();}
int max(int x,int y)
{ int z;z=(x>y)? x:y;
return(z);}
答案:max is 8
22.若输入的值是-189,则以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
void fun(int n);
int main( )
{ int n;
scanf("%d",&n);printf("%d=",n);
if(n<0) printf("-");n=abs(n);
fun(n);getch();}
void fun(int n)
{int k,r;
for(k=2;k<=n/2;k++)
{r=n%k;
while(r==0)
{printf("%d",k);n=n/k;
if(n>1) printf(" * ");r=n%k;}}
if(n!=1) printf("%d
",n);}
答案:-189=-3 * 3 * 3 * 7
23.若输入一个整数20,则以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int sub(int a);
int main( )
{ int a,e[10],c,i=0;
printf("输入一整数
");
scanf("%d",&a);
while(a!=0)
{ c=sub(a);a=a/2;e[i]=c;i++; }
for(;i>0; i--)printf("%d",e[i-1]);
getch();}
int sub(int a)
{ int c;c=a%2;return c;}
答案:10100
24.以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include <math.h>
int fun(int y, int x)
{int z;z=abs(x+y);return(z);}
int main( )
{int a=-1,b=-5,c;
c=fun(a,b);
printf("%d",c);getch();}
答案:6
25.以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include <math.h>
int sub(int n);
int main( )
{ int i=15;
printf("%d
",sub(i));getch();}
int sub(int n)
{ int a;if(n==1) return 1;
a=n+sub(n-1);return(a); }
答案:120
26.以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include <math.h>
void f(int a[ ])
{ int i=0;
while(a[i]<=10)
{ printf("%d ",a[i]); i++; } }
int main( )
{int a[ ]={1,8,3,9,11,9,7};f(a+1);
getch();}
答案:8 3 9
27.以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int func(int a[ ] [3]);
int main( )
{ int a[3][3]={1,3,5,7,9,11,13,15,17};int sum;
sum=func(a);printf("sum=%d
",sum);
getch();}
int func(int a[ ][3])
{int i,j,sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{ a[i][j]=i+j;
if(i==j) sum=sum+a[i][j];}
return(sum);}
答案:sum=6
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
28.以下函数 fun的功能是:将输入的大写字母,先转换为与其对应的小写字母, 然后再转换成该小写字母后的第3个字母,返回后输出。例如,若输入的字母为E,输出的字母则为h,若输入的字母为Y,输出的字母则为b。请填空。
#include<stdio.h>
#include<conio.h>
char fun(char c)
{【1】;
if(【2】) c=c+3;
else if(c>='x'&&c<='z') 【3】;
return c;}
main( )
{ char c; c=【4】;
c=fun(c);putchar(c);getch();}
答案:
【1】c=c+32
【2】c>='a'&&c<='w'
【3】c=c-26+3
【4】getchar( )
29.以下函数 fun的功能是:统计一个数中位值为零的个数,以及位值为1的个数。若输入1110011011,则输出位值为零的个数为3,位值为1的个数为7,请填空。
#include<stdio.h>
#include<conio.h>
void fun(long n)
{int coun0=0,counl=0,m;
do
{m=【1】;
if(m==0) coun0++;
if(m==1) counl++;n=【2】;
} while(【3】);
printf("coun0=%d,counl=%d
",coun0,counl);}
int main( )
{long n;
printf("input n:
");scanf("%ld",&n);printf("n=%ld
",n);
【4】;getch();}
答案:
【1】n%10
【2】n/10
【3】n
【4】fun(n)
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共15分)
30.下列程序的功能是打印出1000以内的所有水仙花数,该程序有三处错误,请改正。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 int f(int n)
L4 {int i,j,k;
L5 i=n/100;
L6 j=n%10-i* 10;
L7 k=n%10;
L8 if(i*100+j* 10+k==i*3+j*3+k*3) return n;
L9 else return 0;}
L10 int main( )
L11 { int n,k;
L12 for(n=100;n<1000;n++)
L13 { k=f(n);
L14 if(k==0) printf("%d ",k);}
L15 printf("
"); getch();}
答案:
【1】L6 j=n/10-i* 10;
【2】L8 if(i*100+j* 10+k==i*i*i+j*j*j+k*k*k) return n;
【3】L14 if(k!=0) printf("%d ",k);}
31.以下程序的功能是用二分法求方程的根,并要求绝对误差不超过0.001。程序中有二处错误,请改正。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 float f(float x);
L4 {return(2*x*x*x-4*x*x+3*x-6);}
L5 int main( )
L6 { float m=-100,n=90,r;
L7 r=(m+n)/2;
L8 while(f(r) * f(n)!=0)
L9 {if(f(r)*f(n)>0) m=r;
L10 else n=r;
L11 if(n-m<0.001) break;
L12 r=(m+n)/2;}
L13 printf("The fang cheng jie is %6.3f
",r);
L14 getch();}
答案:
【1】L3 float f(float x)
【2】L9 {if(f(r)*f(n)<0) m=r;
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$