Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


programacion C, Apuntes de Informática

Asignatura: programación I, Profesor: , Carrera: Ingeniería en Informática, Universidad: UVIGO

Tipo: Apuntes

2015/2016

Subido el 24/11/2016

mellen-2
mellen-2 🇪🇸

5

(9)

31 documentos

1 / 375

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Introducci´on a la programaci´on
con C
Andr´es Marzal Isabel Gracia
Departamento de Lenguajes y Sistemas Inform´aticos
Universitat Jaume I
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga programacion C y más Apuntes en PDF de Informática solo en Docsity!

Introducci´on a la programaci´on

con C

Andr´es Marzal Isabel Gracia

Departamento de Lenguajes y Sistemas Inform´aticos

Universitat Jaume I

Obra distribuida con licencia Creative Commons

Esta obra se distribuye con licencia Creative Commons en su modalidad ((Reconocimiento-No Comercial-Sin obras derivadas 2.5 Espa˜na)). Usted es libre de copiar, distribuir y comunicar p´ublicamente la obra bajo las condiciones siguientes: Reconocimiento. Debe reconocer los cr´editos de la obra de la manera especificada por el autor o el licenciador (pero no de una manera que sugiera que tiene su apoyo o apoyan el uso que hace de su obra). No comercial. No puede utilizar esta obra para fines comerciales. Sin obras derivadas. No se puede alterar, transformar o generar una obra derivada a partir de esta obra. Este texto es un resumen de la licencia. El texto completo de la licencia se encuentra en http://creativecommons.org/licenses/by-nc-nd/2.5/es/legalcode.es.

ii Introducci´on a la Programaci´on con C

Cap´ıtulo 1

Introducci´on a C

Hab´ıa un libro junto a Alicia, en la mesa; y mientras permanec´ıa sentada observando al

Rey Blanco [... ], pasaba las hojas para ver si encontraba alg´un trozo que poder leer:

((... Porque est´a todo en una lengua que no entiendo)), se dijo.

Estaba as´ı:

´ONDORJERIG

ıa y las tovas agilimosasCocillaba el d´

giroscopaban y barrenaban en el larde.

Todo devirables estaban los burgovos,

y silbramaban las alecas rastas.

Durante un rato, estuvo contemplando esto perpleja; pero al final se le ocurri´o una

brillante idea. ¡Ah, ya s´e!, ¡es un libro del Espejo, naturalmente! Si lo pongo delante de

un espejo, las palabras se ver´an otra vez del derecho.

Lewis Carroll, Alicia a trav´es del espejo.

El lenguaje de programaci´on C es uno de los m´as utilizados (si no el que m´as) en la programaci´on

de sistemas software. Es similar a Python en muchos aspectos fundamentales: presenta las

mismas estructuras de control (selecci´on condicional, iteraci´on), permite trabajar con algunos

tipos de datos similares (enteros, flotantes, secuencias), hace posible definir y usar funciones,

etc. No obstante, en muchas otras cuestiones es un lenguaje muy diferente.

C presenta ciertas caracter´ısticas que permiten ejercer un elevado control sobre la eficiencia

de los programas, tanto en la velocidad de ejecuci´on como en el consumo de memoria, pero

a un precio: tenemos que proporcionar informaci´on expl´ıcita sobre gran cantidad de detalles,

por lo que generalmente resultan programas m´as largos y complicados que sus equivalentes en

Python, aumentando as´ı la probabilidad de que cometamos errores.

En este cap´ıtulo aprenderemos a realizar programas en C del mismo ((nivel)) que los que

sab´ıamos escribir en Python tras estudiar el cap´ıtulo 4 del primer volumen. Aprenderemos,

pues, a usar variables, expresiones, la entrada/salida, funciones definidas en ((m´odulos)) (que

en C se denominan bibliotecas) y estructuras de control. Lo ´unico que dejamos pendiente de

momento es el tratamiento de cadenas en C, que es sensiblemente diferente al que proporciona

Python.

Nada mejor que un ejemplo de programa en los dos lenguajes para que te lleves una primera

impresi´on de cu´an diferentes son Python y C... y cu´an semejantes. Estos dos programas, el

