第七章 用函数实现模块化程序设计
一、选择题
C1.以下语法中正确的是
A)C语言程序总是从第一个定义的函数开始执行
B)在C语言程序中,要调用的函数必须在main函数中定义 C)C语言程序总是从main开始执行
D)C语言程序中的main函数必须放在程序的开始部分 C2.以下函数的类型是
fff( float x) {
printf(“%d\\n”, x); }
A)与参数x的类型相同 B)void类型 C)int 类型 DB3.以下函数调用语句中,含有的实参个数是 func( (exp1, exp2), (exp3, exp4, exp5));
A)1 B)2 C)4 D)5 C4.以下程序的输出结果是
func(int a, int b) { int c; c = a + b;
return c;
}
int main()
{ int x = 6, y = 7, z = 8, r;
r = func((x--, y++, x + y), z--); printf(“%d\\n”, r); return 0;
}
A)11 B)20 C)21 D)31 A5.以下程序的输出结果是
int main() { int i =2, p; p = f(i, i + 1); printf(“%d”, p); return 0; }
int f(int a, int b) { int c; c = a;
if(a > b) c = 1;
else if(a == b) c = 0; else c = -1;
26
)无法确定 return ( c ); }
A)-1 B)0 C)1 D)2 D6.以下程序的输出结果是
fun( int a, int b, int c) { c = a * b; } void main() { int c;
fun(2, 3, c);
printf(“%d\\n”, c); }
A)0 B)1 C)6 D)无定义 A7.以下程序的输出结果是
double f(int n) { int i; double s; s = 1.0;
for(i =1; i <= n; i++)
s += 1.0 / i; return s; }
void main()
{ int i, m =3; float a = 0.0; for(i = 0; i < m; i++)
a += f(i); printf(“%f\\n”, a); }
A)5.500000 B)3.000000 C)4.000000 D)8.25 A8.以下叙述正确的是
A)C程序中各函数之间既允许直接递归调用也允许间接递归调用 B)C程序中各函数之间不允许直接递归调用也不允许间接递归调用 C)C程序中各函数之间允许直接递归调用不允许间接递归调用 D)C程序中各函数之间不允许直接递归调用允许间接递归调用 C9.以下程序的输出结果是 long fib( int n ) { if(n > 2)
return (fib(n-1) + fib(n - 2)); else return (2);
}
void main()
{ printf(“%dld”, fib(6) ): }
A)8 B)30 C)16 D)2 C10.以下程序的输出结果是 void main()
{ int i = 1, j = 3;
27
printf(“%d,”, i++); { int i = 0; i += j * 2;
printf(“%d,%d,”, i, j ); }
pritnf(“%d,%d\\n”, i, j );
}
A)1,7,3,2,3 B)2,7,3,2,3 C)1,6,3,2,3 D)2,6,3,2,3 A11.以下程序的输出结果是 void main()
{ int k =4, m = 1, p;
p = func(k, m); printf(“%d,”, p ); p = func(k, m); printf(“%d\\n”, p );
}
func( int a, int b) { static int m, i = 2; i += m + 1;
m = i + a + b; return (m);
}
A)8,17 B)8,16 C)8,20 D)8,8 B12.以下程序的输出结果是 int m = 13;
int fun2(int x, int y)
{ int m = 3;
return (x * y - m);
}
void main()
{ int a = 7, b = 5;
printf(“%d\\n”, fun2(a, b) / m );
}
A)1 B)2 C)3 D)4 B13.有以下程序
float fun(int x,int y) {
return(x+y); }
void main() {
int a=2,b=5,c=8;
printf(\\n\((int)fun(a+c,b),a-c)); }
28
程序运行后的输出结果是
A)编译出错 B)9 C)21 D)9.0
B14. 下列程序的运行结果是
void fun(int *a, int *b) { int *k;
k=a; a=b; b=k; }
void main()
{ int a=3, b=6, *x=&a, *y=&b;
fun(x,y);
printf(\); }
A)6 3 B)3 6 C)编译出错 D)0 0
C15.以下正确的函数形式是
A) double fun(int x, y)
{ double z; z = x+ y; return z; } B) double fun(int x, y)
{ int z; z = x + y; return (double) z; } C) double fun(int x, int y) { return (x+y); } D) double fun(x, y)
{ int x, y; double z; z=x+y; return z; }
B16. 对于建立函数的目的,正确的说法是
A) 提高程序的执行效率 B) 提高程序的可读性 C) 减少程序的篇幅 D) 减少程序文件所占的内存
B17. 以下正确的说法是
A) 函数的定义可以嵌套,但函数的调用不可以嵌套 B) 函数的定义不可以嵌套,但函数的调用可以嵌套 C) 函数的定义和函数的调用均不可以嵌套 D) 函数的定义和函数的调用均可以嵌套
A18. C语言关于实参和形参说法正确的是
A) 在值传递时实参和与之对应的形参各占用独立的存储单元 B) 在值传递时实参和与之对应的形参占用同一存储单元 C) 只有当实参与形参同名时,才共占用同一存储单元 D) 形参是虚拟的,不占用存储单元
B19. 下列说法正确的是
A) 在利用返回值方式传递数据时,可以省略数据类型说明符
B) 在函数间通过全局变量的传递数据,只能用外部变量,不能用内部变量 C)利用地址返回值方式传递数据时,返回值可以赋予普通变量 D) 利用全局变量传递数据,可以简化程序,提倡使用
C20. 以下正确的说法是
A) 定义函数时,形参的类型说明可以在函数体内 B) return后面的表达式不能是函数
C) 如果函数值的类型与返回值的类型不一致,以函数值类型为准
29
D) 如果形参与实参的类型不一致,以实参类型为准
D21.下列叙述中不正确的是
A)C程序的main函数可以没有参数 B)C程序的main函数可以有参数
C)C程序的main函数若有参数时,第一个参数的值最少是1
D)main函数的第一个参数必须是整数,其名字必须是argc;第二个参数可以定义成:char *argv[],名字必须是argv。
B22. 以下程序的输出结果是
f(int b[], int n) { int i, r = 1;
for(i = 0; i <= n; i++)
r = r*b[i]; return r; }
void main()
{ int x, a[] = {2, 3, 4, 5, 6, 7, 8, 9}; x = f(a, 3);
printf(“%d\\n”, x); }
A)720 B)120 C)24 D 二、填空题
1.以下程序的输出结果是 12 。 unsigned fun6(unsigned num) { unsigned k = 1;
do
{ k *= num % 10; num /= 10; } while( num); return k;
}
void main()
{ unsigned n = 26;
printf(“%d\\n”, fun6(n)); }
2.以下程序的输出结果是 15.500000 。 double sub(double x, double y, double z) { y -= 1.0;
z = z + x; return z;
}
void main()
{ double a = 2.5, b = 9.0;
printf(“%f\\n”, sub(b - a, a, b));
30
)6