C语言程序设计教程第四章练习题解析汇报(1)
c语言程序设计教程第二版课后答案

c语言程序设计教程第二版课后答案【篇一:c语言程序设计(第2版)-- 课后题答案】p> 参考答案第1章进入c语言程序世界二、1.i love china!printf(we are students.\n)2.6项目实训题参考答案1.编写一个c程序,输出以下信息:* * * * * * * * * * * * * * * * * * * *i am a student!* * * * * * * * * * * * * * * * * * * *main(){ printf(********************\n);printf( i am a student!\n);printf(********************\n);}2.已知立方体的长、宽、高分别是10cm、20cm、15cm,编写程序,求立方体体积。
解:main(){int a,b,c,v;a=10;b=20;c=15;v=a*b*c;printf(v=%d,v);}本程序运行结果为:v=3000第2章编制c程序的基础知识一选择题c b a b a c c二操作题,2,-8,23.000000,2.500000,-8.0000002. abc defghwhy is21+35equal 523.34214. aaa项目实训题1.定义一个符号常量m为5和一个变量n值为2,把它们的乘积输出。
#define m 5main(){ int n,c;n=2; c=m*n;printf(%d\n,c);}2.编程求下面算术表达式的值。
(1)x+a%3*(int)(x+y)%2/4,设x=2.5,a=7,y=4.7;(2)(float)(a+b)/2+(int)x%(int)y,设a=2,b=3,x=3.5,y=2.5。
(1)main(){ int a=7;float x=2.5,y=4.7;printf(%f\n,x+a%3*(int)(x+y)%2/4);}(2)main(){ int a=2,b=3;float x=3.5,y=2.5;printf(%f\n,(float)(a+b)/2+(int)x%(int)y);}第三章顺序结构程序设计一选择题a c d c c二操作题1. x=3,a=2,b=32. z=12.7000002 13 3 2 bb cc abc n3. 1 2 1a2 1 2三.编程题编程题解:#include stdio.hmain(){float sj,gz,yfgz;printf(time,salary:);scanf(%f,%f,sj,gz);yfgz=sj*gz*0.9;printf(total salary:%f\n,yfgz);}本程序运行结果为:time,salary:4,3crtotal salary:10.8000002.编写一个程序求出任意一个输入字符的ascii码解:#include stdio.hmain(){char c;printf(input a string:);scanf(%c,c);printf(%c ascii is %d\n,c,c);}本程序运行结果为:input a string:acra ascii is 973、编写一个程序用于水果店售货员算帐:已知苹果每斤2.50元,鸭梨每斤1.80元,香蕉每斤2元,橘子每斤1.6元,要求输入各类水果的重量,打印出应付3解:main(){float p,y,x,j,ys,g,fk;printf(apple,pear,banana,orange(weight)=);scanf(%f,%f,%f,%f,p,y,x,j);ys=2.5*p+1.8*y+2*x+1.6*j;printf(fu kuan=);scanf(%f,g);fk=g-ys;printf(result:\n);printf(fukuan=%6.2fyuan\nshoukuan=%6.2fyuan\nzhaohui=%6. 2fyuan\n,g,ys,fk);}本程序运行结果为:apple,pear,banana,orange(weight)=1,2,3,4fu kuan=100result:fukuan=100.00yuanshoukuan= 18.50yuanzhaohui= 81.50yuan项目实训1.假设银行定期存款的年利率rate为2.25%,并已知存款期为n 年,存款本金为capital元,试编程计算n年后可得到本利之和deposit。
谭浩强版本C语言课后习题第四章

1 #include<stdio.h> 2 int main() 3{ 4 int a,b,c,temp,max; 5 scanf("%d,%d,%d",&a,&b,&c); 6 temp=(a>b)?a:b; 7 max=(temp>c)?temp:c; 8 printf("最大的是:%d\n",max); 9 return 0; 10 }
31 printf("\n反序数字为\n");
32 printf("%d%d%d%d%d",indiv,ten,hundred,thousand,ten_thousand);
33 break;
34 case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
35 printf("\n反序数字为\n");
36 printf("%d%d%d%d",indiv,ten,hundred,thousand);
37 break;
38 case 3:printf("%d,%d,%d",hundred,ten,indiv);
39 printf("\n反序数字为\n");
8、
1 #include<stdio.h> 2 int main() 3{ 4 float score; 5 char grad; 6 printf("enter score:"); 7 scanf("%f",&score); 8 while(score>100||score<0) 9 {printf("enter again:"); 10 scanf("%f",&score); 11 } 12 switch((int)(score/10)) 13 {case 10: 14 case 9:grad='A';break; 15 case 8:grad='B';break; 16 case 7:grad='C';break; 17 case 6:grad='B';break; 18 case 5: 19 case 4: 20 case 3: 21 case 2: 22 case 1:
C 课后习题答案第四章

