循环问题
专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。
输入格式:
输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 之间的实数。
输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。
下面是我写的,但是还是运行有问题,请各位帮忙看看
#include <stdio.h>
int main()
{
int n;
char male;
float h,e,a={};
scanf("%d",&n);
for(int i=0;i<=n;i++)
{
scanf("%c %f",&male,&h);
if(male=='F'){
e=h*1.09;
}
else if(male=='M')
{
e=h/1.09;
}
a=e;
}
for(int i=0;i<=n;i++)
{
printf("%.2f\n",a); }
} 你的程序中存在一些问题。首先,在循环中,你使用了 <= 来判断循环的结束条件,这会导致数组越界。应该使用 < 来判断循环的结束条件。
其次,在读取用户输入时,你使用了 %c 来读取字符,但是这会读取到换行符。你可以在读取字符之前使用一个空格来跳过换行符。另外,你可以使用 %lf 来读取 double 类型的浮点数。
最后,在计算情侣的最佳身高时,你将结果保存在了数组中,但是数组的大小只有10,而用户数可能大于10。你可以使用动态数组来解决这个问题。
下面是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
char male;
double h, e;
scanf("%d", &n);
double *a = (double *)malloc(n * sizeof(double));
for (int i = 0; i < n; i++)
{
scanf(" %c %lf", &male, &h);
if (male == 'F')
{
e = h * 1.09;
}
else if (male == 'M')
{
e = h / 1.09;
}
a[ i] = e;
}
for (int i = 0; i < n; i++)
{
printf("%.2lf\n", a[ i]);
}
free(a);
return 0;
}
这样修改后的代码应该可以正确运行了。
页:
[1]