77范文网 - 专业文章范例文档资料分享平台

C练习答案(4、12章)

来源:网络收集 时间:2020-04-17 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

习题解答

习题四

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 void main() { }

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 void main() { }

4.6 将任意三个整数按由小到大顺序输出。

然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

#include main() {

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 void main() {

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 void main() {

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 main() {

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章)在线全文阅读。

C练习答案(4、12章).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/986250.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: