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

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

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

Вот сама задача : "По данному действительному числу a и натуральному n вычислите сумму , не используя формулу суммы геометрической прогрессии. Время работы программы должно быть пропорционально n." Ссылка на нее : http://informatics.mccme.ru/mod/stat...hapterid=319#1 Мой код
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;
}
Подустал бороться с ней, не проходит 2 теста. Объясните,пожалуйста, как работать с этими чертовыми типам в Си. Почему если вводишь double, то printf через %f выведет ответ, а scanf проделает какую-то муть и угробит всю программу? Зачем вообще нужна %e, если что я ввожу double,что я ввожу long double, она ломается? Главное,что в интернете я подобных инструкций не нашел. %lf здесь не помогает. Дейтлы, видимо, об этом говорить будут в районе главы этак 15. То есть, есть переменные типа float, чем их считывать в printf и scanf, тот же вопрос по double, long double, unsigned и так далее. Или,если есть,я бы почитал подробную информацию на достоверном источнике. Уже третья программа гробит мне ночь из-за этих типов данных.
Нашел. Привел к такому виду
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;
}
Всё равно не проходит 2 теста.

Решение задачи: «Типы данных, которые считывают 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;
}

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

  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
Похожие ответы