You are on page 1of 23

I NTRODUCCIN A LA

P ROGRAMACIN
Lenguaje C

01/08/2013

CAPTULO 3
TEORA DE LENGUAJE C
3.1. COMENZANDO A TRABAJAR EN C
El lenguaje C facilita un mtodo estructurado y disciplinado para el diseo de programas de
computacin.
En el siguiente captulo presentaremos las funciones elementales para trabajar en el lenguaje C, basados
en el programa CODE BLOCKS.
Al abrir un nuevo proyecto en CODE BLOCKS aparece lo siguiente:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
Analicemos cada una de las lneas de este cdigo
Las lneas #include <stdio.h> e #include <stdlib.h>
Son directrices del procesador de C.
C tiene ciertos procesos ya desarrollados y guardados ordenadamente, segn sus aplicaciones, en
distintas carpetas: entrada/salida, pantalla, string, matemtica, etc.. Estas carpetas se llaman en general
bibliotecas.
Las lneas que se inician con # son procesadas o ejecutadas por el procesador, antes de la compilacin
del programa. Esta lnea le indica al procesador que incluya dentro del programa, el contenido del
"archivo de cabecera de entrada/salida estndar (stdio.h)".
Este archivo de cabecera contiene informacin y declaraciones utilizadas por el compilador al compilar
funciones estndar de la biblioteca de entrada/salida como son: scanf (leer) y printf (mostrar).
La lnea int main ( ) forma parte de todo programa en C.
Los parntesis despus de main indican que es un bloque constructivo del programa conocido como una
funcin.
Todos los programas de C empiezan a ejecutarse en la funcin main.
La llave izquierda { inicia el cuerpo de la funcin main. La llave derecha } da por terminada la funcin
main.
Este par de llaves y el conjunto de instrucciones que abarca recibe el nombre de bloque.

Antes de la llave de cierre, colocamos return 0;. Esta instruccin brinda informacin de cmo el
programa finaliza su ejecucin. Todo programa que ha terminado exitosamente retorna el valor 0 (cero)
al sistema operativo
La lnea printf ("Hello World!\n");
printf ( ) es una funcin que permite mostrar o imprimir en la pantalla una leyenda.
Los parntesis se escriben despus del nombre de toda funcin para escribir entre ellos el argumento.
En este programa se quiere mostrar la cadena de caracteres enunciada entre comillas dobles; al
ejecutarlo, aparecer en la pantalla Hello World!.
La cadena de caracteres escrita entre comillas tambin se llama mensaje, leyenda o literal, y al
mostrarla se respetan exactamente todos los caracteres que aparecen all, salvo la barra invertida \y el
carcter escrito inmediatamente despus.
La \ se llama carcter de escape y siempre se combina con el siguiente carcter:
\n significa lnea nueva (el cursor se coloca al comienzo de la siguiente lnea).
\t tabulador horizontal
\\ imprime una diagonal invertida \
\% imprime el smbolo %
\" imprime la doble comilla
Para indicar que luego de una instruccin se debe seguir en secuencia con la siguiente lnea, todo
enunciado debe terminar con ";" (punto y coma).
En el programa se puede indicar o agregar una lnea como comentario para documentar los programas
y mejorar la legibilidad de los mismos.
Si el comentario ocupa slo una lnea, se coloca // al comenzar el mismo; si ocupa ms de una lnea,
comienza con /* y termina con */. Al ejecutar el programa los comentarios no realizan ninguna accin.
Son instrucciones no ejecutables.

3.2. VARIABLES: TIPOS Y DECLARACIN


Una variable es una posicin en memoria donde se puede almacenar un valor. Antes de usar
una variable en un programa se la debe declarar, decir de qu tipo es (para determinar
cuntos bytes se reservan en memoria para almacenar su valor) y cul es su nombre (para
poder nombrarla en el programa). Es conveniente declararlas todas inmediatamente despus
de la llave de inicio del main.
Los nombres de las variables son cadenas de letras y dgitos de 1 a 32. Se acepta el guin
bajo en los nombres nom_1, pero no puede comenzar con dgitos.
En C se consideran distintas las minsculas de las maysculas. Es distinta la variable contc a la
variable contC.

Todo se escribe en minscula salvo las constantes y otros casos que ya se detallarn.
Declaracin:
La forma general para la declaracin de variables es:
tipo

nombre_variable;

Las variables se pueden clasificar segn la siguiente tabla:


TIPO
Entero
Entero largo

Punto flotante

Doble punto
flotante
Caracter
String

DESCRIPCIN
Nmero sin
decimales entre
32768 y 32767
Nmero sin
decimales entre
2.147.483.647
Nmero con
decimales entre
3.4E-38
decimales(6)
Nmero con
decimales entre
1.7E-308
decimales(10)
Un caracter
Cadena de
caracteres

PALABRA CLAVE
Int
-

FORMATO y
TAMAO
%d
2 byte

Long

%ld
4 byte

Float

%f
6 byte

Double

%lf
8 byte

Char

%c
1 byte
%s
tantos byte como
caracteres

char variable[longitud]

Por ejemplo, para declarar la variable a como flotante, b como entera, nom como una cadena
de caracteres de a lo sumo 10 caracteres y z como carcter:
float a;
int b;
char nom[10];
char z;

3.3. OPERADORES

3.3.1. OPERADORES ARITMETICOS:

OPERADOR

ACCION

Resta

Suma

Multiplica

Divide

Resto de la
divisin

--

Disminuye de
a uno

++

Incrementa de
a uno

3.3.2. OPERADORES RELACIONALES Y LGICOS

OPERADORES RELACIONALES:
Los operadores relacionales son smbolos que se usan para comparar dos valores.
Si el resultado de la comparacin es correcto la expresin considerada es verdadera,
en caso contrario es falsa.
OPERADOR

SIGNIFICADO

>

Mayor que

>=

Mayor o igual que

<

Menor que

<=

Menor o igual que

==

Igual

!=

No igual

OPERADORES LGICOS:
Los operadores lgicos retornan un valor lgico basados en las tablas de verdad.

OPERADOR

SIGNIFICADO

&&

and (y)

||

or (o)

not (negacin)

La precedencia es:
Ms alta

!
>= > < <=
= = !=
&&
||

Ms baja

3.3.3. OPERADORES DE ASIGNACIN


En C, el operador de asignacin es un nico signo = (igual).
Una asignacin significa que la variable que se encuentra a la izquierda del = toma el valor
que contiene la variable de la derecha.
Si a la derecha hay un operando o ms, primero se resuelve esa expresin y luego se asigna.

Variable 1 = Variable 2;

x = y;

Variable 1 = Variable 2 operador


Variable 3;

x = y + z;

C permite un formato de "atajo" en el caso en que la variable est a la derecha y a la


izquierda del =

Variable1 = Variable 1 operador


expresin;

Por ejemplo:

x = x + 10;
y = y /z;

Se puede abreviar como:

Variable 1 operador = expresin;

x = x+10;

por

x +=10;

y = y /z;

por

y /= z;

x = x - 23;

por

x -= 23;

x = x * y;

por

x *= y;

La variable 1 se debe inicializar, segn corresponda, en la declaracin.


Por ejemplo, int x = 0;

PARA TENER EN CUENTA!!

Si un operador aritmtico tiene operandos enteros se ejecuta una operacin entera


(sin decimales):
5/9 da 0 (cero)

Si un operador aritmtico tiene un operando en punto flotante y otro entero, este


ltimo ser convertido a punto flotante antes de hacer la operacin
5.0/9 da 0.55

En una asignacin del tipo f = ini, donde las variables fueron declaradas como
float f;
int ini;
Convierte ini a float antes de la asignacin.

En una decisin del tipo

if ( f <= ini)

Convierte ini a float para la comparacin.

3.4. INSTRUCCIONES DE ENTRADA Y SALIDA


3.4.1. FUNCIN PRINTF

