c语言实验三

鸡兔同笼

已知鸡和兔的总数量为n,总腿数为m。输入nm,依次输出鸡的数目和兔的数目。如果无解,则输出“No answer”(不要引号)。

#include <stdio.h>

int main() {
	int n, m; //总数量和总腿数
	int x, y; //鸡、兔

	printf("请输入总数量和总腿数:\n");
	scanf("%d %d", &n, &m);

	if (m % 2 != 0 || m < 2 * n || m>4 * n) {
		printf("No answer\n");
		return 0;
	}

	x = (4 * n - m) / 2;
	y = n - x;

	printf("%d %d\n", x, y);
	return 0;

}

分析

程序首先提示用户输入总数量和总腿数,然后通过scanf函数读取输入。接着,程序检查总腿数是否满足“鸡兔同笼”问题的条件,即总腿数m必须为偶数,且大于等于2倍的总数量n,小于等于4倍的总数量n。如果不满足条件,则输出“No answer”。

如果满足条件,则计算鸡和兔的数量。鸡的数量x通过(4 * n - m) / 2计算得出,兔的数量y通过n - x计算得出。最后,程序输出鸡和兔的数量。

思路

“鸡兔同笼”问题可以用以下两个方程来表示:

  1. 鸡的数量乘以2(因为每只鸡有2只脚)加上兔的数量乘以4(因为每只兔有4只脚)等于总脚数m。
  2. 鸡和兔的总数量等于总头数n。

根据这两个方程,我们可以推导出:

x(鸡的数量)= (4 * n - m) / 2

这是因为:

  1. 兔的数量y = n - x(因为总数量是鸡和兔的数量之和)。
  2. 兔的脚数 = 4 * y。
  3. 所以,鸡的脚数 = m - 4 * y。
  4. 因为每只鸡有2只脚,所以鸡的数量x = (m - 4 * y) / 2。
  5. 将y = n - x代入上式,得到x = (4 * n - m) / 2。

 身高预测

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

设faHeight为其父身高,moHeight为其母身高,身高预测公式为:

男性成人时身高 = (faHeight + moHeight) * 0.54(cm)

女性成人时身高 = (faHeight * 0.923 + moHeight) / 2(cm)

此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。

编程从键盘输入小孩的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示喜爱,输入字符N表示不喜爱),利用给定公式和身高预测方法对小孩的身高进行预测。

#include <stdio.h>

int main() {
	char sex;					//性别
	float faHeight, moHeight;	//父亲,母亲身高
	char sports, diet;	        //运动,饮食
	float predictedHeight;		//孩子身高

	printf("请输入小孩的性别(F/M):");
	scanf("%c", &sex);

	//检查性别是否输入准确
	if (sex != 'M' && sex != 'F') {
		printf("输入性别无效,请重新输入!\n");
		return 1;
	}

	printf("请输入小孩父母的身高(cm):");
	scanf("%f %f", &faHeight, &moHeight);

	printf("请输入小孩是否喜爱体育锻炼(Y/N):");
	scanf(" %c", &sports);
	if (sports != 'Y' && sports != 'N') {
		printf("输入的体育爱好无效,请重新输入。\n");
		return 1;
	}

	printf("请输入小孩是否有良好的饮食习惯(Y/N):");
	scanf(" %c", &diet);
	if (diet != 'Y' && diet != 'N') {
		printf("输入的饮食习惯无效,请重新输入!\n");
		return 1;
	}

	if (sex == 'F') {
		predictedHeight = (faHeight * 0.923 + moHeight) / 2;
	}
	else {
		predictedHeight = (faHeight + moHeight) * 0.54;
	}
	if (sports == 'Y') {//喜欢运动
		predictedHeight += predictedHeight * 0.02;
	}
	if (diet == 'Y') {//饮食良好
		predictedHeight += predictedHeight * 0.015;
	}

	printf("预测小孩的身高为:%.2f\n", predictedHeight);
	return 0;
}

注意事项

