2024年6月8日发(作者:)
函数习题
一.选择题
1.以下正确的说法是 B 。
A)用户若需要调用标准库函数,调用前必须重新定义
B)用户可以重新定义标准库函数,如若此,该函数将失去原有定义
C)系统不允许用户重新定义标准库函数
D)用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系
统会自动调用。
2.以下正确的函数定义是 D 。
A)double fun(int x, int y) B)double fun(int x,y)
{ z=x+y ; return z ; } { int z ; return z ;}
C)fun (x,y) D)double fun (int x, int y)
{ int x, y ; double z ; { double z ;
z=x+y ; return z ; } return z ; }
Page 1 of 30
3.以下正确的说法是 D 。
A)实参和与其对应的形参各占用独立的存储单元
B)实参和与其对应的形参共占用一个存储单元
C)只有当实参和与其对应的形参同名时才共占用相同的存储单元
D)形参时虚拟的,不占用存储单元
4.以下正确的函数声明是 C 。
A)double fun(int x , int y) B)double fun(int x ; int y)
C)double fun(int x , int y) ; D)double fun(int x,y)
5.若调用一个函数,且此函数中没有return语句,则正确的说法是 D 。
A)该函数没有返回值
B)该函数返回若干个系统默认值
C)能返回一个用户所希望的函数值
D)返回一个不确定的值
6.以下不正确的说法是 B 。
Page 2 of 30
A)实参可以是常量,变量或表达式
B)形参可以是常量,变量或表达式
C)实参可以为任意类型
D)如果形参和实参的类型不一致,以形参类型为准
7.C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是 B 。
A)地址传递
B)值传递
C)有实参传给形参,再由形参传给实参
D)由用户指定传递方式
8.C语言规定,函数返回值的类型是由 D 决定的。
A)return语句中的表达式类型 B)调用该函数时的主调函数类型
C)调用该函数时由系统临时 D)在定义函数时所指定的函数类型
9.以下正确的描述是 B 。
A)函数的定义可以嵌套,但函数的调用不可以嵌套
Page 3 of 30
B)函数的定义不可以嵌套,但函数的调用可以嵌套
C)函数的定义和函数的调用均不可以嵌套
D)函数的定义和函数的调用均可以嵌套
10.若用数组名作为函数调用的实参,传递给形参的是 A 。
A)数组的首地址 B)数组中第一个元素的值
C)数组中的全部元素的值 D)数组元素的个数
11.如果在一个函数中的复合语句中定义了一个变量,则该变量 A 。
A)只在该复合语句中有定义 B)在该函数中有定义
C)在本程序范围内有定义 D)为非法变量
12.以下不正确的说法是 D 。
A)在不同函数中可以使用相同名字的变量
B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有定义
D)在函数内的复合语句中定义的变量在本函数范围内有定义
Page 4 of 30
13.以下不正确的说法是 B 。
A)形参的存储单元是动态分配的
B)函数中的局部变量都是动态存储
C)全局变量都是静态存储
D)动态分配的变量的存储空间在函数结束调用后就被释放了
14.下面程序的输出是 A 。(不同的编译系统可能有不同的结果,
int i=2 ;
printf(“%d%d%d”,i*=2,++i,i++) ;
A) 8,4,2 B)8,4,3 C)4,4,5 D)4,5,6
15.已知一个函数的定义如下:
double fun(int x, double y)
{ …… }
则该函数正确的函数原型声明为: C
A)double fun (int x,double y) B)fun (int x,double y)
Page 5 of 30
6,3,2)
C)double fun (int ,double ); D)fun(x,y) ;
16关于函数声明,以下不正确的说法是 C 。
A)如果函数定义出现在函数调用之前,可以不必加函数原型声明
B)如果在所有函数定义之前,在函数外部已做了声明,则各个主调函数不必再做函数原型声明
C)函数再调用之前,一定要声明函数原型,保证编译系统进行全面的调用检查
D)标准库不需要函数原型声明
17.以下不正确的说法是 D 。
A)全局变量,静态变量的初值是在编译时指定的
B)静态变量如果没有指定初值,则其初值为0
C)局部变量如果没有指定初值,则其初值不确定
D)函数中的静态变量在函数每次调用时,都会重新设置初值
18.以下不正确的说法是 B 。
A)register变量可以提高变量使用的执行效率
B)register变量由于使用的是CPU的寄存器,其数目是有限制的
Page 6 of 30
C)extern变量定义的存储空间按变量类型分配
D)全局变量使得函数之间的“耦合性”更加紧密,不利于模块化的要求
二.填空题
1.C语言函数返回类型的默认定义类型是 int 。
2.函数调用语句:fun((a,b),(c,d,e))实参个数为 2 。
3.函数的实参传递到形参有两种方式: 值传递 和 地址传递 。
4.在一个函数内部调用另一个函数的调用方式称为 嵌套调用 。在一个函数内部直接或间接调
用该函数自身成为函数 递归 的调用方式。
5.C语言变量按其作用域分为 外部变量 和 内部变量 。按其生存期分为 全局变
量 和 局部变量 。
6.已知函数定义:void dothat(int n,double x) { …… },其函数声明的两种写法为
void dothat(int n,double x);和
void dothat(int,double); 。
7.C语言变量的存储类别有 auto , extern , register 和
static 。
Page 7 of 30
8.凡在函数中未指定存储类别的局部变量,其默认的存储类别为 auto 。
9.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要
定义的存储类别为 static 。
10.变量被赋初值可以分为两个阶段:即 编译阶段 和 运行阶段 。
三.程序阅读题
1.写出下面程序的运行结果。
func (int a,int b)
{ static int m=0,i=2;
i+=m+1;
m=i+a+b;
return (m);
}
main ( )
{ int k=4,m=1,p1,p2;
Page 8 of 30
p1=func(k,m) ; p2=func(k,m) ;
printf(“%d,%dn”,p1,p2) ;
}
8,17
2.写出下面程序的运行结果。
# define MAX 10
int a[MAX], i ;
sub1 ( )
{ for (i=0; i } sub2 ( ) { int a[MAX], i ,max ; max=5; for (i=0; i Page 9 of 30 } sub3 (int a[ ]) { int i ; for (i=0; i printf(“n”); } main ( ) { sub1( ); sub3(a); sub2( ); sub3(a); } 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18 3.若输入的值是-125,写出下面程序的运行结果。 #include fun (int n) Page 10 of 30 { int k,r ; for (k=2; k<=sqrt(n); k++) { r = n % k ; while (!r) { printf(“%d”,k); n=n/k; if (n>1) printf(“*”); r = n % k ; } } if (n!=1) printf(“%dn”,n); } main ( ) { int n ; scanf(“%d”,&n); Page 11 of 30 printf(“%d=”,n); if (n<0) printf(“-”); n = fabs(n); fun(n); } -125=-5*5*5 4.写出下面程序的运行结果。 int i=0; fun1 (int i) { i = (i%i)*(i*i)/(2*i)+4 ; printf(“i=%dn”,i); return (i) ; } fun2(int i) { i = i<=2 ? 5 : 0 ; Page 12 of 30 return (i) ; } main ( ) { int i = 5 ; fun2(i/2) ; printf(“i=%dn”,i) ; fun2(i=i/2) ; printf(“i=%dn”,i) ; fun2(i/2) ; printf(“i=%dn”,i) ; fun1(i/2) ; printf(“i=%dn”,i) ; } i=5 i=2 i=2 i=4 i=2 Page 13 of 30 5.写出下面程序的功能。 func (int n) { int i,j,k; i=n/100; j=n/10-i*10 ; k=n%10 ; if (i*100+j*10+k) == i*i*i+j*j*j+k*k*k) return n ; return 0; } main ( ) { int n,k ; for (n=100; n<1000 ; n++) if (k=func(n)) printf(“%d”,k) ; } 153 370 371 407 四.程序判断题 Page 14 of 30 1.下面add函数求两个参数的和;判断下面程序的正误,如果错误请改正过来。 void add(int a,int b) 改为 int { int c ; c = a + b; return (c) ; } 2.下面函数fun的功能是:将长整型数中偶数位置上的数依次取出,构成一个新数返回,例如,当 s中的数为:87653142时,则返回的数为:8642;判断下面程序的正误,如果错误请改正过来。 long fun(long s) { long t , sl=1; int d ; t = 0 ; while ( s > 0 ) { d = s%10; Page 15 of 30 if (d%2=0) { 改为 = = t=d* sl+ t; sl *= 10; } s = 10; } return (t); } 3.下面函数fun的功能是:统计字符串s中各元音字母(即A,E,I,O,U)的个数,注意:字母不分大, 小写;判断下面程序的正误,如果错误请改正过来。 fun (char s[ ], int num[5]) { int k; i=5; for (k=0; k num[i]=0; Page 16 of 30 for (k=0; s[k]; k++) { i = -1; switch ( s ) { case ‘a’: case ‘A’: i=0;break; 添加红色部分 case ‘e’: case ‘E’: i=1;break; case ‘i’ : case ‘I’ : i=2; break; case ‘o’: case ‘O’: i=3; break; case ‘u’: case ‘U’: i=4; break; } if (i >= 0) num[i]++; } } 4.函数fun的功能是:根据整型形参m,计算如下公式的值: Page 17 of 30 y 111 100*100200*200300*300 1 m*m 判断下面程序的正误,如果错误请改正过来。 fun (int m) { double y = 0, d ; int i ; for ( i =100; i <= m;i += 100 ) { d = (double) i * (double) I ; 改为i y += 1.0 / d ; } return ( y ) ; } 5.下面函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串; 判断下面程序的正误,如果错误请改正过来。 void fun (char s[ ]) Page 18 of 30 { int i,j; for (i=0,j=0; s[i]!=’0’; i++) if (s[i]>=’0’ && s[i]<=’9’) s[j]=s[i]; 改为s[j++] s[j]=”0”; } 五.程序填空题 1.下面函数用“折半查找法”从有10个数的a数组中对关键字m查找,若找到,返回其下标值, 否则返回-1,请填(2)空使程序完整。 经典算法提示: 折半查找法的思路是先确定待查元素的范围,将其分成两半,然后比较位于中间点元素的值。如果 该待查元素的值大于中间点元素的值,则将范围重新定义为大于中间点元素的范围,反之亦反。 int search(int a[10],int m) { int x1=0,x2=0,mid ; while (x1<=x2) { Page 19 of 30 mid = (x1+x2)/2;


发布评论