En la primera parte de este captulo vimos como usar la funcin printf para mostrar por
pantalla o imprimir una cadena de caracteres.
Existen dos formas de escribir esta funcin:
1) Con un argumento
printf ("argumento");
Si tiene solo un argumento es porque es una leyenda o secuencia de caracteres donde se
respeta la escritura entre comillas dobles. DENTRO DE ESA LEYENDA NO HAY VARIABLES
Por ejemplo:
printf (Este es un ejemplo);
2) Con ms de un argumento:
Corresponde al caso en el que se desea mostrar el o los valores de alguna/s variable/s
printf ( "argumento", lista de argumentos);

printf ("leyenda que contiene uno o varios formatos de variables", nombre de la o las variables);

Si hay ms de una variable se deben nombrar en el orden en que sus formatos fueron
escritos dentro de la leyenda.
Por ejemplo:
printf(Juan tiene %d aos y Pedro %d , aosjuan , aospedro);
Permite mostrar en la pantalla la leyenda Juan tiene ..aos y Pedro ., reemplazando
a cada %d por los respectivos valores de las variables aosjuan y aospedro.

3.4.2. FUNCIN SCANF


Para ingresar datos por teclado utilizamos la instruccin scanf().

scanf( "formato de la variable" , &nombre de la variable);

El primer argumento es la cadena de control de formato, especifica el tipo de dato que


debe entrar el usuario y va entre comillas dobles.
El segundo argumento empieza con un ampersand (&) u operador de direccin, seguido
por el nombre de la variable cuyo formato se declar entre comillas.
& variable le indica a scanf la posicin de memoria en la cual est almacenada la
variable. La computadora almacena el valor de entrada por teclado en esa posicin de
memoria. Si no se coloca el &, no se guarda la direccin de memoria donde la almacen
la variable y luego encontrarla es casi imposible, utilizando cualquier valor en su
reemplazo. Este valor se conoce como basura.
Si la variable es de tipo carcter o string, el & es opcional.

EJEMPLO
Cmo hacer un programa para sumar 2 nmeros enteros?

#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, sum;
/*declara las variables*/
printf("Ingrese el primer numero entero\n");
scanf("%d", &a);
/*lee el primer nmero entero*/
printf("Ingrese el segundo numero entero\n");
scanf("%d", &b);
/*lee el segundo numero entero*/
sum = a + b;
/*asigna el resultado de la suma entre a y b a la variable sum*/
printf("La suma entre %d y %d es %d", a, b, sum);//muestra el resultado de la suma
return 0;
}

La lnea #include <stdio.h> habilita la biblioteca stdio.h. Esta biblioteca corresponde a


