![]() |
|
Модераторы: bsa |
![]()
|
|
| Kruger2 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 9.1.2011 Репутация: нет Всего: нет |
Программа просит ввести значения оценок, затем после ввода -1 должна выдать среднюю.
Ввожу 20, затем 10, получаю 30. хотя average = (float) total / counter; никак не подразумевает сложения Модератор: не забываем пользоваться кнопочкой "Код" Это сообщение отредактировал(а) bsa - 10.1.2011, 14:04 |
|||
|
||||
| Sosed |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.8.2009 Репутация: 1 Всего: 1 |
Ввожу 20(counter = 0), затем 10(counter = 1), получаю 30(30/1 = 30).
|
|||
|
||||
| Kruger2 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 9.1.2011 Репутация: нет Всего: нет |
Читаю как: пока grade не равно -1 выполнить сумма = сумма + оценка (прибавить оценку к общей сумме) счетчик = счетчик +1 (считаем кол-во оценок) ввести оценку принять целое число и присвоить переменной grade ввожу grade: 20 grade: 10 получаю след действия: прибавить к сумме 20, затем 10. всего 30. счетчик выполняет +1 дважды, значит = 2 average = (float) total / counter; 30 должно делить на 2. видимо не шарю) Это сообщение отредактировал(а) bsa - 10.1.2011, 14:05 |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 4 Всего: 49 |
А, это замечательная иллюстрация к шутке, что любая случайная последовательность символов является корректной программой на C.
Посмотрите внимательно на вот эту строчку:
Вы переставили местами = и !. В итоге получается следующее: "!0" воспринимается как "не нуль", т.е. "не ложь" (благо в C булевого типа нет), стало быть, 1. Эта единица присваивается переменной counter, причем все присваивание в целом тоже имеет значение, равное 1. В итоге условие всегда выполняется, но counter после этого всегда равен единице, и "среднее" оказывается совпадающим с суммой введенных значений. |
|||
|
||||
| Kruger2 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 9.1.2011 Репутация: нет Всего: нет |
большое спасибо за развернутый ответ
помогите решить задачу по аналогии с этой. Значит программа подсчета расхода бензина. Вводим в литрах бензин, затем кол-во км. Получаем расход бензина, далее открываю цикл, пока а, т.е. кол-во бензина не равно 1 повторяем ввод и вывод расхода. После чего значение средней прибавляем к переменной тотал1 и прибавляем единицу к счетчику. Далее, если счетчик не равен 0, то переменную тотал1, которая собрала в себя суммы всех значений с (расходов при каждой заправке) делим на счетчик (кол-во циклов). Проблемы: 1. Цикл не заканчивается после ввода -1 2. После ввода -1 дважды, т.е. при вводе бензина и км, выдает #QNANO и предлагает дальше вводить зачения.
Это сообщение отредактировал(а) Kruger2 - 9.1.2011, 16:50 |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 5 Всего: 160 |
-------------------- |
|||
|
||||
| Фантом |
|
||||||||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 4 Всего: 49 |
Ну, тут все не так интересно. Сначала попробуйте после пар printf/scanf вставить вывод того, что Вы ввели - строку
и запустите получившееся. Думаю, Вы будете несколько удивлены. Причина этого безобразия в том, что в формате scanf целые и вещественные переменные различаются, а Вы пытаетесь вводить значения в переменные типа float с форматом %d - т.е. как целые. Замените форматы ввода на %f (или, если угодно, опишите a и b как int). Далее. После одного ввода "-1" цикл даже в исправленном варианте сразу же заканчиваться не будет, поскольку до проверки условия программа доберется только после ввода b и подсчетов. Если очень хочется, чтобы цикл заканчивался сразу при вводе -1, моменяйте его заголовок на white(1), а сразу после ввода a вставьте строку
И, кстати, во избежание тех же граблей, что в прошлый раз, полезно помнить, что вместо
можно спокойно писать
Добавлено через 2 минуты и 2 секунды Я тоже. |
||||||||
|
|||||||||
| Kruger2 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 9.1.2011 Репутация: нет Всего: нет |
спасибо, выбора особо нет, в программе универа написано с\с++ и приходится мучиться, но главная проблема, это заочное обучение. спросить особо некого
поясните пожалуйста, что в этой строке так кардинально изменило программу? Смысл то я понял, но как по мне, цель этой строки должна быть чисто эстетической есть ли на форуме способы поставить плюсик в репу, без 100 постов?) |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 4 Всего: 49 |
||||
|
||||
| Kruger2 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 9.1.2011 Репутация: нет Всего: нет |
догнал, спасибо
как набью 100 постов с меня + в репу |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 5 Всего: 160 |
Kruger2, всегда можете попросить других участников плюсануть от Вашего имени. Я поставил. -------------------- |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |