2016-11-06 2 views
3

Новый парень здесь, и, если честно, чувствую себя немного глупо.Математические трудности

В принципе, я в университете, и один из моих модулей - это введение в программирование (обучение 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?

Честно говоря, в этой части программирования я действительно борется. Я твердо намерен продолжать работать над этим.

Любые советы или рекомендации, которые вы, ребята, получили высокую оценку.

С уважением.

+1

Эта строка 'c = 200;' сообщает вам 'c' изменения. –

+2

Добро пожаловать в SO! Не обескураживайте. Для вас важно понять, как выполняются инструкции в программе, и как выполняются задания. –

+4

, используя отладчик, покажет вам выполнение вашей программы шаг за шагом.Полезно даже тогда, когда оно не разбивается :) –

ответ

4

Если вы посмотрите на код, b и c имеют значения, назначенные с момента их инициализации.

Но b изменяется, если условие истинно a >= 400 т.е. b установлен в 200 если 300 >= 400 верно. Это правда? Нет. Итак, b остается неизменным.

200 присваивается c независимо от чего-либо еще в вашем коде.

В заключении, так как декларации a (= 300), b (= 100), и c (= 100):

a не изменился.

b изменен при условии. Но поскольку это условие ложно, оно также не изменяется.

cвсегда изменен (задан 200).

Итак, вы можете теперь понять, почему так ответ?

+0

Спасибо за ваше время. Вы, ребята, помогли мне больше, чем вы знаете здесь. Я потерялся, пытаясь понять это. :) – sls1981

3

Выполнение продолжается строкой и управляет ветвями по мере необходимости.

Первоначально линия с инициализацией работает:

int a = 300, b = 100, c = 100; 

На данный момент, значения a = 300, b = 100 и c = 100.

if(a >= 400) 
    b = 300; 

Условный оператор работает следующим образом:

if(condition) 
    then-statement; 

Если condition является верно, то then-statement выполняется. В противном случае мы пропустим его. В вашем примере мы проверяем, есть ли a >= 400, поскольку a составляет 300, а - не верно, поэтому мы пропустим утверждение b = 300.

На данный момент, значения ещеa = 300, b = 100 и c = 100 (так как мы ничего не изменится).

Наконец, у вас есть строка:

c = 200; 

Это утверждение не охраняют, если так будет всегда будут выполняться. Итак, мы обновляем значение c и устанавливаем его на 200.

На данный момент значения: a = 300, b = 100 и c = 200.

Итак, когда мы добираемся до утверждения печати, это точно значения, которые распечатываются.

+0

Это великолепно. Итак, вы говорите, что оператор if применим только к следующей строке (b = 300;), тогда объявление c = 200 является собственной, новой строкой и переопределяет декларацию предыдущего значения c из-за того, что она дальше по коду? Проще говоря, я включил строку c = 200 внутри самого оператора if, и это было неправильно? :) – sls1981

+1

Оператор if применяется к следующей строке 'if (condition) statement;' или к следующему блоку (куча строк, завернутых в фигурные скобки, которые выглядят следующим образом: 'if (condition) {statement-1; statement-2; ... statement-n;} '. В вашем примере, поскольку после« if »нет фигурных скобок, оно применяется только к' b = 300' и ​​** not ** 'c = 200'. – peteykun

+0

Большое вам спасибо. Я очень благодарен. :) – sls1981

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; 

очень следующей строке после того, как если будет только часть (если). Foreg:

int c=10; 
if(c==10) 
printf("iam 10"); 
else 
printf("iam not 10"); 

его выход будет 'IAM 10' условные операторы (если, еще ..) без {} означает, что его применимо только в очень следующей строке. это будет одинаково для операторов цикла (for, while ..).

+0

Большое спасибо. Если бы это было написано так, я бы понял это гораздо раньше. Я привык видеть утверждения с помощью скобок. Вы, ребята, потрясающие. :) – sls1981

0

Вы начинаете с:

int a = 300, b = 100, c = 100; 

затем, если (300)> 400 - что-то происходит, б, она меняется на 300.

if(a >= 400) 

     b = 300; 

НО не> 400, так эта часть кода не выполняется. , так что вы все еще на 300, 100, 100 . Затем последняя часть кода: c = 200; является независимой. Не существует условий, которые запускают его. c всегда достигает 200, когда эта строка кода будет достигнута. Итак, теперь у вас есть - a = 300, b = 100, c = 200