Ir ao conteúdo

Posts recomendados

Postado

Estou com dificuldades na seguinte atividade: Faça um programa que leia o nome do aluno, matrícula, disciplina e 4 notas. Armazene essas notas e calcule a média das mesmas, imprimindo na tela o resultado final do aluno de acordo com as seguintes condições.

 

Ao executar o código, ele calcula a média, porém não imprime os IF/else na tela.

 

Código:

 

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <locale.h>
#include <stdlib.h>
#include <cstring>

int main()
{

char aluno, matri;
float nota1, nota2, nota3, nota4, media = 0;

printf("Nome do aluno: ");
scanf("%s", &aluno);
printf("\n");

printf("Matricula do aluno: ");
scanf("%s", &matri);
printf("\n");

printf("Digite a nota 1: ");
scanf("%f", &nota1);
printf("\n");
printf("Digite a nota 2: ");
scanf("%f", &nota2);
printf("\n");
printf("Digite a nota 3: ");
scanf("%f", &nota3);
printf("\n");
printf("Digite a nota 4: ");
scanf("%f", &nota4);
printf("\n");

media = ((nota1+nota2+nota3+nota4)/4);

printf ("A media e: %f\n\n", media);

if(media<5){
    printf("O aluno %s", aluno, "de matricula %s", matri, "teve como media %f", media, "e está REPROVADO!");
}else

if(media>=5 && media<6){
    printf("O aluno %s", aluno, "de matricula %s", matri, "teve como media %f", media, "e está de RECUPERACAO!");
}else

if(media>=6 && media<=10){
    printf("O aluno %s", aluno, "de matricula %s", matri, "teve como media %f", media, "e está APROVADO!");
}else

if(media<0){
    printf("Media invalida!");
}


return 0;
}

 

  • Obrigado 1
Postado

@Zaxyn    ele não escreve do modo certo por que você colocou o printf de forma errada !  ,  

printf("O aluno %s", aluno, "de matricula %s", matri, "teve como media %f", media, "e está REPROVADO!");
/// esse modo eh usado no VisualG 3.0
/// e poderia ser assim na LingauageM C :
printf("O aluno %s de matricula %s teve como media %.2f e esta REPROVADO . . . !", 
       aluno, matri,media);
/// ou na LinguaGem C++ :
std::cout << "O aluno " << aluno << " de matricula " << matri << " teve como media " 
          << media << "e está REPROVADO !" << endl;

essa biblioteca locale.h é problemática e melhor não usa-la, pois talvez funcione no seu pc , mas em outros não funcione devido as configurações de cada um .

   e seu código hum pouco  modificado  poderia ser assim  :

#include <stdio.h>
#include <windows.h>
#include <math.h>
#include <string.h>
/// #include <locale.h> essa eh problema , melhor não usar
#include <stdlib.h>
#include <cstring>  // biblioteca da Linguagem C++
#define h GetStdHandle(STD_OUTPUT_HANDLE)
int textcolor(int,int);
int main()
{
    int antes, antis;
    CONSOLE_SCREEN_BUFFER_INFO c;
    if(GetConsoleScreenBufferInfo(h, &c))
    {
        antes = ( c.wAttributes & 0xFF) & 0x0F;
        antis = ((c.wAttributes & 0xFF) >> 4) & 0x0F;
    }
    char aluno[25],  /// um char armazena apenas um caractere
         matri[10],  /// string usa muitas posições no vetor de char
         resultado[41]={0};
    float nota1, nota2, nota3, nota4, media = 0;
    textcolor(11,0);
    printf("Nome do aluno: ");
    scanf("%s", aluno); /// string , não precisa do "&" pois já tem o endereco da variaveL
    printf("Matricula do aluno: ");
    scanf("%s", matri);
    printf("Digite a nota 1: ");
    scanf("%f", &nota1);
    /// printf("\n");     não precisa pois o scanf já pula uma linha
    printf("Digite a nota 2: ");
    scanf("%f", &nota2);
    printf("Digite a nota 3: ");
    scanf("%f", &nota3);
    printf("Digite a nota 4: ");
    scanf("%f", &nota4);
    media = ((nota1+nota2+nota3+nota4)/4);
    textcolor(15,12);
    printf ("\n\tA media eh: %5.2f  \n\n", media);
    if(media < 5)
    {
        textcolor(15,13);
        strcpy(resultado,"REPROVADO!"); /// armazena o resultado
    }
    else
    {
        if(media >= 5 && media < 6 )
        {
            textcolor(9,14);
            strcpy(resultado,"de RECUPERACAO!");
        }
        else
        {
            if(media >= 6 && media <= 10)
            {
                textcolor(15,9);
                strcpy(resultado,"APROVADO!");
            }
            else
            {
                if(media < 0)
                {
                    textcolor(12,10);
                    printf("  Media invalida !  \n");
                }
            }
        }
    }     /// sem precisar ficar repetindo a mesma coisa varias xezes !
    printf("O aluno %s de matricula %s teve como media %05.2f e esta %s\n\n\n",
           aluno,matri,media,resultado);
    textcolor(antes,antis);
    return 0;
}
int textcolor(int letras,int fundo)
{
    SetConsoleTextAttribute(h,letras+(fundo << 4));
}

 

  • Curtir 1
Postado

É mesmo um programa em C++?

 

Não há razão para usar esse headers em C++:

 

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <locale.h>
#include <stdlib.h>
#include <cstring>

 

E se escreveu cstring use cstdio, cmath e tal. É uma convenção. Não há razão para usar só uma vez.

 

Em 23/02/2022 às 04:04, devair1010 disse:
#include <cstring>  // biblioteca da Linguagem C++

 

Não, não é.

 

A convenção é ao usar uma bibioteca C em C++ retirar o .h e colocar um C na frente. Ao contrário do que escreveu, @devair1010, é uma biblioteca da linguagem C e não deveria estar sendo usada aqui.

  • Curtir 1
  • Obrigado 1
Postado
34 minutos atrás, Zaxyn disse:

Não sei se eu entendi direito. Não existe esses bibliotecas .h em C++?

 

 

 

Esse arquivos .h não são bibliotecas. São apenas trechos de código, em geral nesse caso apenas declarações de funções.

 

A biblioteca é aquilo que você passa depois na fase de link, no caso de math.h por exemplo você usa -lm no link. Ou o IDE usa. O código de stdio acho que fica em libc.a.

 

O header só tem as funções para o compilador entender os parâmetros.

 

O nome pode ser qualquer um. #include é o comando para o pre-processador. .h é uma convenção de C. Mas tanto faz.

 

39 minutos atrás, Zaxyn disse:

Qual é a diferença de eu botar <cstdio> e <stdio.h> ?

 

A mesma de usar cstring ao invés de string.h.

 

É só uma convenção em C++ para ficar claro que está usando uma biblioteca C padrão.

 

Mas não precisa dessas funções em C++. Isso em geral se usa enquanto se porta um sistema de C para C++ até ficar livre das funções de C. Ou claro, para sempre se essas forem importantes.

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...