C语言(函数,变量作用范围) 一、选择题
1 下列定义不正确的有 ( C ) 。
A)#define PI 3.141592 B)#define S 345 C)int max(x,y); D)char c; int x,y ; { }
2 下列程序结构中,不正确的是 ( B )。
A)main() B) main() {float a,b,c; {float a,b,c;
scanf(\ scanf(\ c=add(a,b); c=add(a,b); ...... ..... } }
int add(float x,float y) float add(float x,float y) { ... } { ... }
C)float add(float x,float y); D)float add(float x,float y) main() { ... } {float a,b,c; main()
scanf(\ {float a,b,c;
c=add(a,b); scanf(\ ...... c=add(a,b); } ..... float add(float x,float y) } { ... }
3 一个C语言的程序总是从( A )开始执行的. A)main函数
B)文件中的第一个函数
C)文件中的第一个子函数调用 D)文件中的第一条语句
4 以下正确的函数定义是( D ). A)double fun(int x,int y) {z=x+y; return z;}
B) double fun(int x,int y); {int z;
z=x+y; return z;} C) fun(int x,y)
{int z; return z;} D) double fun(int x,int y) {double z; z=x+y; return z;}
5 以下正确的函数声明形式是( D ).
A) double fun(int x,int y) B) double fun(int x;int y) C) double fun(int ,int ) D) double fun(int ,int );
6 以下说法中正确的是( A ) 在C语言中
A)实参与其对应的形参各占用独立的存储单元 B)实参与其对应的形参占用同一个存储单元
C)只有当实参与形参同名时才占用同一个存储单元
D)实参占用存储单元,但形参是虚拟的,不占用存储单元 7 设有如下函数定义: int f(char *s) { char *p=s ;
while(*p!='\\0') p++; return(p-s) ; }
如果在主程序中用下面的语句调用上述函数,则输出结果为( A ). printf(\的输出结果是
A) 3 B) 6 C) 8 D) 0
8 下面程序段中,主函数中变量a被初始化为 ( C )。 int f() {
return 3.5; }
main() {
int a=f(); }
A)3.5 B)无确定值 C)3 D)程序出错 9 下面叙述不正确的是( D ).
A) 在函数中,通常用return语句传回函数值; B) 在函数中,可以有多条return语句;
C) 在C中,主函数main后的一对圆括号中也可以带有形参; D) 在C中,调用函数必须在一条独立的语句中完成; 10-C语言函数返回值的类型是由( C )决定的。 A) 调用该函数的主调函数类型 B) 定义函数时所指定的函数类型 C) return语句中的表达式类型 D) 以上都错 11-以下说法中正确的是( A ). A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以为任意类型
D)形参应与其对应的实参类型一致
12-C语言中规定,简单变量做实参时,它和对应形参之间的数据传递方式是( B ). A)地址传递 B)单向值传递
C)由实参传给形参,再由形参传给实参 D)由用户指定传递方式
13-以下程序的输出结果是 ( A ) 。 int power(int x,int y); main()
{float a=2.6,b=3.4; int p;
p=power((int)a,(int)b); printf(\}
int power(int x,int y) {int i,p=1;
for(i=y;i>0;i--) p=p*x; return p; }
A) 8 B) 9 C) 27 D) 81
14-以下不正确的描述为( B ). A)调用函数时,实参可以是表达式
B)调用函数时,实参变量与形参变量可以共用内存单元 C)调用函数时,将为形参分配内存单元
D)调用函数时,实参与形参的类型必须一致 15-下列语句中,不正确的是 ( C )。
A)char a[]={\ B)char a[]=\C)printf(\ D)scanf(\
16-若有以下函数调用语句fun(a+b, (x,y), fun(n+k,d,(a,b)));在此函数调用语句中实际参数的个数是( A ). A) 3 B) 4 C) 5 D) 6 17-下面程序
#include
char *a=\ fun(a);
printf(\ }
fun ( char *s) { char t;
if(*s) {t = *s++; fun(s); } if(t !='\\0') putchar( t ); }
输出为( B ).
A) 1234 B) 4321 C)1324 D) 4231
18-C规定,简单变量做实参时,它与对应形参之间的数据传递方式是( B ). A) 地址传递 B)单向值传递
C)有实参传递到形参,再由形参传回给实参。 19-执行完下列语句段后, i值为( C ). int i; int f(int x) { int k = x+1; int t; t=k; k=x; x=t; return x; } i=f(f(1)); A) 1 B) 2 C) 3 D) 以上都错 20-下列程序段的运行结果为( B ). float f(int x) {
x=x+3.6; return x; } main() {
printf(\ }
A) 6.0 B) 5.0 C) 5.6 D) 以上都不对 21-执行下列程序后, 变量a的值应为( A ). int f(int x,int y) {return x*y;} main() {int a=2;
a=f(f(a,a*a),f(a+a,a/3)); }
A) 0 B) 2 C) 8 D) 16
22-若有以下函数定义,则在主函数中正确的调用语句是( viod fun(int array[3][5]) { ………..} main()
{ int a[3][5], b; ……..}
A)fun(a[3][5]); B)b=fun(a); C) fun(a);
B ). D) fun(&a);
23-若有以下变量说明和函数定义: int a=4,b=6,c,k; char ch='x'; float x,y,z;
sub(int x, int y, char ch, float *z) { switch(ch) {case '+': *z=x+y;break; case '-': *z=x-y;break; case '*': *z=x*y;break; case '/': *z=x/y;break; } }
则以下合法的函数调用语句是( B ). A) sub(10,20,ch,y); B) sub(1,2+3,'+',&z);
C) sub(sub(1,2,'+',&y), sub(3,4,'+',&x),'-',&y); D) sub(a,b,&x,ch); 24-下面程序
#include
{ if ( x= = 0 || x = = 1 ) return ( 3 ) ; else return ( x–f(x–2)); }
main () {
printf (\}
输出结果是( A ). A) 7 B) 3 C) 6 D) 8
25-以下说法中正确的是( B ).
A)一个函数在它的函数体内调用它自身称为嵌套调用。
B)一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。 C)一个函数在它的函数体内调用其它函数称为递归调用。这种函数称为递归函数。 D)一个函数在它的函数体内不能调用自身 26-以下叙述中不正确的是( D ).
A) 在不同的函数中可以使用相同名字的变量 B) 函数中的形式参数是局部变量
C) 在一个函数内定义的变量只在本函数范围内有效
D) 在一个函数内的复合语句中定义的变量在本函数范围内有效
27-C函数返回值的类型由( D )决定. A)调用函数时临时
B)return语句中的表达式类型