scanf 是一个在 C 语言中常用的函数,用于从标准输入(通常是键盘)读取并解析数据。

scanf 函数的语法如下:

int scanf(const char *format, ...);

其中,format 参数是一个格式字符串,它可以包含一种或多种类型的转换说明符(如 %d 代表整数,%f 代表浮点数,%c 代表字符等)。这些说明符告诉 scanf 函数应该如何解析输入的数据。... 是可变参数列表,表示要接收输入数据的变量的地址。

下面是一些 scanf 函数的示例用法:

  1. 读取一个整数:

int num;
scanf("%d", &num);
  1. 读取一个浮点数:

float floatNum;
scanf("%f", &floatNum);
  1. 读取一个字符:

char charVal;
scanf("%c", &charVal);
  1. 读取一个字符串(注意,不需要使用 & 操作符):

char str[100];
scanf("%s", str);

在使用 scanf 函数时,需要注意以下几点:

  1. 确保提供的变量地址能够正确存储解析的数据。对于字符和字符串,可以直接传递变量名(不需要使用 &)。对于其他类型的数据,需要使用 & 操作符来传递变量的地址。
  2. 格式字符串中的说明符必须与要读取的数据类型匹配。例如,不能用 %d 来读取字符,也不能用 %c 来读取整数。
  3. 如果输入的数据与期望的格式不匹配,scanf 函数可能会陷入无法预测的行为。例如,如果输入一个字母而不是数字,可能会导致程序崩溃或产生不可预料的结果。因此,在使用 scanf 时,最好使用 scanf 的返回值来检查是否成功读取了数据。

用switch实现下面程序 (学生两门课成绩)

输入一个学生的两门课成绩(百分制),计算该生的总分并要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。总分在180分以上为‘A’,160~179分为‘B’,140~159分为‘C’,120~139分为‘D’,120分以下为‘E’。

具体要求:

①学生的两门课成绩通过键盘输入,成绩应该都为整数,输入之前要有提示信息。

②若输入的成绩不是百分制成绩,则给出错误提示信息,并且不再进行下面的等级评价;若输入的成绩是百分制成绩,则计算总分,并根据要求评价等级。

③按下面形式输出结果:

总分----〉等级

如:   186----〉A

#include<stdio.h>

int main() {
    int score1, score2; //存储两门课的成绩

    printf("请输入第一门课的成绩(百分制):");
    scanf("%d", &score1);
    if (score1 < 0 || score1>100) {
        printf("输入成绩无效,请重新输入!\n");
        return 1;
    }

    printf("请输入第二门课的成绩(百分之):");
    scanf("%d", &score2);
    if (score2 < 0 || score2>100) {
        printf("输入成绩无效,请重新输入!\n");
        return 1;
    }

    int totalScore = score1 + score2; //存储两门课的总成绩

    int grade = totalScore / 10;      //计算成绩的等级

    switch (grade) {
    case 19:
    case 18:
        printf("总分--->A\n"); //如果等级为19或18,输出A
        break;
    case 17:
    case 16:
        printf("总分--->B\n");
        break;
    case 15:
    case 14:
        printf("总分--->C\n");
        break;
    case 13:
    case 12:
        printf("总分--->D\n");
        break;
    default:
        printf("总分--->E\n");
        break;
    }

    return 0;

}

switch语句的用法

  1. switch语句后必须跟括号,且括号内为表达式。
  2. case后面必须是常量,或者常量表达式,且多个case后面的值不能相同。
  3. default子句是可选的,它的作用是对不正确的情况给出提示。
  4. break语句用来执行完一个case分支后使程序跳出switch语句块。

switch语句的注意事项

  1. case后面只能是常量,或者常量表达式,且整型或者可以转成整型(可以自动类型提升为整型的)。
  2. default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
  3. default不一定在最后,可以在任意位置,但是建议放在最后。
  4. break可以省略,但是最好不要省略,否则会出现一个现象:case穿透。
  5. switch语句的结束条件是遇到break就结束,或者执行到switch的有大括号 } 就结束。

 

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y木子李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值