primero en Python y el segundo en C, calculan el valor de

∑^ b

i=a

i

para sendos valores enteros de a y b introducidos por el usuario y tales que 0 ≤ a ≤ b.

Introducci´on a C

sumatorio.py sumatorio.py

1 from math import * 2 3 # Pedir l´ımites inferior y superior. 4 a = int(raw_input(’L´ımite inferior:’)) 5 while a < 0 : 6 print ’No puede ser negativo’ 7 a = int(raw_input(’L´ımite inferior:’)) 8 9 b = int(raw_input(’L´ımite superior:’)) 10 while b < a: 11 print ’No puede ser menor que %d’ % a 12 b = int(raw_input(’L´ımite superior:’)) 13 14 # Calcular el sumatorio de la ra´ız cuadrada de i para i entre a y b. 15 s = 0. 16 for i in range(a, b+ 1 ): 17 s += sqrt(i) 18 19 # Mostrar el resultado. 20 print ’Sumatorio de ra´ıces’, 21 print ’de %d a %d: %f’ % (a, b, s)

sumatorio.c sumatorio.c

1 #include <stdio.h> 2 #include <math.h> 3 4 int main(void) 5 { 6 int a, b, i; 7 float s; 8 9 /* Pedir l´ımites inferior y superior. / 10 printf ("L´ımite inferior:"); 11 scanf ("%d", &a); 12 while (a < 0 ) { 13 printf ("No puede ser negativo\n"); 14 printf ("L´ımite inferior:"); 15 scanf ("%d", &a); 16 } 17 18 printf ("L´ımite superior:"); 19 scanf ("%d", &b); 20 while (b < a) { 21 printf ("No puede ser menor que %d\n", a); 22 printf ("L´ımite superior:"); 23 scanf ("%d", &b); 24 } 25 26 / Calcular el sumatorio de la ra´ız cuadrada de i para i entre a y b. / 27 s = 0.0; 28 for (i = a; i <= b; i++) { 29 s += sqrt(i); 30 } 31 32 / Mostrar el resultado. */ 33 printf ("Sumatorio de ra´ıces "); 34 printf ("de %d a %d: %f\n", a, b, s); 35 36 return 0 ; 37 }

En varios puntos de este cap´ıtulo haremos referencia a estos dos programas. No los pierdas

1.1. C es un lenguaje compilado

en la l´ınea de ´ordenes Unix. Como resultado, el int´erprete va leyendo y ejecutando paso a

paso el programa. Para volver a ejecutarlo, has de volver a escribir python sumatorio.py

en la l´ınea de ´ordenes, con lo que se repite el proceso completo de traducci´on y ejecuci´on

paso a paso. Aunque no modifiquemos el c´odigo fuente, es necesario interpretarlo (traducir

y ejecutar paso a paso) nuevamente.

sumatorio.py Int´erprete Python Resultados

C es un lenguaje compilado: antes de ejecutar un programa escrito por nosotros, sumi-

nistramos su c´odigo fuente (en un fichero con extensi´on ((.c))) a un compilador de C.

El compilador lee y analiza todo el programa. Si el programa est´a correctamente escrito

seg´un la definici´on del lenguaje, el compilador genera un nuevo fichero con su traducci´on

a c´odigo de m´aquina, y si no, muestra los errores que ha detectado. Para ejecutar el pro-

grama utilizamos el nombre del fichero generado. Si no modificamos el c´odigo fuente, no

hace falta que lo compilemos nuevamente para volver a ejecutar el programa: basta con

volver a ejecutar el fichero generado por el compilador.

Para ejecutar sumatorio.c, por ejemplo, primero hemos de usar un compilador para

producir un nuevo fichero llamado sumatorio.

sumatorio.c Compilador de C sumatorio

Podemos ejecutar el programa escribiendo sumatorio en la l´ınea de ´ordenes Unix.^1

sumatorio Resultados

Si queremos volver a ejecutarlo, basta con escribir de nuevo sumatorio; no es necesario

volver a compilar el contenido del fichero sumatorio.c.

sumatorio Resultados

La principal ventaja de compilar los programas es que se gana en velocidad de ejecuci´on,

ya que cuando el programa se ejecuta est´a completamente traducido a c´odigo de m´aquina y