las funciones standard input-output header que contiene las definiciones de macros,
las constantes, las declaraciones de funciones y la definicin de tipos usados por varias
operaciones estndar de entrada y salida.
La lnea int a, b, sum; corresponde a una declaracin donde a, b y sum son los nombres
de las variables de tipo entero, que van a ser usadas en el programa. En esta declaracin
el programa reserva el espacio necesario en la memoria segn el tipo de la variable
Las variables se declaran enseguida de la llave izquierda { del main, antes de ser
utilizadas en el programa.
La lnea printf ("Ingrese el primer nmero entero \n"); muestra la leyenda en la pantalla
y coloca el cursor al principio del rengln siguiente, por terminar con \n.
La lnea scanf ("%d", &a); permite ingresar por teclado un valor entero. La funcin scanf
toma la entrada del teclado.
IMPORTANTE
La secuencia printf y scanf facilita la interaccin entre el usuario y la computadora, ya
que con el printf se muestra una leyenda que indica qu hacer, qu dato ingresar y el
scanf permite ingresar por teclado dicho dato. Si slo colocamos el scanf se muestra en
la pantalla un cursor titilando sin indicacin alguna sobre qu est esperando como
entrada (una edad, un nombre, un sueldo ) lo que lo hace poco amigable para el
usuario.
Por eso es recomendable colocar un printf() y luego el scanf().

La lnea de asignacin sum = a + b; calcula la suma de los dos valores y asigna el resultado
a la variable sum.
La lnea printf ("La suma entre %d y %d es %d", a, b, sum); utiliza la funcin printf para
mostrar por pantalla la leyenda La suma entre .y . es apareciendo en los puntos
suspensivos el valor numrico de las ingresadas y la suma de las mismas, en el orden en
que aparecen despus de la coma.
Dentro de un printf tambin se pueden hacer clculos.
Se puede reemplazar:
sum= a+b;
printf ("La suma es %d", sum);
Por:
printf("La suma es % d", a+b);
y en este caso no es necesario el uso de la variable sum.

IMPORTANTE

Para justificar dentro de un campo a la derecha

printf ("%6d\ n%6d", a, b);

campo de 6 lugares
Salida:
Para mostrar 2 nmeros en distinto rengln y alineados a derecha, debo saber cul es la
cantidad mxima de dgitos y colocar ese nmero antepuesto a la d.
Por ejemplo, para mostrar 2 nmeros, sabiendo que el que ocupa ms tiene 6 dgitos
123 de los 6 lugares ocupa los 3 ltimos
154378 considera el campo de 6 lugares alineando de derecha a izquierda

Para mejorar la salida de puntos flotantes

Cuando se utiliza el formato %f, se muestra en pantalla un nmero con 6 decimales,


aunque no sea real. En el caso de no ser necesario todos los decimales, se escribe entre
el % y la f, un punto seguido por la cantidad de decimales que se quieren mostrar.
Por ejemplo:
printf (El sueldo a cobrar es de %f, sueldo);
Muestra en pantalla El sueldo a cobrar es de 12359.500000

Para mostrar el sueldo no se necesitan tantos decimales, con dos es suficiente; podramos
mejorar la salida de la siguiente forma:
printf (El sueldo a cobrar es de %.2f,sueldo);
En la pantalla aparece El sueldo a cobrar es de 12359.50
% 6.1f muestra en total 6 caracteres, de los cuales 1 es decimal
Si delante del . no hay ningn dgito significa que la cantidad de caracteres totales no
est restringida, pero el dgito que est detrs del . es la cantidad de decimales que se
mostrarn. %.2f muestra un nmero con dos decimales

3.5. ESTRUCTURAS DE DECISIN O SELECCIN


Sentencia if:
Permite tomar una decisin para ejecutar una accin u otra, basndose en el resultado V o F
de una condicin.
Sintaxis:

SALIDA POR EL FALSO

SALIDA POR EL VERDADERO

if (condicin)
{
acciones;
}
else
{
acciones;
}

La salida por el VERDADERO siempre debe existir.


El else es opcional, es posible que ante una decisin por la opcin V se tengan que ejecutar
sentencias, pero por el F no se ejecute ninguna sentencia. En caso de no ser as, se debe
colocar la condicin inversa.
Si tanto por la salida de V o F se deben ejecutar ms de una sentencia, todas las instrucciones
que corresponden a una (V) o a la otra (F), se deben colocar entre { } para limitar el bloque.
Los operadores relacionales que se utilizan en la condicin son
<, >, <=, >=, == (igual), != (distinto).

IMPORTANTE
Utilizar sangras para identificar visualmente los bloques de acciones que corresponden a cada
estructura. Un programa que no siga reglas de esparcimiento uniformes es difcil de leer y de
corregir.

10

Ejemplo

#include <stdio.h>
#include <stdlib.h>
int main()
{
int x, a, b;
printf("Ingrese un numero:");
scanf("%d", &a);
printf("Ingrese otro nmero, distinto del anterior:\n");
scanf("%d", &b);
if (a>b)
x = a;
else
x = b;
printf("El mayor de los dos numeros es %d",x);
return 0;
}

3.5.1 ANIDAMIENTO DE IF
Si la lgica del programa indica que hay que usar ms de un if, stos deben quedar anidados.
Se deben usar correctamente las llaves para que suceda.
Sintaxis:
if (condicin 1)
{
if (condicin 2)
{
sentencia 1;
}
}
else
sentencia 2;
/* siguiente instruccin ejecutable */

Al colocar las { } estamos indicando que el else pertenece al primer if. Esas llaves son
obligatorias ya que estamos alterando el orden de pertenencia de los else. Si no se escriben
las llaves, cada else se asocia con el if que est ms prximo a l.
En el caso anterior, la ejecucin de las sentencias segn el valor de verdad de cada condicin
es:

11

Condicin 1

Condicin 2

Sentencia 1

Sentencia 2

NO

SI

NO

SI

INSTRUCCION

SIGUIENTE

SI

NO

y si se quitan las llaves:

if (condicin 1)
if (condicin 2)
sentencia 1;
else
sentencia 2;
/* siguiente instruccin ejecutable */

El else corresponde al segundo if. La ejecucin de las sentencias segn el valor de verdad de
cada una de las condiciones es:

Condicin 1

Condicin 2 Sentencia 1

Sentencia 2

INSTRUCCIN

SIGUIENTE

INSTRUCCIN

SIGUIENTE

NO

SI

SI

NO

IMPORTANTE

Cada ELSE se corresponde con el IF ms prximo que no haya sido emparejado.


En cada condicin se pueden utilizar los operadores lgicos && (y) y || (o)

if ( (condicin 1) && (condicin 2) )

if ( (condicin 1) || (condicin 2) )

12

Ejemplo 1
En un aviso del diario piden ingenieros en sistemas con 5 aos de experiencia a lo sumo.
Se presenta:

Un licenciado en sistemas con 4 aos de experiencia: NO SE TOMA,


condicin es falsa.

pues la primera

Un ingeniero en sistemas con 8 aos de experiencia: NO SE TOMA,


condicin es falsa.

pues la segunda

Un analista programador con 8 aos de experiencia: NO SE TOMA, pues las 2 condiciones


son falsas.

Un ingeniero en sistemas con 4 aos de experiencia: SE TOMA, pues las 2 condiciones son
verdaderas.

Ejemplo 2:
Nos pidieron comprar 1 kilo de helado de chocolate o de vainilla, despus de ir a varios lados
encontramos:

Slo chocolate, vainilla no hay. LO COMPRO, pues la primer condicin es verdadera.

Slo vainilla, chocolate no hay. LO COMPRO, pues la segunda condicin es verdadera.

Chocolate y vainilla. LO COMPRO, pues las dos condiciones son verdaderas.

Hay americana y dulce de leche. NO LO COMPRO, pues ninguna de las condiciones es


verdadera.

PARA RECORDAR:
En un && (y), la salida es verdadera slo si ambas condiciones son
VERDADERAS.
En un || (o), la salida es falsa slo si ambas condiciones son
FALSAS.

13

Ejemplo

Realizar un programa para sumar dos nmeros reales tales que, si la suma es mayor que 10, se
divide por 2 y si la suma es menor que 10 se multiplica por 3, si es 10 no se modifica. Listar
en todos los casos el resultado logrado.

#include <stdio.h>
int main( )
{
float sum, num1, num2, res=0;
printf ("Ingresa el primer nmero ");
scanf ("%f",&num1);
printf ("Ingresa el segundo nmero ");
scanf ("%f",&num2);
sum=num1+num2;
if (sum>10)
res=sum/2;
else
if(sum<10)
res=sum*3;
else
res=sum;
printf ("Resultado %.2f",res);
return 0;
}

3.5.2. CONDICIONAL MLTIPLE: SENTENCIA SWITCH


Permite ejecutar una de varias acciones en funcin del valor que toma una variable de tipo
entero.
Si el valor no est entre los enumerados se ejecuta la sentencia que aparece en la opcin
default.
switch ( variable )
{
case valor1: sentencia 1;
break;
case valor2: sentencia 2;
break;

default:

sentencia n;

}
14

IMPORTANTE
Despus de cada sentencia o bloque de sentencias de los case se coloca la instruccin BREAK.
El break del ltimo case es opcional.
La instruccin break se utiliza para terminar la ejecucin de bucles o salir de una instruccin
switch, while, do while o for.
Si en los CASE hay ms de una sentencia no son necesarias las { }.
Por default se ejecuta si no encuentra el valor en las entradas anteriores.

Ejemplo
Leer un nmero, si est entre 4 y 7 mostrarlo en nmero y letras.
#include <stdio.h>
int main ( )
{
int n;
printf (Ingrese un nmero);
scanf (%d, &n);
if (n >= 4 && n <= 9)
switch (n)
{
case 4: printf (%d (CUATRO)\n,n);
break;
case 5: printf (%d (CINCO)\n,n);
break;
case 6: printf (%d (SEIS)\n,n);
break;
case 7: printf (%d (SIETE)\n,n);
}
// fin del switch
return 0;
}

3.6. ESTRUCTURAS DE REPETICIN


Una estructura de repeticin le permite al programador que se repita una o varias acciones,
en tanto cierta condicin se mantenga verdadera.

15

3.6.1. SENTENCIA WHILE


Permite repetir un bloque de instrucciones mientras la condicin escrita en el argumento sea
verdadera
Sintaxis:

while (condicin)
{
sentencia 1;
sentencia 2;

sentencia n;
}
/* prxima sentencia ejecutable */

Si la sentencia a repetir es una sola, pueden no escribirse las llaves.


Si la condicin es verdadera entra al while, o sea, se ejecutan las sentencias que estn
escritas entre llaves.
Si la condicin es falsa no entra y ejecuta la prxima instruccin ejecutable fuera del while.

Ejemplo:
Leer nmeros mientras sean positivos y contar cuntos se ingresaron

# include <stdio.h>
int main ( )
{
int num, cont = 0;
printf(Ingrese un numero\n);
scanf(%d,&num);
while (num > 0)
{
cont++;
printf(Ingrese un numero\n);
scanf(%d,&num);
}
printf(Se ingresaron %d nmeros mayores a
cero\n,cont);
return 0;
}

16

ACLARACIN
cont ++ es una forma abreviada de escribir cont = cont +1, o sea que cont++ permite
incrementar a la variable cont en uno.
Para disminuir a la variable con en uno, la notacin es cont --.

3.6.2. SENTENCIA DO/WHILE


Es similar al while, con la diferencia que en el while la condicin se encuentra al principio,
antes de ejecutarse el cuerpo del mismo, y en el do-while primero se ejecuta el cuerpo y
luego se evala la condicin.
La estructura DO/WHILE prueba la condicin de continuacin del ciclo despus de ejecutarse
el cuerpo del ciclo, y por lo tanto el cuerpo se ejecutar por lo menos una vez.
Cuando la condicin es falsa se ejecuta la accin siguiente a lnea del while.

Sintaxis:

do
{
sentencia 1;
sentencia 2;
} while (condicin);
//instruccin siguiente

Esta estructura se puede utilizar para validar el valor de una variable.

Ejemplo:
Visualizar los dgitos 0 al 9 apareciendo cada uno en una lnea.

17

# include <stadio.h>
int main ( )
{
int digito = 0;
do
{
printf ("%d", digito);
digito ++;
}while (digito < = 9);
return 0;
}

IMPORTANTE!
La/s variable/s que se encuentran en la condicin del WHILE o del DO-WHILE deben
modificarse dentro del bloque que corresponde a la estructura. De lo contrario, la condicin
seguira cumplindose infinitamente y el programa no podra seguir con las dems
instrucciones.
En el caso de repeticiones controladas por contadores se requiere:
El nombre de una variable de control (controlador del ciclo).
El valor inicial de dicha variable.
El incremento (o decremento) con el cual, cada vez que se termine un ciclo, la variable
de control se modifica.
La condicin que compruebe la existencia del valor final de la variable de control.
En caso de no ser variables de tipo controlador siempre debe haber una primer lectura
antes de la condicin en el while (sino la condicin se comparara contra "basura") y las
siguientes lecturas antes de la llave de fin del while.
primer lectura;
while (condicin)
{
sentencias;
siguiente lectura;
}

18

3.6.3. SENTENCIA FOR


Se utiliza slo cuando se conoce exactamente la cantidad de repeticiones que se deben
realizar.
Sintaxis:

for (variable1 = expresin1; condicin ; progresin de la condicin)


{
sentencia1;
sentencia2;
}

En variable1 = expresin1 se inicializa la variable1 con el valor de expresion1.


La condicin es la prueba de control de fin (nunca va un igual), mientras sea VERDADERA se
repite el ciclo.
La progresin de la condicin es el incremento de avance de la variable1.
El ciclo termina cuando la condicin es FALSA.
En caso de ser ms de una sentencia el bloque de instrucciones que deben repetirse se
encierra entre { }.

Ejemplos:
1) Mostrar los mltiplos de 7 comprendidos entre 7 y 112.

