Здравствуйте! Только начала изучать Си, пока плохо его понимаю. Подскажите, как написать программку для написания арифметическое действия
Сообщение отредактировано: Провинциалка -
Вычисление арифметического выражения, Задачка на СИ |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Вычисление арифметического выражения, Задачка на СИ |
Провинциалка |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Здравствуйте! Только начала изучать Си, пока плохо его понимаю. Подскажите, как написать программку для написания арифметическое действия
Сообщение отредактировано: Провинциалка - Прикрепленные файлы ___________________1_C_.rar ( 18.3 килобайт ) Кол-во скачиваний: 321 |
karpinsky |
Сообщение
#2
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 2 |
Цитата Ну скажите что я права Не совсем. Ты не хочешь понять одной простой вещи:cout<<"Vvedi m\n"; А не все - потому что у того выражения, результат которого не используется, есть побочный эффект. При вего выполнении изменяется значение двух переменных. Понимаешь, к чему я клоню? Ты что-то сделала, результата не увидела, поэтому, чтоб показать результат, ты строкой ниже проделываешь ту же операцию еще раз, но теперь она производится уже с другими значениями m и n. И получается, что при некоторых данных у тебя результат первоначального сравнения, которое сделано впустую, будет отличаться от второго, которое ты пытаешься вывести на ээкран. Смотри: допустим, n = 2 и m = 0. Сравниваем: n > m? Да, результат - истина, или ненулевое значение (скорее всего единица). Дальше производятся постфиксные операции, т.е., после того, как произведено сравнение двух чисел между собой, выполняется постфикс. Были бы ++ или -- перед переменной - был бы префиксный оператор, тогда действие производилось бы перед выполнением сравнения. Итак, после окончания выполнения строки n-->m++ значение n уменьшается на 1, значение m увеличивается на ту же единицу. Что имеем в итоге? n = 1 и m = 1. Как думаешь, в следующий раз, когда выполнится то же самое выражение, n > m будет истиной? Мне кажется, что нет. То есть, при втором выполнении результат уже неправильный. А при других исходных данных результат может стать неправильным и при 5-ом и при 10-ом выполнении выражения. То есть, фрагмент кода должен быть таким: cout<<"Vvedi m\n";Все, что тебе нужно уметь объяснять в данном случае - это разницу между префиксным и постфиксным инкрементом/декрементом. То есть, ты должна знать, что сначала производится сравнение, и тольео потом - модификация переменных. И несмотря на то, что следующая строка может напечатать одинаковые значения m и n - результат сравнения может быть ложью. С инкрементом/декрементом надо всегда "держать нос по ветру" (С), чревато ошибками. |
Текстовая версия | 10.05.2024 5:27 |