学习笔记 身高预测

任务描述

每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。 设faHeight为其父身高,moHeight为其母身高,身高预测公式为

  • 男性成人时身高=(faHeight + moHeight)×0.54cm
  • 女性成人时身高=(faHeight×0.923 + moHeight)/2cm
  • *上述公式为原始身高预测公式!!!**** 此外,
  • 如果喜爱体育锻炼,那么可增加身高2%(注意这个增加是在原始身高预测公式的基础上的增加);
  • 如果有良好的卫生饮食习惯,那么可增加身高1.5%(注意这个增加是在原始身高预测公式的基础上的增加)。

    编程从键盘输入

  1. 用户的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性);
  2. 父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高);
  3. 是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱);
  4. 是否有良好的饮食习惯(用字符型变量diet存储,输入字符Y表示良好,输入字符N表示不好)。 利用给定公式和身高预测方法对身高进行预测,输出所得结果,保留2位小数。

    编程注意事项

  • cm不是C语言的一部分,不能直接放到程序中;
  • 在身高增加2%中,不能直接在公式中使用2%,而应该转换为0.02再使用;
  • 字符char在赋值时,需要带单引号,例如char ch = 'Y'。
  • 注意乘号的使用,在C中乘号为*
  • double类型数据的输入输出格式控制为%lf
  • float类型数据的输入输出格式控制为%f

良好的输入提示信息

相关知识

为了完成本关任务,你需要掌握:1.数字、字符混搭输入,2.if-else的使用。

数字字符混搭输入

在C语言中数字与字符一起混搭输入,不太容易作对。 如有问题,可以使用编译环境,单步调试,查看输入是否正确。 在进行字符输入时,如果单步调试发现并没有获得想要的字符,应思考是何种原因造成。 比如在这里的测试输入,每个信息之间用空格隔开 170 160 F N N 前两个是数字,后面3个是字符。 数字输入可以方便的scanf("%lf",&faHeight); 但是字符在输入时,前面是空格字符,因此需要用一个temp字符去把空格清除,之后再读入需要的字符。 方法如下:

scanf("%c",&temp);
scanf("%c",&sex);

if-else的使用

(1)if-else和switch都是用于进行选择判断的,但是switch一般用于离散的值的判断条件选择,如果值不是离散的,还需要进行一些转换,让其为离散的,然后再用switch语句进行判断,相关例子,比如统计各个分数段的学生人数。

(2)编码的时候,要根据具体问题的需要来进行选择,哪种方式方便就用哪种方式。

(3)本题,无疑是用if-else比较方便。

编程要求

测试说明

 从左到右分别输入的数据为父亲身高,母亲身高,本人性别,是否喜欢体育锻炼,是否有良好饮食习惯。

测试输入:

 170 160 F N N 

预期输出:

 158.45

测试输入:

 172 165 M Y N

预期输出:

 185.62

代码实现

#include <stdio.h>
int main() 
{
	char x;//性别
	int faHeight,moHeight;//父母身高
	char sport;//运动
	char diet;//饮食
	int Y,N,F,M;//F女,M男,Y=yes,N=no
	//Y=1;
	//N=0,F=0,M=1;
	double a = 0, H = 0;//a为男生身高,H为女生身高
	printf("请输入父母身高:\n");
	printf("请输入性别 F OR M\n");
	printf("请输入饮食习惯 好为Y,不好为N:\n");
	printf("是否爱好体育运动:Y OR N\n");
	scanf("%d\n",&faHeight);
	scanf("%d\n",&moHeight);
	scanf("%c\n",&x);
	scanf("%c\n",&sport);
	scanf("%c",&diet);
	if(x=='M')
			{a=(faHeight+moHeight)*0.54;
            }
			else    a=(faHeight*0.923 + moHeight)/2;
			
	H = a;
	if(diet=='Y')
			{a=a+0.015*H;}
			
		
	if(sport=='Y')
		
			{a=a+0.02*H;}
	printf("%.2f",a);
return 0;
}

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值