# include <stdio.h>
int main ( )
{
int x;
for (x = 7; x < = 112; x + = 7)
{
printf ("%d ", x);
}
return 0;
}

19

El valor inicial de x es 7, la condicin es que x <=112 y el incremento o progresin es de 7,


para generar mltiplos de 7

2) Mostrar los nmeros del 9 al 1.

# include <stdio.h>
int main ( )
{
int k;
for (k = 9; k > = 1 ; k - - )
{
printf ("%d ", k);
}
return 0;
}

En este caso el valor inicial es 9, pero el final es 1 (valor final menor al inicial); es por eso
que la condicin debe ser con >=1 y el incremento es de 1, ya que la variable tiene que ir
disminuyendo.

3) Leer 10 nmeros y calcular su promedio

#include <stdio.h>
int main( )
{
int n, i, suma = 0;
float prom;
for (i =1; i <10; i++)
{
printf(Ingrese un nro );
scanf(%d,&n);
suma+ = n;
}
prom = 1.0*suma/10;
printf(\nEl promedio de los nmeros ingresados es %.2f, prom);
return 0;
}

20

ACLARACIN
suma+=n es una forma abreviada de escribir suma = suma + n, o sea que suma+= permite
acumular en la variable suma los valores ingresados en n.

3.7. MXIMOS Y MNIMOS


