Программирование на C: Помощь, Понимание цикла - PullRequest
0 голосов
/ 24 марта 2011

На практическом тесте мой профессор дал мне эту программу

#include <stdio.h>

int main (void)
{
    int i, sum;
    sum=0;
    for (i=1;i<=7;i++)
        sum=sum+i*i;
    printf("Rocky\n");
    printf("i is %d\n", i);
    printf("sum is %d\n",sum);

    return (0);
}

Теперь мой вопрос: почему при запуске этой программы вывод:

Rocky
i is 8
sum is 140

почему скалистые напечатаны только один раз?Разве это не должно быть напечатано столько раз, сколько я напечатан? ПОНЯЛ.СПАСИБО ВСЕМ, КТО ПОМОГИЛ:)

Ответы [ 6 ]

8 голосов
/ 24 марта 2011

Проблема в том, что без фигурных скобок { } тело цикла представляет собой одну строку, следующую за оператором for.

Таким образом, в этом примере строка sum=sum+i*i; выполняется 7 раз, а операторы printf выводят состояние переменных после завершения цикла.

5 голосов
/ 24 марта 2011

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

Это напечатает все в фигурных скобках, сколько раз цикл будет выполняться

for (i=1;i<=7;i++)
{
    sum=sum+i*i;
    printf("Rocky\n");
    printf("i is %d\n", i);
    printf("sum is %d\n",sum);
}
3 голосов
/ 24 марта 2011

Нет. Без скобок {} в цикле выполняется только оператор непосредственно после цикла for.

for (i=1;i<=7;i++)  
    sum=sum+i*i;

совпадает с:

for (i=1;i<=7;i++) {
    sum=sum+i*i;
}
1 голос
/ 14 сентября 2013

Область действия по умолчанию для цикла for - это следующий непосредственно после него оператор.

Таким образом, если записано без фигурных скобок, оператор, следующий за циклом for, будет выполнен только один раз (что по умолчанию). Если в цикле for необходимо выполнить более одного оператора, мы используем фигурные скобки {}, все операторы идут внутри этих фигурных скобок, образуя «кодовый блок».

например:.

     for ( bla; bla; bla; )
     {
        do this;
        and this; 
        and this as well;
     }

Вы можете использовать столько блоков кода, сколько хотите в своей программе, с циклами, инструкциями управления, или, может быть, само по себе, это не имеет значения, ни компилятор выдаст ошибку.

1 голос
/ 24 марта 2011
 for (i=1;i<=7;i++)
    sum=sum+i*i;
 // ....

совпадает с

 for (i=1;i<=7;i++)
 {
    sum=sum+i*i;
 }
 //  ....
1 голос
/ 24 марта 2011

В соответствии с изменениями, внесенными в сообщение, строка Роки printf находится за пределами цикла for и, таким образом, повторяться не будет.Я думаю, что вы хотите что-то вроде этого:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...