0% encontró este documento útil (0 votos)
19 vistas8 páginas

MCS 11 Resuelto

El documento proporciona fragmentos de código de ejemplo para preguntas de programación en C relacionadas con tipos de datos básicos, operadores lógicos, funciones, arreglos, punteros, estructuras, recursión y matrices. Incluye pistas y código completo para problemas sobre tamaños de tipos de datos, operadores lógicos, cálculo del área de un triángulo, impresión de patrones, operaciones con arreglos, intercambio de variables por referencia, suma de matrices, máximo común divisor, operaciones con cadenas, aritmética de punteros, almacenamiento y recuperación de calificaciones de estudiantes utilizando estructuras, y el problema de recursión de la Torre de Hanoi.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
19 vistas8 páginas

MCS 11 Resuelto

El documento proporciona fragmentos de código de ejemplo para preguntas de programación en C relacionadas con tipos de datos básicos, operadores lógicos, funciones, arreglos, punteros, estructuras, recursión y matrices. Incluye pistas y código completo para problemas sobre tamaños de tipos de datos, operadores lógicos, cálculo del área de un triángulo, impresión de patrones, operaciones con arreglos, intercambio de variables por referencia, suma de matrices, máximo común divisor, operaciones con cadenas, aritmética de punteros, almacenamiento y recuperación de calificaciones de estudiantes utilizando estructuras, y el problema de recursión de la Torre de Hanoi.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Código del curso : MCS-011

Título del curso : Resolución de Problemas y Programación

Pregunta 1:

(a) Escribe un programa simple para encontrar el tamaño de diferentes tipos de datos básicos en C.
Sugerencia:#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
printf("El tamaño de un entero es %d", sizeof(int));
printf("El tamaño de float es %f ", sizeof(float));
printf("El tamaño de un carácter es %c", sizeof(char));
getch();
}

(b) Escribe un programa en C para mostrar el funcionamiento de diferentes operadores lógicos en C. Tu programa debería
guía a los usuarios con un mensaje/menu adecuado en la consola.
#incluír<stdio.h>
#include <conio.h>
void main()
{
clrscr();
int a,b,c,d,m,t;
flotar x,y,j.k;
printf("Introduce 6 números enteros: ");
scanf("%d\n%d\n%d\n%d\n%d\n%d\n",&a,&b,&c,&d,&m,&t);
printf("Ingresa 4 números decimales: ");
scanf("%f\n%f\n%f\n%f\n",&x,&y,&j,&k);
si((a>b && c<d) || (x>y && j<k)||(m!=t))
printf("es una demostración de operador lógico");
else
printf("hay un error lógico en el programa");
getch();
}

(c) Escribe una función para encontrar el área de un triángulo cuyas longitudes de los tres lados están dadas.
Sugerencia:#include<stdio.h>
#include<conio.h>
flotante triángulo (flotante b, flotante h)
{
flotar resultado;
(b*h)/2;
return(result);
}
void main()
{
clrscr();
flotar a,b,ans;
printf(“Ingrese la base del triángulo: “);

www.solutioncab.com(un sitio de solución completa)


1
scanf("%f",&a);
printf("Ingresa la altura del triángulo: ");
scanf("%f",&b);
triángulo(a, b);
printf("El área del triángulo es %f", ans);
getch();
}

Pregunta 2:
(a) Escribe un programa en C para imprimir el siguiente triángulo:

*
***
*****
*******
*********
************

#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
int n,j,k,i;
printf("Introduce el número: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
para(k=i;k<n;k++)
{
printf("*");
}
por(j=1;j<=i;j++)
{
printf("*");
}
for(j=i;j>1;j--)
{
printf("*");
}
printf(" ");
}
getch();
}

(b) Escribe un programa en C para leer las notas de la prueba interna de 25 estudiantes en una clase y mostrar el número de
estudiantes que han obtenido más del 50% en la prueba. Hacer supuestos necesarios.

#incluír<stdio.h>
#include<conio.h>
void main()
{
clrscr();
int a[25], i;

www.solutioncab.com(Un sitio de soluciones completas)


2
printf("Ingrese las calificaciones de 25 estudiantes:\n");
por(i=1;i<=25;i++)
{
scanf("%d",&a[i]);
}
para(i=1;i<=25;i++)
{
si(a[i]>50)
printf("%d marcas son mayores que el 50%\n");
}
getch();
}

