国家二级C语言(函数和数组)机试模拟试卷1(共255题)_第1页
国家二级C语言(函数和数组)机试模拟试卷1(共255题)_第2页
国家二级C语言(函数和数组)机试模拟试卷1(共255题)_第3页
国家二级C语言(函数和数组)机试模拟试卷1(共255题)_第4页
国家二级C语言(函数和数组)机试模拟试卷1(共255题)_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级C语言(函数和数组)机试模拟试卷1(共9套)(共255题)国家二级C语言(函数和数组)机试模拟试卷第1套一、选择题(本题共28题,每题1.0分,共28分。)1、有以下程序#include<stdio.h>intfun(intn){inta;if(n==1)return1;a=n+fun(n-1);return(a);}main(){printf("%d\n",fun(5));}程序的输出结果是A、14B、10C、15D、9标准答案:C知识点解析:函数fun为递归定义的函数,当调用fun(5)-->5+fun(4)-->5+4+fun(3)-->5+4+3+fun(2)-->5+4+3+2+fun(1),因此最后的结果为15。2、有以下程序#include<stdio.h>intfun(inta,intb){returna+b;}main(){intx=6,y=7,z=8,r;r=fun(fun(x,y),z--);printf("%d\n",r);}程序运行后的输出结果是A、15B、21C、20D、31标准答案:B知识点解析:本题考查了函数的调用,函数fun功能为求两个数据的和。主函数中表达式r=fun(fun(x,y),z--),首先计算内层调用fun(x,y),计算结果为13,然后外层调用fun(13,8),结果为21。3、以下选项中函数形参不是指针的是A、fun(int&p){…}B、fun(inta[10]){…}C、fun(int*a){…}D、fun(intp[]){…}标准答案:A知识点解析:C语言中形参数组是指针变量,其数组中元素的个数由传递的实参数组决定,因此可以在定义的时候,不给出元素个数的说明,因此选项B和D形参均为指针变量,选项A的定义在C语言中不存在的。4、设有如下函数定义intfun(intk){if(k<1)return0;elseif(k==1)return1;elsereturnfun(k-1)+1;}若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是A、2B、4C、3D、5标准答案:C知识点解析:这道题目考查了函数的递归调用,当执行调用语句n=fun(3)时,返回n=fun(2)+1,再执行fun(2),返回n=fun(1)+1+1,而fun(1)等于1,所以最后n的值等于3。而函数fun总共被调用了3次。即fun(3),fun(2),fun(1)。5、有以下程序(strcat函数用以连接两个字符串)#include<stdio.h>#include<string.h>main(){chara[20]="ABCD\0EFG\0",b[]="IJK";strcat(a,b);printf("%s\n",a);}程序运行后的输出结果是A、ABCDE\0FG\0IJKB、ABCDIJKC、IJKD、EFGIJK标准答案:B知识点解析:在字符串中字符’\0’表示字符串的结束标志,所以字符串a和b相连接的结果为ABCDIJK。6、有以下程序intfun(intn){if(n==1)return1;elsereturn(n+fun(n-1));}main(){intx;scanf("%d",&x);x=fun(x);printf("%d\n",x);}执行程序时,给变量x输入10,程序的输出结果是A、54B、65C、45D、55标准答案:D知识点解析:在C语言中函数可以递归调用,即直接或间接地自己调用自己。本题在函数intfun(intn)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。因而在主函数中调用x=fun(x)时,当输入10赋给变量x时,递归调用的过程为:fun(10)=10+fun(9)=10+9+fun(8)=10+9++8+fun(7)=10+9++8+7+fun(6)=10+9++8+7+6+fun(6)=10+9++8+7+6+5+fun(4)=10+9++8+7+6+5+4+fun(3)=10+9++8+7+6+5+4+3+fun(2)=10+9++8+7+6+5+4+3+2+fun(1)=10+9++8+7+6+5+4+3+2+1=557、有以下程序fun(intx){intp;if(x==0‖x==1)return(3);p=x-fun(x-2);returnp;}main(){printf("%d\n",fun(7));}执行后的输出结果是A、3B、7C、0D、2标准答案:D知识点解析:因为在函数fun(intx)中,如果参数x等于0或1时,返回值3。否则p=x-fun(x-2)这是一个递归函数,所以在主函数调用fun(7)时,其过程为:“fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7-5=2”,所以最后的输出结果为2。8、若有以下程序intf(inta[],intn){if(n>1){intt;t=f(a,n-1);returnt>a[n-1]?t:a[n-1];}elsereturna[0];}main(){inta[]={8,2,9,1,3,6,4,7,5};printf("%d\n",f(a,9));}则程序的输出结果是A、9B、1C、8D、5标准答案:A知识点解析:主函数中调用f(a,9),递归函数的调用过程如下:f(a,9)?f(a,8)?f(a,7)?f(a,6)?f(a,5)?f(a,4)?f(a,3)?f(a,2)?f(a,1),f(a,1)得到返回值为a[0],值为8,递归过程开始回归,回归过程描述如下:8>a[1],返回8?8>a[2]不成立,返回a[2]的值为9……因此函数f的主要功能为计算数组中的最大值。主函数中输出最大值为9。9、以下叙述中正确的是A、只有全局变量才有自己的作用域,函数中的局部变量没有作用域B、只要是用户定义的标识符,都有一个有效的作用域C、只有在函数内部定义的变量才是局部变量D、局部变量不能被说明为static标准答案:A知识点解析:在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,也是全局变量。全局变量可以为源文件中其他函数所共用,其作用域为从定义变量的位置开始到源文件结束。因此只要用户定义的标识符,全部都有作用域。局部变量可以说明为auto、register以及static。10、以下叙述中正确的是A、对于变量而言,“定义”和“说明”这两个词实际上是同一个意思B、在复合语句中不能定义变量C、全局变量的存储类别可以是静态类D、函数的形式参数不属于局部变量标准答案:C知识点解析:用static说明符说明全局变量时,此变量可称作静态全局变量。静态全局变量只限于本编译单位使用,不能被其他编译单位所引用。在一个函数内部定义的变量(包括形参)是局部变量,它只在本函数范围内有效。不同函数中可以使用相同名字的局部变量,它们代表不同的对象,互不影响。在函数内部复合语句中也可以定义变量,这些变量都是局部变量,只在本复合语句中有效。11、有以下程序intd=1;voidfun(intp){intd=5;d+=p++;printf("%d",d);}main(){inta=3;fun(a);d+=a++;printf("%d\n",d);}程序的输出结果是A、96B、94C、84D、85标准答案:C知识点解析:代码考查点为全局变量和局部变量的同名问题,若全局变量和某个函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量,与同名的全局变量不发生任何关系。主函数执行fun(3)时候,执行调用函数fun,使用局部变量d=5,执行d+=p++,相当于d=d+(p++),得到d的值为8,输出。函数调用结束,转到主函数,继续执行d+=a++,此时d为全局变量,执行语句以后,d值为4。12、有以下程序#include<stdio.h>inta=1,b=2;voidfun1(inta,intb){printf(“%d%d”,a,b);}voidfun2(){a=3;b=4;}main(){fun1(5,6);fun2();printf("%d%d\n",a,b);}程序运行后的输出结果是A、3456B、1256C、5612D、5634标准答案:D知识点解析:函数fun1()的作用是输出局部变量a和b的值,在主函数中执行fun1(5,6)的结果是输出5,6;函数fun2()的作用是给变量a和b分别赋值3,4;执行fun2()的作用是输出3,4。13、在一个C源程序文件中所定义的全局变量,其作用域为A、由具体定义位置和extern说明来决定范围B、所在程序的全部范围C、所在函数的全部范围D、所在文件的全部范围标准答案:A知识点解析:全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。在同一编译单位内用extern说明符扩展全局变量的作用域(当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序:该变量是一个已在外部定义了的全局变量,已经分配了存储单元,不需要再为它分配存储单元。这时全局变量的作用域从extern说明处起,延伸到该函数末尾)。当一个程序由多个编译单位构成,并且在每个文件中均需要引用同一个全局变量,这时只在其中一个文件中定义所有的全局变量,而在其他用到这些全局变量的文件中用extern对这些变量进行说明。14、有以下程序voidfun2(chara,charb){printf("%c%c",a,b);}chara=’A’,b=’B’;voidfun1(){a=’C’;b=’D’;}main(){fun1();printf("%c%c",a,b);fun2(’E’,’F’);}程序的运行结果是A、ABEFB、CDEFC、ABCDD、CDAB标准答案:B知识点解析:在fun1()函数之前定义了全局字符变量a和b。这两个变量的作用域是从其定义处到整个程序结束。在fun1()函数之内定义了两个变量a和b,并且分别初始化为字符’C’和’D’。在C语言中,若全局变量和某个函数中的局部变量同名,则在该函数中此全局变量被屏蔽,在该函数内访问的是局部变量,与同名的全局变量不发生任何关系。所以在主函数中,执行fun1()后,变量a、b的值分别等于’C’、’D’,打印输出CD,接着执行fun2(’E’,’F’)语句,变量a、b的值变为’E’、’F’并输出。15、有以下程序#include<stdio.h>fun(inta,intb){intstaticm=0,i=2;i=i+m+1;m=i+a+b;returnm;}main(){intk=4,m=1,p;p=fun(k,m);printf("%d,",p);p=fun(k,m);printf("%d\n",p);}程序运行后的输出结果是A、8,17B、7,16C、8,8D、7,17标准答案:B知识点解析:本题考查了静态变量以及局部变量的同名问题。主函数中调用fun函数两次,第一次调用fun(4,1),形参a和b接收以后,i值为3,m的值为8,调用结束返回8存放到p中并且输出p的值为8,除了静态变量m和i,变量a,b撤销。第二次调用fun(4,1),接收实参值以后,i为3+8+1,而m为12+4+1,即输出函数值17。16、有以下程序#include<stdio.h>func(intn){staticintnum=1;num=num+n;printf("%d",num);}voidmain(){func(3);func(4);printf("\n");}程序运行后的输出是A、45B、35C、48D、34标准答案:C知识点解析:在函数func(intn)中定义了局部静态变量num,,其初始值等于1,所以在主函数中执行func(3),输出4,此时静态变量num的值等于4,当退出函数func(3)时,其值不会丢失,所以当在执行func(4)时,输出8。17、有以下程序fun(intx,inty){staticintm=0,i=2;i+=m+1;m=i+x+y;returnm;}main(){intj=1,m=1,k;k=fun(j,m);printf("%d,",k);k=fun(j,m);printf("%d\n",k);}执行后的输出结果是A、5,5B、5,11C、11,11D、11,5标准答案:B知识点解析:子函数fun(intx,inty),将变量m和i声明为局部静态变量,因此第1次调用主函数后,局部静态变量m和i的值为5和3,第1次函数调用结束时,它们的值不释放保持不变,所以第2次调用时,局部静态变量m和i的初始值分别为5和3,即在执行“i+=m+1”时,i的值为9,因此最终m的值为11。18、在C语言中,只有在使用时才占用内存单元的变量,其存储类型是A、extern和registerB、auto和staticC、static和registerD、auto和register标准答案:D知识点解析:在C语言中,动态变量(auto)存储在内存中的动态存储区,在程序运行中,只有当调用变量所在的函数时,系统才临时给变量分配内存单元;全局变量(extern)一经定义,系统为其分配固定的内存单元;静态变量(static),编译系统为其分配固定的存储空间;寄存器变量(register)不保存在内存上,而是直接存储在CPU的寄存器中。19、有以下程序#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=3;i++)s*=fun();printf("%d\n",s);}程序运行后的输出结果是A、0B、10C、30D、64标准答案:D知识点解析:本题考查了静态局部变量,该局部变量的值在函数调用结束后如果不消失而保留原值。函数fun的功能返回2的乘方,主函数fun函数调用3次,因此第一次s累乘2,第二次累乘4,第三次累乘8,即为2*4*8,值为64。20、有以下程序#include<stdio.h>intf(intn);main(){inta=3,s;s=f(a);s=s+f(a);printf("%d\n",s);}intf(intn){staticinta=1;n+=a++;returnn;}程序运行后的输出结果是A、9B、8C、7D、10标准答案:A知识点解析:在主函数中第一次调用f(a)时,得到变量s的值等于4,在第二次调用f(a)时,在子函数f中由于变量a是一个局部静态变量,所以这次其值等于2,因而在主函数中第二次调用f(a)后,其返回值等于5,最后变量s的值等于9。21、有以下程序#include<stdio.h>intfun(){staticintx=1;x+=1;returnx;}main(){inti,s=1;for(i=1;i<=5;i++)s+=fun();printf("%d\n",s);}程序运行后的输出结果是A、11B、21C、6D、120标准答案:B知识点解析:这道试题主要考查了局部静态变量的应用。在函数fun()中定义了局部静态变量整型x,其初值等于1,在主函数中循环执行5次,第一次变量s的值等于3,变量x的值等于2,第二次变量s的值等于6,变量x的值等于3,第三次变量s的值等于10,变量x的值等于4,第四次变量s的值等于15,变量x的值等于5,第五次变量s的值等于21,变量x的值等于6。22、有以下程序intfun(intx[],intn){staticintsum=0,i;for(i=0;i<n;i++)sum+=x[i];returnsum;}main(){inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;s=fun(a,5)+fun(b,4);printf("%d\n",s);}A、50B、45C、60D、55标准答案:C知识点解析:在函数intfun(intx[],intn)的定义中,变量sum使用了static修饰符,这说明了变量sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储区中占据着永久的存储单元。即使退出函数之后,下次再进入该函数时,静态局部变量继续使用原来存储单元中原来的值。函数intfun(intx[],intn)的功能是求出数组x[]各个元素的和。所以在主函数中,调用函数Fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用Fun(b,4)后,变量sum=15+6+7+8+9=45,所以s=15+45=60。23、有以下程序intf(intm){staticintn=0;n+=m;returnn;}main(){intn=0;printf("%d,",f(++n));printf("%d\n",f(n++));}程序运行后的输出结果是A、1,1B、1,2C、2,3D、3,3标准答案:B知识点解析:由于在函数f中,变量n为静态局部变量,所以在主函数中第一次调用函数f后,变量n的值等于1,当第二调用函数f时,在函数f的内部静态局部变量n的值仍然保留等于1,所以返回函数值等于2。24、有以下程序#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf("%d\n",s);}程序运行后的输出结果是A、4B、1C、0D、8标准答案:A知识点解析:在子函数fun()中定义局部静态变量x,其初值等于1,然后再把其值扩大1倍后返回。在主函数中执行for循环语句2次,调用函数fun()两次,所以变量s的值等于4。这里要强调的一点是当函数fun()执行完毕后,局部静态变量x的值不会丢失,仍然有效。25、有下列程序:inta=4;intf(intn){intt=0;staticinta=5;if(n%2){inta=6;t+=a++;}else{inta=7;t+=a++;}returnt+a++;}main(){ints=a,i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);}程序运行后的输出结果是A、28B、24C、32D、36标准答案:A知识点解析:程序中定义了全局整型变量a=4。在intf(intn)函数中定义了局部静态整型变量并进行了初始化即staticinta=5。在intf(intn)函数中对n是否是偶数进行判断,如果n是奇数,则函数的返回值为11,局部静态整型变量a=6;如果n是偶数,则函数的返回值为12,局部静态整型变量a=6。所以在main()函数中循环首先执行s+=f(0)语句,而f(0)返回值12,所以第一次循环结束s的值等于4+12=16;第二次开始执行f(1)时,在f(1)中执行if(n%2){inta=6;t+=a++;}和returnt+a++;这两条语句,这时t=6,a=6(静态局部变量第一次循环后其值加1值不释放,执行第二次循环量,其值仍有效),所以f(1)的返回值等于12。再在主函数中执行s+=f(1)语句,即16+12=28。26、有以下程序voidfun(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}main(){intk[10]={1,2,3,4,5,6,7,8,9,10},i;fun(k,5);for(i=2;i<8;i++)printf("%d",k[i]);printf("\n");}程序的运行结果是A、876543B、321678C、1098765D、345678标准答案:A知识点解析:函数fun(inta[],intn)的功能是实现整型数组a[]元素的逆置操作。在主函数中当执行fun(k,5)时,对k[10]中的子数组k[5]={1,2,3,4,5}的首尾元素进行逆置,此时k[10]={5,4,3,2,1,6,7,8,9,10}。所在循环语句中输出从第2~7个数组元素时,其值分别为321678。27、下列定义数组的语句中,正确的是A、intN=10;intx[N];B、#defineN10intx[N];C、intx[0..10];D、intx[];标准答案:B知识点解析:数组说明的一般形式为:类型说明符数组名[常量表达式];其中类型说明符可以是任一种基本数据类型或构造数据类型,数组名是定义的数组标识符。常量表达式表示数据元素的个数,也就是数组的长度,必须是整型常量。28、有以下程序#include<stdio.h>voidmain(){inta[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]--;}break;case1:a[i]=0;}for(i=0;i<4;i++)printf("%d",a[i]);printf("\n");}程序运行后的输出结果是A、2050B、3344C、3040D、0304标准答案:C知识点解析:在主函数的for循环语句中,当循环变量i的值等于0,2时,执行switch中的case0语句,分别对数组元素a[0]和a[2]加1和减1,所以a[0]的值等于3,a[2]等于4。当循环变量i的值等于1,3时,执行switch中的case1语句,把数组元素a[1]和a[3]的值赋为0。所以输出数组a的元素,其结果为3040。国家二级C语言(函数和数组)机试模拟试卷第2套一、选择题(本题共28题,每题1.0分,共28分。)1、有以下程序#includeintfun(intx){intp;if(x==0||x==1)return(3);p=x-fun(x-2);return(p);)main(){printf("96d\n",fun(9));}程序运行后的输出结果是A、5B、9C、4D、7标准答案:D知识点解析:函数fun的士要功能是:初值x的值为9,因此fun(9)=9-fun(7)=9-(7-(5-(3.3))),因此答案为7。2、有以下程序#includeintfun(intn){inta;if(n==1)return1;a=n+fun(n-1);return(a);)main()(printf("%d\n",fun(5));}程序的输出结果是A、14B、10C、15D、9标准答案:C知识点解析:函数fun为递归定义的函数,当调用fun(5)→5+fun(4)→5+4+fun(3)→5+4+3+fun(2)→5+4+3+2+fun(1),因此最后的结果为15。3、有以下程序#includeintfun(inta,intb){returna+b;)main(){intx=6,y=7,z=8,r;r=fun(fun(x,y),z--);printf("%d\n",r);}程序运行后的输出结果是A、15B、21C、20D、31标准答案:B知识点解析:本题考查了函数的调用,函数fun功能为求两个数据的和。主函数中表达式r=fun(fun(x,y),z--),首先计算内层调用fun(x,y),计算结果为13.然后外层调用fun(13,8),结果为21。4、以下选项中函数形参不是指针的是A、fun(int&p){…}B、fun(inta[10]){…}C、fun(int*a){…}D、fun(intp[]){…}标准答案:A知识点解析:C语言中形参数组是指针变量,其数组中元素的个数由传递的实参数组决定,因此可以存定义的时候,不给出元素个数的说明,因此选项B)和D)彤参均为指针变量,选项A)的定义在C语言中不存在的。5、设有如下函数定义intfun(intk){if(k<1)return0;elseif(k==1)return1;elsereturnfun(k-1)+1;}若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是A、2B、4C、3D、5标准答案:C知识点解析:这道题目考查了函数的递归调用,当执行调用语句n=fun(3)时,返回n=fun(2)+1,冉执行fun(2),返同n=fun(1)+1+1,而fun(1)等于1,所以最后n的值等十3。而函数fun总共被调用了3次。即fun(3),fun(2),fun(1)。6、有以下程序#includeintf(intx){inty;if(x==0||x==1)return(3);y=x*x-f(x-2);returny;}main(){intz;z=f(3);printf("%d\n",z);}程序的运行结果是A、9B、0C、6D、8标准答案:C知识点解析:主函数调用f()函数,将实参3传递给x,进行if条件语句的判断不成立,接着执行y=3*3-f(1),再执行f(1),而f(1)满足if条件语句,所以f(1)的值为3,代入y=3*3-f(1)=9-3=6。7、有以下程序(strcat函数用以连接两个字符串)#inolude#includemain(){chara[20]="ABCD\0EFG\0",b[]="TJK";streat(a,b);printf("%s\n",a);}程序运行后的输出结果是A、ABCDE\0FG\0IJKB、ABCDIJKC、IJKD、EFGIJK标准答案:B知识点解析:在字符串中字符’\0’表示字符串的结束标忐,所以字符串a和b相连接的结果为ABCDIJK。8、有以下程序intfun(intn){if(n==1)return1;elsereturn(n+fun(n-1));}main(){intx;scanf("%d",&x);x=fun(x);printf("%d\n",x);}执行程序时,给变量X输入10,程序的输出结果是A、54B、65C、45D、55标准答案:D知识点解析:在C语言中函数可以递归调用,即直接或间接地自己调用自己。本题在函数intfun(intn)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。因而在主函数中调用x=fun(x)时,当输入10赋给变量x时,递归调用的过程为:fun(10)=10+fun(9)=10+9+fun(8)=10+9++8+fun(7)=10+9++8+7+fun(6)=10+9++8+7+6+fun(6)=0+9++8+7+6+5+fun(4)=10+9++8+7+6+5+4+fun(3)=10+9++8+7+6+5+4+3+fun(2)=10+9++8+7+6+5+4+3+2+fun(1)=10+9++8+7+6+5+4+3+2+l=559、有以下程序fun(intx){intp;if(x==0‖x==1)return(3);p=x-fun(x-2);returnp;}main(){printf("%d\n",fun(7));}执行后的输出结果是A、3B、7C、0D、2标准答案:D知识点解析:因为在函数fun(intx)中,如果参数x等于0或1时,返回值3。否则p=x-fun(x-2)这是一个递归函数,所以在主函数调用fun(7)时,其过程为:“fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7-5=2”,所以最后的输出结果为2。10、若有以下程序intf(inta[],intn){if(n>1){intt;t=f(a,n-1);returnt>a[n-1]?t:a[n-1];}elsereturna[0];}main(){inta[]={8,2,9,1,3,6,4,7,5};printf("%d\n",f(a,9));}则程序的输出结果是A、9B、1C、8D、5标准答案:A知识点解析:主函数中调用f(a,9),递归函数的调用过程如下:f(a,9)→f(a,8)→f(a,7)→f(a,6)→f(a,5)→f(a,4)→f(a,3)→f(a,2)→f(a,1),f(a,1)得到返回值为a[0],值为8,递归过程开始回归,回归过程描述如下:8>a[1],返回8→8>a[2]不成立,返回a[2]的值为9…因此函数f的主要功能为计算数组中的最大值。主函数中输出最大值为9。11、以下叙述中正确的是A、只有全局变量才有自己的作用域,函数中的局部变量没有作用域B、只要是用户定义的标识符,都有一个有效的作用域C、只有在函数内部定义的变量才是局部变量D、局部变量不能被说明为static标准答案:B知识点解析:存函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,也是全局变量。全局变量可以为源文件中其他函数所共用,其作用域为从定义变量的位置开始到源文件结束。因此只要用户定义的标识符,全部都有作用域。局部变量可以说明为auto、register以及stoic。12、以下叙述中正确的是A、对于变量而言,“定义”和“说明”这两个词实际上是同一个意思B、在复合语句中不能定义变量C、全局变量的存储类别可以是静态类D、函数的形式参数不属于局部变量标准答案:C知识点解析:用static说明符说明全局变量时,此变量可称作静态全局变量。静态全局变量只限于本编译单位使用,不能被其他编译单位所引用。在一个函数内部定义的变量(包括形参)是局部变量,它只在本函数范围内有效。不同函数中可以使用相同名字的局部变量,它们代表不同的对象,互不影响。在函数内部复合语句中也可以定义变量,这些变量都是局部变量,只在本复合语句中有效。13、有以下程序intd=1;voidfun(intp){intd=5;d+=p++;printf("%d",d);}main(){inta=3;fun(a);d+=a++;printf("%d\n",d);}程序的输出结果是A、96B、94C、84D、85标准答案:C知识点解析:代码考查点为全局变量和局部变量的同名问题,若全局变量和某个函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量,与同名的全局变量不发生任何关系。主函数执行fun(3)时候,执行调用函数fun,使用局部变量d=5,执行d+=p++,相当于d=d+(p++),得到d的值为8,输出。函数调用结束,转到主函数,继续执行d+=a++,此时d为全局变最,执行语句以后,d值为4。14、有以下程序#inoludeinta=1,b=2;voidfun1(inta,intb){printf("%d%d",a,b);}voidfun2(){a=3;b=4;)main(){fun1(5,6);fun2();printf("%d%d\n",a,b);}程序运行后的输出结果是A、3456B、1256C、5612D、5634标准答案:D知识点解析:函数fun1()的作用是输出局部变量a和b的值,在主函数中执行fun1(5,6)的结果是输出5,6;函数fun2()的作用是给变最a和b分别赋值3,4;执行fun2()的作用是输出3,4。15、在一个C源程序文件中所定义的全局变量,其作用域为A、由具体定义位置和extern说明来决定范围B、所在程序的全部范围C、所在函数的全部范围D、所在文件的全部范围标准答案:A知识点解析:全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。在同一编译单位内用extern说明符扩展全局变量的作用域(当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序:该变量是一个已在外部定义了的全局变量,已经分配了存储单元,不需要再为它分配存储单元。这时全局变量的作用域从extern说明处起,延伸到该函数末尾)。当一个程序由多个编译单位构成,并且在每个文件中均需要引用同一个全局变量,这时只在其中一个文件中定义所有的全局变量,而在其他用到这些全局变量的文件中用extern对这些变量进行说明。16、有以下程序voidfun2(chara,charb){printf("%c%c",a,b);}chara=’A’,b=’B’;voidfun1(){a=’C’;b=’D’;)main(){fun1();printf("%c%c",a,b);fun2(’E’,’F’);}程序的运行结果是A、ABEFB、CDEFC、ABCDD、CDAB标准答案:B知识点解析:在fun1()函数之前定义了全局字符变量a和b。这两个变量的作用域是从其定义处到整个程序结束。在fun1()函数之内定义了两个变量a和b,并且分别初始化为字符’C’和’D’。在C语言中,若全局变量和某个函数中的局部变量同名,则在该函数中此全局变量被屏蔽,在该函数内访问的是局部变量,与同名的全局变量不发生任何关系。所以在主函数中,执行fun1()后,变量a、b的值分别等于’C’、’D’,打印输出CD,接着执行‘fun2(’E’,’F’)语句,变量a、b的值变为’E’、F并输出。17、有以下程序#includefun(inta,intb){intstaticm=0,i=2;i=i+m+1;m=i+a+b;returnm;)main()(intk=4,m=1,p;p=fun(k,m);printf("%d,",p);p=fun(k,m);printf("%d\n",p);}程序运行后的输出结果是A、8,17B、7,16C、8,8D、7,17标准答案:A知识点解析:本题考查了静态变量以及局部变量的同名问题。主函数中调用fun函数两次,第一次调用fun(4,1),形参a和b接收以后,i值为3,m的值为8,调用结束返回8存放到p中并且输出p的值为8,除了静态变量m和i,变量a,b撤销。第二次调用fun(4,1),接收实参值以后,i为3+8+1,而m为12+4+1,即输出函数值17。18、有以下程序#includefunc(intn){staticintnum=1;num=num+n;print;f("%d",num);}voidmain(){func(3);func(4);printf("\n");)程序运行后的输出是A、45B、35C、48D、34标准答案:C知识点解析:在函数func(intn)中定义了局部静态变量num,,其初始值等于1,所以在主函数中执行func(3),输出4,此时静态变量num的值等于4,当退出函数func(3)时,其值不会丢失,所以当在执行func(4)时,输出8。19、有以下程序fun(intx,inty){staticintm=0,i=2;i+=m+1;m=i+x+y;returnm;}main(){intj=1,m=1,k;k=fun(j,m);printf("%d,",k);k=fun(j,m);printf("%d\n",k);}执行后的输出结果是A、5,5B、5,11C、11,11D、11,5标准答案:B知识点解析:子函数fun(intx,inty),将变量m和i声明为局部静态变量,因此第1次调用主函数后,局部静态变量m和i的值为5和3,第1次函数调用结束时,它们的值不释放保持不变,所以第2次调用时,局部静态变量m和i的初始值分别为5和3,即在执行“i+=m+1”时,i的值为9,因此最终m的值为l]。20、有以下程序#includeintfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=3;i++)s*=fun();printf("%d\n",s);}程序运行后的输出结果是A、0B、10C、30D、64标准答案:D知识点解析:本题考查了静态局部变量,该局部变量的值在函数调用结束后如果不消失而保留原值。函数fun的功能返回2的乘方,主函数fun函数调用3次,因此第一次s累乘2,第二次累乘4,第三次累乘8,即为2*4*8,值为64。21、有以下程序#includeintf(intn);main(){inta=3,s;s=f(a);s=s+f(a);printf("%d\n",s);)intf(intn){staticinta=1;n+=a++;returnn;}程序运行后的输出结果是A、9B、8C、7D、10标准答案:A知识点解析:在主函数中第一次调用f(a)时,得到变量s的值等于4,在第二次调用f(a)时,在子函数f中由于变量a是一个局部静态变量,所以这次其值等于2,因而在主函数中第二次调用f(a)后,其返回值等于5,最后变量s的值等于9。22、有以下程序#includeintfun(){staticintx=1;x+=1;returnx;}main(){inti,s=1;for(i=1;i<=5;i++)s+=fun();printf("%d\n”,s);}程序运行后的输出结果是A、11B、21C、6D、120标准答案:B知识点解析:这道试题主要考查了局部静态变量的应用。在函数fun()中定义了局部静态变量整型x,其初值等于1,在主函数中循环执行5次,第一次变量s的值等于3,变量x的值等于2,第二次变量s的值等于6,变量x的值等于3,第三次变量s的值等于10,变量x的值等于4,第四次变量s的值等于15,变量x的值等于5,第五次变量s的值等于21,变量x的值等于6。23、有以下程序intfun(intx[],intp){staticintsum=0,i;for(2=0;iA、50B、45C、60D、55标准答案:C知识点解析:在函数intfun(intx[],intn)的定义中,变量sum使用了static修饰符,这说明了变量sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储区中占据着永久的存储单元。即使退出函数之后,下次再进入该函数时,静态局部变量继续使用原来存储单元中原来的值。函数intfun(intx[],intn)的功能是求出数组x[]各个元素的和。所以在主函数中,调用函数Fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用Fun(b,4)后,变量sum=15+6+7+8+9=45,所以s=15+45=60。24、有以下程序intf(intm){staricintn=0;n+=m;returnn;)main(){intn=0;printf("%d,",f(++n));printf("%d\n",f(n++));}程序运行后的输出结果是A、1,1B、1,2C、2,3D、3,3标准答案:B知识点解析:由于在函数f中,变量n为静态局部变量,所以在主函数中第一次调用函数f后,变量n的值等于1,当第二调用函数f时,在函数f的内部静态局部变量n的值仍然保留等于1,所以返回函数值等于2。25、有以下程序#includeintfun(){static~ntx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf("%d\n",s);}程序运行后的输出结果是A、4B、1C、0D、8标准答案:A知识点解析:在子函数fun()中定义局部静态变量x,其初值等于1,然后再把其值扩大1倍后返回。在主函数中执行for循环语句2次,调用函数fun()两次,所以变量s的值等于4。这里要强调的一点是当函数fun()执行完毕后,局部静态变量x的值不会丢失,仍然有效。26、有下列程序:inta=4;intf(intn){intt=0;staticinta=5;if(n%2){inta=6,t+=a++,)else{inta=7;t+=a++;)returnt+a++;}main(){ints=a,i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);}程序运行后的输出结果是A、28B、24C、32D、36标准答案:A知识点解析:程序中定义了全局整型,变量a=4。在intf(intn)函数中定义了局部静态整型变量并进行了初始化即staticinta=5。在inlf(intn)函数中对n是否是偶数进行判断,如果n是奇数,则函数的返同值为11,局部静念整型变量a=6;如果n是偶数,则函数的返回值为12,局部静态整型变量a=6。所以在main()函数中循环首先执行s+=f(0)语句,而f(0)返回值12,所以第一次循环结束s的值等于4+12=16;第二次开始执行f(1)时,在f(1)中执行if(n%2){inta=6;t+=a++;}和returnt++a++;这两条语句,这时t=6,a=6(静态局部变量第一次循环后其值加1值不释放,执行第二次循环量,其值仍有效),所以f(1)的返回值等于12。再在主函数中执行s+=f(1)语句,即16+12=28。27、有以下程序voidfun(inta[],intn){inti,t;for(i=0;iA、876543B、321678C、1098765D、345678标准答案:B知识点解析:函数fun(inta[],intn)的功能是实现整型数组a[]元素的逆置操作。在主函数中当执行fun(k,5)时,对k[10]中的了数组k[5]={1,2,3,4,5}的首尾元素进行逆置,此时k[10]={5,4,3,2,1,6,7,8,9,10}。所在循环语句中输出从第2~7个数组元素时,其值分别为321678。28、下列定义数组的语句中,正确的是A、intN=10;intx[N];B、#defineN10intx[N];C、intx[0..10]:D、intx[];标准答案:B知识点解析:数组说明的一般形式为:类型说明符数组名[常量表达式];其中类型说明符可以是任一种基本数据类型或构造数据类型,数组名是定义的数组标识符。常量表达式表示数据元素的个数,也就是数组的长度,必须是整型常量。国家二级C语言(函数和数组)机试模拟试卷第3套一、选择题(本题共29题,每题1.0分,共29分。)1、有以下程序#includeintfun(intx){intp;if(x==0‖x==1)return(3);P=x-fun(x-2);return(p);}main(){printf("%d\n",fun(9));}程序运行后的输出结果是A、5B、9C、4D、7标准答案:D知识点解析:函数fun的主要功能是:初值x的值为9,因此fun(9)=9-fun(7)=9-(7-(5-(3-3))),因此答案为7。2、有以下程序#includeintfun(intn){inta:if(n==1)return1;a=n+fun(n-1);return(a);}main(){printf("%d\n",fun(5));}程序的输出结果是A、14B、10C、15D、9标准答案:C知识点解析:函数fun为递归定义的函数,当调用fun(5)→5+fun(4)→5+4+fun(3)→5+4+3+fun(2)→5+4+3+2+fun(1),因此最后的结果为15。3、有以下程序#includeimfun(inta,intb){returna+b;}main(){intx=6,y=7,z=8,r;r=fun(fun(x,y),z--);printf("%d\n",r);}程序运行后的输出结果是A、15B、21C、20D、31标准答案:B知识点解析:本题考查了函数的调用,函数fun功能为求两个数据的和。主函数中表达式r=fun(fun(x,y),z--),首先计算内层调用fun(x,y),计算结果为13,然后外层调用fun(13,8)。结果为21。4、以下选项中函数形参不是指针的是A、fun(int&p){…}B、fun(inta[10]){…}C、fun(int*a){…)D、fun(intP[]){…}标准答案:A知识点解析:C语言中形参数组是指针变量,其数组中元素的个数由传递的实参数组决定,因此可以在定义的时候,不给出元素个数的说明,因此选项B和D)形参均为指针变量,选项A的定义在C语言中不存在的。5、设有如下函数定义intfun(intk){if(k<1)returnO;elseif(k==1)return1;elsereturnfun(k-1)+1;}若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是A、2B、4C、3D、5标准答案:C知识点解析:这道题目考查了函数的递归调用,当执行调用语句n=fun(3)时,返回n=fun(2)+1,再执行fun(2),返回n=fun(1)+1+1,而fun(1)等于1,所以最后n的值等于3。而函数fun总共被调用了3次。即fun(3),fun(2),fun(1)。6、有以下程序#includeintflintx){inty;if[x==0‖x==1)retulm(3);y=x*x-f(x-2);returny;}main(){intz:z=f(3);printf("%d\n",z);}程序的运行结果是A、9B、0C、6D、8标准答案:C知识点解析:主函数调用坟)函数,将实参3传递给x,进行if条件语句的判断不成立,接着执行y=3*3-f(1),再执行f(1),而f(1)满足if条件语句,所以f(1)的值为3,代入y=3*3一f(1)=9—3=6。7、有以下程序(strcat函数用以连接两个字符串)#include#includemain(){chara[20]="ABCD\0EFG\0",b[]="IJK";strcat(a,b);printf("%s\n",a);}程序运行后的输出结果是A、ABCDE\OFG\OIJKB、ABCDIJKC、IJKD、EFGIJK标准答案:B知识点解析:在字符串中字符’\0’表示字符串的结束标志,所以字符串a和b相连接的结果为ABCDUK。8、有以下程序intfun(intn){if(n==1)return1;elsereturn(n+fun(n-1));}main(){intx;scanf("%d",&x);x=fun(x);printf("%d\n",x);}执行程序时,给变量x输入10,程序的输出结果是A、54B、65C、45D、55标准答案:D知识点解析:在C语言中函数可以递归调用,即直接或间接地自己调用自己。本题在函数intfun(intn)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。因而在主函数中调用x=fun(x)时,当输入10赋给变量x时,递归调用的过程为:fun(10)=10+fun(9)=10+9+fun(8)=10+9++8+fun(7)=10+9++8+7+fun(6)=10++98+7+6+fun(6)=10+9++8+7+6+5+fun(4)=10+9++8+7+6+5+4+fun(3)=10+9++8+7+6+5+4+3+fun(2)=10+9++8+7+6+5+4+3+2+fun(1)=10+9++8+7+6+5+4+3+2+1=559、有以下程序fun(intx){intp;if(x=--0‖x==1)return(3);p=x-fun(x-2);returnp;}main(){printf("%d\n",fin(7));}执行后的输出结果是A、3B、7C、0D、2标准答案:D知识点解析:因为在函数fun(intx)中,如果参数x等于0或1时,返回值3。否则p=x-fun(x.2)这是一个递归函数,所以在主函数调用fun(7)时,其过程为:“fun(7)=7-fun(5)=7-(5-fun(3))=7-<5-(3-fun(1)))=7-(5-(3-3))=7-5=2”,所以最后的输出结果为2。10、若有以下程序intf(inta[],intn){if(n>1){intt;t=f(a,n-1);returnt>a[n-1]?t:a[n-1];}elsereturna[0];}main(){inta[]={8,2,9,1,3,6,4,7,5};printf("%dEn",f(a,9));}则程序的输出结果是A、9B、1C、8D、5标准答案:A知识点解析:主函数中调用f(a,9),递归函数的调用过程如下:f(a,9)→f[a,8)→f(a,7)→f(a,6)→f(a,5)→f(a,4)→f(a,3)→f(a,2)→f(a,1),f(a,1)得到返回值为a[0],值为8,递归过程开始回归,回归过程描述如下:8>a[1],返回8→8>a[2]不成立,返回a[2]的值为9……因此函数f的主要功能为汁算数组中的最大值。主函数中输出最大值为9。11、以下叙述中正确的是A、只有全局变量才有自己的作用域,函数中的局部变量没有作用域B、只要是用户定义的标识符,都有一个有效的作用域C、只有在函数内部定义的变量才是局部变量D、局部变量不能被说明为static标准答案:B知识点解析:在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,也是全局变量。全局变量可以为源文件中其他函数所共用,其作用域为从定义变量的位置开始到源文件结束。因此只要用户定义的标识符,全部都有作用域。局部变量可以说明为auto、register以及static。12、以下叙述中正确的是A、对于变量而言,“定义”和“说明”这两个词实际上是同一个意思B、在复合语句中不能定义变量C、全局变量的存储类别可以是静态类D、函数的形式参数不属于局部变量标准答案:C知识点解析:用static说明符说明全局变量时,此变量可称作静态全局变量。静态全局变量只限于本编译单位使用,不能被其他编译单位所引用。在个函数内部定义的变量(包括形参)是局部变量,它只在本函数范围内有效。不同函数中可以使用相同名字的局部变量,它们代表不同的对象,互不影响。在函数内部复合语句中也可以定义变量,这些变量都是局部变量.只在本复合语句中有效。13、有以下程序intd=1;voidfun(intP){intd=5:d+=p++;printf("%d",d);}main(){inta=3:fun(a);d+=a++:printf("%d\n",d);}程序的输出结果是A、96B、94C、84D、85标准答案:C知识点解析:代码考查点为全局变量和局部变量的同名问题,若全局变量和某个函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量,与同名的全局变量不发生任何关系。主函数执行fun(3)时候,执行调用函数fun,使用局部变量d=5,执行d+=p++,相当于d=d+(p++),得到d的值为8,输出。函数调用结束,转到主函数,继续执行d+=a++,此时d为全局变量,执行语句以后,d值为4。14、有以下程序#includeinta=1,b=2;voidfunl(inta,intb){printf("%d%d",a,b);}voidfun2(){a=3;b=4;}main(){funl(5,6);fun20;printf(”%d%dkn",a,b);}程序运行后的输出结果是A、3456B、1256C、5612D、5634标准答案:D知识点解析:函数fun1()的作用是输出局部变量a和b的值,在主函数中执行fun1(5,6)的结果是输出5,6:函数fun2()的作用是给变量a和b分别赋值3,4;执行。fun2()的作用是输出3,4。15、在一个C源程序文件中所定义的全局变量,其作用域为A、由具体定义位置和extern说明来决定范围B、所在程序的全部范围C、所在函数的全部范围D、所在文件的全部范围标准答案:A知识点解析:全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。在同一编译单位内用extern说明符扩展全局变量的作用域(当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序:该变量是一个已在外部定义了的全局变量,已经分配了存储单元,不需要再为它分配存储单元。这时全局变量的作用域从extern说明处起,延伸到该函数末尾)。当一个程序由多个编译单位构成,并且在每个文件中均需要引用同一个全局变量,这时只在其中一个文件中定义所有的全局变量,而在其他用到这些全局变量的文件中用extern对这些变量进行说明。16、有以下程序voidfun2(chara,charb){printf("%c%c",a,b);}chara=’A’,b=’B’;voidfunl(){a:一C;b=’D’;}main(){funl();printf(”%c%c”,a,b);fun2(’E’,’F’);}程序的运行结果是A、ABEFB、CDEFC、ABCDD、CDAB标准答案:B知识点解析:在fun()函数之前定义了全局字符变量a和b。这两个变量的作用域是从其定义处到整个程序结束。在fun1()函数之内定义了两个变量a和b,并且分别初始化为字符’C’和’D’。在C语言中,若全局变量和某个函数中的局部变量同名,则在该函数中此全局变量被屏蔽,在该函数内访问的是局部变量,与同名的全局变量不发生任何关系。所以在主函数中,执行fun1()后,变量a、b的值分别等于’C’、’D’,打印输出CD,接着执行fun2(’E’,’F’)语句,变量a、b的值变为’E’、’F’并输出。17、有以下程序#includefun(inta,intb){intstaticm=0,i=2;i=i+m+1:m=i+a+b:returnm;}main(){intk=4,m=1,p;p=fun(k,m);printf("%d,",p);p=fun(k,m);printf("%d\n",p);}程序运行后的输出结果是A、8,17B、7,16C、8,8D、7,17标准答案:A知识点解析:本题考查了静态变量以及局部变量的同名问题。主函数中调用fun函数两次,第一次调用fun(4,1),形参a和b接收以后。i值为3,m的值为8,调用结束返回8存放到p中并且输出p的值为8,除了静态变量m和i,变量a,b撤销。第二次调用fun(4,1),接收实参值以后,i为3+8+1,而m为12+4+1,即输出函数值17。18、有以下程序#includefunc(intn){staticintnum=1;num=num+n;printf("%dt",num);}voidmain(){func(3);func(4);printf("\n");}程序运行后的输出是A、45B、35C、48D、34标准答案:C知识点解析:在函数func(intn)中定义了局部静态变量num,其初始值等于1,所以在主函数中执行func(3),输出4,此时静态变量num的值等于4,当退出函数func(3)时,其值不会丢失,所以当在执行func(4)时,输出8。19、有以下程序fun(intx,inty){staticintm=0,i=2;i+=m+1;m=i+x+y;returnm;}main(){intj=1,m=1,k;k=fun(j,m);printf("%d,",k);k=fun(j,m);printf("%d\n",k);}执行后的输出结果是A、5,5B、5,11C、11,11D、11,5标准答案:B知识点解析:子函数fun(intx,inty),将变量m和i声明为局部静态变量,因此第1次调用主函数后,局部静态变量m和i的值为5和3,第1次函数调用结束时,它们的值不释放保持不变,所以第2次调用时,局部静态变量m和i的初始值分别为5和3,即在执行“i+=m+1”时,i的值为9,因此最终m的值为11。20、在C语言中,只有在使用时才占用内存单元的变量,其存储类型是A、extern和registerB、auto和staticC、static和registerD、auto和register标准答案:D知识点解析:在C语言中,动态变量(auto)存储在内存中的动态存储区,在程序运行中,只有当调用变量所在的函数时,系统才临时给变量分配内存单元;全局变量(extem)一经定义,系统为其分配固定的内存单元;静态变量(static),编译系统为其分配固定的存储空间;寄存器变量(register)不保存在内存上,而是直接存储在CPU的寄存器中。21、有以下程序#includeintfun(){staticintx=l;x*=2;returnx;}main(){inti,s=l;for(i=1;i<=3;i++)s*=fun();printf("%d\n",s);}程序运行后的输出结果是A、0B、10C、30D、64标准答案:D知识点解析:本题考查了静态局部变量,该局部变量的值在函数调用结束后如果不消失而保留原值。函数fun的功能返回2的乘方,主函数fun函数调用3次,因此第一次s累乘2,第二次累乘4,第三次累乘8,即为2*4*8。值为64。22、有以下程序#includeintflintn);main(){inta=3,s;s=f(a);s=s+fla);printf("%d\n",s);}intflintn){staticinta=1;n+=a++;returnn;)程序运行后的输出结果是A、9B、8C、7D、10标准答案:A知识点解析:在主函数中第一次调用f(a)时,得到变量s的值等于4,在第二次调用f(a)时,在子函数f中由于变量a是一个局部静态变量,所以这次其值等于2,因而在主函数中第二次调用f(a)后,其返回值等于5,最后变量s的值等于9。23、有以下程序#includeintfun(){staticintx=1;x+=1;returnx;}main(){inti,s=1;for(i=1;i<=5;i++)s+=fun();printf("%d\n",s);}程序运行后的输出结果是A、11B、21C、6D、120标准答案:B知识点解析:这道试题主要考查了局部静态变量的应用。在函数fun()中定义了局部静态变量整型x,其初值等于1,在主函数中循环执行5次,第一次变量s的值等于3,变量x的值等于2,第二次变量s的值等于6,变量x的值等于3.第三次变量s的值等于10,变量x的值等于4,第四次变量s的值等于15,变量x的值等于5,第五次变量s的值等于21,变量x的值等于6。24、有以下程序intfun(intx[],intn){staticintsum=0,i;for(i=0;iA、50B、45C、60D、55标准答案:C知识点解析:在函数intfun(intx[],intn)的定义中,变量sum使用了static修饰符,这说明了变量sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储区中占据着永久的存储单元。即使退出函数之后,下次再进入该函数时.静态局部变量继续使用原来存储单元中原来的值。函数intfun(intx[],intn)的功能是求出数组x[]各个元素的和。所以在主函数中,调用函数Fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用Fun(b,4)后,变量sum=15+6+7+8+9=45.所以s=15+45=60。25、有以下程序intf(intm){staticintn=0:n+=m;returnn;}main(){intn=0:printf("%d,",f(++n));printf("%d\n",f(n++));}程序运行后的输出结果是A、1,1B、1,2C、2,3D、3,3标准答案:B知识点解析:由于在函数f中,变量n为静态局部变量.所以在主函数中第一次调用函数f后,变量n的值等于1,当第二调用函数f时,在函数f的内部静态局部变量n的值仍然保留等于1,所以返回函数值等于2。26、有以下程序#includeintfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf("%d\n",s);}程序运行后的输出结果是A、4B、1C、OD、8标准答案:A知识点解析:在子函数fun()中定义局部静态变量x,其初值等于1,然后再把其值扩大1倍后返回。在主函数中执行for循环语句2次,调用函数fun()两次,所以变量s的值等于4。这里要强调的一点是当函数fun()执行完毕后,局部静态变量x的值不会丢失,仍然有效。27、有下列程序:inta=4:intflintn1{intt=0;staticinta=5;if(n%2){inta=6;t+=a++;}else{inta=7;t+=a++;)returnt+a++;}main(){ints=a,i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);}程序运行后的输出结果是A、28B、24C、32D、36标准答案:A知识点解析:程序中定义了全局整型交量a=4。在intf(intn)函数中定义了局部静态整型变量并进行了初始化即staticinta=5。在intf(intn)函数中对n是否是偶数进行判断,如果n是奇数,则函数的返回值为11,局部静态整型变量a=6;如果n是偶数,则函数的返回值为12,局部静态整型变量a=6。所以在main()函数中循环首先执行s+=f(0)语句,而f(0)返回值12,所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论