PAT 1054求平均值(20分) | 您所在的位置:网站首页 › jojo八漫画在哪里看免费 › PAT 1054求平均值(20分) |
目录 解题思路: 分层解析: 代码部分: 关于人为书写检测机制的技巧: 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。 输入格式: 输入第一行给出正整数 N(≤100)。随后一行给出 N 个实数,数字间以一个空格分隔。 输出格式: 对每个非法输入,在一行中输出 ERROR: X is not a legal number,其中 X 是输入。最后在一行中输出结果:The average of K numbers is Y,其中 K 是合法输入的个数,Y 是它们的平均值,精确到小数点后 2 位。如果平均值无法计算,则用 Undefined 替换 Y。如果 K 为 1,则输出 The average of 1 number is Y。 输入样例 1: 7 5 -3.2 aaa 9999 2.3.4 7.123 2.35输出样例 1: ERROR: aaa is not a legal number ERROR: 9999 is not a legal number ERROR: 2.3.4 is not a legal number ERROR: 7.123 is not a legal number The average of 3 numbers is 1.38输入样例 2: 2 aaa -9999输出样例 2: ERROR: aaa is not a legal number ERROR: -9999 is not a legal number The average of 0 numbers is Undefined 解题思路:首先判断输入是否合法,具体有以下要求: 1.是实数; 2.范围在[-1000,1000]内 &&如果有小数点,小数至多两位; 其次,按照要求书写主函数,进行输出显示层面的编程; 分层解析:1.是实数: 首先,输入的就不一定为一个数,所以输入的数据类型就应该是字符数组;循环遍历这个数组,需要判断这3点来证明输入的字符数组是否可以转化为实数: 只由数字、一个或零个负号、一个或零个小数点组成; 判断方法为,在满足以上条件下,符合以上条件的字符数总数是否等于字符数组长度; 2.范围与小数位数: 范围很好判断,在已经判断字符数组可以转化为实数之后,就可以用atof()函数来实现转化,从而判断范围; 关于包括atof()在内的所有字符串转数字的函数及其相应用法,请参考以下连接:https://blog.csdn.net/bc202205/article/details/128433151?spm=1001.2014.3001.5501; 小数位数:循环遍历数组,确定小数点的位置;通过求取小数点后有几个数组元素,就可以确定该字符数组所转化的实数是否满足小数位数的要求了; 代码部分:函数代码实现如下: #include #include using namespace std; bool isnumber(char a[], int len)//判断是否为实数; { int counts = 0, countdots = 0, countfu = 0; for (int i = 0; i < len; i++) { if (a[i] >= '0' && a[i] 1000 || atof(a) < -1000)) return false;//判断是否为范围内的实数; else//判断是否为2位小数以内的实数; { int pos = -1; if (isnumber(a, len)) { for (int i = 0; i < len; i++) if (a[i] == '.') pos = i; if (pos == -1) return true; else return len - pos - 1 > n; char a[100]; int counts = 0; double sum = 0; for (int i = 0; i < n; i++) { cin >> a; if (isfloat(a, strlen(a)) == false) cout |
CopyRight 2018-2019 实验室设备网 版权所有 |