#include
#include
void main(void) {
int a, b, c;
printf("Vvedite dva celih chisla: ");
scanf("%d %d", &a, &b);
c = --a + a * b + --b;
printf("a=%d, b=%d, c=%d", a, b, c);
getch();
}
Должно выходить 47, а выходит 54 почему?
Другие языки программирования и технологии
Почему эта программа Си выдает не такой результат?
Результат зависит от входных данных. Какие входные данные неизвестно.
Результат зависит от компилятора. Возможно, программа написана некорректно, или не все компиляторы следуют стандарту. Я стандарт не читал.
Тут https://rextester.com/l/c_online_compiler_visual можно выполнить на разных компиляторах. Результат Visual C отличается от GCC. На этом сайте надо вводить входные данные перед запуском (кнопка [ + ] Show input).
Результат зависит от компилятора. Возможно, программа написана некорректно, или не все компиляторы следуют стандарту. Я стандарт не читал.
Тут https://rextester.com/l/c_online_compiler_visual можно выполнить на разных компиляторах. Результат Visual C отличается от GCC. На этом сайте надо вводить входные данные перед запуском (кнопка [ + ] Show input).
Потому, что выражение c = --a + a * b + --b; - это НЕОПРЕДЕЛЁННОЕ ПОВЕДЕНИЕ. И его результат - всё, что угодно, включая погоду на Марсе.
То, в какой последовательности ты записал операнды, имеет значение только для ||, && и ?:. Во всех остальных случаях компилятор плюёт на то, как именно ты записал выражение и вычисляет его так, как ему удобнее. Например, он может сначала вычислить --a и --b, а потом a * b. А может сначала вычислить a * b, а потом --a и --b. И результаты в каждом из этих случаев будут разными.
c = --a + --b; // корректно
c = a + --b; // корректно
c = --a + b; // корректно
c = --a + a + --b; // НЕкорректно
c = --a + b + --b; // НЕкорректно
c = --a + a * b + --b; // НЕкорректно
То, в какой последовательности ты записал операнды, имеет значение только для ||, && и ?:. Во всех остальных случаях компилятор плюёт на то, как именно ты записал выражение и вычисляет его так, как ему удобнее. Например, он может сначала вычислить --a и --b, а потом a * b. А может сначала вычислить a * b, а потом --a и --b. И результаты в каждом из этих случаев будут разными.
c = --a + --b; // корректно
c = a + --b; // корректно
c = --a + b; // корректно
c = --a + a + --b; // НЕкорректно
c = --a + b + --b; // НЕкорректно
c = --a + a * b + --b; // НЕкорректно
c = --a + a * b + --b; - за такое надо бить по рукам.
Тут результат не определен. Никогда не используй инкремент и декременты вместе с мат. выражениями.
Тут результат не определен. Никогда не используй инкремент и декременты вместе с мат. выражениями.
Похожие вопросы
- В этой программе можно переставить выражения, но результат работы почти не из-меняется. Почему?
- помогите с программой!!! (Си) Двумерный массив+строки
- Кто может объяснить что происходит в программе си
- Ошибка В программе СИ
- Помогите с написание программы СИ (С комментариями пожалуйста )
- Люди блин...почему в программах я практически никогда не вижу and, not, or
- Что не так с программой? Вначале работает нормально, но результат бесконечный, С++
- Семь управляющих структур. Два способа их объединения. 28 ключевых слов. Так почему же язык Си считают сложным?
- Почему такие программы как Photoshop не желательно устанавливать в системный раздел?
- А почему троянскую программу назвали именно так