se ahorra el proceso de ((traducci´on simult´anea)) que conlleva interpretar un programa. Pero,

adem´as, como se traduce a c´odigo de m´aquina en una fase independiente de la fase de ejecuci´on,

el programa traductor puede dedicar m´as tiempo a intentar encontrar la mejor traducci´on

posible, la que proporcione el programa de c´odigo de m´aquina m´as r´apido (o que consuma

menos memoria).

Nosotros usaremos un compilador concreto de C: gcc (en su versi´on 3.2 o superior)^2. Su

forma de uso m´as b´asica es ´esta:

gcc fichero.c -o fichero ejecutable

La opci´on -o es abreviatura de ((output)), es decir, ((salida)), y a ella le sigue el nombre del

fichero que contendr´a la traducci´on a c´odigo m´aquina del programa. Debes tener presente que

dicho fichero s´olo se genera si el programa C est´a correctamente escrito.

Si queremos compilar el programa sumatorio.c hemos de usar una opci´on especial:

gcc sumatorio.c -lm -o sumatorio

La opci´on -lm se debe usar siempre que nuestro programa utilice funciones del m´odulo

matem´atico (como sqrt, que se usa en sumatorio.c). Ya te indicaremos por qu´e en la secci´on

dedicada a presentar el m´odulo matem´atico de C.

(^1) Por razones de seguridad es probable que no baste con escribir sumatorio para poder ejecutar un programa con ese nombre y que reside en el directorio activo. Si es as´ı, prueba con ./sumatorio. (^2) La versi´on 3.2 de gcc es la primera en ofrecer un soporte suficiente de C99. Si usas una versi´on anterior, es posible que algunos (pocos) programas del libro no se compilen correctamente.

CC 2003, 2008 Andr´es Marzal e Isabel Gracia 1 Introducci´on a C

C99 y gcc

Por defecto, gcc acepta programas escritos en C89 con extensiones introducidas por GNU (el grupo de desarrolladores de muchas herramientas de Linux). Muchas de esas extensiones de GNU forman ya parte de C99, as´ı que gcc es, por defecto, el compilador de un lenguaje intermedio entre C89 y C99. Si en alg´un momento da un aviso indicando que no puede compilar alg´un programa porque usa caracter´ısticas propias del C99 no disponibles por defecto, puedes forzarle a compilar en ((modo C99)) as´ı: gcc programa.c -std=c99 -o programa

Has de saber, no obstante, que gcc a´un no soporta el 100% de C99 (aunque s´ı todo lo que te explicamos en este texto). El compilador gcc acepta muchas otras variantes de C. Puedes forzarle a aceptar una en particular ((asignando)) a la opci´on -std el valor c89, c99, gnu89 o gnu99.

1.2. Traduciendo de Python a C: una gu´ıa r´apida

Empezaremos por presentar de forma concisa c´omo traducir la mayor parte de los programas

Python que aprendimos a escribir en los cap´ıtulos 3 y 4 del primer volumen a programas equi-

valentes en C. En secciones posteriores entraremos en detalle y nos dedicaremos a estudiar las

muchas posibilidades que ofrece C a la hora de seleccionar tipos de datos, presentar informaci´on

con sentencias de impresi´on en pantalla, etc.

1. Los programas (sencillos) presentan, generalmente, este aspecto:

1 #include <stdio.h> 2 3 Posiblemente otros ((#include)) 4 5 int main(void) 6 { 7 Programa principal. 8 9 return 0 ; 10 }

Hay, pues, dos zonas: una inicial cuyas l´ıneas empiezan por #include (equivalentes a las

sentencias import de Python) y una segunda que empieza con una l´ınea ((int main(void)))

y comprende las sentencias del programa principal mas una l´ınea ((return 0 ;)), encerradas

todas ellas entre llaves ({ y }).

De ahora en adelante, todo texto comprendido entre llaves recibir´a el nombre de bloque.

2. Toda variable debe declararse antes de ser usada. La declaraci´on de la variable consiste

en escribir el nombre de su tipo (int para enteros y float para flotantes)^3 seguida del

identificador de la variable y un punto y coma. Por ejemplo, si vamos a usar una variable

