📢 Nuovo Corso Bootstrap Completo disponibile!

Esercizi data e ora in C

Ecco degli esercizi semplici con soluzione per praticare le basi data e ora in C.

Esercizio 1

Stampare la data corrente:
#include <stdio.h>
#include <time.h>
int main() {
time_t t = time(NULL);
struct tm *data = localtime(&t);
printf("Data corrente: %02d/%02d/%04d\n", data->tm_mday, data->tm_mon + 1, data->tm_year + 1900);
return 0;
}

Esercizio 2

Ottenere l'ora corrente:
#include <stdio.h>
#include <time.h>
int main() {
time_t t = time(NULL);
struct tm *data = localtime(&t);
printf("Ora corrente: %02d:%02d:%02d\n", data->tm_hour, data->tm_min, data->tm_sec);
return 0;
}

Esercizio 3

Calcolare la differenza in giorni tra due date:
#include <stdio.h>
#include <time.h>
int main() {
struct tm data1, data2;
printf("Inserisci la prima data (gg/mm/aaaa): ");
scanf("%d/%d/%d", &data1.tm_mday, &data1.tm_mon, &data1.tm_year);
printf("Inserisci la seconda data (gg/mm/aaaa): ");
scanf("%d/%d/%d", &data2.tm_mday, &data2.tm_mon, &data2.tm_year);
time_t t1 = mktime(&data1);
time_t t2 = mktime(&data2);
double diff_in_sec = difftime(t2, t1);
int diff_in_giorni = diff_in_sec / (60 * 60 * 24);
printf("La differenza in giorni tra le due date è: %d\n", diff_in_giorni);
return 0;
}

Esercizio 4

Aggiungere un numero di giorni a una data:
#include <stdio.h>
#include <time.h>
int main() {
struct tm data;
int giorni_da_aggiungere;
printf("Inserisci una data (gg/mm/aaaa): ");
scanf("%d/%d/%d", &data.tm_mday, &data.tm_mon, &data.tm_year);
printf("Inserisci il numero di giorni da aggiungere: ");
scanf("%d", &giorni_da_aggiungere);
data.tm_mday += giorni_da_aggiungere;
time_t t = mktime(&data);
printf("La data risultante è: %02d/%02d/%04d\n", data.tm_mday, data.tm_mon + 1, data.tm_year + 1900);
return 0;
}

Esercizio 5

Calcolare l'età a partire dalla data di nascita:
#include <stdio.h>
#include <time.h>
int main() {
struct tm data_nascita;
printf("Inserisci la data di nascita (gg/mm/aaaa): ");
scanf("%d/%d/%d", &data_nascita.tm_mday, &data_nascita.tm_mon, &data_nascita.tm_year);
time_t t = time(NULL);
struct tm *data_corrente = localtime(&t);
int anni = data_corrente->tm_year + 1900 - (data_nascita.tm_year + 1900);
printf("Età attuale: %d anni\n", anni);
return 0;
}

Esercizio 6

Verificare se un anno è bisestile:
#include <stdio.h>
#include <stdbool.h>
bool isBisestile(int anno) {
if ((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0) {
return true;
} else {
return false;
}
}
int main() {
int anno;
printf("Inserisci un anno: ");
scanf("%d", &anno);
if (isBisestile(anno)) {
printf("%d è un anno bisestile.\n", anno);
} else {
printf("%d non è un anno bisestile.\n", anno);
}
return 0;
}

Esercizio 7

Calcolare il numero di giorni in un mese di un anno specifico:
#include <stdio.h>
int calcolaGiorniMese(int mese, int anno) {
int giorni;
switch (mese) {
case 2:
if ((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0) {
giorni = 29;
} else {
giorni = 28;
}
break;
case 4:
case 6:
case 9:
case 11:
giorni = 30;
break;
default:
giorni = 31;
}
return giorni;
}
int main() {
int mese, anno;
printf("Inserisci il numero del mese: ");
scanf("%d", &mese);
printf("Inserisci l'anno: ");
scanf("%d", &anno);
int giorni = calcolaGiorniMese(mese, anno);
printf("Il mese %d dell'anno %d ha %d giorni.\n", mese, anno, giorni);
return 0;
}

Esercizio 8

Verificare se un anno è un anno bisestile o un anno secolare:
#include <stdio.h>
#include <stdbool.h>
bool isBisestile(int anno) {
if ((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0) {
return true;
} else {
return false;
}
}
bool isAnnoSecolare(int anno) {
if (anno % 100 == 0) {
return true;
} else {
return false;
}
}
int main() {
int anno;
printf("Inserisci un anno: ");
scanf("%d", &anno);
if (isBisestile(anno)) {
printf("%d è un anno bisestile.\n", anno);
} else {
printf("%d non è un anno bisestile.\n", anno);
}
if (isAnnoSecolare(anno)) {
printf("%d è un anno secolare.\n", anno);
} else {
printf("%d non è un anno secolare.\n", anno);
}
return 0;
}

Esercizio 9

Calcolare la data del giorno successivo:
#include <stdio.h>
#include <time.h>
int main() {
struct tm data;
printf("Inserisci una data (gg/mm/aaaa): ");
scanf("%d/%d/%d", &data.tm_mday, &data.tm_mon, &data.tm_year);
time_t t = mktime(&data);
t += 86400; // Aggiungiamo 24 ore (60 secondi * 60 minuti * 24 ore)
struct tm *data_successiva = localtime(&t);
printf("La data successiva è: %02d/%02d/%04d\n", data_successiva->tm_mday, data_successiva->tm_mon + 1, data_successiva->tm_year + 1900);
return 0;
}

Esercizio 10

Calcolare il numero di settimane in un anno:
#include <stdio.h>
int calcolaSettimaneAnno(int anno) {
if ((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0) {
return 53;
} else {
return 52;
}
}
int main() {
int anno;
printf("Inserisci un anno: ");
scanf("%d", &anno);
int settimane = calcolaSettimaneAnno(anno);
printf("L'anno %d ha %d settimane.\n", anno, settimane);
return 0;
}