Informática, perguntado por Aleximandro, 1 ano atrás

Alguem poderia me ajudar a completar este algoritmo na linguagem C. esta num 80% de avanço. tenho problemas para fazer o item 2 e 3.

Escreva um programa em C que define um novo tipo de dados chamado aluno, que deve possuir três elementos do tipo float (nota1, nota2 e média), um inteiro (faltas) e um vetor do tipo char (nome). Na função principal deve-se declarar um vetor de alunos de tamanho 10. Além disso, o programa deve realizar as seguintes operações:

1) Cadastrar alunos, ou seja, pedir para o usuário digitar o nome, notas e quantidade de faltas de cada um dos 10 alunos. O programa deve pedir para o usuário preencher as notas através de mensagens do tipo “Digite a nota 1 do aluno FULANO”.
2) Verificar aprovados, ou seja, percorrer o vetor de alunos e imprimir o nome dos alunos aprovados (media >=7).
3) Inserir pontuação extra, ou seja, percorrer o vetor de alunos e aumentar um ponto nas duas notas de cada aluno que tem quantidade de faltas igual a zero.
#include

struct aluno{
float nota1, nota2, media;
int faltas;
char nome[20];
};
typedef struct aluno al;

main()
{
al n1, n2, m, f, n, resultado;
int ALUNOS[2], i;

printf("\n--------Cadastro de Alunos-------\n");

for(i=0; i<2; i++){
printf("\nDados do %d Aluno", i+1);
printf("\nDigite nome: ");
fflush(stdin);
gets(n.nome);

printf("\nNotas: ");
printf("\nDigite a Primeira Nota do Aluno %s: ", n.nome);
scanf("%f", &n1.nota1);

printf("Digite a Segunda Nota do Aluno %s: ", n.nome);
scanf("%f", &n2.nota2);

printf("\nFaltas");
printf("\nDigite o numero de Faltas: ");
scanf("%d", &f.faltas);

}
resultado.media=(n1.nota1+n2.nota2)/2;
if(resultado.media>=7)
printf("Aluno Aprovado");
else(resultado.media<7)
printf("Aluno Desaprovado");

getche();
}


Aleximandro: Não reparem pela ultima parte que diz resultado. media.... ali tentei fazer o item 2
DennisRitchie: Se você esperar até a noite.. posso resolver. To ocupado agora.
DennisRitchie: Questão legal.
DennisRitchie: Dica: crie o vetor ALUNOS do tipo al e crie o contador i do tipo int.

Soluções para a tarefa

Respondido por Index
3
Segue abaixo o algoritmo.

Nesse algoritmo eu criei a struct como é pedido no problema.
Depois criei o vetor ALUNOS com o tipo "struct". Isso mesmo, as structs são como um tipo int, char, float, double e etc. A diferença é que você tem uma melhor flexibilidade para manusear os dados, pois elas podem ter diversos tipos de dados.

Por exemplo.
Para declará-la usamos a sintaxe: "nome da struct" ALUNOS[10];

Se quisermos acessar alguma variável dentro da struct, usamos a sintaxe: ALUNOS[índice]."variável"

O problema do seu algoritmo é que você não estava relacionando a struct com nada. Os dados que eram inseridos não iam para as variáveis contidas na struct.

Para mais informações sobre structs veja esse vídeo: https://youtu.be/Dzr5ZQ2Lsi4?t=7m28s
Anexos:

DennisRitchie: "tipoAluno" é uma estrutura e não um tipo de variável.
DennisRitchie: Não na linguagem C, talvez na linguagem C++
Index: o "for" não é aceito no modelo C9 (Linguagem C); struct também é algo que não é aceito no C9, apenas C11 (Linguagem C++)
Aleximandro: pessoal eu sou iniciante na programação em c. Gostaria que explicasem melhor esso de c9 c11. a verdade que eu utilizo c
Index: Eu considero incorreto dizer "Eu programo apenas em C". Eu considero correto dizer "Eu programo em C/C++". Por exemplo, o for ele não é aceito na linguagem C pura. Ele foi implementado depois no C++. Mas você não vai deixar de usá-lo por esse motivo. Você pode criar um arquivo .CPP que é uma extensão usada para designar um arquivo pertencente ao C++ e utilizá-lo. Em contrapartida, você pode usar printf (que é uma sintaxe do C junto com o for - que é do C++)
DennisRitchie: Acho que o for é aceito sim. O que não é aceito é inicializar uma variável dentro do for.. do jeito que vc faz. Exemplo: for(int i.....)
Index: é verdade
DennisRitchie: A questã de vc usar a sintax do C no C++ é que o C faz parte do C++. Ou seja, o C é um subconjunto do C++. Mas o contrário não é válido, pois vc não pode usar a sintax do C++ em um arquivo C
Aleximandro: Vc esta esta certo Index o correto é dizer eu programo em c/c++. pois ela difine melhor a área de atuação. Como falei há 8 meses que comecei o curso de S.I. e Nimguem me explicou a diferença. Eu pensei que eu estava estudando programação em C. Mas hoje ficou esclarecido. C foi criado primeiro que C++ . C++ tem mais funcionalidades que c porem tem algumas funções de c que rodan da mesma forma em C++
Aleximandro: #include<stdio.h>

struct aluno{
float nota1, nota2, media;
int faltas;
char nome[20];
};
typedef struct aluno al;
main()
{
al ALUNOS[2];
int i;

printf("\n--------Cadastro de Alunos-------\n");

for(i=0; i<2; i++){
printf("\nDados do %d Aluno", i+1);
printf("\nDigite nome: ");
scanf("%s", ALUNOS[i].nome);

printf("\nNotas: ");
printf("\nDigite a Primeira Nota do Aluno %s: ", ALUNOS[i].nome);
scanf("%f", &ALUNOS[i].nota1);

printf("Digite a Segunda Nota do Aluno %s: ",
Perguntas interessantes