男性,女性理想体重计算的C程序

时间:2018-03-05 11:06:24

标签: c

我根据身高性别编写了以下程序来检查男性和女性的理想体重:

#include<stdio.h>
#include<conio.h>

int main()
{
    int age;
    float height, mminima = 48, fminima = 45, iw;
    char gender;

    printf("Please Enter your Age,Height(in CM) and Gender\n");

    scanf("%d\n%f\n%c", &age, &height, &gender);

    if((gender = 'M') && (height < 152.4))
    {
         iw = mminima - (152.4 - height) * 1.1;
         printf("\nYour idle Weight should be= %f", iw);
    }
    else
    {
         iw = mminima + (height - 152.4) * 1.1;
         printf("\nYour Idle Wight should be= %f", iw);
    }

    if((gender = 'F') && (height < 152.4))
    {
        iw = fminima - (152.4 - height) * 1.1;
        printf("\nYour Idle weight should be= %f", iw);
    }
    else
    {
        iw = fminima + (height - 152.4) * 1.1;
        printf("\nYour Idle weight should be= %f", iw);
    }

    getch();
    return 0;
}

但如果陈述不是性别比较,那么输出总是显示我对男性和女性的理想体重。为什么?我哪里错了?请帮忙!!

3 个答案:

答案 0 :(得分:4)

你的if语句if((gender='M')&&(height<152.4))要求两个条件都是真实的......那么无论性别如何,你的else部分都会被执行。

如果高度高于152.4,则无论性别如何,elseif(gender=='M') { if (height<152.4) { } else { } } if(gender=='F') { if (height<152.4) { } else { } } 个都会运行

你应该分开这两个条件:

gender='F'

如前所述,您应将gender=='F'更改为CREATE TABLE `event` ( `id` varchar(36) NOT NULL, `device_id` varchar(36) NOT NULL, `device_type` varchar(45) NOT NULL, `data` text NOT NULL, `created_at` datetime NOT NULL, PRIMARY KEY (`id`), KEY `fk_event_device_idx` (`device_id`), KEY `event_device_type` (`device_type`), KEY `event_created_at_idx` (`created_at`), CONSTRAINT `fk_event_device` FOREIGN KEY (`device_id`) REFERENCES `device` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

答案 1 :(得分:2)

代码中的逻辑是错误的。首先你有一个错字

if((gender='M')&&(height<152.4))

gender='M'是一项任务,将始终返回true。

其次,如果其中任何一个条件为假,它就会else部分 - 即gender'F'时。您需要将if拆分为单独的条件。首先检查gender,然后一旦您确认它等于'M',那么您可以检查height,如下所示:

if(gender=='M')
{
    if(height<152.4)
    {
        iw=mminima-(152.4-height)*1.1;
        printf("\nYour idle Weight should be= %f",iw);
    }
    else 
    {
        iw=mminima+(height-152.4)*1.1;
        printf("\nYour Idle Wight should be= %f",iw);
    }
}

然后你想要else if检查gender等同'F',如下所示:

else if(gender=='F')
{
     if(height<152.4)
....

因为gender只能是两个有效值中的一个,所以如果匹配一个,则它与另一个不匹配。您可以添加最终else来处理gender不是'M''F'并报告错误的情况。

答案 2 :(得分:1)

应该纠正几个问题:

1)错误的比较:

if(gender='M') // always true; should be if(gender=='M')
if((gender = 'F') // always true; should be if(gender=='M')

2)程序逻辑错误,会为女性和男性打印Ideal Weight 如果高度高于152.4

3)许多重复代码应该封装在函数中。

4)错误的性别符号缺乏错误处理。

5)需要正确的拼写和打印输出。正确:Idle Wigh

6)无需打印重量74.3456789 .之后的一位数就足够了。

7)常量幻数应该在main之外定义,例如:

#define MAGIC_HEIGHT 152.4

8)使用switchcase可以提高程序的清晰度:

示例:

#include<stdio.h>
#include<conio.h>

#define M_MIN         48.0
#define F_MIN         45.0
#define FACTOR         1.1
#define MAGIC_HEIGHT 152.4

void print_ideal_weight(float iw)
{
    printf("\nYour Ideal weight should be = %.1f", iw);
}

float calculate_ideal_weight(float m, float height)
{
    float iw;

    if(height < MAGIC_HEIGHT){

        iw = m - (MAGIC_HEIGHT - height) * FACTOR;
    }
    else{
        iw = m + (height - MAGIC_HEIGHT) * FACTOR;
    }            
    return iw;
}

int main()
{
    int age;
    float height, iw;
    char gender;

    printf("Please Enter your Age, Height(in CM) and Gender(F/M): \n");

    scanf("%d\n%f\n%c", &age, &height, &gender);

    switch (gender)
    {
        case 'M':
            iw = calculate_ideal_weight(M_MIN,height);
            print_ideal_weight(iw);
        break;

        case 'F':
            iw = calculate_ideal_weight(F_MIN,height);
            print_ideal_weight(iw);
        break;

        default:
            printf("Unknown gender entered!\n");
        break;
    }

    getch();
    return 0;
}

输出:

Please Enter your Age, Height(in CM) and Gender(F/M):                                                             
25                                                                                                                
176                                                                                                               
M                                                                                                                 

Your Ideal weight should be = 74.0