Escolar Documentos
Profissional Documentos
Cultura Documentos
EXERCICIOS DE FIXAÇÃO
Questão 01
Dada uma data no formato dd/mm/aaaa, escreva um programa que mostre a próxima data,
isto é, a data que representa o dia seguinte à data fornecida. Obs.: Não esqueça dos anos
bissextos. Lembre-se que um ano é bissexto se é divisível por 400 ou em caso negativo, se é
divisível por 4 mas não por 100.
#include <stdio.h>
int main(){
int i;
int dias_bissex[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int dias_anonorm[12]={31,28,31,30,31,30,31,31,30,31,30,31};
struct {
int dia;
int mes;
int ano;
}data;
scanf("%d %d %d",&data.dia,&data.mes,&data.ano);
if((data.ano%4==0) && ((data.ano%100!=0)||(data.ano%400==0))){
data.dia+=1;
for(i=0;i<=11;i++){
if(data.dia==dias_bissex[i]||data.dia>=31){
data.dia=1;
data.mes+=1;
}
}
if(data.mes==12 || data.mes>=12){
data.mes=1;
data.ano+=1;
}
printf("%d %d %d\nbissexto",data.dia,data.mes,data.ano);
}else{
for(i=0;i<=11;i++){
if(data.dia==dias_anonorm[i]||data.dia>=31){
data.dia=1;
data.mes+=1;
}
}
if(data.mes==12 || data.mes>=12){
data.mes=1;
data.ano+=1;
}
printf("%d %d %d\nnormal",data.dia,data.mes,data.ano);
}
return 0;
}
Questão 02
Dados dois horários de um mesmo dia expressos no formato hh:mm:ss, calcule o tempo
decorrido entre estes dois horários, apresentando o resultado no mesmo formato.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
int hora1, hora2, r1, r2, total;
char resposta[6];
inicio:
printf("Digite um horario:");
scanf("%d", &hora1);
printf("Digite outro horario:");
scanf("%d", &hora2);
if (hora1 == 000000 && hora2 == 000000) {
goto fim;
}
if (hora1 > hora2) {
printf("\nERRO: A primeira hora nao pode ser maior que a
segunda hora!\n\n");
goto inicio;
}
if (hora1/10000 > 23 || hora2/10000 > 23 || hora1%10000/100 > 59 ||
hora2%10000/100 > 59 || hora1%100 > 59 || hora2%100 > 59) {
printf("\nERRO: Horario invalido, digite um horario valido!\
n\n");
goto inicio;
}
total = hora2 - hora1;
if(total % 100 > 60) {
r1 = total % 100;
total = total - 40;
}
if(total%10000>6000){
r2 = total % 10000;
total = total - 4000;
}
itoa(total, resposta, 10);
switch (strlen(resposta)) {
case 1: printf("\nA diferenca entre os horarios e: 00000%s\
n\n", resposta); break;
case 2: printf("\nA diferenca entre os horarios e: 0000%s\n\
n", resposta); break;
case 3: printf("\nA diferenca entre os horarios e: 000%s\n\
n", resposta); break;
case 4: printf("\nA diferenca entre os horarios e: 00%s\n\
n", resposta); break;
case 5: printf("\nA diferenca entre os horarios e: 0%s\n\n",
resposta); break;
}
goto inicio;
fim:
system("PAUSE");
return 0;
}
Questão 03
Dadas duas datas, calcule o número de dias decorridos entre estas duas datas. Uma maneira
provavelmente mais simples de computar essa diferença é usar a fórmula 15.1 para calcular
um número de dias N baseada em uma data:
N= [ 4 ][
1461 × f ( ano , mês )
+
153 × g ( mês )
5 ]
+ dia
onde
{
f ( ano , mês )= ano−1 , se mês ≤ 2,
ano , caso contrário
e
g ( mês )= {mês+1
mês+13 , se mês ≤ 2 ,
, caso contrário .
(15.1)
Podemos calcular o valor N1 para a primeira data informada, o valor N2 para a segunda data
informada e a diferença N2-N1 é o número de dias decorridos entre estas duas datas
informadas.
Questão 04
D= ( N −621049 ) mod 7
é um número entre 0 e 6 que representa os dias da semana, de domingo a sábado. Por
exemplo, para a data de 21/06/2007 temos
N= [ 4 ][
1461 × f ( 2007 ,6 )
+
5 ]
153 × g ( 6 )
+21
¿
[ 1461× 2007
4
+
][
153× 7
5
+21
]
¿ 733056+214 +21
¿ 733291
= 4.
Dada uma data fornecida pelo usuário no formato dd/mm/aaaa, determine o dia da semana
para esta data.
#include <stdio.h>
#include <string.h>
#include <time.h>
int main(void) {
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
struct tm tempo;
memset(&tempo, 0, sizeof(tempo));
tempo.tm_mday = x;
tempo.tm_mon = y;
tempo.tm_year = z-1900;
mktime(&tempo);
printf("%d\n", tempo.tm_wday);
return 0;
}
Questão 05
Faça um programa em C que utilize Structs para armazenar os dados de um aluno. Um aluno
deve possuir:
-Número de Matrícula;
-Nota 1;
-Nota 2;
-Nota 3;
-Nota 4;
Leia e armazene os dados de dois alunos e compare quem teve o melhor coeficiente de
rendimento. O coeficiente é calculado baseado na média aritmética.
#include <stdio.h>
int main(){
float total,total2;
int i;
struct{
int matri;
float nota[4];
}aluno,aluno2;
printf("Matricula no aluno 1\n");
scanf("%d",&aluno.matri);
for(i=1;i<=4;i++){
printf("nota[%d] do aluno 1:\n",i);
scanf("%f",&aluno.nota[i]);
}
for(i=1;i<=4;i++){
total+=aluno.nota[i];
}
total=total/4;
printf("\nmatricula do aluno 2\n");
scanf("%d",&aluno2.matri);
for(i=1;i<=4;i++){
printf("nota[%d] do aluno 2:\n",i);
scanf("%f",&aluno2.nota[i]);
}
for(i=1;i<=4;i++){
total2+=aluno2.nota[i];
}
total2=total2/4;
printf("\n------------------------\n");
printf("Media do aluno 1:%.2f\n",total);
printf("Media do aluno 2:%.2f\n",total2);
if(total>total2){
printf("O aluno 1 teve a maior media\n");
}else printf("O aluno 2 teve a maior media\n");
return 0;
}