Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Maik512
0 / 0 / 1
Регистрация: 08.10.2016
Сообщений: 98
1

Объясните результат вычислений

01.11.2016, 18:51. Просмотров 812. Ответов 8
Метки нет (Все метки)

Объясните , пожалуйста, почему получается 4--
C
1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
#include<math.h>
#include<conio.h>
main()
{
int a=24,b=24,c=-5,d=-1;
clrscr();
(d+=b%c)+d++;
printf("%d--",d--);
getch();
return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2016, 18:51
Ответы с готовыми решениями:

Не выводится результат вычислений
Программа должна находит a,b а выдаёт ошибку с очисткой экрана....

Программа выдает некорректный результат вычислений
Товарищи программисты, срочно нужна Ваша помощь. Это переоформленный кусочек...

Метод Зейделя. Не выводится результат вычислений
Программа должна считать систему уравнений методом Зейделя. Программа...

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

Найти число, если известен результат вычислений с ним
Кароче есть вот такая задача: С оператором While она решалась так:...

8
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
01.11.2016, 19:07 2
странно что он у вас вообще компилируется
0
Maik512
0 / 0 / 1
Регистрация: 08.10.2016
Сообщений: 98
01.11.2016, 19:18  [ТС] 3
Условие такое: что будет выведено на экран следующей программой?
mаin() {int b=24 int a=24,b=24,c=-5,d=-1; (d+=b%c)+d++;printf("%d--",d--);}
0
feelosophy
0 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 9
Завершенные тесты: 1
01.11.2016, 23:33 4
не совсем понимаю что тут происходит вообще, но может у вас ошибка в printf в 9 строке, ведь у вас там стоит постфиксная форма "d--", которая не имеет смысла в данном случае, ибо вы выводите сначала значение d и только потом вычитаете единицу.
0
starkiron
64 / 64 / 16
Регистрация: 07.05.2016
Сообщений: 304
02.11.2016, 00:13 5
feelosophy, все правильно на следующем шаге d уже будет равно не 4 а 3, а тут еще 4)

Maik512, потому что (d+=b%c)+d++; дает 4 а при выводе просто к 4 добавляется два символа --
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,320
02.11.2016, 03:41 6
Лучший ответ Сообщение было отмечено HighPredator как решение

Решение

Цитата Сообщение от Maik512 Посмотреть сообщение
Объясните , пожалуйста, почему получается 4
Это бессмысленный вопрос. Программа порождает неопределенное поведение из-за множественной неупорядоченной модификации переменной d в выражении (d+=b%c)+d++.

Поэтому никакого осмысленного 4 у вас тут не получается. Поведение не определено.
3
shvyrevvg
724 / 540 / 270
Регистрация: 12.05.2016
Сообщений: 1,571
02.11.2016, 06:53 7
Цитата Сообщение от Maik512 Посмотреть сообщение
C
1
(d+=b%c)+d++;
TheCalligrapher, по идее, тут будет в любом случае -4?

Добавлено через 12 минут
d = -1;
d+=4;
d++;
или
d++;
d+=4;
Или я не прав и возможен еще вариант?
0
feelosophy
0 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 9
Завершенные тесты: 1
02.11.2016, 09:00 8
starkiron,Я просто к тому, что такая запись бессмысленна)) зачем нам при завершении программы еще из d единицу вычитать ?)
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,320
02.11.2016, 09:06 9
Цитата Сообщение от shvyrevvg Посмотреть сообщение
TheCalligrapher, по идее, тут будет в любом случае -4?
Ну с таким же успехом можно утверждать, что код d++ + d++ "в любом случае" увеличивает d на 2. Но на самом деле поведение не определено.

Добавлено через 3 минуты
Цитата Сообщение от shvyrevvg Посмотреть сообщение
возможен еще вариант?
Возможен еще вариант, когда мы заранее вычитываем исходные значения d для обоих подвыражений

C
1
2
int temp1 = d;
int temp2 = d;
затем вычисляем эти подвыражения (т.е. новые значения для d)

C
1
2
temp1 = temp1 + 4;
temp2 = temp2 + 1;
а затем кладем их обратно в d в любом порядке

C
1
2
d = temp1;
d = temp2;
В результате никакого 4 не получится.
1
02.11.2016, 09:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2016, 09:06

Реализовать гистограмму из результатов вычислений
Здравствуйте господа! Возникла проблема в реализации задачи. Не пойму как...

Составление программ математических вычислений
вычислить ((x+y)/(y+1))-((x*y-12)/(6+x)) x=6 y=4 результат 1 помогите...

Написать функцию, вывести результаты вычислений
помогите (сделайте за меня) За отсутствием русской раскладки пользуйтесь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru