MCS 11 Resuelto
MCS 11 Resuelto
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: “);
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;
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;
}
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.
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
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;
}
}
}
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;
}