0
已解决
小C在做一道数学的图形计算题,已知有n个图形,每个图形要么是圆要么是正方形,每种图形给定一个参数,如果是该图形是圆,则这个参数就为圆的半径,如果该图形是正方形,则这个参数就是正方形的边长。现有2种计算模式,当模式为0时计算该图形的周长,当模式为1时计算该图形的面积,并将计算的结果四舍五入保留2位小数。圆周率取3.14
输入描述 Input Description
输入为n+1行:
第一行为图形的个数n(n≤100);
之后的n行,每行分别为输入的图形形状("round"表示圆,"square"表示正方形)、图形的对应参数a,以及计算的模式(0:周长,1:面积),之间用单个空格隔开。
输出描述 Output Description
输出为n行,
每一行为对应图像所要求的计算结果,四舍五入并保留2位小数。
样例输入 Sample Input
2
round 2.4 0
square 2.4 1
样例输出 Sample Output
15.07
5.76
···································
#include<bits/stdc++.h>
using namespace std;
struct txjs
{
string tx;
double cs,temp,sum;
bool ms;
}a[101];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].tx>>a[i].cs>>a[i].ms;
}
for(int i=1;i<=n;i++)
{
if(a[i].tx=="round")
{
if(a[i].ms==0)
{
a[i].temp=3.14*a[i].cs*2;
}
else if(a[i].ms==1)
{
a[i].temp=3.14*a[i].cs*a[i].cs;
}
}
else if(a[i].tx=="square")
{
if(a[i].ms==0)
{
a[i].sum=a[i].cs*4;
}
else if(a[i].ms==1)
{
a[i].sum=a[i].cs*a[i].cs;
}
}
}
for(int i=1;i<=n;i++)
{
printf("%.2f\n",a[i].temp);
printf("%.2f\n",a[i].sum);
}
return 0;
}
要么改程序(并且还得说为什么这样改),要么说思路,谢谢
0
已采纳
for(int i=1;i<=n;i++)
{
printf("%.2f\n",a[i].temp);
printf("%.2f\n",a[i].sum);
}
这样写不就输出2*n次吗,一个表示周长,一个表示面积,用一个double类型就可以储存了,样例是输入一行,输出一行,把sum和temp合并起来,
即:
for(int i=1;i<=n;i++)
{
printf("%.2f\n",a[i].sum);
}
这样就防止在判断中出现一次sum或temp不赋值的情况,使程序都变成sum或temp类型
if(a[i].tx=="round")
{
if(a[i].ms==0)
{
a[i].sum=3.14*a[i].cs*2;
}
else if(a[i].ms==1)
{
a[i].sum=3.14*a[i].cs*a[i].cs;
}
}
else if(a[i].tx=="square")
{
if(a[i].ms==0)
{
a[i].sum=a[i].cs*4;
}
else if(a[i].ms==1)
{
a[i].sum=a[i].cs*a[i].cs;
}
}
0