Pregunta 3:
(a) ¿Qué es llamar por referencia? ¿Cómo se diferencia de llamar por valor? Escribe una función en C para intercambiar dos
números dados utilizando el mecanismo de paso por referencia.
Consejo: Si estás llamando por referencia, significa que la compilación no creará una copia local de la variable que
te estás refiriendo. Obtendrá acceso a la memoria donde se guardó la variable. Cuando estés haciendo cualquier
operaciones con una variable referenciada puedes cambiar el valor de la variable.
La llamada por valor es donde una copia de un objeto se coloca en la pila de parámetros. La función llamada puede acceder y
manipula esa copia a voluntad, pero no puede cambiar la copia original porque no tiene forma de saber dónde está
la copia original se encuentra. La Llamada por Referencia, por otro lado, es donde se coloca la dirección de un objeto en el
pila de parámetros. Usando una sintaxis extra, el * o el ->, la función llamada puede acceder y manipular la copia original
a voluntad.
#include<stdio.h>
#include<conio.h>
void intercambiar(int *num1, int *num2);
void main()
{
clrscr();
int x,y;
printf("Introduce el número: ");
scanf("%d",&x);
printf("Introduce el número: ");
scanf("%d",&y);
printf("x= %d y= %d\n",x,y);
intercambiar(&x,&y);
printf("x= %d y= %d",x,y);
getch();
}
void intercambiar(int *num1, int *num2)
{
int temp;
*num1;
*num1=*num2;
*num2=temp;
}

(b) Escribe un programa en C para la suma de dos matrices de 3×3.


#incluir<stdio.h>
#include<conio.h>
void main()
{
clrscr();
int a[3][3],b[3][3],c[3][3],i,j;

www.solutioncab.com(un sitio de solución completa)


3
printf("Ingrese los elementos para 1stMatriz 3x3:
para(i=0;i<3;i++)
{
por(j=0;j<3;j++)
{
scanf("%d\n",&a[i][j]);
}
}
Introduzca los elementos para la segunda matriz 3x3:
para(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d\n",&b[i][j]);
}
}
printf("Suma de matriz 3x3:\n");
para(i=0;i<3;i++)
{
para(j=0;j<3;j++)
{
c=[i][j]=a[i][j]+b[i][j];
printf("%d\n",c[i][j]);
}
}

getch();
}

(c) Escribe un programa en C para encontrar el MCD de dos números dados.


#incluir<stdio.h>
#include<conio.h>
int mcd(int m, int n)
{
mientras(m!=n)
{
si(m>n)
m=m-n;
else
n=n-m;
}
return(m);
}
void main()
{
clrscr();
int m,n,gcd(int,int);
printf("Por favor ingrese 2 valores: ");
scanf("%d\n%d",&m,&n);
printf("MCD= %d",mcd(m,n));
getch();
}

www.solutioncab.com(Un sitio de solución completa)


4
Pregunta 4:

(a) Escribe un programa en C para lo siguiente:


i) Contar el número de palabras en una cadena dada
ii) Concatenando dos cadenas dadas
Pista: #include<stdio.h>
<#include<conio.h>#>
void main()
{
clrscr();
char str[1000];
int i=0;
printf("Introduce la cadena: ");
scanf("%s",str);
mientras(str[i]!='\0')
{
i++;
}
printf("Hay %d palabras.");
getchar();
getch();
}
i) #include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
char a[1000],b[1000];
int i=0,j=0,k;
printf("Ingresa la cadena: ");
scanf("%s",a);
printf(“Ingresa la cadena: “);
scanf("%s",b);
mientras(a[i] != '\0')
{
i++;
}
mientras(b[j]!='\0')
{
j++;
}
for(k=0;k<j;k++)
{
a[i+k]=b[k];
}
printf("%s",a);
getchar();
getch();
}

(c) ¿Qué es un puntero? Explica la aritmética de punteros con un ejemplo. También explica el uso de la función malloc en C.
programación con un ejemplo
Pista: Un puntero en C es la dirección de una variable de una función. Las ventajas de un puntero sobre el uso de variables normales
son:
Si pasas el puntero a una variable a una función, entonces esa función puede modificar el valor de la variable directamente.

www.solutioncab.com(Un sitio de soluciones completas)


