关于信息学教育:虽然信息学优秀选手可以获得高校青睐,但不建议家长或学校以功利的心态给孩子选报信息学,需要看孩子自身的兴趣和意愿。
更不赞同一味以“奖项”为学习目标,而忽略“通过学习计算机科学知识提升科学素养”的本质。在孩子学有余力的情况下,从小学习计算机科学知识,高效培养科学素养,对孩子将来的思维方式必定有着重要的作用。
进入本文的主题,在C++中,如何保留小数位数?
比如:要计算圆的面积,需要保留两位小数,怎么实现呢?
01函数:setprecision
在C++中,提供了一个函数setprecision,可以帮助设置输出浮点数的精度。这个工具需要引入一个新的头文件:iomanip,并且需要在每次用cout输出时设置精度。
语法:setprecision(数字)
解释说明:数字为几,即保留几位小数。
本案例中,计算圆的面积,始终保留两位小数。操作步骤:
需要在文件开始处导入头文件,即:#includeiomanip输出时,在需要保留小数的前面添加:fixedsetprecision(整数)即可。
02表达式重构
比如:动态输入班上n个学员的年龄,并计算出平均年龄,结果保留两位小数。可以参照如下步骤:
先通过for循环动态获取n个学员的年龄信息,然后累加求和;再用总年龄除以总人数,这样就获取到了平均年龄。
需要注意表达式((sum+0.0)/n)的写法。为什么要让sum变量加个0.0呢?而不直接写成(sum/n)?
需要注意:整数除以整数,其结果永远是整数。那么,如何得到小数呢?还记得文章中讲到的数据类型转换吗?
C++入门基础系列:走进信息学奥赛,基本数据类型及类型转换方式
本案例中,要让表达式自动升级为小数,需要重新构造表达式,即:使其带小数值参与运算即可。这就是为什么在原有sum变量的基础上加个0.0的原因(sum+0.0)。这种重构方式不唯一,也可以(sum*1.0)或者修改后面n变量的表达式都可以实现。
还有一种方式,就是在一开始改变sum的数据类型为小数浮点型(double)类型,这样其结果也是小数。
第三种,就是使用强制类型转换也可实现,参考文。
03C++中使用C的语法
C++也保留了C语言的语法基础,只需要导入:cstdio头文件(C++中C语言头文件)即可,就可以使用C语言的语法书写代码。
改写上述案例的代码,如下:
注意比较:在C语言中的输入输出函数分别是:scanf、printf函数。
1、占位符
C语言中,对变量的输入输出要使用占位符。不同的数据类型,其占位符不同。
整型(int)——%d小数(float,单精度小数,存放有效位数小的小数)——%f小数(double,双精度小数,存放大的小数)——%lf字符(char)——%c
注意:C语言中没有字符串类型,需要使用字符数组替代。
2、输出函数
语法:printf(“格式化字符串”,变量列表);
所谓格式化字符串,就是含有占位符的字符串。有多少个占位符,其变量列表就需要多少个变量。
比如上图中的第18行代码,有一个占位符(%.2lf),其后面就跟了一个表达式(或变量),中间用逗号隔开;对小数来说,在占位符的中间加一个点和数字,即可精确小数的保留位数。
3、输入函数
语法:scanf(“格式化字符串”,变量地址列表);
所谓变量的地址,就是在变量的前面添加一个符号,该符号在C语言中表示地址符,可以获取变量的内存地址。
04总结
核心知识点:
1、C++中小数保留位数使用setprecision函数;而C语言中使用占位符即可。
2、表达式处理小数的技巧,一种方式直接使用小数的数据类型;另一种方式通过表达式的重新构造。