这里的新人,说实话,感觉有点像傻瓜。
基本上,我在大学,我的一个模块是编程入门(学习C)。我真的很喜欢学习编程,真的想进一步学习;但是,我真的在努力学习数学/逻辑。例如,每周我们都会得到这些我一直在做的小测试 - 除非它们涉及(对我来说很复杂但很容易,我确定)数学代码行。
以下是其中一个问题:
运行以下代码时输出以下内容:
#include<stdio.h>
void main()
{
int a = 300, b = 100, c = 100;
if(a >= 400)
b = 300;
c = 200;
printf("%d, %d, %d\n", a, b, c);
}
所以我基本上回答了300,100,100(在多项选择答案中),但答案是300,100,200。并且(如果我对你完全诚实)如果选择300,300,200的选项存在于多选中,我会选择它。我似乎无法理解为什么 - 在结果中 - 只有c的值被改变了?
老实说,在这部分编程方面,我真的很挣扎。我决心继续努力。
我们将非常感谢您提供的任何提示或建议。
亲切的问候。
答案 0 :(得分:4)
如果您查看代码,b
和c
自初始化后就会分配值。
但如果条件b
为真,则a >= 400
会更改,如果b
为真,则200
设置为300 >= 400
。真的吗?不,所以,b
保持不变。
200都会分配给c
。
总之,由于a
(= 300),b
(= 100)和c
(= 100)的声明:
a
根本没有改变。
b
在条件上发生了变化。但由于这种情况是错误的,它也没有改变。
c
始终已更改(已分配200)。
那么,你现在可以找出答案的原因吗?
答案 1 :(得分:3)
逐行执行,并根据需要控制分支。
最初,具有初始化的行运行:
int a = 300, b = 100, c = 100;
此时,值为a = 300
,b = 100
和c = 100
。
if(a >= 400)
b = 300;
if语句的工作原理如下:
if(condition)
then-statement;
如果condition
为真,则执行then-statement
。否则,我们跳过它。在您的示例中,我们正在测试是否a >= 400
,因为到目前为止a
为300,300 >= 400
不正确,所以我们跳过语句{{ 1}}。
此时,值仍然 b = 300
,a = 300
和b = 100
(因为我们没有更改任何内容)。
最后,你有一句话:
c = 100
此语句不受if的保护,因此始终将被执行。因此,我们更新c = 200;
的值并将其设置为200。
此时,值为c
,a = 300
和b = 100
。
因此,当我们进入print语句时,这些正是打印出的值。
答案 2 :(得分:1)
实际代码似乎是这样的。
int a = 300, b = 100, c = 100;
if(a >= 400)
{
b = 300;
}
c = 200;
printf("%d, %d, %d\n", a, b, c);
}
如果是这样的话
if(a >= 400)
b = 300;
c= 200;
if之后的下一行只是它的一部分(如果)。 Foreg:
int c=10;
if(c==10)
printf("iam 10");
else
printf("iam not 10");
它的输出将是 &#39; iam 10&#39; 没有{}的条件语句(if,else ..)表示它仅适用于下一行。对于循环语句(for,while ..)也是如此。
答案 3 :(得分:0)
您从:
开始int a = 300, b = 100, c = 100;
然后如果a(300)&gt; 400 - 某事发生在b,它变为300.
if(a >= 400)
b = 300;
但是a不是&gt; 400,因此部分代码不会被执行。
所以你还是300,100,100
然后,代码的最后一部分:c = 200;
是独立的。没有条件触发它。当达到该行代码时,c总是变为200。
所以现在你有 - a = 300,b = 100,c = 200