鱼C论坛

 找回密码
 立即注册
查看: 1301|回复: 1

[已解决]循环问题

[复制链接]
发表于 2023-10-8 15:38:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。

下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。

输入格式:
输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。

输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。


下面是我写的,但是还是运行有问题,请各位帮忙看看
#include <stdio.h>
int main()
{
    int n;
    char male;
    float h,e,a[10]={};
    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[i]=e;
    }
    for(int i=0;i<=n;i++)
    {
        printf("%.2f\n",a[i]);    }
}
最佳答案
2023-10-8 15:39:47
你的程序中存在一些问题。首先,在循环中,你使用了 <= 来判断循环的结束条件,这会导致数组越界。应该使用 < 来判断循环的结束条件。

其次,在读取用户输入时,你使用了 %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;
}

这样修改后的代码应该可以正确运行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-8 15:39:47 | 显示全部楼层    本楼为最佳答案   
你的程序中存在一些问题。首先,在循环中,你使用了 <= 来判断循环的结束条件,这会导致数组越界。应该使用 < 来判断循环的结束条件。

其次,在读取用户输入时,你使用了 %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;
}

这样修改后的代码应该可以正确运行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 23:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表