case 'c' : cout << '*' ; break ;
case 'd' : continue ;
}
cout << '#' << endl ;
}
}
答案:
$#
*#
*#
%
7.#include <iostream.h>
void main()
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int isPrime(int);
void createAry(int[], int);
void outAry(const int[], int);
void main()
cout << f( a, 3, 3 ) << endl ;
}
int f( int a[][3], int row, int col )
{int i, j, t=1 ;
for( i=0; i<row; i ++ )
for( j=0; j<col; j++ )
{a[i][j] ++ ;
if( i == j ) t*= a[i][j] ;
}
void createAry(int a[], int n)
{ srand( time(0) );
《C语言程序设计》第4章习题答案

1、选择题(1)C(2)D(3)B(4)D(5)C(6)B(7)B(8)C(9)A(10)C(11)C(12)B 2、填空题(1)①int men[10] ;②float step[4]={1.9,-2.33,0,20.6};③_int grid[4][10] ;(2)①int m[10]={9,4,7,49,32,-5};②0 9③scanf("%d",m[1]);④m[0] =39;⑤m[0] =a[3]+a[5];(3)①3 ②5 ③8 ④8 ⑤9 ⑥12 ⑦9(4)①int a[10]={9,4,12,8,2,10,7,5,1,3}; ②0 9 ③8 8(5)103、程序填空题(1)array[20]20&array[i ]20max=array[i];min=array[i];sum+array[i];sum/20(2)-5.77000021(3)ABCDEFGHIJKLEFGHIJKLABFDEFGHIJKLABFDEFGHI4、程序设计题(1)#define SIZE 100#include<stdio.h>void main(){int a[SIZE+1],i,j;for(i=2;i<=100;i++)a[i]=i;for(i=2;i<=100;i++)for(j=i+1;j<=100;j++)if(a[i]!=0&&a[j]%a[i]==0)a[j]=0;printf("\n");j=0;for(i=2;i<=100;i++){if(a[i]!=0){printf("%-4d",a[i]);j++;}if(j==10){j=0;printf("\n");}}}(2)#define S 14#include"stdio.h"void main(){int a[S][S],i,j,n;printf("please enter n:");scanf("%d",&n);for(i=1;i<=n;i++){a[i][i]=1;a[i][1]=1;}for(i=3;i<=n;i++)for(j=2;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<=n;i++){for(j=1;j<=n-i;j++)printf(" ");for(j=1;j<=i;j++)printf(" %3d",a[i][j]);printf("\n");}}(3)#define SIZE 80#include<stdio.h>void main(){char str1[SIZE+SIZE],str2[SIZE];int i,j;puts("Please enter 2 string:");scanf("%s",str1);scanf("%s",str2);i=0;while(str1[i]!='\0')i++;j=0;while(str2[j]!='\0'){str1[i]=str2[j];i++;j++;}str1[i]='\0';printf("%s\n",str1);}(4)#define SIZE 80#include<stdio.h>#include<string.h>void main(){char string[SIZE];int len,i,j,flag;long number;puts("Please enter a digital string:");scanf("%s",string);len=strlen(string);if(string[0]=='-'){flag=-1;i=1;}else{flag=1;i=0;}number=string[i]-'0';for(i++;i<len;i++)number=number*10+(string[i]-'0');number=flag*number;printf("%d\n",number);}(5)#define SIZE 40#include<stdio.h>void main(){int m,n,i,j;float price[SIZE],sum;printf("\nPlease input M and N:");scanf("%d%d",&m,&n);m=m-n;printf("Please input %d price :",n);sum=0;for(i=0;i<n;i++){scanf("%f",&price[i]);sum=sum+price[i];}printf("Aver are %10.2f.",sum/n);while(m>0){for(i=0;i<n-1;i++)price[i]=price[i+1];printf("\nPlease input one price:"); scanf("%f",&price[n-1]);m--;sum=0;for(i=0;i<n;i++){sum=sum+price[i];}printf("Aber are %10.2f",sum/n);}}。
C语言程序设计习题集第4章 循环结构(答案)

第4章循环结构一、选择题1、有以下程序段int k=0;while(k=1)k++;while 循环执行的次数是(A)A)无限次B)有语法错,不能执行C) 一次也不执行D)执行1次2、t为int类型,进入下面的循环之前,t的值为0while(t=1){ …… }则以下叙述中正确的是(B)A) 循环控制表达式的值为0B)循环控制表达式的值为1C) 循环控制表达式不合法D)以上说法都不对3、在C程序中,与while(m)中表达式m完全等价的是(B )A) m==0 B) m!=0 C) m==1 D)m!=14、有以下程序,程序运行后的输出结果是(C).main(){int i=1,sum=0;while(i<=4){sum=sum+i;i=i+1;}printf(“%d\n”,sum);}A)4 B)5 C)10 D)死循环5、有以下程序,程序运行后的输出结果是(D ).main(){int i=1,sum=0;while(i<=4)sum=sum+i;i=i+1;printf(“%d\n”,sum);}A)4 B)5 C)10 D)死循环6、有如下程序main(){int n=9;while(n>6){n-—;printf(“%d",n);}}该程序段的输出结果是(B)A)987 B) 876 C) 8765 D) 98767、以下程序的输出结果是(B)main(){int num= 0;while(num<=2){num++;printf(“%d\n”,num);}}A) 1 B) 1 C)1 D)l2 2 23 348、有以下程序,若运行时输入3.6 2.4<回车〉,则输出的结果是( B)。
main(){float x,y,z;scanf(“%f%f”,&x,&y);z=x/y;while(1){if(fabs(z)>1。
0){x=y;y=z;z=x/y;}elsebreak;}printf(“%f\n”,y);}A)1.500000 B)1.600000 C)2。
c语言程序设计第四版第四章答案谭浩强

