1. Es programa puede ser dividido en varias secciones
1. Revise el siguiente
programa y explique cuál es
el resultado.
#include <stdio.h>
#define FILAS 3
#define COLUMNAS 4
int main ( )
{
int i,j;
int M[FILAS][COLUMNAS];
/* lectura por filas */
for ( i=0; i<FILAS; i++)
for ( j=0; j< COLUMNAS; j++)
scanf(“%d”, &M[i][j]);
/* escribe por columnas */
for ( j=0; j<COLUMNAS; j++)
{
for ( i=0; i< FILAS; i++)
printf(“%5d”,M[i][j]);
printf(“n”);
}
}
Declaraciones inicialesLectura de datos en el arreglo MEscritura de los datos del arreglo MFin del programa
2. Incluye librería estándar de entrada y salida.
Define dos constantes simbólicas:
•FILAS con valor 3 y
•COLUMNAS con valor 4
Observe que no requiere el signo igual como operador
para la asignación.
Declara la función mainDeclara las variables enteras i y j
Observemos primero la sección
con las declaraciones iniciales
#include <stdio.h>
#define FILAS 3
#define COLUMNAS 4
int main ( )
{
int i,j;
int M[FILAS][COLUMNAS];
Declara el arreglo M de elementos
enteros con dimensiones M[3][4]
3. Hagámosle un seguimiento a
esta sección del programa
Note que la lectura de datos para el arreglo
M[ i ] [ j ] se realiza por FILAS, donde:
• se mantiene fijo el valor de la FILA i mientras
que
• el valor de la COLUMNA j varía de 0 a 3.
Los índices i y j de M[ i ] [ j ] varían de acuerdo a
las instrucciones for, indicando con cuál valor del
arreglo M se está trabajando en ese momento.
Veamos ahora la sección que efectúa
la lectura de datos por filas en el
arreglo M
/* lectura por filas */
for ( i=0; i < FILAS; i++)
for ( j=0; j < COLUMNAS; j++)
scanf(“%d”, &M[i][j]);
M[0][0] M[0][1] M[0][2] M[0][3]
M[1][0] M[1][1] M[1][2] M[1][3]
M[2][0] M[2][1] M[2][2] M[2][3]
M =
i =
j =
012
0123
FILA
COLUMNA 01230123
Vamos primero paso a pasoVeamos ahora un elemento a la vezFinalmente veamos una fila completa
Hasta aquí hemos leído los datos y los hemos
almacenado en el arreglo M
4. /* escribe por columnas */
for ( j=0; j < COLUMNAS; j++)
{
for ( i=0; i < FILAS; i++)
printf(“%5d”,M[i][j]);
printf(“n”);
}
• En la sección previa el arreglo M [ i ] [ j ]
fue recorrido por FILAS, es decir
horizontalmente.
• Aquí el arreglo M [ i ] [ j ] es recorrido
por COLUMNAS, es decir verticalmente.
Observe que el programador utilizó aquí los
índices i y j en un orden inverso al que
usó para leer los datos:
•Aquí la j está primero que la i.
012012012
Examinemos ahora la sección que
imprime los datos almacenados en
el arreglo M
M[0][0] M[0][1] M[0][2] M[0][3]
M[1][0] M[1][1] M[1][2] M[1][3]
M[2][0] M[2][1] M[2][2] M[2][3]
M =
i =
012
0FILA
COLUMNA
12
3j =
5. /* escribe por columnas */
for ( j=0; j < COLUMNAS; j++)
{
for ( i=0; i < FILAS; i++)
printf(“%5d”,M[i][j]);
printf(“n”);
}
Procedamos ahora a observar el orden
en que los datos son impresos
M[0][0]
M[0][1]
M[0][2]
M[0][3]
M[1][0]
M[1][1]
M[1][2]
M[1][3]
M[2][0]
M[2][1]
M[2][2]
M[2][3]
“n” es Salto de línea
“n” es Salto de línea
“n” es Salto de línea
“n” es Salto de línea
La matriz que fue introducida con
• 3 filas y 4 columnas, aparece impresa como de
• 4 filas y 3 columnas.
6. 2. Escriba un programa que
inicializa un arreglo de
enteros con diez valores y lo
imprime en formato de tabla.
//Inicialización de un arreglo
#include <stdio.h>
int main()
{
Note que n se define como un arreglo de 10 enteros.
int i, n[ 10 ];
Coloca cero en cada uno de los elementos de n.Imprime el encabezado de la tabla.
printf("Elemento t Valor n" );
//imprime el arreglo
for ( i = 0; i < 10; i++ )
printf("%5d tt %3d n", i, n[i]);
Imprime la tabla.
return 0;
}
Termina el programa.
//Inicializa el arreglo
for ( i = 0; i < 10; i++ )
n[ i ] = 0;
8. 3. Escriba un programa que
calcule y almacene el
cuadrado de los primeros
100 números positivos.
int main ( )
{
int cuadrado[101];
int i; /* indice del for */
for ( i=1; i<=100; i++){
cuadrado[i] = i*i;
}
for ( i=1; i<=100; i++)
printf(" El cuadrado de
%d es %d n",i, cuadrado[i]);
}
Declara un arreglo de 101 elementos, los cien
primeros números positivos son de 1 a 100
Calcula el cuadrado de 1 a 100, observe que no
asigna valor a n [ 0 ].
Imprime los valores de i y los valores del arreglo
desde cuadrado [ 1 ] hasta cuadrado [ 100 ].
Termina el programa
9. El cuadrado de 64 es 4096
El cuadrado de 65 es 4225
El cuadrado de 66 es 4356
El cuadrado de 67 es 4489
El cuadrado de 68 es 4624
El cuadrado de 69 es 4761
El cuadrado de 70 es 4900
El cuadrado de 71 es 5041
El cuadrado de 72 es 5184
El cuadrado de 73 es 5329
El cuadrado de 74 es 5476
El cuadrado de 75 es 5625
El cuadrado de 76 es 5776
El cuadrado de 77 es 5929
El cuadrado de 78 es 6084
El cuadrado de 79 es 6241
El cuadrado de 80 es 6400
El cuadrado de 81 es 6561
El cuadrado de 82 es 6724
El cuadrado de 83 es 6889
El cuadrado de 84 es 7056
El cuadrado de 85 es 7225
El cuadrado de 86 es 7396
El cuadrado de 87 es 7569
El cuadrado de 88 es 7744
El cuadrado de 89 es 7921
El cuadrado de 90 es 8100
El cuadrado de 91 es 8281
El cuadrado de 92 es 8464
El cuadrado de 93 es 8649
El cuadrado de 94 es 8836
El cuadrado de 95 es 9025
El cuadrado de 96 es 9216
El cuadrado de 97 es 9409
El cuadrado de 98 es 9604
El cuadrado de 99 es 9801
El cuadrado de 100 es 10000
Este programa imprime
10. 4. Corra el siguiente programa
y explique lo que sucede
#include <stdio.h>
int main()
{
int c;
char nombre[4][7]={ 'F','u','l','a','n','o','0',
'J','u','a','n','0',' ',' ',
'P','e','d','r','o','0',' ',
'E','l','i','s','a','0',' '};
/* El caracter nulo, significa el fin de texto */
printf ("Esto es un mensaje
personalizado. nn")
for (c = 0; c < 4; c++){
printf("Hola %s nn",nombre[c]);
}
}
Declara el arreglo de caracteres ‘nombre’ y lo
inicializa
Imprime el título y los elementos que están en el
arreglo de caracteres „nombre’
Fin del programa
11. Este programa saluda a cada uno de los
nombres que están en el arreglo de
caracteres ‘nombre’ de 4x7. De la siguiente
manera:
4. SOLUCIÓN
Esto es un mensaje personalizado.
Hola Fulano salta dos líneas, escribe
Hola Juan salta 2 líneas, escribe
Hola Pedro salta 2 líneas, escribe
Hola Elisa y salta 2 líneas.
12. 5 Escriba un programa que dada una cadena de
caracteres fija, imprima la cadena completa,
imprima el tercer carácter de la cadena y la
subcadena a partir del cuarto carácter.
Se define un arreglo de 7 caracteres: cadena [7]y se asigna una letra a cada elemento del arreglo.Imprime toda la cadena de caracteres, con %s.
cadena[0]='L';
cadena[1]='e';
cadena[2]='t';
cadena[3]='r';
cadena[4]='a';
cadena[5]='s';
cadena[6]= '0'; /* Caracter nulo, significa
el fin del texto */
printf("La cadena es: %sn", cadena);
#include <stdio.h>
int main()
{
char cadena[7];
// Define una cadena de caracteres
printf("La subcadena a partir del cuarto
caracter es: %sn", &cadena[3]);
printf("El tercer caracter de la
cadena es: %cn", cadena[2]);
}
Imprime el tercer carácter con %c y cadena[2].Imprime a partir del cuarto elemento, con %s.Fin del programa.
13. Este programa imprime
La cadena es: Letras
El tercer caracter de la cadena es: t
La subcadena a partir del cuarto caracter es: ras
14. 6. El siguiente programa ordena los valores dados
de un arreglo de diez elementos en orden ascendente.
Analice el programa e indique:
¿ cuál será la salida del programa?
#include<stdio.h>
int main()
{
const int dimensionArreglo = 10;
int a[ dimensionArreglo ] = { 2, 6, 4, 8, 10, 12, 89, 68,
45, 37 };
int i, temp;
printf("nDatos en orden originaln");
for ( i = 0; i < dimensionArreglo; i++ )
printf("%4d",a[ i ]);
for ( int pass = 0; pass < dimensionArreglo - 1; pass++ )
//pases
for ( i = 0; i < dimensionArreglo - 1; i++ ) // un pase
if ( a[ i ] > a[ i + 1]) { // una comparación
temp = a [ i ]; // un intercambio
a[ i ] = a[ i + 1 ];
a[ i + 1 ] = temp;
}
printf("nDatos en orden ascendenten");
for ( i = 0; i < dimensionArreglo; i++ )
printf("%4d",a[ i ]);
printf("n");
}
Declara el arreglo ‘a’ con dimensión 10 y lo inicializaImprime el arreglo ‘a’ en el orden originalOrdena los valores del arreglo ‘a’ utilizando la variable ‘temp’Imprime los valores del arreglo ‘a’ en orden ascendenteFin del programa
15. 6. SOLUCIÓN:
La técnica utilizada es similar al ordenamiento de
burbuja (Bubble sort), pues los valores más
pequeños gradualmente “burbujean” hacia la parte
más alta del arreglo como las burbujas de aire
ascienden en el agua, mientras que los valores más
grandes se hunden al fondo del arreglo.
La técnica consiste en pasar varias veces por el
arreglo.
Con cada paso, se comparan pares
sucesivos de elementos.
Si uno de los pares está en orden
ascendente ( o son idénticos los valores) se queda
tal cual.
Si está en orden descendente se
intercambian sus valores en el arreglo.
La salida de este programa es:
2 6 4 8 10 12 89 68 45 37
2 4 6 8 10 12 37 45 68 89
Datos en orden original
Datos en orden ascendente
16. 7. Escriba un programa que llene una matriz
de 3 X 3 de valores reales, luego:
Calcule la suma de cada fila y la
almacena en un vector
Calcule la suma de cada columna y
la almacena en otro vector.
Matriz: arreglo de elementos reales con
dimensión 3x3
Sum_fila: vector de 3 elementos reales
Sum_fila: contiene la suma de cada fila
Sum_colum: vector de 3 elementos reales
Sum_colum: contiene la suma de cada columna.
Para este programa se definen los
siguientes elementos de datos:
17. #include <stdio.h>
#define N 3
int main ( )
{
float matriz[N][N]; // Entrada
float sum_fila[N], sum_colum[N]; // Salida
int i,j;
for (i=0; i<N; i++){
sum_fila[i]= 0.0;
sum_colum[i]= 0.0;
}
/* Lee los datos para la matriz */
printf("Introduzca los %d elementos de la matriz por
filan", N*N);
for ( i=0; i<N; i++)
for (j=0; j<N; j++)
scanf("%f", &matriz[i][j]);
/* Suma las filas */
for ( i=0; i<N; i++)
for (j=0; j<N; j++)
sum_fila[i] = sum_fila[i]+matriz[i][j] ;
/* Suma las columnas */
for ( j=0; j<N; j++)
for (i=0; i<N; i++)
sum_colum[j] = sum_colum[j] + matriz[i][j] ;
/* Imprime las sumas de cada fila y cada columna */
for (i=0; i<N; i++)
printf("La suma de la fila %d es: %5.2f y la
suma de la columna %d es: %5.2f n",
i,sum_fila[i],i, sum_colum[i]);
}
Definiciones iniciales y declaración de variablesInicializa los arreglos sum_fila y sum_colum a ceroLee los datos y los almacena en el arreglo matrizRecorre cada fila y almacena la suma en sum_filaRecorre cada columna y almacena la suma en sum_columnImprime la suma de cada fila y de cada columnaFin de programa
18. Interacción con el programa
1
2
3
4
5
6
7
8
9
Primero el programa solicita al usuario los datos para llenar
la matriz, para ello hemos introducido unos datos de prueba,
y luego se muestran los resultados para esos datos:
La suma de la fila 0 es: 6.00 y la suma de la columna 0 es: 12.00
La suma de la fila 1 es: 15.00 y la suma de la columna 1 es: 15.00
La suma de la fila 2 es: 24.00 y la suma de la columna 2 es: 18.00
Introduzca los 9 elementos de la matriz por fila