以下正确的函数定义是_第1页
以下正确的函数定义是_第2页
以下正确的函数定义是_第3页
以下正确的函数定义是_第4页
以下正确的函数定义是_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

函数与编译预处理习题解答学习情境五函数与编译预处理习题解答学习情境五一、选择题1.以下正确的函数定义是()。A.doublefun(intx,inty) B.doublefun(intx,y){z=x+y;returnz;} {intz;returnz;}C.fun(x,y) D.doublefun(intx,inty){intx,y;doublez; {doublez;z=x+y;returnz;} returnz;}【答案】D【说明】其返回值与函数类型相符。2.若调用一个函数,且此函数中没有return语句,则正确的说法是()。A.该函数没有返回值 B.该函数返回若干个系统默认值C.能返回一个用户所希望的函数值 D.返回一个不确定的值【答案】A3.以下不正确的说法是()。A.实参可以是常量,变量或表达式B.形参可以是常量,变量或表达式C.实参可以为任意类型D.如果形参和实参的类型不一致,则以形参类型为准【答案】B【说明】形参只能是变量或数组。4.C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是()。A.地址传递 B.值传递C.有实参传给形参,再由形参传给实参 D.由用户指定传递方式【答案】B【说明】地址传递是在实参和形参是数组的情况下进行的。5.C语言规定,函数返回值的类型是决定于()。A.return语句中的表达式类型 B.调用该函数时的主调函数类型C.调用该函数时由系统临时 D.在定义函数时所指定的函数类型【答案】D6.若用数组名作为函数调用的实参,传递给形参的是()。A.数组的首地址 B.数组中第一个元素的值C.数组中的全部元素的值 D.数组元素的个数【答案】A7.如果在一个函数中的复合语句中定义了一个变量,则该变量()。A.只在该复合语句中有定义 B.在该函数中有定义C.在本程序范围内有定义 D.为非法变量【答案】C【说明】因为该变量为局部变量。8.下面程序的输出是()。inti=2;printf("%d%d%d",i*=2,++i,i++);A.8,4,2 B.8,4,3 C.4,4,5 D.4,5,6【答案】A9.已知一个函数的定义如下:doublefun(intx,doubley){}则该函数正确的函数原型声明为()。A.doublefun(intx,doubley) B.fun(intx,doubley)C.doublefun(int,double); D.fun(x,y);【答案】A10.以下不正确的说法是()。A.全局变量,静态变量的初值是在编译时指定的B.静态变量如果没有指定初值,则其初值为0C.局部变量如果没有指定初值,则其初值不确定D.函数中的静态变量在函数每次调用时,都会重新设置初值【答案】D【说明】静态局部变量在其函数调用结束后仍然可以保留变量值。11.以下任何情况下计算平方数时都不会引起二义性的宏定义是()。A.#definePOWER(x)x*x B.#definePOWER(x)(x)*(x)C.#definePOWER(x)(x*x) D.#definePOWER(x)((x)*(x))【答案】D12.以下正确的叙述是()。A.C语言的预处理功能是指完成宏替换和包含文件的调用。B.C语言的预处理指令只能位于C源程序文件的首部。C.凡是C源程序中行首以“#”标识的控制行都是预处理指令。D.C语言的编译预处理就是对源程序进行初步的语法检查。【答案】B13.C语言提供的预处理功能包括条件编译,其基本形式是:#XXX标识符程序段1#else程序段2#endif这里XXX可以是()。A.define或include B.ifdef或includeC.ifdef或ifndef或define D.ifdef或ifndef【答案】D二、填空题1.C语言函数返回类型的默认定义类型是。【答案】整型2.函数调用语句:fun((a,B.,(c,d,e))实参个数为。【答案】23.函数的实参传递到形参有两种方式:和。【答案】传值、传址4.在一个函数内部调用另一个函数的调用方式称为。在一个函数内部直接或间接调用该函数成为函数的调用方式。【答案】嵌套调用递归5.【答案】全局变量局部变量动态变量静态变量6.

