Подсчет прожитых дней - C (СИ)

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

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

Код будет о4ень банальный, без функций и циклов, ибо первый опыт. Взят из рандомной книжки в ка4естве упражнения. Программа должна расс4итать кол-во дней из числа введенного пользователем, ко в итоге выдает несусветную 4ушь. Вся проблема как выяснилось в scanf, но объясните пожалуйста в 4ем именно
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
#define LEAPDAYS = 366
#define DAYS = 365
int main()
{
    setlocale(LC_ALL,"rus");
 
    int age, years, leapYears, numberOfDays; // возраст, невисокосные годы, високосные годы, количество дней
    /*printf("%d %d %d %d\n", age, years, leapYears, numberOfDays);*/ //это для проверки, как и последующие подобные строки
 
    leapYears = age / 4; // считаем количество високосных лет
    /*printf("%d\n", leapYears);*/
 
    years = age - leapYears; // считаем невисокосные годы
    /*printf("%d\n", years);*/
 
    numberOfDays = (years * 365) + (leapYears * 366); //тут проблема - если вместо 365/366 вписывать объявленные выше константы
                                                      //компилятор ругается. Потому что гладиолус?
    /*printf("%d\n", numberOfDays);*/
 
    printf ("Введите ваш возраст.\n");
    scanf ("%d", &age);
    printf ("Вы прожили %d лет, что составляет %d дней", age, numberOfDays);
    return 0;
}
Спасибо

Решение задачи: «Подсчет прожитых дней»

textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdbool.h>
 
//Программа которая считает количество дней между двумя датами
 
//Структура даты
struct date
{
    int month;
    int days;
    int year;
};
 
//Вычисления введенних дат по формуле
int dateresult(struct date d)
{
    int g, f, days, n, d1 = 0;
    struct date k, c, k1, c1;
    days = d.days;
    k = { 3, 1, 1800 };
    c = { 2, 28, 1900 };
    k1 = { 3, 1, 1700 };
    c1 = { 2, 28, 1800 };
    if (k.days >= d.days && k.month >= d.month &&
        k.year >= d.year && c.days <= d.days &&
        c.month <= d.month &&
        c.year <= d.year) d1 = 1;
    if (k1.days >= d.days && k1.month >= d.month &&
        k1.year >= d.year && c1.days <= d.days &&
        c1.month <= d.month &&
        c1.year <= d.year) d1 = 2;
    if (d.month <= 2) f = d.year - 1;
    else f = d.year;
 
    if (d.month <= 2){ g = d.month + 13; }
    else g = d.month + 1;
 
    n = 1461 * f / 4 + 153 * g / 5 + d.days;
    n += d1;
    return n;
};
int main(void)
{
    int  s1, s2, result;
    int dateresult(struct date d);
    struct date firstdate, twodate;
 
    //Ввод первой даты
    printf(" Enter first date mm,dd,yyyy. :");
    scanf_s("%i%i%i", &firstdate.month, &firstdate.days, &firstdate.year);
    //Ввод второй дати
    printf("\n Enter second date mm,dd,yyyy. :");
    scanf_s(" %i%i%i", &twodate.month, &twodate.days, &twodate.year);
 
    //Задаем параметры функций
    s1 = dateresult(firstdate);
    s2 = dateresult(twodate);
 
    //Вычисление результатов и их вывод
    result = s2 - s1;
    printf("\n Difference days = %i", result);
    _getch();
    return 0;
}

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

Код представляет собой программу, которая считает количество дней между двумя датами. Список элементов кода:

  1. #include - подключает файл стандартного ввода/вывода
  2. #include - подключает математические функции
  3. #include - подключает функции для работы с консолью
  4. #include - подключает определения булевых значений
  5. //Программа которая считает количество дней между двумя датами
  6. //Структура даты
  7. struct date - объявление структуры даты, содержащей поля для месяца, дней и года
  8. int dateresult(struct date d) - функция для вычисления результата по формуле
  9. int main(void) - главная функция программы
  10. //Ввод первой даты
  11. printf(Enter first date mm,dd,yyyy. :); - приглашение для ввода первой даты
  12. scanf_s(%i%i%i, &firstdate.month, &firstdate.days, &firstdate.year); - считывание значений месяца, дней и года первой даты
  13. //Ввод второй дати
  14. printf(\n Enter second date mm,dd,yyyy. :); - приглашение для ввода второй даты
  15. scanf_s(%i%i%i, &twodate.month, &twodate.days, &twodate.year); - считывание значений месяца, дней и года второй даты
  16. //Задаем параметры функций
  17. s1 = dateresult(firstdate); - вычисление первой даты и сохранение результата в переменной s1
  18. s2 = dateresult(twodate); - вычисление второй даты и сохранение результата в переменной s2
  19. //Вычисление результатов и их вывод
  20. result = s2 - s1; - вычисление разницы между двумя датами и сохранение результата в переменной result
  21. printf(\n Difference days = %i, result); - вывод результата на экран
  22. _getch(); - ожидание нажатия клавиши для завершения программы
  23. return 0; - завершение программы

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


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

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

15   голосов , оценка 3.867 из 5
Похожие ответы