Типы данных, которые считывают scanf и printf - C (СИ)
Формулировка задачи:
Вот сама задача : "По данному действительному числу a и натуральному n вычислите сумму , не используя формулу суммы геометрической прогрессии. Время работы программы должно быть пропорционально n."
Ссылка на нее : http://informatics.mccme.ru/mod/stat...hapterid=319#1
Мой код
Подустал бороться с ней, не проходит 2 теста. Объясните,пожалуйста, как работать с этими чертовыми типам в Си.
Почему если вводишь double, то printf через %f выведет ответ, а scanf проделает какую-то муть и угробит всю программу?
Зачем вообще нужна %e, если что я ввожу double,что я ввожу long double, она ломается?
Главное,что в интернете я подобных инструкций не нашел. %lf здесь не помогает. Дейтлы, видимо, об этом говорить будут в районе главы этак 15.
То есть, есть переменные типа float, чем их считывать в printf и scanf, тот же вопрос по double, long double, unsigned и так далее. Или,если есть,я бы почитал подробную информацию на достоверном источнике. Уже третья программа гробит мне ночь из-за этих типов данных.
Всё равно не проходит 2 теста.
int main(void) { long int counter, counter1, quantity; double foundation, foundation1, geometricalprogression = 1; scanf("%lf%d", &foundation, &quantity); foundation1 = foundation; for (counter = 1; counter <= quantity; counter++) { geometricalprogression += foundation1; foundation1 *= foundation; } printf("%0.lf", geometricalprogression); return 0; }
Нашел. Привел к такому виду
int main(void) { long int counter, counter1, quantity; long double foundation, foundation1; long double geometricalprogression = 1.0; scanf("%Lf%ld", &foundation, &quantity); foundation1 = foundation; for (counter = 1; counter <= quantity; counter++) { geometricalprogression += foundation1; foundation1 *= foundation; } printf("%0.Lf", geometricalprogression); return 0; }
Решение задачи: «Типы данных, которые считывают scanf и printf»
textual
Листинг программы
#include <stdio.h> int main(void) { int counter, quantity; double foundation, foundation1; double geometricalprogression = 1.0; scanf("%lf%d", &foundation, &quantity); foundation1 = foundation; for (counter = 1; counter <= quantity; counter++) { geometricalprogression += foundation1; foundation1 *= foundation; } printf("%lf", geometricalprogression); return 0; }
Объяснение кода листинга программы
- Подключение стандартной библиотеки ввода-вывода
- Объявление переменных: — counter (счетчик) — целочисленная переменная для итераций цикла — quantity (количество) — целочисленная переменная для количества итераций — foundation (основание) — переменная типа double для хранения основания геометрической прогрессии — foundation1 (основание 1) — переменная типа double для хранения первого основания геометрической прогрессии — geometricalprogression (геометрическая прогрессия) — переменная типа double для хранения суммы геометрической прогрессии
- Считывание данных с помощью функции scanf:
— scanf(
%lf%d
, &foundation, &quantity); Считывает значение основания и количество итераций - Инициализация foundation1 значением foundation
- Цикл от 1 до quantity итераций: — for (counter = 1; counter <= quantity; counter++) { — foundation1 *= foundation; Умножение foundation1 на основание — geometricalprogression += foundation1; Добавление foundation1 к геометрической прогрессии
- Вывод значения geometricalprogression с помощью функции printf:
— printf(
%lf
, geometricalprogression); Выводит значение геометрической прогрессии - Возврат 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д