和。【答案】dothat(intn,doublex){…}dothat(int,double){…}7.C语言变量的存储类别有,,和。【答案】自动变量和寄存器变量静态外部变量静态局部变量外部变量8.凡在函数中未指定存储类别的局部变量,其默认的存储类别为。【答案】自动9.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为。【答案】静态全局变量10.变量被赋初值可以分为两个阶段:即和。【答案】定义时赋值运行中赋值11.下面程序的运行结果是。#defineMAX(a,b)(a>b?a:b)+1main(){intj=6,k=8,f;printf("%d\n",MAX(j,k));}【答案】912.下面程序的运行结果是。#defineA4#defineB(x)A*x/2main(){floatc,a=4.5;c=B(a);printf("%5.1f\n",c);}【答案】9.013.以下程序的输出结果是。#include"stdio.h"#defineF(y)3.84+y#definePR(A.printf("%d",(int)(A.)#definePRINT(A.PR(A.;putchar('\n')main(){intx=2;PRINT(F(3)*x);}【答案】914.设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。main(){intx=2,y=3;printf("%d\n",pow(x,y));}【答案】#include<math.h>15.下面程序的运行结果是。main(){inta=10,b=20,c;c=a/b;#ifdefDEBUGprintf("a=%d,b=%d",a,b);#endifprintf("c=%d\n",c);}【答案】c=016.下面程序的运行结果是。#defineDEBUGmain(){inta=14,b=15,c;c=a/b;#ifdefDEBUGprintf("a=%d,b=%d,",a,b);#endifprintf("c=%d\n",c);}【答案】a=14,b=15,c=0三、程序阅读题1.写出下面程序的运行结果。func(inta,intB.{staticintm=0,i=2;i+=m+1;m=i+a+b;return(m);}main(){intk=4,m=1,p1,p2;p1=func(k,m);p2=func(k,m);printf("%d,%d\n",p1,p2);}【答案】8,172.写出下面程序的运行结果。#defineMAX10inta[MAX],i;sub1(){for(i=0;i<MAX;i++)a[i]=i+i;}sub2(){inta[MAX],i,max;max=5;for(i=0;i<MAX;i++)a[i]=i;}sub3(inta[]){inti;for(i=0;i<MAX;i++)printf("%d",a[i]);printf("\n");}main(){sub1();sub3(A.;sub2();sub3(A.;}【答案】0246810121416180246810121416183.若输入的值是-125,写出下面程序的运行结果。#include<math.h>fun(intn){intk,r;for(k=2;k<=sqrt(n);k++){r=n%k;while(!r){printf("%d",k);n=n/k;if(n>1)printf("*");r=n%k;}}if(n!=1)printf("%d\n",n);}main(){intn;scanf("%d",&n);printf("%d=",n);if(n<0)printf("-");n=fabs(n);fun(n);}【答案】-5*5*54.写出下面程序的运行结果。inti=0;fun1(inti){i=(i%i)*(i*i)/(2*i)+4;printf("i=%d\n",i);return(i);}fun2(inti){i=i<=2?5:0;return(i);}main(){inti=5;fun2(i/2);printf("i=%d\n",i);fun2(i=i/2);printf("i=%d\n",i);fun2(i/2);printf("i=%d\n",i);fun1(i/2);printf("i=%d\n",i);}【答案】i=5i=2i=2i=4i=25.写出下面程序的功能。func(intn){inti,j,k;i=n/100;j=n/10-i*10;k=n%10;if((i*100+j*10+k)==(i*i*i+j*j*j+k*k*k))returnn;return0;}main(){intn;for(n=100;n<1000;n++)if(n==func(n))printf("%d",n);}【答案】输出100~1000之间的水仙花数四、程序判断题1.下面add函数是求两个参数的和;判断下面程序的正误,如果错误请改正过来。voidadd(inta,intb){intc;c=a+b;return(c);}【答案】错误add(inta,intb){intc;c=a+b;return(c);}2.下面函数fun的功能是:将长整型数中偶数位置上的数依次取出,构成一个新数返回,例如,当s中的数为87653142时,则返回的数为8642;判断下面程序的正误,如果错误请改正过来。longfun(longs){longt,sl=1;intd;t=0;while(s>0){d=s%10;if(d%2=0){t=d*sl+t;sl*=10;}s/=10;}return(t);}【答案】错误longfun(longs){longt,sl=1;intd;t=0;while(s<0){d=s/10;if(d%2=0){*t=d*sl+*t;sl*=10;}s/=10;}return(t);}3.下面函数fun的功能是:统计字符串s中各元音字母(即A,E,I,O,U)的个数,(字母不分大,小写)判断下面程序的正误,如果错误请改正过来。fun(chars[],intnum[5]){intk;i=5;for(k=0;k<I;k++)num[i]=0;for(k=0;s[k];k++){i=-1;switch(s){case'a':case'A':i=0;case'e':case'E':i=1;case'i':case'I':i=2;case'o':case'O':i=3;case'u':case'U':i=4;}if(i>=0)num[i]++;}}【答案】错误fun(chars[],intnum[5]){intk;i=5;for(k=1;k<=i;k++)num[k]=0;for(k=1;s[k]='\0';k++){i=-1;switch(s){case'a':case'A':i=1;case'e':case'E':i=2;case'i':case'I':i=3;case'o':case'O':i=4;case'u':case'U':i=5;}if(i>0)num[i]++;}}4.函数fun的功能是:根据整型形参m,计算如下公式的值:y=1-1/2×2-1/3×3-…-1/m×m判断下面程序的正误,如果错误请改正过来。fun(intm){doubley=0,d;intI;for(i=100,i<=m,i+=100){d=(double)i*(double)i;y+=1.0/d;}return(y);}【答案】错误fun(intm){doubley=1.0,d;inti;for(i=2,i<=m,i+=1){d=(double)i*(double)i;y-=1.0/d;}return(y);}5.下面函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串;判断下面程序的正误,如果错误请改正过来。voidfun(chars[]){inti,j;for(i=0,j=0;s[i]!='\0';i++)if(s[i]>='0'&&s[i]<='9')s[j]=s[i];s[j]="\0";}【答案】错误voidfun(chars[]){inti,j;for(i=0,j=1;s[i]!='\0';i++)if(s[i]>='0'&&s[i]<='9'){s[j]=s[i];j++;}s[j]="\0";}五、程序填空题1.经典算法提示:折半查找法的思路是先确定待查元素的范围,将其分成两半,然后比较位于中间点元素的值。如果该待查元素的值大于中间点元素的值,则将范围重新定义为大于中间点元素的范围,反之亦然。intsearch(inta[10],intm){intx1=0,x2=9,mid;while(x1<=x2){mid=(x1+x2)/2;if(m<a[mid])①;elseif(m>a[mid])②;elsereturn(mid);}return(-1);}【答案】①x2=mid-1②x1=mid+12.del函数的作用是删除有序数组a中的指定元素x,n为数组a的元素个数,函数返回删除后的数组a元素个数,请填空使程序完整。intdel(inta[10],intn,intx){intp=0,i;while(x>=a[p]&&p<n)①;for(i=p-1;i<n;i++)②;return(n-1);}【答案】①a[p]='\0'②a[i]=a[i+1]3.以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请填空使程序完整。#include<stdio.h>①;main(){floatx,y,z,f;scanf("%f,%f,%f",&x,&y,&z);f=fun(②);f+=fun(③);printf("f=%d",f);}floatfun(floata,floatb){return(a/b);}【答案】①#include<math.h>②x+y,x-y③z+y,z-y4.avg函数的作用是计算数组array的平均值返回,请填空使程序完整。floatavg(floatarray[10]){inti;floatavgr,sum=0;for(i=1;①;i++)sum+=②;avgr=sum/10;③;}【答案】①i<=10②array[i]③return(avgr)六、编程题1.用递归法计算n!可用下述公式表示:①②③④。n!=1(n=0,1)n×(n-1)!(n>1)【参考程序】longff(intn){longf;if(n<0)printf("n<0,inputerror");elseif(n==0||n==1)f=1;elsef=ff(n-1)*n;return(f);}main(){intn;longy;printf("\ninputainteagernumber:\n");scanf("%d",&n);y=ff(n);printf("%d!=%ld",n,y);}2.写两个整数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。【参考程序】#include"stdio.h"main(){intu,v,h,l;printf("pleaseinputtwonumbers:\n");scanf("%d,%d",&u,&v);h=hcf(u,v);printf("hcf=%d\n",h);l=lcd(u,v,h);printf("lcd=%d\n",l);}hcf(u,v)intu,v;{inta,b,t,r;if(u>v){t=u;u=v;v=t;}a=u;b=v;while((r=b%a)!=0){b=a;a=r;}return(a);}lcd(u,v,h)intu,v,h;{return(u*v/h);}3.写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。【参考程序】main(){charstr0[100];gets(str0);fanxu(str0);puts(str0);}fanxu(str1)charstr1[100];{inti,t,j;charstr2[100];strcpy(str2,str1);t=strlen(str1);for(i=0,j=t-1;j>-1;i++,j--)str1[i]=str2[j];}4.写一函数,输入一个十六进制数,输出相应的十进制数。【参考程序】#include<stdio.h>#include"math.h"intx;intff(charshu[]){inti=strlen(shu)-1,n;intsum=0.0;x=0;n=i;for(;i>-1;i--){if(shu[n-i]>=48&&shu[n-i]<=57)sum=sum+(shu[n-i]-48)*pow(16,i);elseif(shu[n-i]>=65&&shu[n-i]<=90)sum=sum+(shu[n-i]-55)*pow(16,i);elseif(shu[n-i]>=97&&shu[n-i]<=102)sum=sum+(shu[n-i]-87)*pow(16,i);x=1;}returnsum;}main(){charshufu[100];ints;gets(shufu);s=ff(shufu);if(x)printf("\ns(d)=%d\n",s);elseprintf("Thenumberisnotox\n");}5.写一函数,用“冒泡法”对输入的10个字符按由小到大顺序排列。【参考程序】intpaixu(x)intx[];{inti,j,t;for(j=1;j<10;j++)for(i=0;i<=9-j;i++)if(x[i]>x[i+1]){t=x[i+1];x[i+1]=x[i];x[i]=t;}}main(){inty[10];inti;for(i=0;i<10;i++)sca

温馨提示

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

评论

0/150

提交评论