5
Las variables puntero también se pueden utilizar en expresiones aritméticas. Se pueden realizar las siguientes operaciones sobre punteros:
1. Los punteros se pueden incrementar o decrementar para apuntar a diferentes ubicaciones como
ptr1=ptr2+3;
ptr++;
--ptr;
2. Si ptr1 y ptr2 son punteros correctamente declarados e inicializados, las siguientes operaciones son válidas.
res=res+*ptr1;
*ptr1=*ptr2+5;
prod=*ptr1**ptr2;
quo=*ptr1/*ptr2;
3. Expresiones como ptr1==ptr2, ptr1<ptr2 y ptr2!=ptr1 son permitidas siempre que los punteros ptr1 y
ptr2 se refiere a las mismas variables relacionadas. Estas comparaciones son comunes en el manejo de arreglos.

Se puede asignar un bloque de memoria utilizando la función malloc. La función malloc reserva un bloque de
memoria de tamaño especificado y devuelve un puntero de tipo void. Esto significa que podemos asignarlo a cualquier tipo
del puntero. Toma la siguiente forma:
ptr=(tipo-de-cast *) malloc(tamaño-en-bytes);
ptr es un puntero del tipo cast-type. La malloc devuelve un puntero a un área de memoria con un tamaño de byte-size
Ejemplo
x=(int *) malloc(100 *sizeof(int));

Pregunta 5:
(a) Explica la recursión. También escribe un programa en C para el problema de las Torres de Hanoi con un ejemplo de 4 discos.
Consejo: El lenguaje C permite al programador escribir funciones que se llaman a sí mismas y esto se llama Recursión.
#include<stdio.h>
#include<conio.h>
void TOH(int,char,char,char);
void main()
{
int n;
clrscr();
printf("Ingrese el número de discos: ");
scanf("%d",&n);
printf("Problema de las Torres de Hanoi para %d discos: \n", n);
TOH(„n‟,‟A‟,‟B‟,‟C‟);
getch();
}
void TOH(int n, char A, char B, char C)
{
si(n<=0)
Entrada incorrecta
else if(n==1)
Mover disco de clavija %c a clavija %c
más
{
TOH(n-1,A,C,B);
TOH(1,A,B,C);
TOH(n-1,B,A,C);
}
}

(b) Escribe un programa en C utilizando estructuras para encontrar las calificaciones de los estudiantes en una clase. Haz las suposiciones necesarias.
Sugerencia:#include <stdio.h>
#include <ctype.h>
#definir LONGITUD_NOMBRE 50
#define LONG_ESTUDIANTE 100

www.solutioncab.com(Un sitio de soluciones completas)


6
int leer_linea(char str[], int n);
int encontrar_estudiantes(int estudiantes);

struct resultado_prueba {
char nombre[NOMBRE_LEN+1];
int número;
int grado1;
int grado2;
int media;
int final;
flotar numérico;
}estud[LONG_ESTUD];

void insertar(void);
void imprimir(void);

int num_estudiantes = 0;

int main(void)
{
estructura test_result test;
printf("Introduce el nombre del estudiante: ");
leer_linea(test.name, NAME_LEN);
printf("Introduce la calificación del estudiante para el cuestionario #1: ");

scanf("%d", &test.grade1);
printf("Ingrese la calificación del estudiante para la prueba #2: ");
scanf("%d", &test.grade2);
printf("Ingresa la nota del estudiante para el examen medio: ");
scanf("%d", &test.midterm);
printf("Introduce la nota del estudiante para el final: ");
scanf("%d", &test.final);
(((test.grade1 + test.grade2) * 1.25) + (test.midterm * 0.25) + (test.final * 0.50));
%s tiene una puntuación numérica de %.1f para todo el curso.
código char;
para (;;) {
\n
printf("¿Te gustaría ingresar otro registro de estudiante? y(sí) o n(no)?");
scanf(" %c", &code);
mientras (getchar() != '\n') /* salta al final de la línea */
;

switch (código) {
caso 'y': insertar();
romper;
caso 'n': imprimir();
return 0;
predeterminado: printf("Entrada inválida. Inténtalo de nuevo. ");
return 0;
}
}
}

int encontrar_estudiantes(int estudiantes)


{
int i;

www.solutioncab.com(un sitio de solución completa)


7
para (i = 0; i < num_estudiantes; i++)
si (estudiante[i].numero == estudiantes)
return i;
retornar -1;
}

void insertar(void)
{
int numero_de_parte;
si (num_students == STUD_LEN) {
Lo siento, no se pueden ingresar más estudiantes.
regresar;
}
studen[num_students].numero = numero_parte;
printf("Ingrese el nombre del estudiante: ");
leer_linea(estudiante[num_estudiantes].nombre, LONGITUD_NOMBRE);
printf("Ingresa la calificación del estudiante para el cuestionario #1: ");

scanf("%d", &studen[num_students].grade1);
printf("Ingrese la calificación del estudiante para la prueba #2: ");
scanf("%d", &studen[num_students].grade2);
printf("Introduce la nota del estudiante para el examen de mitad de curso: ");

scanf("%d", &studen[num_students].midterm);
printf("Ingrese la calificación final del estudiante: ");
scanf("%d", &studen[num_students].final);
estudiante[num_students].numérico =
(((estudiante[num_estudiantes].nota1 + estudiante[num_estudiantes].nota2) * 1.25) + (estudiante[num_estudiantes].examen_medio)
(studen[num_students].final * 0.50) + (0.25);
printf("La puntuación numérica de %s para todo el curso es %.1f\n", studen[num_students].name,
studen[num_students].numérico);
num_estudiantes++;
}
void imprimir(void)
{
printf("La puntuación media en el cuestionario 1 es\n");
printf("La puntuación promedio en el quiz2 es\n");
printf("La puntuación promedio en el examen parcial es ");
printf("La puntuación promedio en el final es\n");
printf("La puntuación media para todo el curso es\n");
}
int leer_linea(char str[], int n)
{
int ch, i = 0;
mientras(isspace(ch = getchar()))
;
str[i++] = ch;
mientras ((ch = getchar()) != ' ') {
si (i < n)
str[i++] = ch;
}
str[i] = '\0';
devuelve i;
}

www.solutioncab.com(Un sitio de soluciones completas)


8

También podría gustarte