习题内容答案一、在以下每一题的四个选项中,请选择一个正确的答案。1、以下对C语言函数的有关描述中,正确的是。A、在C语言中调用函数时,只能把实参的值转送给形参,形参的值不能转送给实参。B、C函数既可以嵌套定义,又可以递归调用。C、函数必须有返回值,否则不能使用函数。D、C程序中有调用关系的所有函数必须放在同一个源程序文件中。2、函数调用语句“f((e1,e2),(e3,e4,e5));”中参数的个数是。A、1B、2C、4D、53、将一个函数说明为static后,该函数将。A、既能被同一源文件中的函数调用,也能被其他源文件中的函数调用。B、只能被同一源文件中的函数调用,不能被其他源文件中的函数调用。C、只能被其他源文件中的函数调用,不能被同一源文件中的函数调用。D、既不能被同一源文件中的函数调用,也不能被其他源文件中的函数调用。4、C语言中规定函数的返回值的类型由。A、return语句中的表达式类型所决定。B、调用该函数时的主调用函数类型所决定。C、调用该函数时系统临时决定。D、在定义该函数时所指定的函数类型所决定。5、以下正确的说法是。A、定义函数时,形参的类型说明可以放在函数体内。B、return后边的值不能为表达式。C、如果函数值的类型与返回值类型不一致,以函数值类型为准。D、如果形参与实参的类型不一致,以实参类型为准。6、下列存储类标识符中,的可见性与存在性不一致。A、外部类B、自动类C、内部静态类D、寄存器类7、以下不正确的说法是。1、A2、B3、B4、D5、C6、C7、D习题内容答案A、在不同函数中可以使用相同名字的变量。B、形参是局部变量。C、在函数内定义的变量只在本函数范围内有效。D、在函数内的复合语句中定义的变量在本函数范围内有效。8、以下叙述中正确的是。A、用#include包含的头文件的后缀不可以是“.a”。B、在对某个含有错误的头文件进行修改后,包含此头文件的源程序不必重新进行编译。C、宏名必须用大写字母表示。D、宏替换不占用运行时间。9、有一个如下定义的函数func(a){printf(“%d”,a);}则该函数的返回值的类型是。A、与参数a的类型相同。B、void类型C、没有返回值D、无法确定10、以下错误的描述为。A、在函数之外定义的变量称为外部变量,外部变量是全局变量。B、在一个函数中既可以使用本函数中的局部变量a,又可以使用同名的外部变量a。C、外部变量定义和外部变量说明的含义不同。D、若在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。二、判断下列各叙述的正确性。11、()全局变量与函数体内定义的局部变量重名时,全局变量优先。12、()C程序中,有调用关系的所有函数必须放在同一个源程序文件中,13、()对于不需要使用函数返回值的函数,可以不定义类型。14、()C程序文件中每个函数都将被本文件调用。15、()一个函数可以定义在别的函数的内部,即嵌套定义。16、()返回值为int或char类型时,函数声明可以缺省。8、A9、B10、B11、×12、×13、√14、×15、×16、√习题内容答案17、()在C语言中允许函数之间的嵌套调用。18、()局部静态变量是在编译时赋初值的,即只赋初值一次。19、()外部变量必须定义在文件的开头部分。20、()函数的形参在退出该函数后就被释放了。三、填空。21、C语言程序的基本组成单位是。22、C语言程序总是从开始执行。23、当函数的返回值与函数值类型不一致时,就会发生。24、凡在函数中未指定存储类别的变量,其隐含的存储类别为。25、静态型局部变量的作用域是。26、C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是。27、若定义的函数没有返回值时,则应在该函数说明时加一个类型说明符。28、在C语言中,一个函数直接或间接地调用自身,便构成了函数的。29、函数的形式参数的作用域为30、如果被调用的用户函数和主调函数不在同一编译单位,则在定义函数的编译单位中应将该函数定义成,在主调函数的函数中将该函数说明为。四、阅读下面的程序,写出程序运行结果。31、#include“stdio.h”voidf1(ints){inti,j=3;for(i=1;i10;++i,++j){s=i+j;if(s=100)17、√18、√19、×20、√21、函数22、主函数23、类型转换24、auto25、该函数的函数体内26、单向的值传递27、void28、递归调用29、从调用该函数后开始直到返回主调函数前结束。30、externextern31、s=20习题内容答案break;}printf(“s=%d\n”,s);}main(){ints=10;f1(s);}32、#include“stdio.h”main(){inti=0,a=10;voids();while(i3){++a;printf(“%d,”,a++);s();i++;}}voidf1(ints){intz=300;z++;printf(“%d\n”,z++);}33、#include“stdio.h”intfunc(intx,inty){intz;z=x+y;32、11,30113,30115,30133、61322习题内容答案returnz++;}main(){inti=3,j=2,k=1;do{k+=func(i,j);printf(“%d\n”,k);i++;j++;}while(i=5);}34、#include“stdio.h”#defineN5voidfun();main(){inti;for(i=1;iN;i++)fun();}voidfun(){staticinta=0;intb=2;printf(“(%d,%d)\n”,a+=3,a+b);}五、程序填空,请在下面程序空白处填入合适的语句。35、下面的运行结果是输出如下图形,请填空。34、(3,2)(6,5)(9,8)(12,11)习题内容答案****************#include“stdio.h”voiddisp(inti){intj,k;for(j=0;j=8-i;j++)printf(““);for(k=0;k2*i-1;k++)printf(“*”);printf(“\n”);}main(){inti;for(i=0;i4;i++)disp(i);}36、下面是一个计算阶乘的程序,请填空。#include“stdio.h”doublefactorial(int);main(){intn;printf(“Enteraninteger:”);scanf(“%d”,&n);printf(“\n%d!=%lg\n”,n,factoria(n));}doublefactorial(inti)35、2*i-1printf(“\n”)disp(i)36、nfactoria(n)returnresult习题内容答案{doubleresult=1.0;intj;for(j=1;j=i;j++)result*=j;returnresult;}