目录😋
任务描述
相关知识
1、输入数值
2、选择结构语句
3、计算结果并输出
编程要求
测试说明
通关代码
测试结果
任务描述
本关任务:编写一个程序,该程序需输入个人数据,进而预测其成年后的身高。
相关知识
为了完成本关任务,你需要掌握:
- 输入数值
- 选择结构语句
- 计算结果并输出
1、输入数值
使用
scanf
进行输入
- 在 C 语言中,
scanf
函数用于从标准输入(键盘)读取数据。例如,输入一个整数:
#include <stdio.h> int main() {int num;scanf("%d", &num);printf("You entered: %d\n", num);return 0; }
当输入多个数据时,可以这样:
int num1, num2; scanf("%d %d", &num1, &num2);
输入字符串
- 输入字符串可以使用
%s
格式说明符,但要注意scanf
读取字符串时遇到空格或换行符会停止。例如:char str[100]; scanf("%s", str);
- 如果要输入包含空格的字符串,可以使用
fgets
函数(需要包含<stdio.h>
):char str[100]; fgets(str, sizeof(str), stdin); // 如果不想要最后的换行符,可以这样处理 if (str[strlen(str) - 1] == '\n') {str[strlen(str) - 1] = '\0'; }
输入验证
- 当用户输入错误类型的数据时,
scanf
会返回错误。可以通过检查scanf
的返回值来进行输入验证。例如:int num; if (scanf("%d", &num)!= 1) {printf("Invalid input\n");// 可以进行一些处理来清除输入缓冲区的错误数据while (getchar()!= '\n'); }
2、选择结构语句
条件语句(if、if-else、switch)
- if 语句:
if
语句是 C 语言中用于实现条件判断和分支执行的基本结构之一。其核心在于根据给定的条件表达式的真假来决定是否执行特定的代码块。
- 条件表达式可以是任何能够得出布尔值(真或假)的表达式,例如比较运算(
>
、<
、>=
、<=
、==
、!=
)、逻辑运算(&&
、||
、!
)以及函数调用(只要函数返回值能被隐式转换为布尔值)等的组合。例如:if (a > 10 && b < 20) { /* 执行语句 */ }
,这里只有当a
大于10
并且b
小于20
这两个条件同时满足时,花括号内的代码才会被执行。- 执行语句块可以是一条或多条语句,如果只有一条语句,花括号可以省略,但为了增强代码的可读性和可维护性,通常建议加上花括号。例如:
if (x == 5) printf("x is 5\n");
这种写法在简单情况下可行,但如果后续需要添加更多语句,就容易出现错误,而写成if (x == 5) { printf("x is 5\n"); otherFunctionCall(); }
则更加清晰和安全。- if - else 语句:
if - else
语句在if
语句的基础上,为条件不成立的情况提供了另一个执行路径。当if
后面的条件表达式为假时,就会执行else
后面的语句块。
- 这种结构在很多实际场景中非常有用,比如前面提到的判断成绩是否及格的例子,它确保了程序在任何情况下都有明确的输出,避免了因条件不满足而导致的不确定性。再比如在一个判断数字正负性的程序中:
if (num > 0) { printf("正数\n"); } else if (num < 0) { printf("负数\n"); } else { printf("零\n"); }
,这里通过else if
进一步细分了条件,对num
的三种可能情况(大于0
、小于0
、等于0
)都进行了相应的处理,使程序的逻辑更加严谨和完整。- 用于根据不同条件执行不同的代码块。
例如,判断一个数是奇数还是偶数:
int num; scanf("%d", &num); if (num % 2 == 0) {// 当num除以2的余数为0时,说明num是偶数printf("%d is even\n", num); } else {// 当num除以2的余数不为0时,说明num是奇数printf("%d is odd\n", num); }
- 通过
scanf
函数从用户输入获取一个整数,并存储在num
变量中。- 使用
if
语句判断num
是否为偶数。num % 2 == 0
这个条件表达式利用了取模运算(%
),当num
除以2
的余数为0
时,条件为真,就会执行if
语句块内的printf("%d is even\n", num);
,输出num
是偶数的信息。- 如果
num
除以2
的余数不为0
,即条件为假,那么就会执行else
语句块内的printf("%d is odd\n", num);
,输出num
是奇数的信息。
switch
语句
switch
语句主要用于处理多个固定的、离散的选项情况。它根据一个整型表达式(通常是一个变量)的值,与各个case
常量进行匹配,一旦匹配成功,就执行对应的case
分支下的语句,直到遇到break
语句或者switch
语句结束。- 当有多个固定的选项时,可以使用
switch
语句。例如,在一个简单的菜单选择程序中:
int choice; scanf("%d", &choice); switch (choice) {case 1:printf("打开文件\n");break;case 2:printf("保存文件\n");break;case 3:printf("退出程序\n");break;default:printf("无效的选择,请重新输入\n"); }
这里,
switch
表达式choice
的值会依次与case 1
、case 2
、case 3
进行比较,如果choice
等于1
,就会执行printf("打开文件\n");
,然后遇到break
语句,跳出switch
结构;如果choice
的值与所有case
常量都不匹配,就会执行default
分支下的语句,提示用户输入无效。需要注意的是,
case
常量的值必须是唯一的,且在同一个switch
语句中不能重复;break
语句的作用至关重要,如果遗漏break
,程序将会继续执行下一个case
分支的语句,这可能不是预期的行为,这种现象被称为 “case 穿透”,在某些特定情况下可以利用这一特性来简化代码,但在大多数情况下,需要谨慎使用break
来确保程序的正确性。
3、计算结果并输出
基本运算
- C 语言支持各种算术运算,如加法
+
、减法-
、乘法*
、除法/
和取模%
。例如:int a = 10, b = 3; int sum = a + b; int diff = a - b; int product = a * b; int quotient = a / b; int remainder = a % b;
函数和表达式
- 可以定义函数来进行计算。例如,定义一个函数来计算两个数的平方和:
int squareSum(int x, int y) {return x * x + y * y; } int main() {int a = 3, b = 4;int result = squareSum(a, b);printf("The square sum is: %d\n", result);return 0; }
输出结果
- 使用
printf
进行输出。除了简单的变量输出,还可以输出表达式的结果:int a = 5; printf("The value of a + 10 is: %d\n", a + 10);
编程要求
根据提示,在右侧编辑器补充代码,计算并输出最终预测的身高。
测试说明
平台会对你编写的代码进行测试:
- 性别为男:输入1
- 性别为女:输入0
- 爱好体育锻炼:输入1,否则输入0
- 好好吃饭输入1,否则输入0
- 输入的数据用空格或回车分隔。
测试输入:
1 165 175 1 1
预期输出:
your height is 192.890167
测试输入:
0 160 175 0 0
预期输出:
your height is 160.762497
开始你的任务吧,祝你成功!
通关代码
#include<stdio.h>
int main()
{float mon,dad,height;int sex;int sport, eat;//printf("Please your input your sex, Male input 1,Female input 0\n");/*********Begin*********/scanf("%d",&sex);//printf("Please input your mother and fathers height\n");scanf("%f %f", &mon, &dad); //printf("Please input if you like sport and have a good eat habit?Yes input 1,No input 0\n ");scanf("%d %d", &sport, &eat);if (sex == 1){height = (mon + dad) * 0.54;}else{height = (mon * 0.923 + dad) / 2;}if (sport == 1){height *=1.02;}if (eat == 1){height *=1.03;}printf("your height is %f",height);/*********End**********/ return 0;
}