C语言12课课后作业问题
#include <stdio.h>#include <stdbool.h>
int main()
{
int op1, op2;
char ch;
float result;
bool invalid = false; //这个布尔型的变量定义了有什么用,下面的invalid用法都没看明白
printf("请输入式子:");
scanf("%d %c %d", &op1, &ch, &op2);
switch (ch)
{
case '-': op2 = -op2; // no break //这里定义了减法把被减数变为负值,但没有说减法的result是多少啊,怎么求得减法?
case '+': result = (float)op1 + op2; break;
case '*': result = (float)op1 * op2; break;
case '/':
if (op2 != 0)
{
result = (float)op1 / op2;
break;
}
else
{
invalid = true;
break;
}
}
if (invalid)
{
printf("除数不能为零!\n");
}
else
{
printf("结果是:%.2f\n", result);
}
return 0;
}
问题都在上面问题注释里了。谢谢{:5_92:} 第一个问题:invalid 的作用
>这是一个用于标记被除数是不是0的标志,是0则为true 非0 则为false。
定义时默认设置为false 即被除数不是0
在case '/': 中 如果op2(实际输入的被除数)是0 将invalid 赋值为true
在输出时判断invalid 如果为true 说明实际输入的被除数是0 输出:除数不能为零!
第二个问题:case '-': 中的result 是多少
>这里涉及到C语言中switch case 语句的一个知识点:
Switch语句重点:从匹配处开始顺序执行,直到遇到break或结束。
意思就是只要进入了某一条case语句,如果没有遇到break,程序就会把后面的所有case代码都运行一遍,一直到遇到break或者switch代码段结束
对于这个程序 case '-': 后面是没有break的 所以程序会继续执行 case '+':后面的内容,执行结束后遇到break,结束整个switch
也就是说这个程序做减法的逻辑是这样的:先进入 case '-':把 被减数变为相反数重新存储在op2中,再进入 case '+': 计算 result = (float)op1 + op2
相当于完成一次减法。
SHRS23 发表于 2020-2-6 15:39
第一个问题:invalid 的作用
>这是一个用于标记被除数是不是0的标志,是0则为true 非0 则为false。
定义 ...
第二个问题懂了,谢谢。
第一个问题,所以我定义的那个布尔变量是只有true和false两个值是吗?那个if(invalid)是什么意思,怎么判断的
程序走到没有走到invalid = true,
从第一个break出去的就走到if(invalid)
这时候invalid = false就是值为0,所以执行else
是这个意思吗 老牛来学习 发表于 2020-2-6 18:31
第二个问题懂了,谢谢。
第一个问题,所以我定义的那个布尔变量是只有true和false两个值是吗?那个if(i ...
if(表达式) 语句
其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。
C语言对 表达式为真 定义的比较宽泛,对于布尔类型 true 就是真,对于其他的值类型,比如int整数型,非0值就是真
if (invalid) 相当于 if(invalid == true)
假设 输入是 5 / 0
判断运算符的时候进入 case '/': 分支(红色箭头处)
然后进行 if 判断 ,此时 op2 != 0 表达式的值为 假(因为 ch2 = 0)
进入else 分支(第一个绿色方块)将 invalid 设为 true
然后进行 if 判断,此时invalid 为真,执行第二个绿色方块
输出 除数不能为零!
假设 输入是 4 / 2
判断运算符的时候进入 case '/': 分支(红色箭头处)
然后进行 if 判断 ,此时 op2 != 0 表达式的值为 真(因为 ch2 = 2)
进入第一个黄色方块,不改变invalid值(保持默认的false 假),直接计算结果
然后进行 if 判断,此时invalid 为假,执行第二个黄色方块
输出 结果是:2 SHRS23 发表于 2020-2-6 19:07
假设 输入是 5 / 0
判断运算符的时候进入 case '/': 分支(红色箭头处)
然后进行 if 判断 ,此时 op ...
感谢感谢!!!!!!
页:
[1]