1054 求平均值 (20 分)C语言
本题的基本要求非常简单:给定 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
思路
- 将字符转换成指定格式,判断是否为合法浮点数
- 判断完以后即可根据有效数的个数进行分类输出即可。
#include <stdio.h>
int main(){
	int n,i,j,cnt=0;//cnt记录合法数目个数
	scanf("%d",&n);
	char arr[50],sam[50];//存储输入的字符,存储格式化后的字符串
	double sum=0,tmp;//sum总和,实数tmp
	for(i=0;i<n;i++){
		scanf("%s",&arr);
		sscanf(arr,"%lf",&tmp);//从一个字符串中读进与指定格式相符的数据
		//printf("1.arr=%s\n", arr);
		//printf("1.tmp=%d\n", tmp);
		sprintf(sam,"%.2lf",tmp);//字符串格式化命令,主要功能是把格式化的数据写入某个字符串中
		int flag=0;
		for(j=0;j<strlen(arr);j++){//strlen()计算指定字符串arr的长度
			if(arr[j]!= sam[j]) flag=1;
		}
		if(flag != 0|| tmp< -1000|| tmp> 1000){
			printf("ERROR: %s is not a legal number\n",arr);
			continue;
		}else{
			sum += tmp;//求和
			cnt++;
		}
	}
	if(cnt>1)	printf("The average of %d numbers is %.2lf",cnt,sum/cnt);
	if(cnt==1)	printf("The average of 1 number is %.2lf",sum);
	if(cnt==0)	printf("The average of 0 numbers is Undefined");
	return 0;
}
sprintf函数
定义如下:
int sprintf( char *buffer, const char *format [, argument] … );
- 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。
- printf 和sprintf都使用格式化字符串来指 定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要 的字符串。
- 格式化数字字符串
 sprintf最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf在大多数场合可以替代itoa。如:
//把整数123打印成一个字符串保存在s中。
sprintf(s, “%d”, 123); //产生“123″
- 控制浮点数打印格式
 浮点数的打印和格式控制是sprintf的又一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后6位数字,比如:
sprintf(s, “%f”, 3.1415926); //产生“3.141593″
但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m表示打印的宽度,n表示小数点后的位数。比如:
sprintf(s, “%10.3f”, 3.1415626); //产生:“ 3.142″
sprintf(s, “%-10.3f”, 3.1415626); //产生:“3.142 ”
sprintf(s, “%.3f”, 3.1415626); //不指定总宽度,产生:“3.142″
sscanf函数
sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。
#include<stdio.h>  
int main(){
    char str[100];
    //用法一:取指定长度的字符串
    sscanf("12345","%4s",str);
    printf("用法一\nstr = %s\n",str);  
    //用法二:格式化时间
    int year,month,day,hour,minute,second;
    sscanf("2013/02/13 14:55:34","%d/%d/%d %d:%d:%d",&year,&month,&day,&hour,&minute,&second);
    printf("用法二\ntime = %d-%d-%d %d:%d:%d\n",year,month,day,hour,minute,second);  
    //用法三:读入字符串
    sscanf("12345","%s",str);
    printf("用法三\nstr = %s\n",str);  
    //用法四:%*d 和 %*s 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
    sscanf("12345acc","%*d%s",str);
    printf("用法四\nstr = %s\n",str);  
    //用法五:取到指定字符为止的字符串。如在下例中,取遇到'+'为止字符串。
    sscanf("12345+acc","%[^+]",str);
    printf("用法五\nstr = %s\n",str);  
    //用法六:取到指定字符集为止的字符串。如在下例中,取遇到小写字母为止的字符串。
    sscanf("12345+acc121","%[^a-z]",str);
    printf("用法六\nstr = %s\n",str);
    return 0;
}
1054 求平均值 (20 分)C语言的更多相关文章
- PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 凌宸1642
		PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 题目描述 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的 ... 
- PAT 1054 求平均值 (20)(代码+思路+测试用例)
		1054 求平均值 (20)(20 分) 本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输入是[-1000,1000]区 ... 
- 1054. 求平均值 (20)-PAT乙级真题
		今天刚刚到学校,2017年学习正式开始了,今天看到了浙大的<数据结构>这学期又要开课了,决定一定要跟着学习一遍:在大学生mooc网上学习:http://www.icourse163.org ... 
- PAT-乙级-1054. 求平均值 (20)
		1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ... 
- PAT 乙级 1054 求平均值 (20) C++版
		1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ... 
- PAT 1054. 求平均值 (20)
		本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个“合法”的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位.当你计算平均值的时候, ... 
- PAT(B) 1054 求平均值(Java)
		题目链接:1054 求平均值 (20 point(s)) 题目描述 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输 ... 
- PAT——1054. 求平均值
		本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个“合法”的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位.当你计算平均值的时候, ... 
- java实现表达式求值 (20 分)-------非递归版
		Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近由学会了一些简单的函数求值.比如,它知道函数min(20, 23)的值是20, add(10, 98)的值是108等等.经过训练,Dr.Kong ... 
随机推荐
- 洛谷 1602 Sramoc问题
			Description 话说员工们整理好了筷子之后,就准备将快餐送出了,但是一看订单,都傻眼了:订单上没有留电话号码,只写了一个sramoc(k,m)函数,这什么东西?什么意思?于是餐厅找来了资深顾问 ... 
- 深入Java线程管理(四):线程通讯
			线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务. Object类中相关的方法有两个notify方法和三个wait方法: http://docs.oracle.com/ ... 
- Pycharm中Python PEP8 的警告
			https://blog.csdn.net/serizawa_tamao/article/details/88658694 
- tp5  select出来数据集(对象)转成数组
			1.先在数据库配置文件中 //数据集返回类型 'resultset_type' => 'collection', 2.在使用时, 使用 toArray() 方法 //查询数据库 $news = ... 
- Python--day30--网络基础
			单波: 查找mac: 
- [转]关于/r与/n 以及 /r/n 的区别总结
			应该说还是区别的,\r就是回到行首,\n就是到下一行的,但是一般我们输出程序时,看不到明显的差别的 '\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格.通常用的Enter是两个加起来 ... 
- P1079 好朋友
			题目描述 小可可和所有其他同学的手腕上都戴有一个射频识别序列号码牌,这样老师就可以方便的计算出他们的人数.很多同学都有一个"好朋友" .如果 A 的序列号的约数之和恰好等于B 的序 ... 
- linux flags 参数
			记住 kmalloc 原型是: #include <linux/slab.h> void *kmalloc(size_t size, int flags); 给 kmalloc 的第一个参 ... 
- 头条面试题-创建一个Event类,并创建on、off、trigger、once方法
			一.创建一个Event.js class Event { constructor() { this.handlers = { // 记录所有的事件和处理函数 } } /* * * on 添加事件监听 ... 
- 【2016常州一中夏令营Day6】
			小 W 算树[问题描述]山有苞棣,隰有树檖.未见君子,忧心如醉~小 W 养了一棵有 N 个点的无根树,由于小 M 最喜欢二叉树了,为了讨小 M 欢喜,小 W想知道有多少个点作为根后,这棵树是一棵二叉树 ... 
