c语言第四章作业,《C语言程序设计》第四章课后习题第五题解答

题目:从键盘输入一个小于1000的正数,要求输出它的平方根(如果平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000的正数,若不是,则要求重新输入。

解答:

从键盘输入一个小于1000的正数,首先定义一个整型存储数据,比如 int a;

要求是正数,否则提示重新输入。则这里可以通过if(a>0)来判定。

输出平方根需要用到math.h 里面的sqrt()函数。

这里还有一个判断,也就是平方根的结果如果不是整数则输出整数部分,这里还隐含着一个分支是:如果是整数则直接输出平方根。

那么如何判断一个数是否为整数,可以采用以下方式:

如果上面平方根的结果存储为double类型,如 double b;则将b强制性转换为int类型后再和b比较,如果还相等,则b原来就是整数。

double b;

if((int)b==b)

{

整数,比如当b=1.1,则int(b)=1,此时经过类型转换后的1已经舍弃了小数部分,肯定不等于原来的b

}

代码如下:

f2a3ee0849a086a65d887757ad3ce96f.png

fed2f731036aabf0cf11c09e226cec87.png

上面的可以简写成:

a21ee43fca8a836af649564596fa83b0.png

注意:以下写法是错误的,

95dcc4f569686e2502eb029cda2f3f67.png

上面的写法虽然是控制了0个小数点,但是会导致四舍五入。比如看下面的例子:

6f99d607f67170e62d935acccf99f23a.png

如果直接由float转为%d会因为字节长度问题导致严重错误。

如果是由%.0f输出,则系统自动四舍五入。

所以只能用(int)a的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值