Технологии

программка в си и ее проблемы - вопрос №2169021

#include <conio.h> #include <stdio.h> int main() { int i,x,s=0; for(i=0;i<x;i++){ scanf("%d",&x); s=s+x;} printf("%d", s); return 0; } программа суммирует числа.если вводит сначало любое число и потом 2.то сразу идет вычисление.если наоборот то нет.ждет чтоб ввести 0.почему так?

октябрь 18, 2016 г.

  • Всего ответов: 2

  • Виталий - аватарка

    Виталий

    2-й в Технологиях

    Здравствуйте.
    Потому что программа у Вас кривая.
    Смотрите что у Вас получается:
    Во-первых, переменная x у Вас ничем не инициализирована. Поэтому там вполне может содержаться любой мусор (рандомное некое число > 0, но и отрицательное может быть). Это хорошо если будет 0 (компилятор позаботился) — тогда вы получите просто вывод 0 (в цикл входа не будет) и все.
    А если же в x содержится некое «мусорное» положительное значение, тогда будет так:
    заходим в цикл for — условие соблюдено (i < некого x)
    ждем ввода с клавиатуры
    если ввели число 2:
    тогда s становится равно 2 (s = 0 + 2)
    печатаем s (2)
    увеличиваем i на единицу и опять проверяем условие цикла: i < x соблюдено (1 < 2), опять идем внутрь
    опять ждем ввода числа
    s = 2 + (число введенное новое, x)
    и опять увеличиваем i на единицу (i будет = 2) и мы опять проверяем условие цикла — если  i < x, тогда опять идем внутрь, считываем новое x и опять суммируем s.
    И так можно до бесконечности, до тех пор пока значение i не будет >= последнего введенного числа x.
    В этом случае программа покажет сумму и завершится.

    А если же сначала ввести любое число — и потом 2 — цикл завершится после 2 итераций, т.к.
    у Вас будет проверка условия i (которое будет = 2 перед началом третьей итерации ) < 2  — ложь. Соответственно, третьей итерации не будет и программа завершается

    октябрь 18, 2016 г.
  • Дмитрий - аватарка

    Дмитрий

    6-й в Технологиях

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

    октябрь 20, 2016 г.

Похожие вопросы

Решетка Кардано

ноябрь 19, 2012 г.

Технологии

Помогите решить задачку на C

декабрь 8, 2013 г.

Технологии