entera con identificador a y una variable flotante con identificador b, nuestro programa

las declarar´a as´ı:

1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a; 6 float b; 7 8 Sentencias donde se usan las variables. 9 10 return 0 ; 11 }

(^3) Recuerda que no estudiaremos las variables de tipo cadena hasta el pr´oximo cap´ıtulo.

CC 2003, 2008 Andr´es Marzal e Isabel Gracia 1 Introducci´on a C

Las reglas de asociatividad y precedencia de los operadores son casi las mismas que apren-

dimos en Python. Hay m´as operadores en C y los estudiaremos m´as adelante.

5. Para mostrar resultados por pantalla se usa la funci´on printf. La funci´on recibe uno o

m´as argumentos separados por comas:

primero, una cadena con formato, es decir, con marcas de la forma %d para re-

presentar enteros y marcas %f para representar flotantes (en los que podemos usar

modificadores para, por ejemplo, controlar la cantidad de espacios que ocupar´a el

valor o la cantidad de cifras decimales de un n´umero flotante);

y, a continuaci´on, las expresiones cuyos valores se desea mostrar (debe haber una

expresi´on por cada marca de formato).

escribe.c escribe.c

1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a; 6 float b; 7 8 a = 13 % 2 ; 9 b = 2.0 / (1.0 + 2 - (a + 1 )); 10 11 printf ("El valor de a es %d y el de b es %f\n", a, b); 12 13 return 0 ; 14 }

La cadena con formato debe ir encerrada entre comillas dobles, no simples. El car´acter

de retorno de carro (\n) es obligatorio si se desea finalizar la impresi´on con un salto de

l´ınea. (Observa que, a diferencia de Python, no hay operador de formato entre la cadena

de formato y las expresiones: la cadena de formato se separa de la primera expresi´on con

una simple coma).

Como puedes ver, todas las sentencias de los programas C que estamos presentando fina-

lizan con punto y coma.

6. Para leer datos de teclado has de usar la funci´on scanf. F´ıjate en este ejemplo:

lee y escribe.c lee y escribe.c

1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a; 6 float b; 7 8 scanf ("%d", &a); 9 scanf ("%f", &b); 10 11 printf ("El valor de a es %d y el de b es %f\n", a, b); 12 13 return 0 ; 14 }

La l´ınea 8 lee de teclado el valor de un entero y lo almacena en a. La l´ınea 9 lee de

teclado el valor de un flotante y lo almacena en b. Observa el uso de marcas de formato

en el primer argumento de scanf : %d se˜nala la lectura de un int y %f la de un float. El

s´ımbolo & que precede al identificador de la variable en la que se almacena el valor le´ıdo

es obligatorio para variables de tipo escalar.

Si deseas mostrar por pantalla un texto que proporcione informaci´on acerca de lo que el

usuario debe introducir, hemos de usar nuevas sentencias printf :

1.2 Traduciendo de Python a C: una gu´ıa r´apida

lee mejor y escribe.c lee mejor y escribe.c

1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a; 6 float b; 7 8 printf ("Introduce un entero a: "); 9 scanf ("%d", &a); 10 printf ("Y ahora un flotante b: "); 11 scanf ("%f", &b); 12 13 printf ("El valor de a es %d y el de b es %f\n", a, b); 14 15 return 0 ; 16 }

7. La sentencia if de Python presenta un aspecto similar en C:

si es par.c si es par.c

1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a; 6 7 printf ("Introduce un entero a: "); 8 scanf ("%d", &a); 9 10 if (a % 2 == 0 ) { 11 printf ("El valor de a es par.\n"); 12 printf ("Es curioso.\n"); 13 } 14 15 return 0 ; 16 }

Ten en cuenta que:

la condici´on va encerrada obligatoriamente entre par´entesis;

y el bloque de sentencias cuya ejecuci´on est´a supeditada a la satisfacci´on de la con-

dici´on va encerrado entre llaves (aunque matizaremos esta afirmaci´on m´as adelante).

Naturalmente, puedes anidar sentencias if.

si es par y positivo.c si es par y positivo.c

