Jump to content
dsoares

Dúvidas com repetição

Recommended Posts

dsoares

Olá a todos, sou novo no forum e este é o meu primeiro post. Estou com uma dúvida em um programa em C e gostaria da experiente ajuda de vocês.

A questão é a seguinte: Faça um programa que recebe o nome e nota de um aluno, e depois imprima em cada linha o nome e a nota do aluno. O programa deverá parar quando for digitado um nome de 2 caracteres e ao final deverá ser impresso a média das notas digitadas.

Segue o programa:

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

char   aluno[51];
float  media, calcnota, nota;
int    j,i=1;


int main ()
{
   printf ("Digite o nome do aluno: ");
   gets (aluno);
   printf ("Digite a nota do aluno: ");
   scanf ("%f", &nota);

   for (j=strlen(aluno); j<=50; i++)               // usei "j<=50" pois o vetor da string perde um espaço para o "\0".
   {
     if (strlen(aluno) > 2)
     {
       printf ("Aluno: %s\n", aluno);
       printf ("Nota: %f\n", nota);
       calcnota *= nota;                                 // loop para multiplicar todas as notas.
     }
     else if
           {
             printf ("Média dos alunos: \n", media);
             media = calcnota/i;                           // o loop irá parar, então irá imprimir a média. 
           }
     
    printf ("Digite o nome do aluno: ");
    gets (aluno);
    printf ("Digite a nota do aluno: ");
    scanf ("%f", &nota);

    }
}

Grato desde já :)

Share this post


Link to post
Share on other sites
KTachyon

Sabes que a média é a soma de todas as notas dividida pelo número de notas, e não a multiplicação, certo? :)

Já agora, o calcnota tem que ser inicializado, estás a pedir o nome do aluno de todas as vezes quando podias pedir só uma vez, as restantes estás a utilizar por uma questão de controlo, o que é feio.

Pensa antes numa abordagem com um menu, por exemplo em que pedes o nome, as notas e a média, uma coisa de cada vez.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
dsoares

Sabes que a média é a soma de todas as notas dividida pelo número de notas, e não a multiplicação, certo? :)

Já agora, o calcnota tem que ser inicializado, estás a pedir o nome do aluno de todas as vezes quando podias pedir só uma vez, as restantes estás a utilizar por uma questão de controlo, o que é feio.

Pensa antes numa abordagem com um menu, por exemplo em que pedes o nome, as notas e a média, uma coisa de cada vez.

Verdade, falta de atenção minha. Cometi um erro primário, média é soma e não multiplicação..  😲

A idéia então seria eu perguntar uma vez nome/nota e depois somente passar o scanf para a leitura?

No caso, vc está me propondo a imprimir sempre o nome, nota e média atual?

Porque na verdade a minha idéia seria, pegar os nomes/notas e imprimi-los, onde no final quando finalizado o programa eu iria mostrar a média das notas, ai os nomes/notas já estarão impressos acima. Porém, eu concordo que fica feio ficar perguntando o nome e anota toda hora, só não achei uma melhor forma para abordagem.

Share this post


Link to post
Share on other sites
bubulindo

Cuidado com as variáveis globais... neste programa não precisas de as ter definidas como globais.


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
Submit_RnM

Pensa melhor na resolução do teu problema..tens algum codigo redundante.

ve melhor este codigo:

for (j=strlen(aluno); j<=50; i++)

a condição que aqui tens so vai ser falsa quando o tamanho da string for maior que 50...o que tu queres é que seja falsa quando o tamanho for igual a 2.

printf ("Média dos alunos: \n", media);
             media = calcnota/i;     

Tens o printf para mostrar a variavel media mas não tens nem o sitio na frase nem o tipo de variavel a mostrar (neste caso "%f")     

E nesse momento a tua variavel nem esta inicializada...so a inicializadas na linha a seguir.

Share this post


Link to post
Share on other sites
KTachyon

O que eu propunha seria apresentar um menu para cada interacção, de modo a não necessitar de pedir o nome do aluno novamente:

Seleccione uma opção:
1. Adicionar nota
2. Apresentar média
3. Sair


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
dsoares

Obrigado a todos pela as dicas, absorvi tudo e vou tentar fazer conforme vocês falaram.

Rui Carlos, eu estou aprendendo ainda a Linguagem C na faculdade, ainda não tenho total domínio das ferramentas que me dispôe, mas irei pesquisar para saber melhor sobre como usar o "fgets".

Obrigado a todos pela a ajuda, vou dar continuidade ao programa agora.

Share this post


Link to post
Share on other sites
dsoares

Pensa melhor na resolução do teu problema..tens algum codigo redundante.

ve melhor este codigo:

for (j=strlen(aluno); j<=50; i++)

a condição que aqui tens so vai ser falsa quando o tamanho da string for maior que 50...o que tu queres é que seja falsa quando o tamanho for igual a 2.

printf ("Média dos alunos: \n", media);
             media = calcnota/i;     

Tens o printf para mostrar a variavel media mas não tens nem o sitio na frase nem o tipo de variavel a mostrar (neste caso "%f")     

E nesse momento a tua variavel nem esta inicializada...so a inicializadas na linha a seguir.

é verdade, faltou o %f, desculpem-me pela a falta de atenção. o motivo da falta de atenção é que estou trabalhando neste programa no meu trabalho :/

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.