1C语言(函数,变量作用范围)一、选择题1下列定义不正确的有(C)。A)#definePI3.141592B)#defineS345C)intmax(x,y);D)charc;intx,y;{}2下列程序结构中,不正确的是(B)。A)main()B)main(){floata,b,c;{floata,b,c;scanf(%f,%f,&a,&b);scanf(%f,%f,&a,&b);c=add(a,b);c=add(a,b);...........}}intadd(floatx,floaty)floatadd(floatx,floaty){...}{...}C)floatadd(floatx,floaty);D)floatadd(floatx,floaty)main(){...}{floata,b,c;main()scanf(%f,%f,&a,&b);{floata,b,c;c=add(a,b);scanf(%f,%f,&a,&b);......c=add(a,b);}.....floatadd(floatx,floaty)}{...}3一个C语言的程序总是从(A)开始执行的.A)main函数B)文件中的第一个函数C)文件中的第一个子函数调用D)文件中的第一条语句24以下正确的函数定义是(D).A)doublefun(intx,inty){z=x+y;returnz;}B)doublefun(intx,inty);{intz;z=x+y;returnz;}C)fun(intx,y){intz;returnz;}D)doublefun(intx,inty){doublez;z=x+y;returnz;}5以下正确的函数声明形式是(D).A)doublefun(intx,inty)B)doublefun(intx;inty)C)doublefun(int,int)D)doublefun(int,int);6以下说法中正确的是(A)在C语言中A)实参与其对应的形参各占用独立的存储单元B)实参与其对应的形参占用同一个存储单元C)只有当实参与形参同名时才占用同一个存储单元D)实参占用存储单元,但形参是虚拟的,不占用存储单元7设有如下函数定义:intf(char*s){char*p=s;while(*p!='\0')p++;return(p-s);}如果在主程序中用下面的语句调用上述函数,则输出结果为(A).printf(%d\n,f(goodbye!));的输出结果是3A)3B)6C)8D)08下面程序段中,主函数中变量a被初始化为(C)。intf(){return3.5;}main(){inta=f();}A)3.5B)无确定值C)3D)程序出错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)由用户指定传递方式413-以下程序的输出结果是(A)。intpower(intx,inty);main(){floata=2.6,b=3.4;intp;p=power((int)a,(int)b);printf(%d\n,p);}intpower(intx,inty){inti,p=1;for(i=y;i0;i--)p=p*x;returnp;}A)8B)9C)27D)8114-以下不正确的描述为(B).A)调用函数时,实参可以是表达式B)调用函数时,实参变量与形参变量可以共用内存单元C)调用函数时,将为形参分配内存单元D)调用函数时,实参与形参的类型必须一致15-下列语句中,不正确的是(C)。A)chara[]={China};B)chara[]=China;C)printf(%s,a[0]);D)scanf(%s,a);16-若有以下函数调用语句fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实际参数的个数是(A).A)3B)4C)5D)617-下面程序#includestdio.hmain(){5char*a=1234;fun(a);printf(\n);}fun(char*s){chart;if(*s){t=*s++;fun(s);}if(t!='\0')putchar(t);}输出为(B).A)1234B)4321C)1324D)423118-C规定,简单变量做实参时,它与对应形参之间的数据传递方式是(B).A)地址传递B)单向值传递C)有实参传递到形参,再由形参传回给实参。19-执行完下列语句段后,i值为(C).inti;intf(intx){intk=x+1;intt;t=k;k=x;x=t;returnx;}i=f(f(1));A)1B)2C)3D)以上都错20-下列程序段的运行结果为(B).floatf(intx){x=x+3.6;returnx;}main()6{printf(%.1f,f(2));}A)6.0B)5.0C)5.6D)以上都不对21-执行下列程序后,变量a的值应为(A).intf(intx,inty){returnx*y;}main(){inta=2;a=f(f(a,a*a),f(a+a,a/3));}A)0B)2C)8D)1622-若有以下函数定义,则在主函数中正确的调用语句是(B).viodfun(intarray[3][5]){………..}main(){inta[3][5],b;……..}A)fun(a[3][5]);B)b=fun(a);C)fun(a);D)fun(&a);23-若有以下变量说明和函数定义:inta=4,b=6,c,k;charch='x';floatx,y,z;sub(intx,inty,charch,float*z){switch(ch){case'+':*z=x+y;break;case'-':*z=x-y;break;case'*':*z=x*y;break;case'/':*z=x/y;break;7}}则以下合法的函数调用语句是(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-下面程序#includestdio.hf(intx){if(x==0||x==1)return(3);elsereturn(x–f(x–2));}main(){printf(%d\n,f(9));}输出结果是(A).A)7B)3C)6D)825-以下说法中正确的是(B).A)一个函数在它的函数体内调用它自身称为嵌套调用。B)一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C)一个函数在它的函数体内调用其它函数称为递归调用。这种函数称为递归函数。D)一个函数在它的函数体内不能调用自身26-以下叙述中不正确的是(D).A)在不同的函数中可以使用相同名字的变量B)函数中的形式参数是局部变量C)在一个函数内定义的变量只在本函数范围内有效D)在一个函数内的复合语句中定义的变量在本函数范围内有效27-C函数返回值的类型由(D)决定.A)调用函数时临时8B)return语句中的表达式类型C)调用该函数的主调函数类型D)定义函数时指定的函数返回值类型28-执行下列语句后,程序的运行结果为(A).inta=10;f(){inta;a=12;}main(){f();printf(%d,a);}A)10B)12C)0D)不确定29-以下说法中不正确的是(D).A)主函数中定义的变量只在主函数内部有效B)形式参数是局部变量C)在函数内部定义的变量只在本函数范围内有效D)当全局变量与局部变量同名时,局部变量不起作用30-当全局变量与函数内部的局部变量同名时,则在函数内部(A).A)全局变量有效B)局部变量有效C)全局变量与局部变量都有效D)全局变量与局部变量都无效31-设下面程序段中调用fun函数传送实参a和b:main(){chara[10],b[10];……fun(a,b);……}9则在fun函数头部中,对形参正确的定义是:(BCD)A)fun(chara,b)B)fun(chara1[],chara2[])C)fun(charp[10],charq[10])D)fun(char*s1,char*s2)二、判断题1形参可以是常量、变量或表达式。错2如函数值的类型与返回值类型不一致,以函数值类型为准。对3下面两种写法等价。对(1)intfun(intx,inty)(2)intfun(x,y)intx,y;4在C语言中,最好使用全局变量.错5以下说法是否正确:若调用C标准库函数,调用前必须重新定义。错6形式参数和实际参数的个数可以不同。错7数组名做函数的参数时,实参数组和形参数组大小一定要一致。错8用数组名做函数参数,形参数组可以不指定大小。对9C语言中函数的返回值类型是由return语句中的表达式类型决定的。对10数组名作为函数参数,应该在主调函数与被调函数中分别定义数组,不能只在一方定义。对11以数组名作为参数时,数据传送方向是“双向的”。即形参值可以传回给实参。对12所有的函数都是平行的,一个函数并不从属于另一个函数。对13只有主函数才可以调用其它函数。错14在C语言中,函数可以递归调用或递归定义。错15在同一文件中,外部变量与局部变量同名。在局部变量的作用范围内,外部变量的值等于局部变量的值。错16main函数中定义变量是全局变量。错17当全局变量与函数内部的局部变量同名时,则在函数内部全局变量有效。错三、填空题[1]以下程序的输出结果是_____12___.unsignedfun6(unsignednum){unsignedk=1;do10{k*=num%10;num/=10;}while(num);returnk;}main(){unsignedn=26;printf(%d\n,fun6(n));}[2]以下程序的输出结果是___9.000000_____.doublesub(doublex,doubley,doublez){y-=1.0;z=z+x;returnz;}main(){doublea=2.5,b=9.0;printf(%f\n,sub(b-a,a,a));}[3]以下程序的输出结果是____4____.fun1(inta,intb){intc;a+=a;b+=b;c=fun2(a,b);returnc*c;}fun2(inta,intb){intc;c=a*b%3;returnc;}main(){intx=11,y=19;printf(%d\n,fun1(x,y));}[4]下面pi函数的功能是,根据以下公式返回满足精度要求的的值.请填空.9473523173523152313112pidoublepi(doubleeps){doubles=0.0,t=1.0;intn;for(__n=1___;teps;n++){s+=t;t=n*t/(2*n+1);}return(2.0*__s___);}11[5]以下函数用以求x的y次方.请填空.doublefun(doublex,inty){inti;doublez=1;for(i=1;i__i=y___;i++)z=__z*x___;returnz;}[6]以下程序的功能是计