El tema de los mximos y mnimos es importante para tratarlo en un inciso aparte.
Para buscar el mximo o el mnimo de un conjunto de valores, un mtodo bastante estndar
es asignar a una variable el primer valor ledo, y luego comparar cada valor siguiente con esa
variable.

INICIO
leer num
mximo = num
para i = 1 hasta 9 hacer
leer num
si

num>maximo

no

maximo=num

mostrar maximo
FIN
Fin para
Por cada valor ingresado en la variable num se lo compara con el valor guardado en mximo.
Si el valor que contiene num es mayor que el guardado en mximo, se asigna el valor de num
a mximo, en caso contrario no se hace nada.
La variable mximo siempre debe inicializarse en un valor. Si ese valor puede ser el primero
del lote de valores del cual buscamos el mximo, mejor; sino se puede inicializar en un valor
ABSURDO (en caso de mximo un nmero muy chico, y en caso de mnimo un valor muy
grande), el cual debe ser reemplazado en la primer pregunta por el primer valor del lote de
datos que se ingrese.
Por ejemplo: si tenemos que calcular el mximo de un conjunto de sueldos, podemos
inicializar mximo en -1, pues es un valor no posible para un sueldo. Ante la pregunta, con el
primer sueldo ingresado, de sueldo > mximo, siempre ser mayor el sueldo y se le asignar
su valor a la variable mximo, perdiendo sta el valor irreal asignado al comienzo para
continuar comparando el valor del primer sueldo con los restantes.

21

EJEMPLO 1

EJEMPLO 2

#include <stdio.h>

#include <stdio.h>

int main( )
{
int n, i, max;
printf(ngrese un nro );
scanf(%d, &n);
max = n;
for (i = 1; i < 10; i++)
{
printf(Ingrese un nro );
scanf(%d,&n);
if (n > max)
max = n;
}
printf(El mximo es %d, max);

int main()
{
int i;
float sueldo, max = -1;
for (i = 1; i <=10; i++)
{
printf( Ingrese su sueldo );
scanf (%f, &sueldo);
if (sueldo > max)
max = sueldo;
}
printf(El mximo es %.2f , max);
return 0;
}

return 0;
}

22

You might also like