Você está na página 1de 5

Programação de Computadores

Prof.ª Ana Elisa

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

Seja N computado como equação 15.1. Então, o valor

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

Então D= (733291−621049 ) mod 7 = 112242mod7

= 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;
}

Você também pode gostar