Pessoal, o programa esta pronto, porém tem um detalhe que eu não consigo resolver...
Na verdade você precisava apenas informar a - v_aluno_dados - o seu comprimento para cada nome na lista de 50 alunos.
Como cada nome tem 20 caracteres, fazer isso é bem simples. Veja:
/*Declaração de Vetores*/
char nome[21], sobrenome[21];
char v_aluno_dados[50][21];
int v_aluno_media[50];
Você se esqueceu de usar a variável "nome" e assim ela não mostrava nada ao ser apresentada na tela. Eu corrigi isto também.
No último loop FOR você utiliza "&" para imprimir na tela a variável - v_aluno_dados. - Além de desnecessário isto não é correto.
Aproveitei para enxugar o seu código um pouco, removendo o excesso de printf("\n") e outras correções menores que você já aplica.
A "maior nota" não é usada em momento algum: Pode descartar.
Erros de lógica não podem passar despercebidos mas, infelizmente isso acontece. A nota substitutiva deve prevalecer unicamente quando for maior que a menor nota. Tem que validar antes. - Existe ainda a aplicação dos pesos às referidas notas: Se a quarta nota cujo peso 4 for a menor, então ela deverá ser substituída antes de aplicar o peso. É justo, não?
" Código funcional "
[code=c]/* Incluindo as bibliotecas */
#include
#include
#include
#include
int main(void) {
/* Declarando variaveis */
const int p1 = 1, p2 = 2, p3 = 3, p4 = 4;
int mat, resp, nsub, menor, tot1, media,
n1, n2, n3, n4, nota1,nota2, nota3, nota4,
x = 0, j = 0, mediasala = 0;
/* Declaração de Vetores */
char nome[21], sobrenome[21];
char v_aluno_dados[50][21];
int v_aluno_media[50];
/* Titulo do programa */
printf("\n***************************** CALCULE A MEDIA **********************************\n\n");
do {
/* Lendo e armazenando informações digitadas */
printf("\n INFORME OS DADOS DO ALUNO\n\n");
printf("Digite o primeiro nome do aluno: ");
scanf("%s", &nome[x]);
strcpy(v_aluno_dados[x], nome);
printf("Digite o ultimo nome do aluno: ");
scanf("%s", &sobrenome[x]);
printf("Digite o numero da matricula: ");
scanf("%d", &mat);
printf("\n================================================================================\n");
/* Usuário informa as notas */
printf("Digite a PRIMEIRA nota: ");
scanf("%d", &n1);
printf("Digite a SEGUNDA nota: ");
scanf("%d", &n2);
printf("Digite a TERCEIRA nota: ");
scanf("%d", &n3);
printf("Digite a QUARTA nota: ");
scanf("%d", &n4);
menor = n1; j = 1;
if (n2 < menor) { menor = n2; j = 2; }
if (n3 < menor) { menor = n3; j = 3; }
if (n4 < menor) { menor = n4; j = 4; }
printf("\n\nMenor nota: %d\n", menor);
printf("Digite a nota SUBSTITUTIVA: ");
scanf("%d", &nsub);
switch(j) {
case 1: n1 = nsub; break;
case 2: n2 = nsub; break;
case 3: n3 = nsub; break;
default: n4 = nsub;
}
nota1 = n1 * p1;
nota2 = n2 * p2;
nota3 = n3 * p3;
nota4 = n4 * p4;
tot1 = nota1 + nota2 + nota3 + nota4;
media = (tot1 / 10);
v_aluno_media[x] = media;
mediasala = mediasala + media;
printf("\n\n================================================================================\n\n");
/* Tela final apresentada ao usuário */
printf("Aluno: %s %s\n", nome, sobrenome);
printf("Matricula: %d\n", mat);
printf("Media do Aluno: %d\n", media);
if(media >= 5)
printf("Situacao: APROVADO!");
else
printf("Situacao: REPROVADO!");
printf("\n\n================================================================================\n");
printf("Deseja Continuar????\n");
printf("1 - Sim / 2 - Não.\n");
scanf("%d", &resp);
printf("\n_______________________________________________________________________________\n");
x = x + 1;
} while (resp == 1);
for (j = 0; j < x; j++) {
printf("Aluno: %s\n", v_aluno_dados[j]);
printf("Media do Aluno: %d\n\n", v_aluno_media[j]);
}
mediasala = mediasala / x;
printf(" MEDIA GERAL DOS ALUNOS\n\n");
printf("Media dos alunos da sala: %d\n\n", mediasala);
system("PAUSE");
return 0;
}[/code]