Не получается "printf" - C (СИ)
Формулировка задачи:
Числа Люка определяются так: первое число равно 1, второе равно 3,
каждое следующее равно сумме двух предыдущих. Составить программу,
которая находит сумму первых k чисел Люка (k – задается пользователем).
Определить количество первых чисел Люка, таких, что значение их
суммы не превышает диапазона типа int (long int). Вывести в виде
таблицы данное значение суммы и три предыдущих значения суммы (с
соответствующими количествами чисел Люка).
Мой код:
Проблема заключается в том,что не могу понять,как вызвать printf чтобы определить количество первых чисел Люка, таких, что значение их
суммы не превышает диапазона типа int (long int).Пробовал много разных способов (и в цикле писал,и вне цикла),но она либо показывает текущее значение "k",либо показывает значение i (k+1).
#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"»
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;
}
Объяснение кода листинга программы
- Включаются заголовочные файлы stdio.h и stdlib.h
- Объявляются переменные:
- k, i, x1, x2, x3 - целочисленные переменные;
- z - целочисленная переменная со значением 100;
- one, two, sum - переменные с плавающей точкой;
- y1, y2, y3 - переменные с плавающей точкой.
- Выводится приглашение для ввода значения переменной k.
- Считывается значение переменной k с помощью функции scanf.
- Организуется цикл 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.
- По завершении цикла выводится значение k и sum.
- Выводится значение x1 и y1.
- Выводится значение x2 и y2.
- Выводится значение x3 и y3.
- Программа возвращает 0, заканчивая свою работу.