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", ¬as[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", ¬as[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!