1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a; 6 7 printf ("Introduce un entero a: "); 8 scanf ("%d", &a); 9 10 if (a % 2 == 0 ) { 11 printf ("El valor de a es par.\n"); 12 if (a > 0 ) { 13 printf ("Y, adem´as, es positivo.\n"); 14 } 15 } 16

1.2 Traduciendo de Python a C: una gu´ıa r´apida

5 int a; 6 7 printf ("Introduce un entero a: "); 8 scanf ("%d", &a); 9 10 while (a > 0 ) { 11 printf ("%d", a); 12 a -= 1 ; 13 } 14 printf ("! Boom!\n"); 15 16 return 0 ; 17 }

9. Tambi´en puedes usar la sentencia break en C:

primo.c primo.c

1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a, b; 6 7 printf ("Introduce un entero a: "); 8 scanf ("%d", &a); 9 10 b = 2 ; 11 while (b < a) { 12 if (a % b == 0 ) { 13 break; 14 } 15 b += 1 ; 16 } 17 if (b == a) { 18 printf ("%d es primo.\n", a); 19 } 20 else { 21 printf ("%d no es primo.\n", a); 22 } 23 24 return 0 ; 25 }

10. Los m´odulos C reciben el nombre de bibliotecas y se importan con la sentencia #include.

Ya hemos usado #include en la primera l´ınea de todos nuestros programas: #include

<stdio.h>. Gracias a ella hemos importado las funciones de entrada/salida scanf y printf.

No se puede importar una sola funci´on de una biblioteca: debes importar el contenido

completo de la biblioteca.

Las funciones matem´aticas pueden importarse del m´odulo matem´atico con #include

<math.h> y sus nombres son los mismos que vimos en Python (sin para el seno, cos

para el coseno, etc.).

raiz cuadrada.c raiz cuadrada.c

1 #include <stdio.h> 2 #include <math.h> 3 4 int main(void) 5 { 6 float b; 7 8 printf ("Escribe un flotante: "); 9 scanf ("%f", &b);

CC 2003, 2008 Andr´es Marzal e Isabel Gracia 1 Introducci´on a C

10 11 if (b >= 0.0) { 12 printf ("Su ra´ız cuadrada es %f.\n", sqrt(b) ); 13 } 14 else { 15 printf ("No puedo calcular su ra´ız cuadrada.\n"); 16 } 17 18 return 0 ; 19 }

No hay funciones predefinidas en C. Muchas de las que estaban predefinidas en Python

pueden usarse en C, pero import´andolas de bibliotecas. Por ejemplo, abs (valor absolu-

to) puede importarse del m´odulo stdlib.h (por ((standard library)), es decir, ((biblioteca

est´andar))).

Las (aproximaciones a las) constantes π y e se pueden importar de la biblioteca ma-

tem´atica, pero sus identificadores son ahora M_PI y M_E, respectivamente.

No est´a mal: ya sabes traducir programas Python sencillos a C (aunque no sabemos traducir

programas con definiciones de funci´on, ni con variables de tipo cadena, ni con listas, ni con

registros, ni con acceso a ficheros... ). ¿Qu´e tal practicar con unos pocos ejercicios?

......................................... ejercicios.........................................

· 2 Traduce a C este programa Python.

1 a = int(raw_input(’Dame el primer n´umero: ’)) 2 b = int(raw_input(’Dame el segundo n´umero: ’)) 3 4 if a >= b: 5 maximo = a 6 else: 7 maximo = b 8 9 print ’El m´aximo es’, maximo

· 3 Traduce a C este programa Python.

1 n = int(raw_input(’Dame un n´umero: ’)) 2 m = int(raw_input(’Dame otro n´umero: ’)) 3 4 if n * m == 100 : 5 print ’El producto %d * %d es igual a 100’ % (n, m) 6 else: 7 print ’El producto %d * %d es distinto de 100’ % (n, m)

· 4 Traduce a C este programa Python.

1 from math import sqrt 2 3 x 1 = float(raw_input("Punto 1, coordenada x: ")) 4 y 1 = float(raw_input("Punto 1, coordenada y: ")) 5 x 2 = float(raw_input("Punto 2, coordenada x: ")) 6 y 2 = float(raw_input("Punto 2, coordenada y: ")) 7 dx = x 2 - x 1 8 dy = y 2 - y 1 9 distancia = sqrt(dx ** 2 + dy** 2 ) 10 print ’La distancia entre los puntos es: ’, distancia

