
本关任务:编写一个程序,该程序需输入个人数据,进而预测其成年后的身高。
为了完成本关任务,你需要掌握:
使用scanf进行输入
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');
}条件语句(if、if-else、switch)
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语句的基础上,为条件不成立的情况提供了另一个执行路径。当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来确保程序的正确性。
基本运算
+、减法-、乘法*、除法/和取模%。例如: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 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;
}