Не получается "printf" - C (СИ)

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

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

Числа Люка определяются так: первое число равно 1, второе равно 3, каждое следующее равно сумме двух предыдущих. Составить программу, которая находит сумму первых k чисел Люка (k – задается пользователем). Определить количество первых чисел Люка, таких, что значение их суммы не превышает диапазона типа int (long int). Вывести в виде таблицы данное значение суммы и три предыдущих значения суммы (с соответствующими количествами чисел Люка). Мой код:
#include<stdio.h>
#include<limits.h>
main ()
{
    int k, i, zero, one=1, two=3;
    long int sum = 0;
    printf("Input k="); scanf("%d", &k);
    
    for( i=1; i <= k ; i++) 
    {
        sum = one + two;
        zero = one;
        one = two;
        two = sum;
        
    }
        printf("sum=%d\n", sum);
    printf("One=%d Two=%d Three=%d\t",zero , one, two); 

    return 0;
    
}
Проблема заключается в том,что не могу понять,как вызвать printf чтобы определить количество первых чисел Люка, таких, что значение их суммы не превышает диапазона типа int (long int).Пробовал много разных способов (и в цикле писал,и вне цикла),но она либо показывает текущее значение "k",либо показывает значение i (k+1).

Решение задачи: «Не получается "printf"»

textual
Листинг программы
#include<stdio.h>
#include <stdlib.h>
 int main ()
{
    int k, i, x1, x2, x3, z = 100;
    double one=1, two=3, sum = 0, y1, y2, y3;
    printf("Input k = ");
    scanf("%d", &k);
    for( i = 3; i <= k ; ++i)
    {
        sum = one + two;
        if ( sum > 2147483647){
            if(i < z  + 2)
            printf("Ne prevyshaet diapazona int %d chisel Luka\n", i - 1);
                z = i - 1;
        }
        one = two;
        two = sum;
        if(i == k - 3){
           x3 = i; y3 = sum;
        }
        if(i == k - 2){
            x2 = i; y2 = sum;
        }
        if(i == k - 1){
            x1 = i; y1 = sum;
        }
    }
    printf("Chislo Luka = %d , summa = %e\n", k, sum);
    printf("Chislo Luka = %d , summa = %e\n", x1, y1);
    printf("Chislo Luka = %d , summa = %e\n", x2, y2);
    printf("Chislo Luka = %d , summa = %e\n", x3, y3);
    return 0;
}

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

  1. Включаются заголовочные файлы stdio.h и stdlib.h
  2. Объявляются переменные:
    • k, i, x1, x2, x3 - целочисленные переменные;
    • z - целочисленная переменная со значением 100;
    • one, two, sum - переменные с плавающей точкой;
    • y1, y2, y3 - переменные с плавающей точкой.
  3. Выводится приглашение для ввода значения переменной k.
  4. Считывается значение переменной k с помощью функции scanf.
  5. Организуется цикл for для перебора значений от 3 до k:
    • Переменная sum инициализируется как сумма one и two.
    • Проверяется условие, что sum не превышает максимального значения для типа int (2147483647).
    • Если условие выполняется, то выполняется следующее:
      • Если i меньше z + 2, то выводится сообщение об ошибке.
      • z присваивается значение i - 1.
    • Переменные one, two и sum обновляются.
    • Если i равно k - 3, то x3 присваивается значение i, а y3 - значение sum.
    • Если i равно k - 2, то x2 присваивается значение i, а y2 - значение sum.
    • Если i равно k - 1, то x1 присваивается значение i, а y1 - значение sum.
  6. По завершении цикла выводится значение k и sum.
  7. Выводится значение x1 и y1.
  8. Выводится значение x2 и y2.
  9. Выводится значение x3 и y3.
  10. Программа возвращает 0, заканчивая свою работу.

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


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

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

6   голосов , оценка 4 из 5