bonus=i*0.1; else if(i<=)
bonus=bonus1+(i-)*0.075; else if(i<=)
bonus=bonus2+(i-)*0.05; else if(i<=)
bonus=bonus4+(i-)*0.03; else if(i<=)
bonus=bonus6+(i-)*0.015; else
bonus=bonus10+(i-)*0.01; printf(\ }
3.由键盘输入三个整数a、b、c,用条件运算符求出其中最大值和最小值。
【分析与提示】首先比较输入的a,b 的大小,并把大数装入max, 小数装入min 中,然后再与c 比较,若max 小于c,则把c 赋予max;如果c 小于min,则把c 赋予min。因此max 内总是最大数,而min 内总是最小数。最后输出max 和min 的值即可。
参考代码: main( ) {
int a,b,c,max,min;
scanf(\max=a>b?a:b ;
max=max>c?max:c; min=a
min=min printf(\最大值为:%d,最小值为:%d\\n\} 4.有一函数: x (x<1) y= 2x-1 (1≤x<10) 3x-11 (x≥10) 编一程序,输入一个x值,输出y值。 【分析与提示】本题考查if语句的嵌套,应当注意if与else的配对关系。从最内层开始,else总是与它上面最近的(未曾配对的)if 配对。 参考代码: main( ) { float x,y; printf(\请输入x的值 \\n\scanf(\if(x<1) y=x; else if(x>=10) y=3*x-11; 16 else y=2*x-1; printf(\} 5.从键盘上输入星期号,并显示该日期的英文名字。 【分析与提示】本实例知识点:switch语句。 switch语句的控制流程是:首先计算表达式的值,然后依次与每一个case中的常量值进行比较,一旦发现了某个能够匹配的值,就执行该case后面的语句组,直到遇到break语句为止。如果表达式的值与所有case中的常量都不匹配,则执行default后面的语句组。 参考代码: main( ) { int xqh; char ywm; printf(\请输入星期号(1~7):\\n\scanf(\switch(xqh) { case 1: printf(\ case 2: printf(\ break; case 3: printf(\ break; case 4: printf(\ break; case 5: printf(\ break; case 6: printf(\case 7: printf(\ default:printf(\} } 6.某市不同车牌的出租车3公里的起步价和计费分别为:夏利7元/公里,3公里以外2.1元/公里;富康8元/公里,3公里以外2.4元/公里;桑塔纳9元,3公里以外2.7元/公里。编程:从键盘输入乘车的车型及行车公里数,输出应付车资。 【分析与提示】可设三个变量,分别表示乘车的车型、行车公里数和应付车资,根据乘车的车型和行车公里数,计算出应付的车资。 参考代码: main( ) { int cx; /*定义乘车的车型变量cx */ float gl, cf; /*定义行车公里数变量gl、应付车资变量cf */ printf(\夏利\\n \\t2-富康\\n \\t3-桑塔纳\\n\printf(\请输入车型(1-3): \scanf(\ printf(\请输入行车公里数: \scanf(\switch(cx) 17 { case 1: if(gl<=3) cf=7.0; else cf=7+(gl-3)*2.1 ;break; case 2: if(gl<=3) cf=8.0; else cf=8+(gl-3)*2.4 ;break; case 3: if(gl<=3) cf=9.0; else cf=9+(gl-3)*2.7 ; } printf(\应付车资为%.1f\\n\ } 7.给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字。如原数为12345,则逆序为54321。 【分析与提示】本题的思路是:设5个变量,分别代表个位、十位、百位、千位和万位。从个位起,依次将各个位取出来,按取出的顺序组合成新的数据,并记录当前取出的数字的个数。 参考代码: #include \main( ) { unsigned x,m,n=0,w=0; unsigned ge=0,shi=0,bai=0,qian=0,wan=0; printf(\请输入一个正整数\scanf(\m=x; ge=m; m=m/10; w=1; n=ge; if(m) {shi=m; m=m/10; w=2; n=n*10+shi; if(m) {bai=m; m=m/10; w=3; n=n*10+bai; if(m) {qian=m; m=m/10; w=4; n=n*10+qian; if(m) {wan=m; w=5; n=n*10+wan;} } } } printf(\为%u位数\printf(\正整数的原序为:%u\printf(\正整数的逆序为:%u\ } 注:当该程序输入一个较大的5位数时,输出结果就不正确了,思考为什么?动手试一下怎样修改该程序。 第5章 循环结构程序设计 18 一、填空题 1.下面程序的功能是用“辗转相除法”求两个正整数的最大公约数。请填空。 #include int r,m,n; scanf(\,&m,&n); if(m 【分析与提示】辗转相除法:两数相除,若不能整除,则以除数作为被除数,余数作为除数,继续相除,直到余数为0时,当前除数就是最大公约数。 【解答】(1)r=m;m=n;n=r; (2)r=m%n; 二.运行程序写结果 1.下列程序运行的运行结果为 。 #include int y=10; do {y--; }while(--y); printf(\,y--); } 【分析与提示】注意 y-- 与y--的运算顺序。 【解答】 0 2.下列程序运行的运行结果为 。 main() { int x=3,y=6,z=2; while(x++!=(y-=1)) { z+=1; if(y printf(“%d,%d,%d\\n”,x,y,z); } } 【解答】4,5,3 3.下列程序运行的运行结果为 。 main() { 19 int a=1,b=0; for( ;a<3 ;a++) switch(a++) { case 1:b--; case 2:b++; case 3:b+=3;break; } printf(“%d\\n”,b); } 【解答】3 4.下列程序运行的运行结果为 。 main() { int x=10,y=10,i; for(i=0;i<2 ;y=i++) printf(“MM”,x--,y); } 【解答】10 10 9 0 三. 编程题 1.求s=1+2+4+8+…+64的值。 【分析与提示】本题为数学项求和问题,数学项间的关系为:第n项的值为第n-1项的值2倍。参考代码: main( ) { int i,s=0,t=1; while(t<=64) { s=s+t; t=2*t; } printf(\ } 2.求s=1+1/2+1/3+…+1/100的值。 【分析与提示】本题为分数数学项求和问题,要想得到每一项的正确结果,分式中的分子、分母至少要有一个为实型数据。 参考代码: main( ) {int i; float s=0,t; for(i=1;i<=100;i++) { t=1.0/i; s=s+t; } printf(\ 20