Programaçaõ em C

1 resposta
S

Boa Pessoal , venho hoje aqui ver se poderiam me ajudar. Não Está printando na Tela o nome,.
Desde já muito obrigado a todos

#include <stdio.h>
#include <locale.h>
#include<stdio.h>

int main()

{

setlocale(LC_ALL,Portuguese);
float notas[3];
char nome[15];
int presenca[1];

printf("\n BEM VINDO PROFESSOR \n Vamos avaliar o Aluno:");
printf("\n Nome do Aluno: "); scanf("%s",nome);
printf("\n 1º Nota do Aluno: "); scanf("%f",&notas[0]);
printf("\n 2º Nota do Aluno: "); scanf("%f",&notas[1]);
printf("\n 3º Nota do Aluno: "); scanf("%f",&notas[2]);
printf("\n Para Finalizarmos Informe a Presença do %s no Semestre: ",nome); scanf("%d",&presenca[0]);


presenca[1] = ( presenca[0] * 100 ) / 80;
notas[3] = ( notas[0] + notas[1] + notas[2] ) / 3;

if ( presenca[1] < 75 && presenca[0] < 81 && notas[3] < 31){
    printf("\n O Aluno: %s Está Reprovado por Falta, com apenas %d de Presença",nome,presenca[1]);

}else if (notas[3] < 7.0  && presenca[0] < 81 && notas[3] < 31){
    printf("\n O Aluno: %s Está Reprovado por Média, com apenas %.2f de Media",nome,notas[3]);

}else if ( presenca[0] < 81 && notas[3] < 11){
    printf("\n O Aluno: %s está Aprovado",nome);

}else{
    printf("\n Verifique os Lançamentos dos Dados");
}

return 0;

}

1 Resposta

davidbuzatto

Bem… vamos lá. Não sei quem está te dando aula de C, mas tá meio enrolado né?

Primeira coisa… Joga fora essa história de locale. Vc provavelmente não vai trabalhar com a linguagem C, ela está sendo usada apenas como um meio para aprender a programar. Sua tela não precisa ficar linda nem apresentar acentos e outros caracteres especiais.

Continuando… Pq presenca é um array de uma posição ao invés de uma variável inteira? Vc acessa as posições 0 e 1 do array presenca, o que não faz sentido, pois está definido com uma posição. Parece que você precisa de dois valores, um para a presença em si, outro para a porcentagem em relação à 80 aulas, então teria que declarar como int presenca[2]; Fazendo isso, seu programa passa a funcionar para o caso do teste da presença.

Vc errou novamente na declaração do array notas, pois ele têm três posições e você usa 4, inclusive para propósitos diferentes (igual na presença). Acredito que seja um exercício sobre arrays e que você é obrigado a usar…

Vc mistura critérios de verificação das entradas com condições para apresentar o resultado ao usuário… Mistura também valores armazenados nos arrays presenca e notas com mais de um sentido. Enfim, eu reescreveria seu programa assim:

#include <stdio.h>
#include <stdio.h>
#include <string.h>

int main() {

    float notas[3];
    float media;

    char nome[15];

    int presenca;
    float porcentagemPresenca;


    printf( "BEM VINDO PROFESSOR\n" );
    printf( "Vamos avaliar o Aluno:\n" );

    printf( "Nome: ");
    fgets( nome, 15, stdin );    // faz a leitura de uma string do jeito "certo"
    nome[strlen(nome)-1] = '\0'; // remove pulo de linha

    for ( int i = 0; i < 3; i++ ) {
        printf( "Nota %d: ", i + 1 );
        scanf( "%f", &notas[i] );
    }

    printf( "Para finalizarmos, informe a presenca do %s no semestre: ", nome );
    scanf( "%d", &presenca );

    // aqui vem a validação, que deveria vir antes na entrada de cada dado,
    // usando um do ... while
    if ( notas[0] < 0 || notas[0] > 10 ||
         notas[1] < 0 || notas[1] > 10 ||
         notas[2] < 0 || notas[2] > 10 ||
         presenca < 0 || presenca > 80 ) {

        printf( "Verifique os lancamentos dos dados" );

    } else {

        porcentagemPresenca = ( presenca * 100 ) / 80;
        media = ( notas[0] + notas[1] + notas[2] ) / 3;

        printf( "O aluno %s ", nome );

        if ( porcentagemPresenca < 75 ){
            printf( "esta reprovado por falta, com apenas %.2f%% de presenca", porcentagemPresenca );
        } else if ( media < 7 ){
            printf( "esta reprovado por media, com apenas %.2f de media", media );
        } else {
            printf( "esta aprovado!" );
        }

    }

    return 0;

}

Em tempo, algo mais apropriado, com a validação dos valores na entrada, seria assim:

#include <stdio.h>
#include <stdio.h>
#include <string.h>

int main() {

    char nome[15];
    float notas[3];

    float media;
    int presenca;
    float porcentagemPresenca;


    printf( "BEM VINDO PROFESSOR\n" );
    printf( "Vamos avaliar o Aluno:\n" );

    printf( "Nome: ");
    fgets( nome, 15, stdin );    // faz a leitura de uma string do jeito "certo"
    nome[strlen(nome)-1] = '\0'; // remove pulo de linha

    for ( int i = 0; i < 3; i++ ) {

        do {

            printf( "Nota %d (0 a 10): ", i + 1 );
            scanf( "%f", &notas[i] );

            if ( notas[i] < 0 || notas[i] > 10 ) {
                printf( "O valor da nota %d deve ser de 0 a 10!\n", i + 1 );
            }

        } while ( notas[i] < 0 || notas[i] > 10 );

    }

    printf( "Para finalizarmos, informe a presenca do aluno %s no semestre:\n", nome );

    do {

        printf( "Presenca (0 a 80): " );
        scanf( "%d", &presenca );

        if ( presenca < 0 || presenca > 80 ) {
            printf( "O valor da presenca deve ser de 0 a 80!\n" );
        }

    } while ( presenca < 0 || presenca > 80 );


    porcentagemPresenca = ( presenca * 100 ) / 80;
    media = ( notas[0] + notas[1] + notas[2] ) / 3;


    printf( "O aluno %s ", nome );

    if ( porcentagemPresenca < 75 ){
        printf( "esta reprovado por falta, com apenas %.2f%% de presenca", porcentagemPresenca );
    } else if ( media < 7 ){
        printf( "esta reprovado por media, com apenas %.2f de media", media );
    } else {
        printf( "esta aprovado!" );
    }

    return 0;

}

Ainda da para melhorar mais, mas não acredito que seja necessário e talvez vc ainda não tenha visto nas aulas o que seria preciso.

Abraço e bons estudos!

Criado 3 de outubro de 2020
Ultima resposta 4 de out. de 2020
Respostas 1
Participantes 2