#628. 一维数组基本练习——年龄与疾病(拓展练习)
一维数组基本练习——年龄与疾病(拓展练习)
Description
某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理,按照0-18、19-35、36-60、61以上(含61)四个年龄段统计的患病人数占总患病人数的比例。Input Format
共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄。Output Format
按照0-18、19-35、36-60、61以上(含61)四个年龄段输出该段患病人数占总患病人数的比例,以百分比的形式输出,精确到小数点后两位。每个年龄段占一行,共四行。【注】请仔细阅读提示获取输出中保留有效数字的详细使用方法。
如不乐意,则请使用
printf("%.2lf",a);或
cout<<fixed<<setprecision(2)<<a;
来输出保留两位有效数字的小数(a为要输出的小数)。
10
1 11 21 31 41 51 61 71 81 91
20.00%
20.00%
20.00%
40.00%
Hint
拓展阅读:
C++中变量的自动转换
变量的数据类型是可以转换的。转换的方法有两种, 一种是自动转换,一种是强制转换。
自动转换
自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:
1.若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
2.转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。
3.所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
4.char型和short型参与运算时,必须先转换成int型。
5.在赋值运算中,赋值号两边量的数据类型不同时, 赋值号右边量的类型将转换为左边量的类型。
如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度, 丢失的部分按四舍五入向前舍入。
当参加算术或比较运算的两个操作数类型不统一时,将简单类型向复杂类型转换,
char(short) -> int(long) -> float
-> double
下面程序段表示了类型自动转换的规则。
#include<iostream>
using namespace std;
int
main(){
double PI=3.14159;
int s,r=5;
cout << "r*r*PI=" << r*r*PI << endl;
s=r*r*PI;
cout << s << endl;
}
程序运行结果
本例程序中,PI为double型;s,r为整型。
在执行r*r*PI语句时,r和PI都转换成double型计算,结果也为double型。
但由于s为整型,故赋值结果仍为整型,舍去了小数部分。
C++中小数的输出
在c++程序中,cout在输出的时候回根据数据类型自动选择类型。但是在某些时候,我们需要指定输出的格式,例如数字20。我们希望按照20.00,保留两位小数的格式输出。此时就需要手动指定格式控制,c++提供两种格式控制输出
方式1:c语言风格,
需要注意使用时需要添加cstdio头文件,%是格式控制开头,其后跟的字符指定输出的属性 .2 的含义为保留两位小数。f代表输出的是一个浮点类型。printf常用控制字符为
控制符
|
含义
|
%f
|
浮点类型
|
%d
|
整形
|
%c
|
字符
|
%s
|
字符串
|
对于没有%控制的字符串,将会按照原样输出
例如 printf(“a+b=%d\n”,n);假设n=5;
输出结果为:a+b=5
方式2:C++风格
使用前需要引入iomanip头文件
setiosflags(ios::fixed)设置以固定的浮点显示,
setprecision(2)设置输出两位小数位