7
Promedios de alumnos El siguiente programa pide al usuario ingresar las notas de uno o más alumnos, y va mostrando los promedios de cada uno de ellos: #include <stdio.h> float promedio(int valores[], int cantidad) { int i; float suma = 0.0; for (i = 0; i < cantidad; ++i) suma += valores[i]; return suma / (float) cantidad; } int main() { int notas[10]; char nombre[20]; char opcion[3]; int n, i; do { printf("Ingrese nombre del alumno: " ); scanf("%s", nombre); printf("Cuantas notas tiene %s? ", nombre); scanf("%d", &n); for (i = 0; i < n; ++i) { printf(" Nota %d: ", i + 1); scanf("%d", &notas[i]); }

Promedios de Alumnos

Embed Size (px)

DESCRIPTION

Aqui mostramos ejemplos de c++ con los promedios de los alumnos

Citation preview

Promedios de alumnosEl siguiente programa pide al usuario ingresar las notas de uno o ms alumnos, y va mostrando los promedios de cada uno de ellos:#include

float promedio(int valores[], int cantidad) { int i; float suma = 0.0;

for (i = 0; i < cantidad; ++i) suma += valores[i];

return suma / (float) cantidad;}

int main() {

int notas[10]; char nombre[20]; char opcion[3]; int n, i;

do { printf("Ingrese nombre del alumno: "); scanf("%s", nombre);

printf("Cuantas notas tiene %s? ", nombre); scanf("%d", &n);

for (i = 0; i < n; ++i) { printf(" Nota %d: ", i + 1); scanf("%d", &notas[i]); }

printf("El promedio de %s es %.1f\n", nombre, promedio(notas, n));

printf("Desea calcular mas promedios (si/no)? "); scanf("%s", opcion);

} while (opcion[0] == 's' || opcion[0] == 'S');

return 0;}El especificador de formato%.1fsirve para mostrar un nmerofloatcon una cifra decimal.Por ejemplo, una ejecucin del programa podra verse as:Ingrese nombre del alumno: PericoCuantas notas tiene Perico? 5 Nota 1: 17 Nota 2: 26 Nota 3: 66 Nota 4: 41 Nota 5: 30El promedio de Perico es 36.0Desea calcular mas promedios (si/no)? siIngrese nombre del alumno: YayitaCuantas notas tiene Yayita? 3 Nota 1: 15 Nota 2: 70 Nota 3: 91El promedio de Yayita es 58.7Desea calcular mas promedios (si/no)? noEscriba, compile y ejecute este programa.ArreglosUnarregloes una regin continua en la memoria del computador en la que se almacenan varios valores del mismo tipo. En C se usa los arreglos como colecciones de valores, tal como se haca con las listas de Python.Un arreglo llamadonotasde tipointy tamao10se declara de la siguiente manera:int notas[10];Los arreglos son mucho ms limitados que las listas de Python. Todos los elementos de un arreglo deben ser del mismo tipo. El tamao de un arreglo est fijo, y debe estar especificado al momento de compilar el programa. Por ejemplo, es ilegal hacer lo siguiente:int n;scanf("%d", &n);

