#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;

}

程序运行结果



本例程序中,PIdouble型;sr为整型。

在执行r*r*PI语句时,rPI都转换成double型计算,结果也为double型。

但由于s为整型,故赋值结果仍为整型,舍去了小数部分。

C++中小数的输出

c++程序中,cout在输出的时候回根据数据类型自动选择类型。但是在某些时候,我们需要指定输出的格式,例如数字20。我们希望按照20.00,保留两位小数的格式输出。此时就需要手动指定格式控制,c++提供两种格式控制输出

方式1c语言风格,

需要注意使用时需要添加cstdio头文件,%是格式控制开头,其后跟的字符指定输出的属性 .2 的含义为保留两位小数。f代表输出的是一个浮点类型。printf常用控制字符为

控制符

含义

%f

浮点类型

%d

整形

%c

字符

%s

字符串


对于没有%控制的字符串,将会按照原样输出

例如 printf(“a+b=%d\n”,n);假设n=5

输出结果为:a+b=5

方式2C++风格


使用前需要引入iomanip头文件

setiosflags(ios::fixed)设置以固定的浮点显示,

setprecision(2)设置输出两位小数位

Source

三学阶