【C语言及程序设计】项目1-11-1&2:(分离)各位数& 整数部分与小数部分

项目1-11-1:分离各位数

 1 /* 分离各位数.cpp:  
 2 问题描述:写一个程序,输入x(三位数),输出其个、十、百位数,用空格隔开 
 3 样例输入:768 
 4 样例输出:8 6 7 
 5 */  
 6   
 7 #include "stdafx.h"  
 8   
 9 int main()  
10 {  
11     int n, m;  
12     scanf_s("%d",&n);  
13   
14     do  
15     {  
16         m = n % 10;  
17         printf("%d", m);  
18   
19         n = n / 10;  
20   
21     } while (n != 0);  
22       
23     return 0;  
24 }  

感想:

最经典的module之一,对10^n取余,可以从数值中,取出n位以下的位数(含n位);

分离各位数就是基于这个方法,然而(任意位数的数值)分离各位数,如何实现正序(原序)排列呢?

项目1-11-2:分离整数部分与小数部分

 1 /* 分离整数和小数部分.cpp:  
 2 问题描述:编写一个程序,其功能为:从键盘上输入一个浮点数(小数点后有三位数),然后分别输出该数的整数部分和小数部分。 
 3 样例输入:123.456 
 4 样例输出:123 456 
 5 */  
 6   
 7 #include "stdafx.h"  
 8   
 9   
10 int main()  
11 {  
12     float f;  
13     int n, m, l(0);  
14     scanf_s("%f", &f);  
15     n = f;  
16       
17     l = (f * 1000);  
18     m = l % 1000;  
19     //方案2:m = (int)(f * 1000) % 1000;  
20     //方案1:m = 1000 * (f - n);  
21   
22     printf("%d %d", n, m);  
23   
24     return 0;  
25 }  

感想:

这道题的求解主要利用,项目1-4-2-2:计算并联电阻 中重点讨论过的,运算中 数据类型 的隐性转换。

然而隐性转换的微妙之处,在方案1和方案2的输出结果上就有所体现:

方案1是笔者最初的方案:

方案2是老师的方案:

方案1的结果很好理解,就是浮点数转换为整数,没有什么四舍五入的规则,而是直接舍去了小数部分;

然而方案2,居然实现了四舍五入的功能。

两个方案/算法 结果上的差异究竟是如何产生的?

猜你喜欢

转载自www.cnblogs.com/miyazakehime/p/9119498.html