第四章什么是算术运算什么是关系运算什么是逻辑运算解:略。
C语言中如何表示“真”和“假”系统如何判断一个量的“真”和“假”解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。
但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。
例如3&&5的值为“真”,系统给出3&&5的值为1。
写出下面各逻辑表达式的值。
设a=3,b=4,c=5。
(1) a+b>c&&b==c(2) a||b+c&&b-c(3) !(a>b)&&!c||1(4) !(x=a)&&(y=b)&&0(5) !(a+b)+c-1&&b+c/2解:(1) 0(2) 1(3) 1(4) 0(5) 1有3个整数a、b、c,由键盘输入,输出其中最大的数。
解:方法一#include <>main(){ int a,b,c;printf("请输入3个整数:");scanf("%d,%d,%d",&a,&b,&c);if(a<b)if(b<c) printf("max=%d\n",c);else printf("max=%d\n",b);else if(a<c) printf("max=%d\n",c);else printf("max=%d\n",a);}方法二:使用条件表达式,可以使程序更加简明、清晰。
程序如下:#include <>main(){ int a,b,c,temp,max;printf("请输入3个整数:");scanf("%d,%d,%d",&a,&b,&c);temp=(a>b)a:b; /* 将a和b中的大者存人temp中 */max=(temp>c)temp:c; /* 将a和b中的大者与c比较,取最大者*/printf("3个整数的最大数是%d\n”,max);}有一函数:写一程序,输入x值,输出y值。
C程序设计第四版谭浩强_习题&例题第4章

