Los ejercicios resueltos de la siguiente relación no están relacionados con la lista de
ejercicios propuestos de cada tema (la cual puedes encontrar aquí).
Escribir un programa que lea dos valores enteros y muestre su suma, resta,
multiplicación, división entera y resto de la división.
Solución:
/********************************************/
/* Operaciones aritméticas con dos enteros. */
/********************************************/
#include <stdio.h>
void main (){
int a, b;
printf ("\nIntroduce el primer número: ");
scanf ("%i", &a);
printf ("\nIntroduce el segundo número: ");
scanf ("%i", &b);
printf ("\nLa suma es: %i.", a+b);
printf ("\nLa resta es: %i.", a-b);
printf ("\nLa multiplicación es: %i.", a*b);
printf ("\nLa división entera es: %i.", a/b);
printf ("\nEl resto de la división entera es: %i.", a%b);
}
Observe que:
- Los números introducidos pueden ser también números negativos.
- La división entre enteros genera un resultado entero (sin decimales).
- Si uno de los operandos o el resultado excede del rango permitido para los números
enteros, que es [-32768,32767], entonces, el resultado será incorrecto, pero el compilador no avisa de ningún error.
- Todas las instrucciones finalizan con un punto y coma (;). Pruebe a quitar
un ; y compile a continuación. Lea el mensaje de error y fíjese que el error lo
señala en la línea siguiente. Esto es debido a que es en la línea siguiente cuando detecta que
falta un ;.
- a+b es una expresión (de suma). El resultado de esta expresión será imprimido por
la función printf(). Se podría haber asignado el resultado de esta expresión a una
variable (por ejemplo con c=a+b) y luego haber usado esa variable (c) para imprimirla.
Igualmente ocurre con las demás expresiones, pero de la forma propuesta nos ahorramos
instrucciones y variables.
- El código de formato o indicador de tipo %i (de int) es totalmente equivalente a %d (decimal).
- En la función de escritura printf() el número entero a escribir es insertado en la posición
donde está situado el indicador %i.
En un mismo printf() puede haber varios indicadores de tipo (de la forma
%i). En ese caso, después de las comillas finales (") deben aparecer tantas expresiones como
indicadores existan. Estas expresiones aparecerán en las posiciones de los indicadores y en
el orden que aparecen. Por ejemplo, pruebe un printf() con tres expresiones:
printf("\nSUMA: %i + %i = %i.", a, b, a+b);
- El carácter \n que hay al principio del texto que escribe la función
printf() sirve para indicar que cambie de línea (retorno de carro, newline).
Esto hace que cada una de las frases aparezca en una línea distinta.
Pruebe a poner un \n en cualquier posición dentro del texto de printf() y
observe qué ocurre.
- Las funciones printf() y scanf() son funciones que están incluídas
dentro de la biblioteca stdio.h (entrada/salida estándar, standard input/output). Por eso, hay que
incluir al principio del programa ese fichero de cabeceras (.h, headers).
Pruebe a eliminar ese #include y observe los mensajes de error que genera al
compilar.
- El texto incluido entre /* y */ se llama comentario y es ignorado
por el compilador. Puede incluir comentarios en cualquier parte del programa para indicar
cualquier aclaración que desee. Es siempre aconsejable poner un comentario al principio del
programa para indicar lo que hace el programa, tal y como se ve en este ejercicio.
Los comentarios son aclaraciones para el programador (no para el compilador) y ayudan a entender un programa.
- main() es la función principal del programa. Todo programa en C
debe contener una función main() y será por está función por la que empiece la
ejecución. El tipo void (nulo), indica que la función de este programa no va a
devolver ningún valor al Sistema Operativo. Los paréntesis en blanco indican que la función no
tiene argumentos. También puede escribirse en el programa de forma explícita: main(void)
- La llave de apertura { indica, en este caso, que comienza la función
main(). Suele ponerse al final de la línea de la orden que comienza.
- La llave de cierre } indica, en este caso, que termina la función
main(). Suele ponerse justo debajo de la orden que cierra, en la misma columna de texto
donde comienza dicha orden.
- Las instrucciones que contiene la función main() están sangradas (o
indentadas) dos espacios hacia la derecha. Esto se hace así para indicar de forma clara que
todas estas instrucciones están incluídas dentro de la función main().
El sangrado es muy importante para que un programa sea fácil de leer y cada sangrado debe
tener entre 2 y 4 espacios en blanco.
Escribir un programa que calcule la distancia euclídea de dos puntos en el plano
definidos por sus dos coordenadas cada uno: (x1,y1) y (x2,y2).
Utilice variables de tipo double y la función sqrt(),
de la biblioteca math.h, para calcular la raíz cuadrada (square root).
Solución:
/*******************************************/
/* Distancia entre dos puntos en el plano. */
/*******************************************/
#include <stdio.h>
#include <math.h>
void main (void){
double x1, y1, x2, y2;
printf ("\n- Introduce el parámetro x1: "); scanf ("%lf", &x1);
printf ("\n- Introduce el parámetro y1: "); scanf ("%lf", &y1);
printf ("\n- Introduce el parámetro x2: "); scanf ("%lf", &x2);
printf ("\n- Introduce el parámetro y2: "); scanf ("%lf", &y2);
x1 = (x1-x2) * (x1-x2); /* Cuadrados de las distancias en los ejes X e Y */
y1 = (y1-y2) * (y1-y2);
printf ("\n* La distancia entre ellos es: %lf.\n", sqrt(x1+y1);
}
Escribir un programa que lea una palabra de cuatro letras y a continuación
la escriba en mayúsculas. Hágalo usando la función
toupper() de la biblioteca ctype.h y sin usarla.
Solución 1:
/* Tema 3: Ejercicio 7 usando toupper() */
#include<stdio.h>
#include<ctype.h>
void main(){
char a,b,c,d;
a=getchar(); /* Igual a scanf("%c",&a) */
b=getchar();
c=getchar();
d=getchar();
putchar(toupper(a));
putchar(toupper(b));
putchar(toupper(c));
putchar(toupper(d));
}
Solución 2:
/* Tema 3: Ejercicio 7 usando toupper() */
#include<stdio.h>
#include<ctype.h>
void main(){
char a,b,c,d;
a=toupper(getchar());
b=toupper(getchar());
c=toupper(getchar());
d=toupper(getchar());
putchar(a);
putchar(b);
putchar(c);
putchar(d);
}
Solución 3:
/* Tema 3: Ejercicio 7 usando toupper() */
#include<stdio.h>
#include<ctype.h>
void main(){
char a,b,c,d;
a=toupper(getchar());
b=toupper(getchar());
c=toupper(getchar());
d=toupper(getchar());
printf("%c%c%c%c",a,b,c,d);
}
Solución 4:
/* Tema 3: Ejercicio 7 usando toupper() */
#include<stdio.h>
#include<ctype.h>
void main(){
char a=getchar(),
b=getchar(),
c=getchar(),
d=getchar();
printf("%c%c%c%c",toupper(a),toupper(b),
toupper(c),toupper(d));
}
Solución 5:
/* Tema 3: Ejercicio 7 SIN usar toupper() */
#include<stdio.h>
void main(){
char a,b,c,d,
distancia = 'A' - 'a'; /* 65-97 */
a = getchar() + distancia;
b = getchar() + distancia;
c = getchar() + distancia;
d = getchar() + distancia;
printf("%c%c%c%c",a,b,c,d);
}