Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数学困难_C_Math - Fatal编程技术网

C 数学困难

C 数学困难,c,math,C,Math,我是新来的,老实说,我觉得自己有点笨 基本上,我在大学,我的模块之一是编程入门(学习C)。我真的很喜欢学习编程,真的很想更进一步;然而,我真的很难理解数学/逻辑。例如,每周我们都会做一些我一直做得很好的小测试——除非它们涉及(我觉得很复杂,但我相信你们中的许多人觉得很简单)数学代码行 以下是其中一个问题: 运行以下代码时输出以下哪项: #include<stdio.h> void main() { int a = 300, b = 100, c = 100;

我是新来的,老实说,我觉得自己有点笨

基本上,我在大学,我的模块之一是编程入门(学习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);

}
#包括
void main()
{
INTA=300,b=100,c=100;
如果(a>=400)
b=300;
c=200;
printf(“%d,%d,%d\n”,a,b,c);
}
所以我基本上回答了300100100(在多项选择题中),但答案是300100200。而且(如果我对你完全诚实的话)如果选择300200的选项出现在多项选择中,我会选择它。我似乎无法理解为什么——结果是——只有c的值改变了

老实说,就编程的这一部分而言,我真的很挣扎。不过我决心继续努力

非常感谢你们的任何提示或建议


亲切问候。

如果您查看代码,
b
c
自初始化以来已分配值

但是如果条件
a>=400
为真,则
b
会发生变化,即如果
300>=400
为真,则
b
会设置为
200
。这是真的吗?否。因此,
b
保持不变

200被分配给
c
,而不考虑代码中的任何其他内容

总之,由于
a
(=300)、
b
(=100)和
c
(=100)的声明:

a
一点也没有改变

b
根据条件进行更改。但既然这个条件是假的,它也没有改变

c
始终更改(分配了200)


因此,您现在可以了解为什么答案是这样了。

执行逐行进行,并根据需要控制分支

最初,带有初始化的行将运行:

int a = 300, b = 100, c = 100;
此时,值为
a=300
b=100
c=100

if(a >= 400)
    b = 300;
if语句的工作原理如下:

if(condition)
    then-statement;
如果
条件
为真,则执行
then语句
。否则,我们跳过它。在您的示例中,我们正在测试
a>=400
,因为
a
到目前为止是300,
300>=400
不是真的,所以我们跳过语句
b=300

if(a >= 400)
    b = 300;
此时,值仍然是
a=300
b=100
c=100
(因为我们没有更改任何内容)

最后,你有一句话:

c = 200;
此语句不受if保护,因此将始终执行它。因此,我们更新
c
的值并将其设置为200

此时,值为
a=300
b=100
c=200

if(a >= 400)
    b = 300;

因此,当我们到达print语句时,这些值正是打印出来的值。

实际代码似乎是这样的

 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后面的下一行将只是它(if)的一部分。 外汇:

它的产出将是 “我10岁” 不带{}的条件语句(if,else..)表示它只适用于下一行。循环语句(for、while..)也是如此。

您可以从以下内容开始:

int a = 300, b = 100, c = 100;
然后如果a(300)>400-b发生了什么,它就变成了300

if(a >= 400)

        b = 300;
但是a不大于400,因此部分代码不会执行。 所以你还是在300,100,100 然后,代码的最后一部分:
c=200是独立的。没有条件触发它。当到达该行代码时,c总是变为200。

现在你有了-a=300,b=100,c=200,这一行
c=200告诉您
c
更改。欢迎使用SO!不要气馁。理解程序中的语句是如何执行的,以及赋值是如何工作的,这一点对您很重要。使用调试器将逐步向您展示程序的执行情况。即使不崩溃也有用:)如果
有一个控制下一条语句执行的条件
(a>=400)
,则
,在这种情况下
b=300。因为下面是另一个语句
c=200
而不是关键字
else
,该语句总是在到达/到达时执行。糟糕的编码风格是在语句b=300周围没有大括号-建议您在出现if或while语句时使用大括号。这太棒了。那么,您是说if语句只适用于下面的一行(b=300;),那么c=200声明是它自己的新行,并且由于代码较低而覆盖了先前的c值声明?简单地说,我在if语句本身中包含了c=200行,这是不正确的:)if语句适用于以下任一行
if(条件)语句,或下面的块(一组用大括号括起来的行,看起来像这样:
if(condition){statement-1;statement-2;…statement-n;}
。在您的示例中,由于
if
后面没有大括号,因此它只适用于
b=300
,而不适用于
c=200
。非常感谢。我非常感谢。:)非常感谢。如果是这样写的话,我早就明白了。我习惯于看带括号的语句是否正确。你们都很棒。:)谢谢你抽出时间。你们对我的帮助比你们知道的要多。我在试图弄明白这一点时迷失了方向。:)