Esercizi in C con FOR

di il
16 risposte

Esercizi in C con FOR

Salve ragazzi,
Sono ancora inesperto in questo campo.

Dovrei fare questo esercizio:

Di N persone si conoscono l'età, il nome, l'altezza e il sesso.
Scrivere un programma che permetta di:
- stabilire il nome del più alto
- stabilire l'età media
- stabilire il numero dei maschi e la percentuale rispetto al totale.

Ed io ho scritto tutto questo:

//INCLUSIONE DELLE LIBRERIE

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


main() {
    //DICHIARAZIONE DELLE VARIABILI
    
    int n,e,a,am=0,se=0,p; //numero persone; età; altezza; altezza massima; somma età; percentuale
    char nome[10];
    char nomemax[10];
    char s; //sesso
    int m; //età media
    int b,g; // boy; girl
    e=0;
    b=0;
    g=0;    
    int i;     
    //CORPO DEL PROGRAMMA
    printf("Inserisci quante persone vuoi inserire.\n");
    scanf("%d", &n);
    
    for(i=1; i<=n; i++){    
                          printf("Inserisci il nome della persona numero %d.\n", i);
                          scanf("%s", &nome);
                          printf("Inserisci il sesso scrivendo 'm' o 'f'.\n");
                          scanf("%s", &s);
                          printf("Inserisci l'eta'.\n");
                          scanf("%d", &e);
                          //somma età
                                      se=se+e;
                          printf("Inserisci l'altezza in centimetri.\n");
                          scanf("%d", &a);
                          
                          
                          
                                                                
                                      //sesso
                                      if (s == 'm') {
                                      b++;
                                      }
                                      else {
                                           g++;
                                           }
                                      //altezza massima 
                                     if (a>am) {
                                                 am=a;
                                                        nomemax == nome;
                                                        }
                                                                
                                                                   
                                                                      
                                                
                         
    }
    //età media
    m=se/n;
    //percentuale
    p=(b*100)/n;
    
     printf("\n%s e' il piu' alto ed e' alto %d.\n",nomemax,am);
     printf("L'eta' media e': %d.\n",m);
     printf("I maschi sono: %d.\n",b);
     printf("La percentuale di maschi e' del: %d%%.\n",p);
    
    
    system("PAUSE");
}     

L'unico problema è che non mi stampa:
"nome" è il più alto

Non so proprio come fare xk le mie conoscenze non sono abbastanza.
Potreste aiutarmi? Grazie in anticipo!

16 Risposte

  • Re: Esercizi in C con FOR

    Le stringhe si copiano tramite la funzione strcpy e non con == (che si usa per i confronti ...).

    Quindi

    strcpy(nomemax, nome);
  • Re: Esercizi in C con FOR

    Ho provato, non funziona lo stesso..
  • Re: Esercizi in C con FOR

    In che senso?

    Quale problema hai ?
  • Re: Esercizi in C con FOR

    Ho scritto come hai detto tu: strcpy(nomemax, nome);
    ma non funziona lo stesso!
  • Re: Esercizi in C con FOR

    "Non funziona" che significa?

    Cosa inserisci?

    Cosa visualizzi?
  • Re: Esercizi in C con FOR

    oregon ha scritto:


    "Non funziona" che significa?

    Cosa inserisci?

    Cosa visualizzi?
    Ho scritto così:
    
    if (a>am) {
                                                     am=a;
                                                            strcpy(nomemax, nome);
                                                            }
    
    e continua a non stampare il nome, come prima!
    Ho sbagliato ad inserirlo per come l'hai scritto tu?
  • Re: Esercizi in C con FOR

    Va bene ... il fatto è che ho provato e visualizza i dati che inserisco.

    Tu, ripeto, cosa inserisci per provare il programma? E cosa succede?
  • Re: Esercizi in C con FOR

    Guarda lo screen..



    Vedi che non spunta il nome?
  • Re: Esercizi in C con FOR

    Quando inserisci il sesso e utilizzi un carattere, non devi utilizzare

    %s

    nella scanf perché quella si usa per le stringhe e corrompe la memoria se utilizzata in maniera non corretta. Per i caratteri va usato %c e va anche pulito il buffer di input.

    Quindi il codice deve essere
    
    printf("Inserisci il sesso scrivendo 'm' o 'f'.\n");
    scanf("%c", &s);
    while(getchar() != '\n');
    
  • Re: Esercizi in C con FOR

    Adesso mi da il nome!
    Ma non mi incrementa più boy (b++;)
  • Re: Esercizi in C con FOR

    Inserisci la while anche dopo il primo scanf per pulire il buffer di input
    
    scanf("%s", &nome);
    while(getchar()!='\n');
    
  • Re: Esercizi in C con FOR

    Grazie!!
    Adesso funziona tutto, ma vorrei implementare l'altezza minima e non sto riuscendo a capire come devo fare, ancora non sono pratico del FOR
  • Re: Esercizi in C con FOR

    Cosa c'entra l'altezza minima con il for ?

    Quali difficoltà hai? Cosa hai tentato di scrivere?
  • Re: Esercizi in C con FOR

    oregon ha scritto:


    Cosa c'entra l'altezza minima con il for ?

    Quali difficoltà hai? Cosa hai tentato di scrivere?
    Io ho scritto:
    //altezza massima 
                                         if (a>am) {
                                                     am=a;
                                                            strcpy(nomemax, nome);
                                                            }
    printf("\nIl piu' alto e': %s, ed e' alto: %dcm.\n",nomemax,am);
    
    Adesso volevo aggiungere come calcolare il meno alto e poi stampare:
    printf("\nIl MENO alto e': %s, ed e' alto: %dcm.\n",nomemin,amin);
    Ma non so come calcolarlo!

    Avevo pensato a:
    
    if (a<amin) {
                                                     amin=a;
                                                            strcpy(nomemin, nome);
                                                            }
    
    ma se "amin" lo dichiaro zero è ovvio che "a" non sarà mai minore di zero..

    Come dovrei fare?
Devi accedere o registrarti per scrivere nel forum
16 risposte