"Hombres y mujeres para los demás"

Ejemplo de asignación dinámica (en ANSI C)

/*Construya un programa que dado un conjunto de notas de estudiante, obtenga  la media aritmética y luego muestre cuantas notas están por encima de ella */

#include "stdio.h" 
#include "stdlib.h"

float media(float *A, int N);
int sobresalientes (float *A, int N, float media);
void leerNotas(float *A, int N);

int main (void){
    float *notas=NULL,med; //notas es el arreglo al que se
                             asignará memoria dinámicamente
    int N, cont; //N es la cantidad de notas, cont: para el número
                   de alumnos sobresalientes
    printf("¿Cuántas notas van a ser ingresadas?\n N= ");
    scanf("%d",&N);
    notas=(float *)malloc(N*sizeof(float));//asignación dinámica
                                             mediante malloc!
    if (notas==NULL){
        printf("No se pudo asignar memoria \n");
        return 0;
    }
    leerNotas(notas, N);
    med=media(notas,N);
    printf("La media aritmética es: %.2f \n", med);
    cont=sobresalientes(notas,N,med);
    printf("Número de alumnos por encima de la media: %d\n", 
           cont);
    free(notas);
    return 0;
}
void leerNotas(float *A, int N){
    int i;
    float nota;
    for(i=0;i<N;i++){
        do{
            printf("Nota[%d]: ",i+1);
            scanf("%f",&nota);
            if(nota<0.0||nota>10.0)
              printf("Sólo se aceptan notas entre 0 y 10...\n");
            A[i]=nota;
        }while(nota<0.0 || nota>10.0);
    }
}   
int sobresalientes (float *A, int N, float media){
    int i,cont=0;
    for(i=0;i<N;i++){
        if(A[i]>=media) cont++;
    }
    return cont;
}
float media(float *A, int N){
    float suma=0,mediaAr;
    int i;
    for(i=0;i<N;i++){
        suma=suma+A[i];
    }
    mediaAr=suma/N;   
    return mediaAr;
}   

No hay comentarios:

Publicar un comentario