第4章例4.1#include<stdio.h>#include<math.h>int main(){double a,b,c,disc,p,q,x1,x2;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;if(disc<0) printf("This equetion hasn't real roots\n");else{p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("real root:\nx1=%7.2f\nx2=%7.2f\n",x1,x2);}return 0;}例4.2#include<stdio.h>int main(){float a,b,t;scanf("%f%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f\n",a,b);return 0;}例4.3#include<stdio.h>int main(){float a,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return 0;}例4.4#include<stdio.h>int main(){char ch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?ch+32:ch;printf("%c\n",ch);return 0;}例4.5#include<stdio.h>int main(){int x,y;scanf("%d",&x);if(x<0)y=-1;elseif(x==0) y=0;else y=1;printf("x=%d,y=%d\n",x,y);return 0;}#include<stdio.h>int main(){int x,y;scanf("%d",&x);if(x>=0)if (x>0) y=1;else y=0;else y=-1;printf("x=%d,y=%d\n",x,y);return 0;}例4.6#include<stdio.h>int main(){char grade;scanf("%c",&grade);printf("Your score:");switch(grade){case 'A':printf("85~100\n");break;case 'B':printf("70~84\n");break;case 'C':printf("60~69\n");break;case 'D':printf("<60\n");break;default:printf("enter data error\n");}return 0;}例4.7#include<stdio.h>int main(){void action1(int,int),action2(int,int);char ch;int a=15,b=23;ch=getchar();switch(ch){case 'a':case 'A':action1(a,b);break;case 'b':case 'B':action2(a,b);break;default:putchar('\a');}return 0;}void action1(int x,int y){printf("x+y=%d\n",x+y);}void action2(int x,int y){printf("x*y=%d\n",x*y);}例4.8程序1#include<stdio.h>int main(){int year,leap;printf("enter year:");scanf("%d",&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)printf("%d is ",year);elseprintf("%d is not ",year);printf("aleap year!\n");return 0;}程序2#include<stdio.h>int main(){int year,leap;printf("enter year:");scanf("%d",&year);if(year%4!=0)leap=0;else if(year%100!=0)leap=1;else if(year%400!=0)leap=0;else leap=1;if(leap)printf("%d is ",year);elseprintf("%d is not ",year);printf("aleap year!\n");return 0;}程序3#include<stdio.h>int main(){int year,leap;printf("enter year:");scanf("%d",&year);if(year%4==0&&year%100!=0||year%400==0) leap=1;else leap=0;if(leap)printf("%d is ",year);elseprintf("%d is not ",year);printf("aleap year!\n");return 0;}程序4#include<stdio.h>#include<iostream.h>int main(){int year;bool leap;printf("enter year:");scanf("%d",&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=true;elseleap=false;}elseleap=true;}elseleap=false;if(leap)printf("%d is ",year);elseprintf("%d is not ",year);printf("aleap year!\n");return 0;}例4.9#include<stdio.h>#include<math.h>int main(){double a,b,c,disc,x1,x2,realpart,imagpart;scanf("%lf,%lf,%lf",&a,&b,&c);printf("The equation ");if(fabs(a)<=1e-6)printf("is not a quadratic\n");else{disc=b*b-4*a*c;if(fabs(disc)<=1e-6)printf("has two equal roots:%8.4f\n",-b/(2*a));else if(disc>1e-6){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("has distinct real roots:%8.4f and %8.4f\n",x1,x2);}else{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("has conplex roots:%8.4f\n");printf("%8.4f+%8.4fi\n",realpart,imagpart);printf("%8.4f-%8.4fi\n",realpart,imagpart);}}return 0;}例4.10#include<stdio.h>int main(){int c,s;float p,w,d,f;printf("please enter price,weight,discount:");scanf("%f,%f,%d",&p,&w,&s);if(s>=3000) c=12;else c=s/250;switch(c){case 0:d=0;break;case 1:d=2;break;case 2:case 3:d=5;break;case 4:case 5:case 6:case 7:d=8;break;case 9:case 10:case 11:d=10;break;case 12:d=15;break;}f=p*w*s*(1-d/100);printf("freight=%10.2f\n",f);return 0;}习题1.算术运算符:+正号2 -负号2 *乘法3 /除法3 %求余3 +加法4 -减法4 ++自增2 --自减2用算术运算符和括号将运算对象(也成操作数)连接起来的、符合C语法规则的式子,称为C算术表达式。
C语言程序设计教程第四章练习题解析

12、C语言程序得基本单位就是( )、
A.程序行
B、语句
C、函数
D、字符
答案:C
解析:函数就是C语言程序得基本单位
13、C语言中决定函数返回值得类型得就是()、
A、return语句中得表达式类型
B、调用函数得主调函数类型
C。调用函数时临时
intd=1;
intfun(intp)
{
staticintd=5;
d+=p;
printf("%d ",d);
return d;
}
voidmain()
{
ﻩint a=3;
ﻩprintf("%d \n",fun(a+fun(d)));
}
A.699
B、66 9
C、61515
D、6 615
答案:C
解析:首先调用fun(d),将全局变量d=1带入,此时fun()函数内得静态局部变量d得值就是1,d+=p后d得值就是6,输出d得值,返回d得值;
A、当调用时,会调用内部函数
B、当调用时,会调用外部函数
C.当调用时,会调用两次,先调用内部函数再调用外部函数
D、都不调用,会报错
答案:A
解析:当内部函数与外部函数重名时,会优先调用内部函数
6、在C语言中,声明外部函数需要添加得关键字就是()
A、extern
B、static
C、this
D.auto
答案:A
{
ﻩintd=5;
ﻩd+=p++;
ﻩprintf(”%d”,d);
}
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单选题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.input x,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.10 22 33B.10.0,22.0,33.0C.10.0 22.0 33.0D.10; 22; 33答案:B解析:用scanf()读取从键盘输入的数据时,中间不能加逗号,要用空格隔开17、若有定义:int x,y; char a,b,c; 并有以下输入数据(此处\u代表空格):1\u2\uA\uB\uC,那么能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是()。
A.scanf("x=%d y=%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、有如下程序:long fib(int n){if (n>2)return fib(n-1)+fib(n-2);elsereturn 2;}void main(){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、以下程序的输出结果是()。
long fun(int n){long s;if (n==1 || n==2)s=2;elses=n-fun(n-1);return s;}void main(){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、以下程序运行后,输出结果是()。
int func(int a, int b){static int m=0,i=2;i+=m+1;m=i+a+b;return m;}void main(){int k=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、以下程序的输出结果是()。
int d=1;int fun(int p){static int d=5;d+=p;printf("%d ",d);return d;}void main(){int a=3;printf("%d \n",fun(a+fun(d)));}A.6 9 9B.6 6 9C.6 15 15D.6 6 15答案: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、下列程序的输出结果是()。
int b=2;int func(int *a){b += *a;return b;}void main(){int a=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。