main()
{inta=24,b=16,c; c=aa(a,b);
printf(“%d\\n”,c); }
intaa(intx,inty) {intw; while(y) {w=x%y; x=y; y=w;} returnx;}
A)8B)7C)6D)5
7.阅读下面程序段,则执行后的结果是(C)。
#include“stdio.h” fun(inta) {intx=5; x+=a++;
print(“%d”,x);} main()
{inta=3,x=1; fun(a); x+=a++;
printf(“%d\\n”,x); }
A)82B)83C)84D)85
8.阅读下面程序段,则执行后的结果是(D)。
#include“stdio.h” intx=1; main() {intmd=4; fun(md);
printf(“%d,%d\\n”,md,x);} fun(intk) {k+=x; x+=k;
{charx=?B?;
printf(“%d,”,x-?A?);} printf(“%d,%d,”,k,x);}
A)1,6,5,4,6B)1,5,4,6,4C)1,4,6,5,4D)1,5,6,4,6 9.阅读下面程序段,则执行后的结果是(C)。
#include“stdio.h” main()
{fun3(fun1(),fun2());} fun2() {inta=15;
returna;} fun1() {intk=20; returnk;}
fun3(inta,intb) {intk;
k=(a-b)*(a+b); printf(“%d\\n”,k);}
A)0B)184C)175D)编译不通过
10.阅读下面程序段,则执行后的结果是(D)。
#include“stdio.h” main()
{inta=4,b=6,c=7;
doubled,fun(int,int,int); d=fun(a,b,c);
printf(“%lf\\n”,d);}
doublefun(inta,intb,intc) {doubles; s=a%b*c; returns;}
A)27B)27.000000C)28D)28.000000
11.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是(D)。 a) 函数调用可以作为独立的语句存在 b)函数调用可以作为一个函数的实参 c) 函数调用可以出现在表达式中
d)函数调用可以作为一个函数的形参
12.以下不正确的说法是(D)。
a)在不同的函数中可以使用相同名字的变量 b)函数中的形参是局部变量
c)在一个函数内定义的变量只在本函数范围内有效
d)在一个函数内的复合语句中定义的变量只在本函数范围内有效
13.以下正确的说法是(C)。
a)定义函数时,形参的类型说明可以放在函数体内 b) return后面的值不能为表达式
c) 如果函数值的类型与返回值类型不一致,以函数值类型为准 d) 如果形参与实参的类型不一致,以实参类型为准
14.以下正确的说法是(D)。
a) 函数可以嵌套定义但不能嵌套调用 b)函数既可以嵌套调用也可以嵌套定义 c) 函数既可以不嵌套调用也不可以嵌套定义 d)函数可以嵌套调用但不可以嵌套定义
15.C语言规定,函数返回值的类型是由(D)。
a)return语句中的表达式类型所决定的 b)调用该函数时的主调函数类型所决定 c)调用该函数时系统临时决定
d)在定义该函数时所指定的函数类型所决定
16.以下不正确的说法是(C,D)。
a)c程序中,函数可以直接或间接的调用自己
b)函数调用时,函数名必须与所调用的函数名一致 c)函数说明语句中的类型必须与函数返回值的类型一致 d)实参个数可以与形参个数不一致
17.以下不正确的说法是(C)。
a)C语言规定,不能在一个函数的内部再定义函数
b)在没有声明函数返回值类型的情况下,默认的函数返回值类型为int型 c)函数的类型可以是整型,实型,字符型,但不能是指针型 d)函数可以没有形参,但函数名后的一对括号不能省略
18.在函数调用过程中,如果如果funA调用了函数funB,函数funB又调用了函数funA,则(B)。
a)称为函数的直接递归调用 b)称为函数的间接递归调用 c)称为函数的循环调用
d)C语言中不允许这样的递归调用
19.言中规定,若对函数类型未加显式说明,函数的隐含类型为(C)。
(A)void(B)double(C)int(D)char 20.以下叙述正确的是(C)。
a)在c程序中,main函数位于程序的最前面 b)c程序的每一行只能写一个语句 c)c语言本身没有输入输出语句
d)在对c程序进行编译的过程中,可以发现注释中的错误
二.填空题
1.一个源程序文件由一个或多个函数以及其他有关内容(如命令行、数据定义等)组成。一个源程序是一个编译单位,在程序编译时是以源程序文件为单位进行编译的,而不是以函数为单位进行编译的。
2.所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一函数,即函数不能嵌套定义。函数间可以互相调用,但不能调用main()函数。main()函数是系统调用的。 3.从用户使用的角度看,函数有两种:标准函数、用户定义的函数用以解决用户的专门需要。 4.从函数的形式看,函数分两类:无参函数、有参函数。
5.在C语言中,实参向形参的数据传递是值传递,单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元 是不同单元。
6.如果实参表列包含多个实参,则各参数间用逗号隔开。实参与形参的个数应相等,类型应匹配。实参与形参按顺序对应,一一传递数据。
7.声明的作用是把函数名、函数参数的类型和参数个数等信息通知编译系统,以便在遇到函数调用时,编译系统能正确识别函数并检查调用是否合法。
8.在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归。
9.在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。这称为局部变量。 10.形式参数也是局部变量。 11.求两个数中较大的一个数。
#include
intmax(intx,inty); inta,b,c;
scanf(“%d,%d”,&a,&b); c=max(a,b);
printf(“maxis%d”,c); }
intmax(intx,inty) { intz;
z=x>y?x:y; return(z); }
12.求两个数中较小的一个数。
#include
intmin(intx,inty); inta,b,c;
scanf(“%d,%d”,&a,&b); c=min(a,b); printf(“minis%d”,c); }
intmin(intx,inty) { intz;
z=x 13.求两个数的最大公约数。 #include“stdio.h” intaa(intx,inty); main() {inta=24,b=16,c; c=aa(a,b); printf(“%d\\n”,c); } intaa(intx,inty) {intw; while(y) {w=x%y; x=y; y=w;} return(x); } 14.求两个数的最大公约数。 #include“stdio.h” intaa(intx,inty); main() {inta=24,b=16,c; c=aa(a,b); printf(“%d\\n”,c); } intaa(intx,inty) {intw; while(y) {w=x%y; x=y; y=w;} return(x); } 三.改错题 1.下面程序输出1到10的阶乘。改正下面程序中的错误。 #include“stdio.h” voidmain() { floatfac(intn); inti; for(i=1;i<=10;i++) printf(“%d!=%d\\n”,i,fac(i));} intfac(intn) { intf=1; f=f*n; return(f);} 错误语句:floatfac(intn);intf=1;f=f*n;