首页 C语言程序设计教程第四章练习题解析(1)

C语言程序设计教程第四章练习题解析(1)

举报
开通vip

C语言程序设计教程第四章练习题解析(1)...单选题1、关于C语言中的函数,下列描述正确的是()A.函数的定义可以嵌套,但函数的调用不可以嵌套B.函数的定义不可以嵌套,但函数的调用可以嵌套C.函数的定义和函数的嵌套均不可以嵌套D.函数的定义和函数的调用均不可以嵌套答案:B解析:函数的定义不可以嵌套,但函数的调用可以嵌套2​、定义一个函数:exce((v1,v2),(v3,v4,v5),v6);在该函数调用时,实参的个数为()个A.3B.4C.5D.6答案:A解析:(v1,v2),(v3,v4,v5)和v6一共三个实参3、关于C语言中print()函数与s...

C语言程序设计教程第四章练习题解析(1)
...单选题1、关于C语言中的函数,下列描述正确的是()A.函数的定义可以嵌套,但函数的调用不可以嵌套B.函数的定义不可以嵌套,但函数的调用可以嵌套C.函数的定义和函数的嵌套均不可以嵌套D.函数的定义和函数的调用均不可以嵌套答案:B解析:函数的定义不可以嵌套,但函数的调用可以嵌套2​、定义一个函数:exce((v1,v2),(v3,v4,v5),v6);在该函数调用时,实参的个数为()个A.3B.4C.5D.6答案:A解析:(v1,v2),(v3,v4,v5)和v6一共三个实参3、关于C语言中print()函数与scanf()函数,下列描述中正确的是()A.printf()函数可以向任何地方输出数据B.printf()只向控制台输出数据C.scanf()只能输入英文字母和数字D.scanf()函数可以识别输入的空格答案:B解析:printf()是向控制台输出的函数4、在C语言中,内部函数需要添加的关键字是()A.externB.staticC.thisD.auto答案:B解析:在定义内部函数时,需要在函数的返回值类型前面添加static关键字(又称为静态函数)。5、当调用时,会调用内部函数A.当调用时,会调用内部函数B.当调用时,会调用外部函数C.当调用时,会调用两次,先调用内部函数再调用外部函数D.都不调用,会报错答案:A解析:当内部函数与外部函数重名时,会优先调用内部函数6、在C语言中,声明外部函数需要添加的关键字是()A.externB.staticC.thisD.auto答案:A解析:声明外部函数的方式是在函数的返回值类型前面添加extern关键字7、关于C语言中的局部变量,下列描述中错误的是()A.局部变量就是在函数内部声明的变量B.局部变量只在函数内部有效C.局部变量只有当它所在的函数被调用时才会被使用D.局部变量一旦被调用,其生存周期持续到程序结束答案:D解析:当函数调用结束时局部变量就会失去作用8、关于C语言中的全局变量,下列描述中正确的是()A.全局变量的作用域一定比局部变量的作用域范围大B.静态类别变量的生存周期贯穿于整个程序的运行期间C.函数的形参都属于全局变量D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值答案:B解析:​选项1不对:如果程序中只有一个主函数,则在整个程序运行中,局部变量都在起作用;选项3不对:除了C++的引用类型参数,所有函数的形参都是局部变量;选项4不对:static变量定义时就存储地全局区,初始化为0;9、当全局变量与局部变量重名时,那么在调用时()A.局部变量会被屏蔽B.全局变量会被屏蔽C.都不会调用,系统会报错D.会调用两次,先调用局部变量,再调用全局变量答案:B解析:当局部变量与全局变量重名时,全局变量会被屏蔽。10、在C语言中,关于变量的作用域,下列描述中错误的是()A.局部变量只在整个函数的运行周期中有效B.全局变量的作用域为整个程序的运行周期C.当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量D.全局变量会覆盖掉所有与它重名的局部变量答案:D解析:当全局变量与局部变量重名时,全局变量会被屏蔽掉11、在C语言中,如果在一个函数的复合语句中定义了一个变量,则该变量()A.只在该复合语句中有效,在该复合语句外无效B.在该函数中任何位置都有效C.在本程序的原文件范围内均有效D.此定义方法错误,其变量为非法变量答案:D解析:​1、2与3错:函数复合语句中定义的变量在该复合语句中引用;但如果函数含有该变量,则在函数中可以引用该变量4对:在C++中在复合语句中定义变量为合法,但在C语言中是非法的12、C语言程序的基本单位是()。A.程序行B.语句C.函数D.字符答案:C解析:函数是C语言程序的基本单位13、C语言中决定函数返回值的类型的是()。A.return语句中的表达式类型B.调用函数的主调函数类型C.调用函数时临时D.定义函数时所指定的函数类型答案:D解析:函数的返回值取决于定义函数时指定的返回值类型14、若有函数调用语句:fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是()。A.3B.4C.5D.6答案:A解析:a+b返回一个值,(x,y)返回一个值,fun(n+k,d,(a,b))返回一个值。15、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是()。A.inputx,y,z;B.scanf("%d%d%d",&x,&y,&z);C.scanf("%d%d%d",x,y,z);D.read("%d%d%d",&x,&y,&z);答案:B解析:读取键盘输入的数据要用scanf()函数,scanf()中的参数要传入变量的地址16、若变量已正确说明为float类型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋予10.0,b赋予22.0,c赋予33.0,不正确的输入形式是()。A.102233B.10.0,22.0,33.0C.10.022.033.0D.10;22;33答案:B解析:用scanf()读取从键盘输入的数据时,中间不能加逗号,要用空格隔开17、若有定义:intx,y;chara,b,c;并有以下输入数据(此处\u代表空格):1\u2\uA\uB\uC,那么能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是()。A.scanf("x=%dy=%d",&x,&y);a=getchar();b=getchar();c=getchar();B.scanf("%d%d",&x,&y);a=getchar();b=getchar();c=getchar();C.scanf("%d%d%c%c%c,&x,&y,&a,&b,&c);D.scanf("%d%d%c%c%c%c%c%c",&x,&y,&a,&a,&b,&b,&c,&c);答案:D解析:空格也会作为一个字符赋给字符变量。18、对嵌套子程序调用说法正确的是()。A.外层子程序可以调用所有的内层子程序B.内层子程序只可以调用包含本身的外层子程序,不可以隔层调用C.外分程序必须能完全套住内分程序D.以上说法均不正确答案:C19、C语言中函数能否嵌套调用和递归调用?()A.二者均不可B.前者可,后者不可C.前者不可,后者可D.二者均可答案:D解析:两者调用都可以20、C语言规定,程序中各函数之间()。A.既允许直接递归调用也允许间接递归调用B.不允许直接递归调用也不允许间接递归调用C.允许直接递归调用不允许间接递归调用D.不允许直接递归调用允许间接递归调用答案:A解析:各程序间既可以直接调用也可以间接调用。21​、有如下程序:longfib(intn){if(n>2)returnfib(n-1)+fib(n-2);elsereturn2;}voidmain(){printf("%d\n",fib(3));}该程序的输出结果是()。A.2B.4C.6D.8答案:B解析:向fib()函数传入3时,返回fib(1)+fib(2)的值;向fib()函数传入1和2时,都返回2,所以fib(3)返回2+2=4。22、​以下程序的输出结果是()。longfun(intn){longs;if(n==1||n==2)s=2;elses=n-fun(n-1);returns;}voidmain(){printf("%ld\n",fun(3));}A.1B.2C.3D.4答案:A解析:fun()函数传入3时,返回3-fun(2);fun()函数传入2时,返回2。所以fun(3)返回3-2=1。23、在C语言中,函数的隐含存储类别是()。A.autoB.staticC.externD.无存储类别答案:C解析:为简化编程,C语言中允许在定义外部函数时省略关键字extern。24、以下叙述中不正确的是()。A.在不同的函数中可以使用相同名字的变量B.函数中的形式参数是局部变量C.在一个函数内定义的变量只在本函数范围内有效D.在一个函数内的复合语句中定义的变量在本函数范围内有效答案:D解析:函数内的复合语句中定义的变量仅仅在该复合语句中有效。25​、以下程序运行后,输出结果是()。intfunc(inta,intb){staticintm=0,i=2;i+=m+1;m=i+a+b;returnm;}voidmain(){intk=4,m=1,p;p=func(k,m);printf("%d,",p);p=func(k,m);printf("%d\n",p);}A.8,15B.8,16C.8,17D.8,8答案:C解析:函数体内的静态局部变量不随函数的调用结束而销毁,而是一直存在。26​、以下程序的输出结果是()。intd=1;intfun(intp){staticintd=5;d+=p;printf("%d",d);returnd;}voidmain(){inta=3;printf("%d\n",fun(a+fun(d)));}A.699B.669C.61515D.6615答案:C解析:​首先调用fun(d),将全局变量d=1带入,此时fun()函数内的静态局部变量d的值是1,d+=p后d的值是6,输出d的值,返回d的值;然后调用fun(a+6),将局部变量a=3带入,此时fun()函数内的静态局部变量d的值是6,d+=p后d赋值15,输出d的值,返回d的值。27、在C语言中,若需一变量只在本文件中所有函数使用,则该变量的存储类别是()。A.externB.registerC.autoD.static答案:D解析:static修饰全局变量时,表示该变量仅在本文件中可使用。28​、下列程序的输出结果是()。intb=2;intfunc(int*a){b+=*a;returnb;}voidmain(){inta=2,res=2;res+=func(&a);printf("%d\n",res);}A.4B.6C.8D.10答案:B解析:func()函数中,对全局变量b自增a的值,func()函数返回4;res+=4,res赋值为6。29​、请读程序:voidmain(){inta=1,b=2,c=3;++a;c+=++b;{intb=4,c;c=b*3;a+=c;printf("first:%d,%d,%d\n",a,b,c);a+=c;printf("Second:%d,%d,%d\n",a,b,c);}printf("third:%d,%d,%d\n",a,b,c);}该程序的输出是()A.first:12,4,12Second:26,4,12third:4,3,6B.first:14,4,12Second:26,12,12third:26,3,4C.first:14,4,12Second:26,4,12third:26,3,6D.first:14,4,12Second:26,6,12third:26,4,6答案:C解析:程序运行到第6行时,a=2,b=3,c=6;程序运行到第10行时,a=14,局部变量b=4,c=12;程序运行到第13行时,a=26,局部变量b=4,c=12;程序运行到第15行时,a=26,b=3,c=6。30​、以下程序运行后,输出结果是()。intd=1;intfun(intp){intd=5;d+=p++;printf("%d",d);}intmain(){inta=3;fun(a);d+=a++;printf("%d\n",d);}A.84B.99C.95D.44答案:A解析:fun()函数调用时代入局部变量a的值,fun()函数体内局部变量d自增3,输出d的值,即8,fun()函数返回8,此时全局变量d的值不变。d+=a++后,全局变量d自增3,此时全局变量d的值是4,输出全局变量d的值。31​、以下程序的输出结果是()。inta,b;voidfun(){a=100;b=200;}voidmain(){inta=5,b=7;fun();printf("%d%d\n",a,b);}A.100200B.57C.200100D.75答案:B解析:fun()函数改变的是全局变量的值,printf()函数输出的是局部变量的值,fun()函数不会改变局部变量a、b的值。多选题1、在调用外部函数时,下列描述中正确的是()(多选)A.只要有函数名,就能调用外部函数B.调用外部函数要包含外部函数所在的头文件C.外部函数与调用者定义在同一个源文件下D.在声明外部函数时,外部函数与原函数定义的返回值类型、函数名称和参数列表必须一致答案:B,D解析:外部函数调用时要包含其所在的头文件,当调用者声明了外部函数的原型,也可以不用包含头文件判断题1、局部变量就是在函数内部声明的变量。答案:true解析:局部变量就是在函数内部声明的变量。2、局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用。答案:true解析:局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用。3、局部变量就是在函数内部声明的变量,它只在本函数内有效。答案:true解析:局部变量就是在函数内部声明的变量,它只在本函数内有效,也就是说,只能在本函数内使用它。4、局部变量只有当它所在的函数被调用时才会被使用,当函数调用结束时局部变量还会一直存在。答案:false解析:局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用。简答题1、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。voidfunc(inta,intb){printf("%d",a+b);}voidmain(){func(3,2);printf("\n");}答案:5解析:fun()是一个实现两个数相加的函数,在主函数中调用并传入值,得到两个数的和2​、请阅读下面的程序,在空白处填写正确的代码,将函数的结果返回给调用者。intfunc(inta,intb){intsum=0;sum=a+b;;}voidmain(){intsum=0;=func(3,2);printf("两个数相加的结果为%d",sum);}答案:​returnsum;sum;解析:​returnsum;return将函数结果返回sum;主函数中sum接收函数返回的值3、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。voidmain(){intnum=100;printf(“%d,%o,%x\n”,num,num,num);}答案:10014464解析:printf()函数将十进制数100分别以十进制,八进制,十六进制形式输出。4​、请阅读下面的程序,当用户从键盘输入helloworld时,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。voidmain(){charstr[256];scanf(“%s”,str);printf(“%s\n”,str);}答案:hello解析:输入helloworld时,中间的空格对scanf()函数来说是终止符,后面的内容无法读取。5​、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。用户从键盘输入两个整型数据,将两个数据相加输出。voidmain(){inta,b;;printf(“%d\n”,);}答案:​scanf(“%d%d”,&a,&b);a+b;解析:​键盘输入数据,用scanf()函数;输入两个数据的和a+b;6、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。intfunc2(inta,intb){intc;c=a*b%3;returnc;}intfunc1(inta,intb){intc;a+=a;b+=b;c=func2(a,b);returnc*c;}voidmain(){intx=11,y=19;printf("thefinalresultis:%d\n",func1(x,y));}答案:4解析:x=11,y=19传入func1()函数,在func1()函数中经过运算变为22,38,然后传入给func2()函数,返回运算结果2,func1()函数收到返回值2以后再经过运算返回给主调用函数结果为4。7​、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。voidfunc2(inta,intb){a=a+10;b=a+10;}voidfunc(inta,intb){a=func2();b=func2();}voidmain(){intx=1,y=10;func1(x,y);printf("x=%d,y=%d\n”,x,y);}答案:x=1,y=10;解析:将实参传递给形参,只是复制了一份给x,y的值,参数在被调用函数内部改变,不影响其在调用函数中的值。8​、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。用户从键盘输入四个数,比较得出四个数中的最大值并输出。intmax2(inta,intb){if(a>b){returna;}else{returnb;}}intmax4(inta,intb,intc,intd){intres;res=max2(a,b);res=;res=max2(res,d);;}voidmain(){inta,b,c,d,max;printf("请输入四个整数:");;max=max4(a,b,c,d);printf("max=%d\n",max);}答案:​max2(res,c);returnres;scanf(“%d%d%d%d”,&a,&b,&c,&d);解析:在max4()函数中,res=max2(a,b)返回的是a,b中的最大值,这个最大值再与c进行比较,所以res=max2(res,c),返回的较大的值再与d作比较,再将比较得出的较大的值返回给主调用函数,这个较大的值就是四个数中的最大值。9​、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。intadd(intn){if(n==1)return1;elsereturnn+add(n-1);}voidmain(){intn=5;intsum=add(5);printf(“结果为:%d\n”,sum);}答案:15解析:add()函数进行递归调用,传入的参数5,会一直递减相加直到递减至1。10、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。voidfun(intn){if(n>0){printf("%d\t",n);fun(--n);}}voidmain(){inta=5;fun(a);}答案:54321解析:fun()函数递归调用,每打印一次就自减再调用一次自己。11​、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。用递归方法求出n!。intfac(intn){intt;if()return1;else{t=;returnt;}}voidmain(){intm,y;printf("Enterm:\n");scanf("%d",&m);if(m<0)printf("InputdataError!\n");else{y=fac(m);printf("\n%d!=%d\n",m,y);}}答案:​(n==1)||(n==0)n*fac(n-1)解析:实现n的阶乘,当n=0或者n=1时,阶乘没有意义,当n>1时,实现阶乘,则为n*fun(n-1);12、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。intx=5;staticvoidcude(){x=x*x*x;}voidmain(){cude();printf("x=%d\n",x);}答案:125解析:全局变量x,当调用cude()内部函数时,并没有传入参数,没有复制,所以x值的变化直接改变了x本身的值13​、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。first.c文件intfunc(inta,intb){returna+b;}second.c文件staticintfunc(inta,intb){returna–b;}voidmain(){intx=5,y=2;printf(“%d\n”,func(5,2));}答案:3解析:当内部函数与外部函数重名时,会优先调用内部函数14​、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。first.c源文件intfunc(inta,intb){returna+b;}second.c源文件externintfunc(inta,intb);voidmain(){intx=5,y=2;printf(“%d\n”,func(5,2));}答案:7解析:在second.c中声明了intfunc(inta,intb);函数原型,可以调用first.c中的函数。15​、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。有一个外部函数,用户输入一个数字,可以实现奇偶数的判断。实现在主函数中调用这个外部函数。first.c源文件voidfunc(intnum){if(num%2==0)printf(“这是一个偶数!\n”);}second.c源文件;voidmain(){intnum;scanf(“%d”,&num);func(num);}答案:externvoidfunc(intnum);解析:调用外部函数,可以包含函数所在的头文件,也可以在本文件中声明函数原型。16、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。voidshow(){intx=0;}voidmain(){printf("x的值为:%d\n",x);}答案:不能运行解析:变量x为函数show()的局部变量,只在show()函数范围内有效,在main()中无法调用。17​、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。intshow(){intx=0;returnx;}voidmain(){intx=10;show();printf("x的值为:%d\n",x);}答案:x的值为:10解析:main()函数中的x是局部变量,不受show()函数调用的影响。18、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。intx=10;voidmain(){intx=100;printf(“%d”,x);}答案:100解析:当全局变量与局部变量重名时,全局变量会被屏蔽掉。19​、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。intx=2;voidfunc(intx){x=x*x*x;}voidmain(){func(x);printf("%d\n",x);}答案:2解析:全局变量作为实参传递给函数,在函数中的运算并不改变其原来的值。20、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。intx=10;voidshow(){intx=20;printf("show()函数中x的值为:%d\n",x);}voidmain(){intx=30;printf("main()函数中x的值为:%d\n",x);show();}答案:​main()函数中x的值为:30show()函数中x的值为:20解析:局部变量只在它所在的函数内部有效,且当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量21、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。inta,b;voidfunc(){a=100;b=200;}voidmain(){inta=5,b=7;func();printf("a=%d,b=%d\n",a,b);}答案:a=5,b=7解析:全局变量与局部变量重名时,局部变量会屏蔽掉全局变量22​、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:用函数求x的绝对值。voidmain(){intx,y;scanf("%d",&x);_______printf("y=%d\n",y);}intabs(inta){intb;if(a>=0)b=a;else______________}答案:​y=abs(x);b=-a;returnb;解析:abs()函数是求绝对值的函数。23、​以下check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse的值相等,则显示“WELLDONE!!”,否则显示计算后的值。请填空。voidcheck(intponse,floatvalue){intval;val=_______;print("计算后的值:%d",val);if(_______)printf("\nWELLDONE!!\n");elseprintf("\nSorrythecorrectansweris%d\n",val);}答案:​(int)((value*10+5)/10)val==ponse解析:第一个填空处利用float型转int型的规则实现四舍五入的计算;第二个填空处判断是否计算后的值与ponse的值相等。24、​请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:求整数num1和num2的最大公约数,并返回该值。intgongyue(intnum1,intnum2){inttemp;while(_______){temp=num1%num2;num1=num2;num2=temp;}return_______;}答案:​num2!=0num1解析:循环条件是num2!=0,因为被模数不能为0;num1在对num2取模的过程中一直在改变,最后返回num1的值。25​、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:根据对x的输入,求1到x的累加和。intfun(intn){inti,c;c=0;for(i=1;i<=n;i++)c=c+i;_______}voidmain(){intx;scanf("%d",_______);printf("%d\n",fun(x));}答案:​returnc;&x解析:函数fun()中求总和,c是总和变量,最后返回c;从键盘输入x,则要对scanf()函数传入变量x的地址。26​、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:先输入10个数据到数组a中,再输入x,然后在a数组中查找与x值相同的元素的所在位置。voidmain(){inta[11],x,i;printf("Enter10integers:\n");for(i=1;_______;i++)scanf("%d",a+i);printf("Enterx:");_______*a=x;i=10;while(x!=*(a+i))_______if(i>0)printf("%5d'spositionis:%4d\n",x,i);elseprintf("%dNotbeenfound!\n",x);}答案:​i<=10scanf("%d",&x);break;27​、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:输入10个整数存入数组x中,然后计算各元素的和,并将和存入S中。voidmain(){intx[10],i,s;for(i=0;i<10;i++)_______s=0;for(i=1;i<10;i++)_______printf("%d",s);}答案:​scanf("%d",&x[i]);s+=i;解析:第一个空格从键盘输入元素的值;第二个空格将元素存入变量s中;28、​请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:读入一个两位的正整数,按字符型形式输出。voidmain(){intn;scanf(_______);printf(_______);}答案:​"%d",&n"%c",n29、​请阅读下面的程序,分析代码是否能够编译通过,如果能编译通过,请列出运行的结果,否则请说明编译失败的原因。#includeintsum(inta){intc=0;staticintb=3;c+=1;b+=2;returna+b+c;}voidmain(){inti;inta=2;for(i=0;i<5;i++)printf("%d,",sum(a));}答案:8,10,12,14,16,解析:sum()函数体中的静态局部变量b会一直存在,其值不随函数调用结束而销毁。30、编写一个函数,判断一个数是奇数还是偶数,并在主函数中调用。答案:​#includevoidfunc(intnum){if(num%2==0)printf(“该数是偶数”);elseprintf(“该数是奇数”);}intmain(){intnum;scanf(“%d”,&num);func(num);return0;}解析:​func()函数对传入进来的参数num进行奇偶判断;主函数中调用func()函数,传入参数得到判断结果。31、编写一个函数,实现1-100的相加和,并在主函数中调用。答案:​#includeintfunc(){intnum,sum=1;for(num=1;num<=100;num++){sum+=num;}returnsum;}intmain(){intsum=0;sum=func();printf(“sum=%d”,sum);return0;}解析:​func()函数实现1-100的相加和,并将结果返回给调用者。主函数中的sum接收调用func函数的返回值,并将其打印32、​请编写一个程序,用户从键盘输入英文字母,如果是大写,将其转换成小写输出;如果是小写,将其转换成大写输出。提示:英文字母在计算机中以ASCII码表形式存在。答案:​#includeintmain(){charch;printf("请输入英文字母:\n");scanf("%c",&ch);if(ch>='A'&&ch<='Z')printf("%c\n",ch+32);elseif(ch>='a'&&ch<='z')printf("%c\n",ch-32);return0;}解析:英文字母对应的ASCII码值,大写比对应小写小3233、请编写一个程序,用户输入一个十进制整数,分别输出其十进制、八进制、十六进制对应的数值。答案:​#includeintmain(){intnum;scanf(“%d”,&num);printf(“十进制为:%d\n八进制为:%o\n十六进制为:%x\n”,num,num,num);return0;}解析:十进制输入 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 符为%d,八进制输出格式符为%o,十六进制输出格式符为%x。34、请编写一个程序,实现两个数的求和,并打印出来。答案:​#includevoidshow(ints){printf("两个数的和为:%d",s);return;}voidadd(inta,intb){ints=a+b;show(s);return;}intmain(){ints=a+b;show(s);return0;}解析:add()函数实现两个数相加,show()函数将两个数相加的结果打印出来。35​、请编写一个程序,用户从键盘随机输入四个数,比较这个四个数得出其中最大值并输出。提示:1)编写一个两个数值比较的函数2)编写一个四个数值比较的函数,调用这个函数,在该函数中调用两个数值比较的函数答案:​#includeintmax2(inta,intb){if(a>b){returna;}else{returnb;}}intmax4(inta,intb,intc,intd){intres;res=max2(a,b);res=max2(res,c);res=max2(res,d);returnres;}intmain(){inta,b,c,d,max;printf("请输入四个整数:");scanf(“%d%d%d%d”,&a,&b,&c,&d);max=max4(a,b,c,d);printf("max=%d\n",max);return0;}解析:输入四个数,调用max4()函数,在max4()函数中又调用max2()函数进行两两比较,最后得出最大值,返回给调用函数。36、​请编写一个程序,计算s=2^2!+3^2!;提示:1)编写一个函数计算平方值2)编写一个函数计算阶乘答案:​#includelongf1(intp){intk;longr;longf2(int);k=p*p;r=f2(k);returnr;}longf2(intq){longc=1;inti;for(i=1;i<=q;i++)c=c*i;returnc;}intmain(){inti;longs=0;for(i=2;i<=3;i++)s=s+f1(i);printf("\ns=%ld\n",s);return0;}解析:函数f1()实现了计算数值的平方,函数f2()实现了阶乘计算,在f1()中调用f2()实现了计算表达式的值。37、​请编写一个程序,用递归方法实现n!。提示:1)递归调用是函数自身调用自身的过程2)每递归调用一次n就要自减一次答案:​#includeintadd(intn){if(n==1)return1;elsereturnn+add(n-1);}intmain(){intn;scanf(“%d”,&n);intsum=add(n);printf(“结果为:%d\n”,sum);return0;}解析:add()函数实现递归,每调用一次n要减1.38​、请编写一个程序,求出m的n次方。提示:编写递归函数求解。答案:​#includeintfunc(intm,intn){if(n==1)returnm;elsereturnm*func(m,n-1);}intmain(){intm,n,sum;scanf("%d%d",&m,&n);sum=func(m,n);printf("%d\n",sum);return0;}解析:func()实现递归调用,每乘上一个m,再用n-1调用函数,实现m的n次方。39​、假设有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都存活,问一年之后(第13个月)月兔子总数为多少对?提示:兔子的规律为数列1,1,2,3,5,8,13,…答案:​#includeintget_count(intmonth){if(month==1){return1;}elseif(month==2){return1;}else{returnget_count(month-1)+get_count(month-2);}}intmain(){intmonth=13;printf("第%d个月兔子总数为%d对。\n",month,get_count(month));return0;}解析:斐波那契数列是典型的递归实现问题,兔子每月的增长有一定的规律,本月出生的兔子等于上一个月与上上一个月兔子的总和。40、定义一个内部函数,求出1-100的和。答案:​#includestaticintfunc(intn){inti,sum=0;for(i=0;i<=n;i++){sum+=i;}returnsum;}intmain(){intsum=func(100);printf(“sum=%d\n”,sum);return0;}解析:内部函数是与调用者在同一个文件夹下;求和可以用循环来实现。41编写一个内部函数,用户从键盘输入一个数,分别打印出其每一位上的数字。答案:​#includestaticvoidfunc(intnum){while(num!=0){printf("%d\t",num%10);num=num/10;}}intmain(){intnum;scanf("%d",&num);func(num);return0;}解析:​内部函数与调用者定义在同一个文件下;本题打印出数字的结果是倒序排列的,如果要正序排列,待接下学习数组后,同学们可以用数组实现。42、定义一个外部函数,判断一个数是否是素数,在主函数中调用该函数。答案:​first.hintfunc(intnum);first.c#includeintfunc(intnum){inti;if(num<2)return0;for(i=2;i#include“first.h>intmain(){intx,num;scanf("%d",&num);x=func(num);if(x==1)printf("是素数\n");elseprintf("非素数\n");return0;}解析:调用外部函数时要包含外部函数所在的头文件43、定义一个外部函数,打印出1-100之间3与4的所有公倍数,并在主函数中调用。答案:​irst.c#includeintfunc(){inti;for(i=1;i<=100;i++){if(i%3==0&&i%4==0)printf("%d\n",i);}}second.cexternintfunc();intmain(){func();return0;}解析:​externintfunc();声明为外部函数,可以调用其他源文件中的函数;3和4的公倍数要对3与4取模要同时为044、编写一个两个函数,对定义好的两个变量分别实现相加、相乘,并在主函数中调用两个函数并输出结果。答案:​inta=3,b=5;intadd(){returna+b;}intmul(){returna*b;}intmain(){printf("a+b=%d\n",add());printf("a*b=%d\n",mul());return0;}解析:可以让多个函数调用的变量,定义为全局变量如有侵权请联系告知删除,感谢你们的配合!精品精品精品
本文档为【C语言程序设计教程第四章练习题解析(1)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
爱赢
公司经营范围:网络软件设计、制作、图文设计、影视制作(编辑)
格式:doc
大小:127KB
软件:Word
页数:0
分类:互联网
上传时间:2021-02-26
浏览量:7