习题解答
习题四
4.1 写出下列程序段的运行结果
(1) 5
分析:这是if语句嵌套问题。本题else是与第二个if语句(if (y<0))配对的。 (2) 2
分析:这是if语句嵌套问题,关键是要清楚各个if与else的 配对关系。本题的if与else的配对关系如下:
if(a
(3) 10
分析:先计算a+1的值(值是4),再执行case 4:后的语句,直到遇到break语句才结束switch语句,即执行了“a+=4;”,还要继续执行“a+=3;”才结束switch语句。另外要注意的是,在计算表达式a+1的值时,a的值是不变的,即执行语句case 4:a+=4前,a的值是3而不是4。
(4) a=2,b=1
分析:先执行“case 1:”后的语句,结束switch(y)时,a=1,b=0。由于switch(y)后没有遇到break语句,则继续执行“case 2:”后的语句,遇到break语句后,结束switch(x)语句。
4.2 请将下列语句改写成switch语句。
switch(s) {
case 1:
case 2: x=1;break; case 3: case 4: case 5:
case 6:x=10;break; case 7:
case 8: x=1;break; case 9:
习题解答
case 10: x=3;break; default: x=0; }
分析:将各语句按缩进的格式排列,if与else的配对关系如下:
if ((s>0)&&(s<=10))
if ((s>=3)&&(s<=6))
x=10;
else if ((s>1)&&(s>8))
x=3; else x=1; else x=0;
此时s各段数值的x取值为: 1,2 : x=1 3-6 : x=10 7,8 : x=1 9,10: x=3 其它: x=0
4.3 求分段函数的值:
x-1 x<0 y = x 0≤x<1 x+1 x≥1
分析:先判断x是否小于0,若是则直接计算x-1,否则(即x大于或等于0)再判断x是否小于1,是则计算x,不是则说明x大于等于1,计算x+1。 #include
int x,y; if (x<0)
y=x*x-1; y=x*x; y=x*x+1; else if(x<1) else
scanf(\
2
2
2
222
printf(\
习题解答
4.4 判断一个整数是否既是5的倍数,也是9的倍数。
分析:如果x除5的余数为0(x%5==0),x就是5的倍数,如果x除9的余数为0(x%9==0),x就是9的倍数。一个整数既是5的倍数,也是9的倍数,其判断条件为:(x%5==0)&&(x%9==0) void main() { }
4.5 判断一个正整数是否是一个能被37整除的三位数。
分析:先判断输入的数是不是一个三位的正整数,如果是,再判断其是否能被37整除。一个三位的正整数,其必须大于0并且小于1000;一个数能被37整除,则此数除37后余数为0。
#include
4.6 将任意三个整数按由小到大顺序输出。
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
#include
int x;
if ((x%5==0)&&(x%9==0))
printf(\else
printf(\
scanf(\
int x;
if ((x>0)&&(x<1000)) if (x7==0)
printf(\ else
printf(\else
scanf(\
printf(\
分析:最小的数存放在x,先将x与y进行比较,如果x>y则将x与y的值进行交换,
习题解答
int x,y,z,t;
scanf(\ if (x>y)
{t=x; x=y; y=t;} /*交换x,y的值*/ if(x>z)
{t=z; z=x; x=t;} /*交换x,z的值*/ if(y>z)
{t=y; y=z; z=t;} /*交换z,y的值*/ printf(\}
4.7 编程实现:输入整数a和b,若a+b大于100,则输出a+b百位以上的数字,否则输出两数之和。
分析:将a+b存于变量s,s百位以上的数字可通过s/100得到。 #include
long a,b,s;
scanf(\ s=a*a+b*b; if (s<=100) printf(“%ld”,s); else
printf(“%ld”,s/100); }
4.8 给出一个5位数,判断它是不是回文数。如:12321是回文数,个位与万位相同,十位与千位相同。
分析:学会分解出每一位数。万位数字可通过将此数整除10000得到;将此数除10000后的得到的余数再整除1000,则可得到千位数字;将此数除100后的得到的余数再整除10,则可得到十位数字;将此数除10后的得到的余数就是个位数字。求出万位、千位、十位、个
位数后,如果个位等于万位并且十位等于千位,则此数就是回文。
2
2
2
2
2
2
#include
Int ge,shi,qian,wan,x; scanf(\
wan=x/10000; /*万位*/
习题解答
qian=x000/1000; /*千位*/ shi=x0/10; /*十位*/ ge=x; /*个位*/
if (ge==wan&&shi==qian) /*个位等于万位并且十位等于千位*/ printf(\ else
printf(\}
4.9 某企业发放的奖金是根据利润提成。利润≤10万元时,奖金可提10%;10万元<利润≤20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万<利润≤40万时,高于20万元的部分,可提成5%;40万<利润≤60万时,高于40万元的部分,可提成3%;60万<利润≤100万时,高于60万元的部分,可提成1.5%,利润≥100万元时,超过100万元的部分按1%提成。要求:输入当月利润,输出应发放奖金数额。
分析:由于利润数值较大,定义时需把利润定义为长整型。先计算10万、20万、40万、60万、100万利润的奖金提成bonus1、bonus2、bonus4、bonus6、bonus10,然后根
据实际利润i所处的数值段计算奖金。 #include
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf(\ bonus1=100000*0.1;
bonus2=bonus1+100000*0.075; bonus4=bonus2+200000*0.05; bonus6=bonus4+200000*0.03; bonus10=bonus6+400000*0.015; if(i<=100000) bonus=i*0.1; else if(i<=200000)
bonus=bonus1+(i-100000)*0.075; else if(i<=400000)
bonus=bonus2+(i-200000)*0.05; else if(i<=600000)
bonus=bonus4+(i-400000)*0.03; else if(i<=1000000)
bonus=bonus6+(i-600000)*0.015;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C练习答案(4、12章)在线全文阅读。
相关推荐: