Типы данных, которые считывают scanf и printf - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вот сама задача : "По данному действительному числу a и натуральному n вычислите сумму , не используя формулу суммы геометрической прогрессии. Время работы программы должно быть пропорционально n." Ссылка на нее : http://informatics.mccme.ru/mod/stat...hapterid=319#1 Мой код
Листинг программы
  1. int main(void)
  2. {
  3. long int counter, counter1, quantity;
  4. double foundation, foundation1, geometricalprogression = 1;
  5. scanf("%lf%d", &foundation, &quantity);
  6. foundation1 = foundation;
  7. for (counter = 1; counter <= quantity; counter++)
  8. {
  9.  
  10. geometricalprogression += foundation1;
  11. foundation1 *= foundation;
  12. }
  13.  
  14. printf("%0.lf", geometricalprogression);
  15.  
  16. return 0;
  17. }
Подустал бороться с ней, не проходит 2 теста. Объясните,пожалуйста, как работать с этими чертовыми типам в Си. Почему если вводишь double, то printf через %f выведет ответ, а scanf проделает какую-то муть и угробит всю программу? Зачем вообще нужна %e, если что я ввожу double,что я ввожу long double, она ломается? Главное,что в интернете я подобных инструкций не нашел. %lf здесь не помогает. Дейтлы, видимо, об этом говорить будут в районе главы этак 15. То есть, есть переменные типа float, чем их считывать в printf и scanf, тот же вопрос по double, long double, unsigned и так далее. Или,если есть,я бы почитал подробную информацию на достоверном источнике. Уже третья программа гробит мне ночь из-за этих типов данных.
Нашел. Привел к такому виду
Листинг программы
  1. int main(void)
  2. {
  3. long int counter, counter1, quantity;
  4. long double foundation, foundation1;
  5. long double geometricalprogression = 1.0;
  6. scanf("%Lf%ld", &foundation, &quantity);
  7. foundation1 = foundation;
  8. for (counter = 1; counter <= quantity; counter++)
  9. {
  10.  
  11. geometricalprogression += foundation1;
  12. foundation1 *= foundation;
  13. }
  14.  
  15. printf("%0.Lf", geometricalprogression);
  16.  
  17. return 0;
  18. }
Всё равно не проходит 2 теста.

Решение задачи: «Типы данных, которые считывают scanf и printf»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5.     int counter, quantity;
  6.     double foundation, foundation1;
  7.     double geometricalprogression = 1.0;
  8.     scanf("%lf%d", &foundation, &quantity);
  9.     foundation1 = foundation;
  10.     for (counter = 1; counter <= quantity; counter++) {
  11.         geometricalprogression += foundation1;
  12.         foundation1 *= foundation;
  13.     }  
  14.     printf("%lf", geometricalprogression);
  15.     return 0;
  16. }

Объяснение кода листинга программы

  1. Подключение стандартной библиотеки ввода-вывода
  2. Объявление переменных: — counter (счетчик) — целочисленная переменная для итераций цикла — quantity (количество) — целочисленная переменная для количества итераций — foundation (основание) — переменная типа double для хранения основания геометрической прогрессии — foundation1 (основание 1) — переменная типа double для хранения первого основания геометрической прогрессии — geometricalprogression (геометрическая прогрессия) — переменная типа double для хранения суммы геометрической прогрессии
  3. Считывание данных с помощью функции scanf: — scanf(%lf%d, &foundation, &quantity); Считывает значение основания и количество итераций
  4. Инициализация foundation1 значением foundation
  5. Цикл от 1 до quantity итераций: — for (counter = 1; counter <= quantity; counter++) { — foundation1 *= foundation; Умножение foundation1 на основание — geometricalprogression += foundation1; Добавление foundation1 к геометрической прогрессии
  6. Вывод значения geometricalprogression с помощью функции printf: — printf(%lf, geometricalprogression); Выводит значение геометрической прогрессии
  7. Возврат 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы