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