· 5 Traduce a C este programa Python.

1 a = float(raw_input(’Valor de a: ’)) 2 b = float(raw_input(’Valor de b: ’)) 3 4 if a != 0 : 5 x = -b/a

CC 2003, 2008 Andr´es Marzal e Isabel Gracia 1 Introducci´on a C

al final (t´ıpicamente el valor 0), por lo que finaliza con una sentencia return que devuelve el

valor 0.^5

La estructura t´ıpica de un programa C es ´esta:

Importaci´on de funciones, variables, constantes, etc.

Definici´on de constantes y macros.

Definici´on de nuevos tipos de datos.

Declaraci´on de variables globales.

Definici´on de funciones.

int main(void) { Declaraci´on de variables propias del programa principal (o sea, locales a main).

Programa principal.

return 0 ; }

Un fichero con extensi´on ((.c)) que no define la funci´on main no es un programa C completo.

Si, por ejemplo, tratamos de compilar este programa incorrecto (no define main):

E sin main.c E

1 int a; 2 a = 1 ;

el compilador muestra el siguiente mensaje (u otro similar, seg´un la versi´on del compilador que

utilices):

$ gcc sin_main.c -o sin_main

sin_main.c:2: warning: data definition has no type or storage class /usr/lib/crt1.o: En la funci´on ‘_start’: /usr/lib/crt1.o(.text+0x18): referencia a ‘main’ sin definir collect2: ld returned 1 exit status

F´ıjate en la tercera l´ınea del mensaje de error: ((referencia a ‘main’ sin definir)).

1.4. C es un lenguaje de formato libre

As´ı como en Python la indentaci´on determina los diferentes bloques de un programa, en C la

indentaci´on es absolutamente superflua: indentamos los programas ´unicamente para hacerlos

m´as legibles. En C se sabe d´onde empieza y d´onde acaba un bloque porque ´este est´a encerrado

entre una llave abierta ({) y otra cerrada (}).

He aqu´ı un ejemplo de bloques anidados en el que hemos indentado el c´odigo para facilitar

su lectura:

minimo.c minimo.c

1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a, b, c, minimo; 6 7 scanf ("%d", &a); 8 scanf ("%d", &b); 9 scanf ("%d", &c); (^5) El valor 0 se toma, por un convenio, como se˜nal de que el programa finaliz´o correctamente. El sistema

operativo Unix recibe el valor devuelto con el return y el int´erprete de ´ordenes, por ejemplo, puede tomar una decisi´on acerca de qu´e hacer a continuaci´on en funci´on del valor devuelto.

1.4. C es un lenguaje de formato libre

10 if (a < b) { 11 if (a < c) { 12 minimo = a; 13 } 14 else { 15 minimo = c; 16 } 17 } 18 else { 19 if (b < c) { 20 minimo = b; 21 } 22 else { 23 minimo = c; 24 } 25 } 26 printf ("%d\n", minimo); 27 return 0 ; 28 }

Este programa podr´ıa haberse escrito como sigue y ser´ıa igualmente correcto:

minimo 1.c minimo.c

1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a, b, c, minimo; 6 7 scanf ("%d", &a); 8 scanf ("%d", &b); 9 scanf ("%d", &c); 10 if (a < b) { 11 if (a < c) { minimo = a; } 12 else { minimo = c; } 13 } 14 else { 15 if (b < c) { minimo = b; } 16 else { minimo = c; } 17 } 18 printf ("%d\n", minimo); 19 return 0 ; 20 }

Cuando un bloque consta de una sola sentencia no es necesario encerrarla entre llaves. Aqu´ı

tienes un ejemplo:

minimo 2.c minimo.c

1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a, b, c, minimo; 6 7 scanf ("%d", &a); 8 scanf ("%d", &b); 9 scanf ("%d", &c); 10 if (a < b) { 11 if (a < c) minimo = a ; 12 else minimo = c ; 13 } 14 else { 15 if (b < c) minimo = b; 16 else minimo = c;