选择结构程序设计.doc_第1页
选择结构程序设计.doc_第2页
选择结构程序设计.doc_第3页
选择结构程序设计.doc_第4页
选择结构程序设计.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

第4章 选择结构程序设计习题与解答4.1 设有:int a=1,b=2,c=3,d=4,m=2,n=2;则下列表达式的值应为多少?(1) a|b+c&d-c(2) !(ab)&(n=cd)(4) !(a+b)+c-1&b+c/2解:(1)1(2)0(3)0(4)14.2 写出下列各程序的输出。(1)main() int a,b,s; scanf(%d%d,&a,&b); s=a; if(ab)s=b; s*=s; printf(%dn,s); (2) main() int a=2,b=-1,c=2; if(ab) if(bb) if(ac) printf(%d,a); else printf(%d,b); printf(%dn,c);(4) main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0:a+;break; case 1:b+;break; case 2: a+;b+;break; printf(a=%d,b=%d,a,b);解:(1)输出变量a,b中最大值的平方。 (2)2 (3)3 (4)a=2,b=14.3 阅读下列程序,并回答问题。(1) 当 a=1,b=3,c=5,d=4时,执行完下面程序段后x的值是多少? if(ab) if(cd) x=1; else if(ac) if(bd) x=2; else x=3; else x=6; else x=7;解:执行完程序段后x的值是2。程序段中if与else的匹配情况如下: if(ab) if(cd) x=1; else if(ac) if(b0) m=m+n; if(a0且ab。4.4 有一函数: x y= x-1(x=0) x+1(0x10) 分别用if-else语句和嵌套的if语句编写程序,要求输入x的值,输出y的值。解:方法1:main() float x,y; printf(input x:); scanf(%f,&x); y=x; if (x=0) y=x-1; if (0x&x10) y=x+1; printf(y=%fn,y); 运行结果:input x:0-1input x:910input x:1212方法2:main() float x,y; printf(input x:); scanf(%f,&x); if (x=0) y=x-1; else if (0x&x=A&ch=a&ch=z) ch=ch-32; printf(%c,ch); 4.6 试编程判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes;否则输出no。解:main()int x;printf(“input x:”); scanf(%d,&x); if (x%5=0 & x%7=0) printf(yes); else printf(no); 运行结果:input x:35yesinput x:25no4.7 编写程序,对任意输入的两个实型数以及一个运算符(+、-、*、/),能够输出算式和计算结果,如: 输入:3+5 显示:3+5=8 (提示:用 switch语句实现)。解:#includestdio.h#includestdio.hvoid main(void)float data1,data2,data3;char op; printf(nType in your expression:); scanf(%f%c%f,&data1,&op,&data2); switch(op) case +: data3=data1+data2 ;break; case -: data3=data1-data2;break; case *: data3=data1*data2;break; case /: if(data2=0)printf (nDivision by zero 1 ); exit(1); data3=data1/data2;break; printf(This is%6.2f%c%6.2f=%6.2fn,data1,op,data2,data3);运行结果:Type in your expression:2*3This is 2.00* 3.00= 6.004.8 某服装店经营套服,也单件出售。若买的不少于50套,每套80元;不足50套的每套90 元;只买上衣每件60元;只买裤子每条45元。编写程序,对输入的件数计算应付金额。解:main ( ) int c,t,m; printf(input the number of coat and trousers your want buy:n); scanf(%d%d,&c,&t); if(c=t)/*服装成套,分两种情况:大于等于50和小于50*/ if(c=50) m=c*80; else m=c*90; else/*服装不成套, 分两种情况:上衣多于或少于裤子*/ if(ct)/* 上衣多于裤子, 分两种情况:成套的数量多于或少于50 */ if(t=50) m=t*80+(c-t)*60;else m=t*90+(c-t)*60; else /*上衣少于裤子, 分两种情况:成套的数量多于或少于50*/ if(c=50) m=c*80+(t-c)*45; else m=c*90+(t-c)*45;printf (%d,m) ;运行结果:input the number of coat and trousers your want buy:10 57504.9 编一程序,对于给定的一个百分制成绩,输出相应的五分制成绩。设:90分以上为A, 80-89分为B,70-79分为C,60-69分为D,60分以下为E(用switch实现)。解:main () int score ,temp ,log ; char grade ; log=1; while (log) printf(enter score :); scanf (%d,&score); if(score100)|(score0) printf(n error,try again!n); else log=0 ; if (score=100) temp=9; else temp=(score-score %10)/10; switch (temp) case 0: case 1: case 2: case 3: case 4: case 5: grade=E; break; case 6 : grade=D;break; case 7: grade=C ;break; case 8: grade=B ;break; case 9: grade=A ; printf(score = %d , grade= %cn,score ,grade);运行结果:enter score :85score = 85,grade= B 补充题与题解4.1 求ax2+bx+c=0方程的解。 解:# include “math.h” main() float a,b,c,disc,x1,x2,realpart,imagpart;scanf(“5f,%f,5f”,&a,&b,&c);print(“The equation”);if (fabs(a)=1e-6) /*二次系数a为0.*/ printf(“is not quadratic”);else disc =b*b-4*a*c;if (fabs(disc)1e-6) /*判别式大于0*/ x1=(-b+sqrt(disc)/(2*a); x2=(=b-sqrt(disc)/(2*a); printf(“has distinct real roots:%8.4f and %8.4fn”,x1,x2); else /*判别式小于0,方程无实根*/ realpart=-b/(2*a); /*实部*/ imagpart=sqrt(-disc)/(2*a);/*虚部*/ printf(“has complex roots:n); printf(“%8.4f+%8.4f in”, realpart,imagpart); printf(“%8.4f-%8.4f in”, realpart,imagpart); 运行结果:1,2,1The equation has two equal roots:-1.00001,2,2The equation has complex roots:-1.0000+1.0000i-1.0000-1.0000i2,6,1The equation has distinct real roots:-0.1771 and 2.82294.2 编程序要求输入一个小写字母,将字母循环后移5个位置后输出。如a变成f,w变成b.解:#includestdio.hmain()char c; c=getchar(); if(c=a&c=v&c=z) c=c-21; /*26个小写字母,每个字母的ASCII码值相差1.*/ putchar(c); 运行结果:vabg4.3 根据以下函数关系,对输入的每个x值,计算出相应的y值。解:main() int x,c,m; float y; printf(“input x:”); scanf(%d,&x); if(x=40的范围即不在函数自变量的范围内*/ if(y!=-2) printf(y=%fn,y); else printf(errorn);运行结果:input x:-10.000000input x:88.00000input x:1212.000000input x:257.5000004.4 输入年份year和月month,求该月有多少天。判断是否为润年,可用如下C语言表达式:year%4= =0& year%100!=0|year%400= =0.若表达式成立(即表达式为1),则year为润年;否则,表达式不成立(即值为零0),year为平年。解:#includestdio.hmain() int year,month,days; printf(Enter year and month:); scanf(%d%d,&year,&month); switch(month) case 1: case 5: case 7: case 8: case 10: case 12: /*处理大月*/ days=31;break; case 4: case 6: case 9: case 11:/*处理小月*/ days=30; break; case 2:/*处理平月*/ if(year%4=0&year%100!=0|year%400=0) days=29;/*如果是润年*/ else days=28; break;/*不是润年*/ default: printf(Input error!n);/*月份错误*/ days=0; if (days!=0) printf(%d,%d is %d daysn,year,month,days);运行结果:Enter year and month:2001 102001 10is 31 daysEnter year and month:2000 22000 2is 29 days4.5 给定一个不多于5位的正整数,要求:求它是几位数;分别打印出每一位数字;按逆序打印出各位数字。例如原数为321,应输出123。解:main( ) long int num;int indiv, ten,hundred,thousand,ten_thousand,place;/*分别代表个位、十位、百位、千位、万位和位数。*/ printf(请输入一个整数(099999):) ; scanf(%ld,&num) ; if (num9999) place= 5; else if (num999) place= 4 ; else if (num99) place=3; else if (num9)place= 2 ;else place=1;printf(place=%dn,place);printf(每位数字为:);ten_thousand=num/10000 ;thousand=(int) (num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);switch(place) case 5 : printf(%d,%d,%d,%d,%d,ten_thousand,thousand,hundred,ten,indiv); printf(n反序数字为:); printf(%d%d%d%d%dn,indiv,ten,hundred,thousand,ten_thousand); break;case 4 : printf(%d,%d,%d,%d,thousand,hundred,ten,indiv); printf(n反序数字为:); prinft(%d%d%d%dn,indiv,ten,hundred,thousand); break ;case 3 : print

温馨提示

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

评论

0/150

提交评论