题目如下
思路很简单,用循环算出12个月份之和再/12即可。关键就是输出精度的控制。
代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float sum,number,i;
for(i=1;i<=12;i++)
{
cin>>number;
sum+=number;
}
cout<<"$"<<setiosflags(ios::fixed)<<setprecision(2)<<sum/12<<endl;
return 0;
}
setiosflags()和setprecision()均在iomanip头文件下。
若不加前面的fixed 则结果将会保留两位有效数字并以科学计数法表示。fixed的效果是将小数分为整数部分、小数点和小数部分三部分,这样写可以控制小数部分的精度。
循环也可使用while(cin>>number)
,但在自己编译运行输入时,输入12个数字之后要按ctrl+z代表输入结束,否则cin
会一直等待读入。在线上判题时是文件读入,用while也不会出错。
一般来说,为了确保精度,在平时做题时用double而不用float,对内存占用不会浪费太多,也不会太大地影响运行速度。c语言读入double类型的数据:scanf("%lf",& )
而输出为:printf("%f", )
对于控制精度而言,用c语言中的printf()
会比较容易。头文件为cstdio或stdio.h。例如此题中的控制两位精度,则可以表示为printf("%.2f",sum/12);
其中的.数字即是用来控制精度的。
1.2.8
第一遍做题写的代码如下:
#include <cstdio>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
char C;
int A,B;
long long int result;
scanf("%c%d%d",&C,&A,&B);
if(C=='+')
result=A+B;
else if(C=='-')
result=A-B;
else if(C=='*')
result=A*B;
else if(C=='/')
{
float row=(float)A/B;
printf("%.2f\n",row);
}
printf("%lld\n",result);
}
return 0;
}
然后就会发现,在减的时候多了输出。因为无论是哪个运算符,都会执行printf result的语句,就算没有对result进行初始化也一样会有输出,因此要将printf放到if里面。
注意:要在%c前面加空格,用于跳过对空格和回车的读取,只有在char类型时,是默认连带着空格和回车一起读取的,所以一定要在%c前面加空格!!
#include <cstdio>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
char C;
long long int result,A,B;
scanf(" %c%lld%lld",&C,&A,&B);
if(C=='+')
printf("%lld\n",A+B);
else if(C=='-')
printf("%lld\n",A-B);
else if(C=='*')
printf("%lld\n",A*B);
else if(C=='/')
{
if(A%B==0)
printf("%lld\n",A/B);
else
{
float row=(float)A/B;
printf("%.2f\n",row);
}
}
}
return 0;
}
然后就把代码改成了这样。
1.当是除法时,判断结果是不是整数,完全可以用可不可以整除来判断,而不是直接判断是整型还是浮点。
2.当改成printf("%lld\n",A-B);
的时候,如果前面A,B是整型,类型是不会自动变成long的。
3.别忘换行