-
题目大意:计算给出数字的平均数,但是有的数字是不规范的,排除不规范的数字后,计算剩下数字的平均数。
-
思路:
- 用一个sum计算所有符合规范的数的总和
- 用sscanf()将所给数字以浮点数的形式存给字符串a(若为字符串就不会赋值给a),然后再用sprintf()把a的内容以精确度为0.2的格式赋值给b
- 比较a和b是否相同,若不同就代表该数不规范;若数字不在[-1000, 1000]内,也不规范
-
知识点:
- c语言:
- 字符串的输入方式
- string的常用方法
- 小数的精确度
- c++:
- sscanf()
- sprintf()
- c语言:
-
代码:
#include <iostream> #include <string.h> using namespace std; int main() { int n, count=0; double temp, sum = 0.0; char a[1000], b[100]; cin >> n; for(int i = 0; i < n; i++){ bool flag = true; scanf("%s", a); sscanf(a, "%lf", &temp); sprintf(b, "%.2lf", temp); for(int j = 0; j < strlen(a); j++) if(a[j] != b[j]){ flag = false; break; } if(!flag || temp < -1000 || temp > 1000){ printf("ERROR: %s is not a legal number\n", a); continue; } else{ count++; sum += temp; } } if(count == 1) printf("The average of 1 number is %.2lf", sum / count); // number为单数!!! else if(count > 1) printf("The average of %d numbers is %.2lf", count, sum / count); else printf("The average of 0 numbers is Undefined"); return 0; }
-
总结:
-
c语言:
-
输入字符串:
#include <iostream> int main(){ char a[100]; scanf("%s", a); // input printf("%s", a); // output return 0; }
-
用字符串的方法(如
strlen()
)时要#include <string.h>
(#include <string>
没用) -
c语言字符串 用
strlen()
要调用#include <string.h>
-
#include <iostream> int main(){ double a; scanf("%lf", &a); // 若输入2.3.4,赋值给a的值是2.3 return 0; }
-
double型变量:
- scanf格式符为%lf
- printf格式符为%f
-
输出格式:
- %md:使不足m位的的int型变量以m位进行右对齐输出,高位用空格补齐
- %0md:同上,不同处是用0补齐
- %.mf:使浮点数保留m位小数输出
-
-
c++:
-
sscanf()
和sprintf()
:-
两者均在
#include<cstdio>
头文件下 -
返回值:
-
sscanf()
:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。即,若输入不规范,不会把不规范的东西赋值给变量。
-
sprintf()
:如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。
-
-
sscanf()可以理解为:string+scanf;
ssprintf()可以理解为:string+printf;
理解:
-
scanf("%d",&n);
和printf("%d",n);
可以理解为:(screen表示屏幕)-
scanf(screen,"%d",&n);
:把screen的内容以"%d"的格式传输到n中(从左到右) -
printf(screen,"%d",n);
:把n以"%d"的格式传输到screen上(从右到左)
-
-
sscanf()
和sprintf()
:sscanf(str, "%d", &n);
:把string的内容以"%d"的格式传输到n中(从左到右)sprintf(str, "%d", n);
把n以"%d"的格式传输到string上(从右到左)
-
-
sscanf()
和sprintf()
比较复杂的应用:-
sscanf()
:#include <cstdio> using namespace std; int main() { int n; double db; char str[] = "2018:3.14,hello"; char s[100]; sscanf(str, "%d:%lf,%s", &n, &db, s); printf("n=%d db=%.2f s=%s", n, db, s); return 0; }
输出:
n=2018 db=3.14 s=hello
-
sprintf()
:#include<cstdio> using namespace std; int main() { int n=12; double db=3.1415; char s[] = "good"; char str[100]; sprintf(str, "%d:%lf,%s", n, db, s); printf("%s\n",str); return 0; }
输出:
12:3.141500,good
-
-
-
-
【PAT】1108 Finding Average (20 分)
最新推荐文章于 2023-02-28 18:01:27 发布