float arreglo[n]; /* ilegal */Por lo tanto, lo que suele hacerse es declarar arreglos suficientemente grandes, y llevar la cuenta de cuntos elementos han sido asignados. Hay que tener en cuenta que, al igual que todas las variables, cada elemento del arreglo siempre tiene un valor, aunque no haya sido asignado explcitamente:int a[5];a[0] = 1000;a[1] = 700;printf("%d\n", a[2]); /* Esto algo va a imprimir, pero no sabemos que. */Cada elemento est identificado a travs de su ndice, que es su posicin dentro del arreglo. Los ndices parten de cero: si el arreglo tiene diez elementos, entonces los ndices van de cero a nueve. Cada elemento del arreglo puede ser considerado por s solo como una variable, a la que se accede usando el ndice entre corchetes:int a[10];/* Todas las instrucciones a continuacion son validas. */a[0] = 5;a[1] = a[0] + 3;a[0]++;a[2] = (a[0] + a[1]) / 2.0;Es ilegal tratar de acceder a un elemento del arreglo cuyo ndice est fuera de los lmites definidos por su tamao. Lamentablemente, nunca se verifica que los ndices utilizados sean vlidos, ni al momento de compilar ni durante la ejecucin del programa. Esto es una fuente de errores difciles de detectar. Por ejemplo, al ejecutar este cdigo el programa podra seguir funcionando, o tambin podra caerse estrepitosamente:int a[10];a[20] = 5; /* ilegal */Funciones que reciben arreglos como parmetrosLa funcinpromediorecibe como primer parmetro el arreglo con los valores que se van a promediar. Lo ideal es que la funcin sirva para arreglos de cualquier tamao, no slo para los de tamao 10 como el del ejemplo.En la declaracin del parmetro, hay que especificar que se trata de un arreglo, pero no su tamao. Para esto, hay que poner los corchetes sin el tamao:int valores[]Sin embargo, cada vez que se llame a la funcin s es importante conocer el tamao del arreglo. De otro modo, sera imposible saber hasta qu valor promediar. Por lo tanto, es imprescindible pasar el tamao del arreglo como parmetro adicional, que en esta funcin hemos bautizado comocantidad.Note que aunque siempre estamos pasando el mismo arreglonotasa la funcin,cantidadno necesariamente tiene el mismo valor cada vez. Esto no es importante para la funcin, que operar slo con la cantidad de valores que se le indica. Eso s, la cantidad debe ser siempre menor o igual que el tamao verdadero del arreglo (en este caso, 10).StringsEn C no existe un tipo de datos para representar los strings, como el tipostrde Python. En C,un string es simplemente un arreglo de caracteres.Ya vimos que los arreglos deben tener un tamao fijo. Sin embargo, en general uno no conoce de antemano el largo de los textos que sern almacenado. Esto en teora representa un problema: cmo sabe el programa cules de los caracteres del arreglo son parte del texto, y cules son simplemente caracteres que estn all slo porque el arreglo es ms largo de lo que corresponde?La manera con la que C resuelve este problema es marcando el final del texto con un caracter especial representado como'\0'.Por ejemplo, despus de ingresar el nombrePerico, el contenido del arreglonombrepodra ser el siguiente: 0 1 2 3 4 5 6 7 8 ... 19 nombre: P e r i c o \0 x m ... q Lo que hay a continuacin del caracter'\0'es irrelevante. Todas las operaciones de strings saben que el texto llega solamente hasta ah.Como el texto"Perico"tiene seis caracteres, se utilizar siete casillas del arreglo para almacenarlo. En general, siempre debe declararse un arreglo de caracteres cuyo tamao sea uno ms que el ms largo de los textos que se podra almacenar.Para leer un string como entrada usando la funcinscanf, se debe usar el descriptor de formato%s. Una diferencia importante con la lectura de otros tipos de variables es que, al leer strings, el segundo parmetro delscanfno debe ir con el operador&, sino que debe ser la variable desnuda:scanf("%s", nombre);Hay una razn tcnica muy precisa para esto que ser ms sencilla de comprender una vez que sepamos ms sobre la organizacin de la memoria, pero por ahora aceptmoslo como un dogma: los strings se leen sin&, valores de otros tipos con&.Todas las operaciones de strings estn implementadas como funciones cuyas declaraciones estn en la cabecerastring.h: strlen(s)retorna el largo del strings, sin incluir el'\0'del final. strcpy(s,t)copia el contenido del stringten el strings; es necesario que el tamao del arreglossea al menor tan grande comot. strcat(s,t)concatena el stringtal strings; por ejemplo, al ejecutar el siguiente cdigo, el stringsqueda con el contenido"Holamundo": char s[30], t[30]; strcpy(s, "Hola "); strcpy(t, "mundo"); strcat(s, t); printf("%s\n", s); /* imprime Hola mundo */ printf("%d\n", strlen(s)); /* imprime 10 */Ciclo do-whileEldo whilees un ciclo similar alwhile. El cdigo es ejecutado mientras la condicin es verdadera. La nica diferencia es que la condicin deldowhilees evaluada al final de cada iteracin, mientras que la delwhilees evaluada al principio.En otras palabras, esto significa que eldowhilehace algo una o ms veces, mientras que elwhilelo hace cero o ms veces.En nuestro programa de ejemplo es apropiado usardowhile, ya que no tiene sentido ejecutar el programa para no calcular ningn promedio. Por lo tanto, calculamos uno y al final decidimos si queremos continuar.La sintaxis del ciclodowhilees:do { /* ... */}while (condicion);El punto y coma al final es obligatorio.EjerciciosQu ocurre con el programa si intenta ingresar ms de una palabra al ingresar el nombre de un alumno (por ejemplo el nombre completo:PericoLosPalotes)? Haga la prueba. Investigue cmo hacer para que el programa sea capaz de leer un nombre con espacios.Qu ocurre si intenta ingresar un nombre que tenga ms de 20 caracteres, como por ejemploPeriiiiiiiiiiiiiiiiico)? Haga la prueba.