1. 在 C 语言中,形参的缺省存储类别是( )。
(A)auto (B) register (C) static (D) extern
答案:auto;形参是局部变量;局部变量缺省存储类是auto
2. 以下对 C 语言函数的有关描述中,正确的是( )。
(A)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
(B)C 函数既可以嵌套定义又可以递归调用
(C)函数必须有返回值,否则不能使用函数
(D)C 程序中有调用关系的所有函数必须放在同一个源程序文件中
答案:B选项。不能嵌套定义。C选项,函数可以没有返回值。D选项,没有必要放在同一个c文件中,用其他c文件的函数可以给其定义的地方函数名前面加extern修饰。
3. 以下叙述中不正确的是( )。
(A)在 C 中,函数中的自动变量可以赋初值,每调用一次,赋一次初值
(B)在 C 中,在调用函数时,实际参数和对应形参在类型上只需赋值兼容
(C)在 C 中,外部变量的隐含类别是自动存储类别
(D)在 C 中,函数形参可以说明为 register 变量
答案:C;不是。在内存中的全局区,而不是栈中。当然也没有放在寄存器中。应该是auto 的。不可能时register
4.在 C 语言中,函数的隐含存储类别是( )。
(A) auto (B) static (C) extern (D) 无存储类别
答案:auto 只是用于局部变量,register一定是auto函数的存储类型指的是其他文件模块可否访问,按照C语言的原则,函数隐含为全局(本项目中)都可以访问,因此默认为extern,如果函数前面加上static则说明该函数只能被本源程序文件中的模块访问所以答案就是C
5. 下列叙述中正确的是( )。
(A) C 语言编译时不检查语法 (B) C 语言的子程序有过程和函数两种
(C) C 语言的函数可以嵌套定义 (D) C 语言所有函数都是外部函数
答案:B;C语言编译时要检查语法,所以A不对;C语言没有过程,只有函数,所以B不对;C语言函数内不能定义函数,既不能嵌套定义,所以C不对;排除法也知道是D了.当然由“函数内不能定义函数”也可以推出所有函数都是外部函数.
6.以下程序的输出结果是( )。
fun(int x, int y, int z)
{
z=x*x+y*y;
}
main()
{
int a=31;
fun(5,2,a);
printf("%d",a);
}
(A) 0 (B) 29 (C) 31 (D) 无定值
答案:C;
7. 以下函数值的类型是( )。
fun ( float x )
{ float y; y= 3*x-4; return y;
}
A)int (B) 不确定 (C) void (D) float
答案:A
8.若有以下程序则以下叙述中不正确的是( )。
#include <stdio.h>
void f(int n);
main()
{
void f(int n);
f(5);
}
void f(int n)
{
printf("%d\n",n);
}
(A) 若只在主函数中对函数 f 进行说明,则只能在主函数中正确调用函数 f
(B) 若在主函数前对函数 f 进行说明,则在主函数和其后的其它函数中都可以正确调用函数 f
(C) 对于以上程序,编译时系统会提示出错信息:提示对对 f 函数重复说明
(D) 函数 f 无返回值,所以可用 void 将其类型定义为无值型
答案:C;
9. 有以下程序
float fun(int x,int y)
{
return(x+y);
}
main()
{
int a=2,b=5,c=8;
printf(“%3.0f\n”,fun((int)fun(a+c,b),a-c));
}
程序运行后的输出结果是( )。
(A) 编译出错 (B) 9 (C) 21 (D) 9.0
[解析]fun()函数是将传进来的两个整型参数相加,把和作为函数值返回,注意返回值为float型。在主函数调用了两次fun()函数,第一次调用时把表达式“a+c”和变量“b”的值求和,得到15转换为15.0作为函数的返回值。第二次调用把第一次调用的返回值通过强制类型转换成int型15,再和表达式“a-c”相加,得到结果9,转换成float型作为函数值返回。由于输出格式符为“%3.of输出时没有小数位,故输出为9。
10. 有以下程序
void f(int a[],int i,int j)
{
int t; if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
f(a,i+1,j-1);
}
}
main( )
{
int i,aa[5]={1,2,3,4,5};
f(aa,0,4);
for(i=0;i<5;i++)
printf(“%d,”,aa[i]);
printf(“\n”);
}
执行后输出结果是( ) 。
(A) 5,4,3,2,1, (B) 5,2,3,4,1, (C) 1,2,3,4,5, (D) 1,2,3,4,5,
答案:A
11.以下关于函数的叙述中正确的是( )。
(A)每个函数都可以被其它函数调用(包括 main 函数)
(B)每个函数都可以被单独编译
(C)每个函数都可以单独运行
(D)在一个函数内部可以定义另一个函数
答案:B
12.设函数 fun 的定义形式为
. void fun(char ch, float x ) { … }
则以下对函数 fun 的调用语句中,正确的是( )。
(A)fun("abc",3.0); (B)t=fun('D',16.5); (C)fun("c",2); (D)fun(32,32);
答案:D
13. 有以下程序
#include "stdio.h"
int a=2; //全局变量
int f(int n)
{
static int a=3; //函数内部变量
int t=0;
if(n%2)
{
static int a=4; //复合语句变量
t+=a++;
}
else
{
static int a=5; //复合语句变量
t+=a++;
}
return t+a++;
}
main()
{
int s=a,i;
for(i=0;i<3;i++)
s+=f(i);
printf("%d\n", s);
}
程序运行后的输出结果是( )。
(A)26 (B)28 (C)29 (D)24
在函数外面定义的变量a是全局变量,其作用范围从定义该变量的位置开始到本文件的结束;在f函数中的if子句(复合语句)和else子句中定义的变量a是局部变量,其作用范围只在其所在的复合语句内;在f函数中定义的第一个变量a是静态局部变量,其作用范围只限于函数f内部,无论被调用多少次都只初始化一次,并且保留上次函数调用结束时的值,该变量不对复合语句产生作用,所以,f函数的返回值是这个a变量和t值相加的结果。答案C
14. 有以下程序
int fun1(double a)
{
return a*=a;
}
int fun2(double x,double y)
{
double a=0,b=0;
a=fun1(x);
b=fun1(y);
return(int)(a+b);
}
main()
{
double w;
w=fun2(1.1,2.0);
}
程序执行后变量 w 中的值是( )。
(A)5.21 (B)5 (C)5.0 (D)0.0
此题考核的是数值类型的定义与强制转换。本题在进行调用函数 fun2()时,又对函数 fun1()进行了调 用,由于函数 fun1()定义为整型,所以第一次调用 fun1()时返回的值为 1,然后再将 1 赋值给 a,此时由于a 为 double 型,则系统自动类型转换,将 1 转换成了 1.000000 赋值给了变量 a,以此类推,得 b 的值为 4.000000, 然后通过“return(int)(a+b);”将 a+b 的值强制转换为 int 型 5 返回给主函数,此时又由 w 的类型为 double, 所以返回的整型值 5 又被转换为 double 型。故输出结果为 5.0。
15. 以下叙述中错误的是( )。
(A)改变函数形参的值,不会改变对应实参的值
(B)函数可以返回地址值
(C)可以给指针变量赋一个整数作为地址值
(D)当在程序的开头包含文件 stdio.h 时,可以给指针变量赋 NULL
答案B;
函数、指针。 在C语言中,指针变量是不能直接赋给一个整数作为地址值的。