Enlace de descarga de papel : Papel | semestre 2 | 2016-17
Tecnología B.
(SEM-II) EXAMEN TEÓRICO 2016-17
SISTEMAS DE COMPUTACIÓN Y PROGRAMACIÓN EN C
Tiempo: 3 horas
Marcas totales : 100
Nota :-
- Hay tres secciones. La Sección A lleva 20 puntos, la Sección B lleva 30 puntos y la Sección C lleva 50 puntos.
- Intenta todas las preguntas. Las marcas se indica frente a cada pregunta.
- Asumir datos adecuados siempre que sea necesario.
Sección B
2. Intente cinco de las siguientes preguntas: (5*10 = 50)
- ¿Qué es la computadora digital ? También explique el diagrama de bloques de la computadora digital en detalle.
Computadora digital: una computadora digital se puede definir como una máquina programable que lee los datos binarios pasados como instrucciones, procesa estos datos binarios y muestra una salida digital calculada. Por lo tanto, las computadoras digitales son aquellas que trabajan sobre los datos digitales.
Detalles de los componentes funcionales de una computadora digital
- Unidad de entrada: La unidad de entrada consta de dispositivos de entrada que están conectados a la computadora. Estos dispositivos toman la entrada y la convierten en un lenguaje binario que la computadora entiende. Algunos de los dispositivos de entrada comunes son teclado, mouse, joystick, escáner, etc.
- Unidad central de procesamiento (CPU0): una vez que el dispositivo de entrada ingresa la información en la computadora, el procesador la procesa. La CPU se llama el cerebro de la computadora porque es el centro de control de la computadora. Primero obtiene instrucciones de la memoria y luego los interpreta para saber qué se debe hacer. Si es necesario, los datos se obtienen de la memoria o del dispositivo de entrada. Luego, la CPU ejecuta o realiza el cálculo requerido y luego almacena la salida o la muestra en el dispositivo de salida. La CPU tiene tres componentes principales que son responsables de diferentes funciones: unidad aritmética lógica (ALU), unidad de control (CU) y registros de memoria
- Unidad Aritmética y Lógica (ALU): La ALU, como su nombre indica realiza cálculos matemáticos y toma decisiones lógicas. Los cálculos aritméticos incluyen suma, resta, multiplicación y división. Las decisiones lógicas implican la comparación de dos elementos de datos para ver cuál es mayor, menor o igual.
- Unidad de control: La unidad de control coordina y controla el flujo de datos dentro y fuera de la CPU y también controla todas las operaciones de ALU, registros de memoria y también unidades de entrada/salida. También es responsable de llevar a cabo todas las instrucciones almacenadas en el programa. Decodifica la instrucción obtenida, la interpreta y envía señales de control a los dispositivos de entrada/salida hasta que la ALU y la memoria realizan correctamente la operación requerida.
- Registros de memoria: un registro es una unidad temporal de memoria en la CPU. Estos se utilizan para almacenar los datos que utiliza directamente el procesador. Los registros pueden ser de diferentes tamaños (16 bits, 32 bits, 64 bits, etc.) y cada registro dentro de la CPU tiene una función específica como almacenar datos, almacenar una instrucción, almacenar la dirección de una ubicación en la memoria, etc. Los registros de usuario pueden ser utilizado por un programador de lenguaje ensamblador para almacenar operandos, resultados intermedios, etc. El acumulador (ACC) es el registro principal en la ALU y contiene uno de los operandos de una operación que se realizará en la ALU.
- Memoria : La memoria adjunta a la CPU se utiliza para el almacenamiento de datos e instrucciones y se denomina memoria interna. La memoria interna se divide en muchas ubicaciones de almacenamiento, cada una de las cuales puede almacenar datos o instrucciones. Cada ubicación de memoria es del mismo tamaño y tiene una dirección. Con la ayuda de la dirección, la computadora puede leer fácilmente cualquier ubicación de la memoria sin tener que buscar en toda la memoria. cuando se ejecuta un programa, sus datos se copian en la memoria interna y se almacenan en la memoria hasta el final de la ejecución. La memoria interna también se denomina memoria primaria o memoria principal. Esta memoria también se denomina RAM, es decir, memoria de acceso aleatorio. El tiempo de acceso de los datos es independiente de su ubicación en la memoria, por lo que esta memoria también se denomina memoria de acceso aleatorio (RAM). Lea esto paradiferentes tipos de ram
- Unidad de salida: La unidad de salida consta de dispositivos de salida que se conectan con la computadora. Convierte los datos binarios provenientes de la CPU a una forma comprensible para el ser humano. Los dispositivos de salida comunes son monitor, impresora, trazador, etc.
- Escriba un programa que calcule la suma de los dígitos de un número entero . Por ejemplo, la suma del dígito del número 2155 es 2+1+5+5 o 13. El programa debe aceptar cualquier número arbitrario ingresado por el usuario.
// C program to compute sum of digits in
// number.
#include <stdio.h>
/* Function to get sum of digits */
int
getSum(
int
n)
{
int
sum = 0;
while
(n != 0) {
sum = sum + n % 10;
n = n / 10;
}
return
sum;
}
// Driver code
int
main()
{
int
n;
// Get the number
scanf
(
"%d"
, &n);
printf
(
"Enter the number: %d"
, n);
// Print the digits of the number
printf
(
"\nSum of Digits: %d "
,
getSum(n));
return
0;
}
Producción:
Enter the number: 32764 Sum of Digits: 22
- Escriba un programa para copiar el contenido de una array en otra en el orden inverso.
#include <stdio.h>
// Driver code
int
main()
{
int
original_arr[10], copied_arr[10], i;
// Get the numbers in the array
printf
(
"\nEnter the Elements: "
);
for
(i = 0; i < 10; i++) {
scanf
(
"%d"
, &original_arr[i]);
printf
(
"%d, "
, original_arr[i]);
}
// Copy the elements of the array
// in the copied_arr in Reverse Order
for
(i = 0; i < 10; i++) {
copied_arr[i] = original_arr[10 - i - 1];
}
// Print the original_arr
printf
(
"\nOriginal array: "
);
for
(i = 0; i < 10; i++) {
printf
(
"%d "
, original_arr[i]);
}
// Print the copied array
printf
(
"\nResultant array: "
);
for
(i = 0; i < 10; i++) {
printf
(
"%d "
, copied_arr[i]);
}
return
0;
}
Producción:
Enter the Elements: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, Original array: 1 2 3 4 5 6 7 8 9 10 Resultant array: 10 9 8 7 6 5 4 3 2 1
- ¿Qué es el sistema operativo ? También defina los tipos y funciones del sistema operativo .
Sistema Operativo – Definición:
- Un sistema operativo es un programa que controla la ejecución de programas de aplicación y actúa como una interfaz entre el usuario de una computadora y el hardware de la misma.
- Una definición más común es que el sistema operativo es el único programa que se ejecuta en todo momento en la computadora (generalmente llamado kernel), y todos los demás son programas de aplicación.
- Un sistema operativo se ocupa de la asignación de recursos y servicios, como memoria, procesadores, dispositivos e información. En consecuencia, el sistema operativo incluye programas para administrar estos recursos, como un controlador de tráfico, un programador, un módulo de administración de memoria, programas de E/S y un sistema de archivos.
Funciones del sistema operativo: el sistema operativo realiza tres funciones:
- Conveniencia: un sistema operativo hace que una computadora sea más conveniente de usar.
- Eficiencia: un sistema operativo permite que los recursos del sistema informático se utilicen de manera eficiente.
- Capacidad para evolucionar: un sistema operativo debe construirse de tal manera que permita el desarrollo, la prueba y la introducción efectivos de nuevas funciones del sistema sin interferir al mismo tiempo con el servicio.
- Sistema operativo por lotes: secuencia de trabajos en un programa en una computadora sin intervenciones manuales.
- Sistema operativo de tiempo compartido: permite que muchos usuarios compartan los recursos de la computadora (utilización máxima de los recursos).
- Sistema operativo distribuido: administra un grupo de diferentes computadoras y hace que parezca una sola computadora.
- Sistema operativo de red: las computadoras que se ejecutan en diferentes sistemas operativos pueden participar en una red común (se usa con fines de seguridad).
- Sistema operativo en tiempo real: significaba aplicaciones para fijar los plazos.
Ejemplos de sistema operativo son:
- Windows (basado en GUI, PC)
- GNU/Linux (personal, estaciones de trabajo, ISP, servidor de archivos e impresión, cliente/servidor de tres niveles)
- macOS (Macintosh), utilizado para las computadoras personales y estaciones de trabajo de Apple (MacBook, iMac).
- Android (sistema operativo de Google para teléfonos inteligentes/tabletas/relojes inteligentes)
- iOS (sistema operativo de Apple para iPhone, iPad y iPod Touch)
- Escribir un programa para multiplicar dos arrays (leer tamaño y número de elemento de arrays desde el teclado).
// C program to multiply two square arrays.
#include <stdio.h>
const
int
MAX = 100;
// Function to print Matrix
void
printMatrix(
int
M[][MAX],
int
rowSize,
int
colSize)
{
for
(
int
i = 0; i < rowSize; i++) {
for
(
int
j = 0; j < colSize; j++)
printf
(
"%d "
, M[i][j]);
printf
(
"\n"
);
}
}
// Function to multiply two arrays A[][] and B[][]
void
multiplyMatrix(
int
row1,
int
col1,
int
A[][MAX],
int
row2,
int
col2,
int
B[][MAX])
{
int
i, j, k;
// Matrix to store the result
int
C[MAX][MAX];
// Check if multiplication is Possible
if
(row2 != col1) {
printf
(
"Not Possible\n"
);
return
;
}
// Multiply the two
for
(i = 0; i < row1; i++) {
for
(j = 0; j < col2; j++) {
C[i][j] = 0;
for
(k = 0; k < row2; k++)
C[i][j] += A[i][k] * B[k][j];
}
}
// Print the result
printf
(
"\nResultant Matrix: \n"
);
printMatrix(C, row1, col2);
}
// Driven Program
int
main()
{
int
row1, col1, row2, col2, i, j;
int
A[MAX][MAX], B[MAX][MAX];
// Read size of Matrix A from user
printf
(
"Enter the number of rows of First Matrix: "
);
scanf
(
"%d"
, &row1);
printf
(
"%d"
, row1);
printf
(
"\nEnter the number of columns of First Matrix: "
);
scanf
(
"%d"
, &col1);
printf
(
"%d"
, col1);
// Read the elements of Matrix A from user
printf
(
"\nEnter the elements of First Matrix: "
);
for
(i = 0; i < row1; i++) {
for
(j = 0; j < col1; j++) {
printf
(
"\nA[%d][%d]: "
, i, j);
scanf
(
"%d"
, &A[i][j]);
printf
(
"%d"
, A[i][j]);
}
}
// Read size of Matrix B from user
printf
(
"\nEnter the number of rows of Second Matrix: "
);
scanf
(
"%d"
, &row2);
printf
(
"%d"
, row2);
printf
(
"\nEnter the number of columns of Second Matrix: "
);
scanf
(
"%d"
, &col2);
printf
(
"%d"
, col2);
// Read the elements of Matrix B from user
printf
(
"\nEnter the elements of First Matrix: "
);
for
(i = 0; i < row2; i++) {
for
(j = 0; j < col2; j++) {
printf
(
"\nB[%d][%d]: "
, i, j);
scanf
(
"%d"
, &B[i][j]);
printf
(
"%d"
, B[i][j]);
}
}
// Print the Matrix A
printf
(
"\n\nFirst Matrix: \n"
);
printMatrix(A, row1, col1);
// Print the Matrix B
printf
(
"\nSecond Matrix: \n"
);
printMatrix(B, row2, col2);
// Find the product of the 2 arrays
multiplyMatrix(row1, col1, A, row2, col2, B);
return
0;
}
Producción:Enter the number of rows of First Matrix: 2 Enter the number of columns of First Matrix: 3 Enter the elements of First Matrix: A[0][0]: 1 A[0][1]: 2 A[0][2]: 3 A[1][0]: 4 A[1][1]: 5 A[1][2]: 6 Enter the number of rows of Second Matrix: 3 Enter the number of columns of Second Matrix: 2 Enter the elements of First Matrix: B[0][0]: 1 B[0][1]: 2 B[1][0]: 3 B[1][1]: 4 B[2][0]: 5 B[2][1]: 6 First Matrix: 1 2 3 4 5 6 Second Matrix: 1 2 3 4 5 6 Resultant Matrix: 22 28 49 64
- Escriba un programa para ordenar una array de enteros en orden ascendente .
// C program for implementation of selection sort
#include <stdio.h>
void
swap(
int
* xp,
int
* yp)
{
int
temp = *xp;
*xp = *yp;
*yp = temp;
}
void
selectionSort(
int
arr[],
int
n)
{
int
i, j, min_idx;
// One by one move boundary of unsorted subarray
for
(i = 0; i < n - 1; i++) {
// Find the minimum element in unsorted array
min_idx = i;
for
(j = i + 1; j < n; j++)
if
(arr[j] < arr[min_idx])
min_idx = j;
// Swap the found minimum element with the first element
swap(&arr[min_idx], &arr[i]);
}
}
/* Function to print an array */
void
printArray(
int
arr[],
int
size)
{
int
i;
for
(i = 0; i < size; i++)
printf
(
"%d "
, arr[i]);
printf
(
"\n"
);
}
// Driver program to test above functions
int
main()
{
int
arr[] = { 64, 25, 12, 22, 11 };
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
selectionSort(arr, n);
printf
(
"Sorted array: \n"
);
printArray(arr, n);
return
0;
}
Producción:
Sorted array: 11 12 22 25 64
- ¿Qué es una cuerda ? También explique las diferentes funciones de string . Escriba una función definida por el usuario para comparar dos strings en las que sean idénticas o no.
Las strings se definen como una array de caracteres. La diferencia entre una array de caracteres y una string es que la string termina con un carácter especial ‘\0’.
Declarar una string es tan simple como declarar una array unidimensional. A continuación se muestra la sintaxis básica para declarar una string en el lenguaje de programación C.
char str_name[size];
Algunas de las funciones de string más utilizadas son:
- strcat : la función strcat() agregará una copia de la string de origen al final de la string de destino.
- strchr : en C/C++, strrchr() es una función predefinida que se utiliza para el manejo de strings. cstring es el archivo de encabezado requerido para las funciones de string.
Esta función Devuelve un puntero a la última aparición de un carácter en una string.
El carácter cuya última aparición queremos encontrar se pasa como segundo argumento de la función y la string en la que tenemos que encontrar el carácter se pasa como primer argumento de la función. - strcmp : strcmp() es una función de biblioteca incorporada y se declara enel archivo de encabezado <string.h> . Esta función toma dos strings como argumentos y compara estas dos strings lexicográficamente.
- strcpy : strcpy() es una función de biblioteca estándar en C/C++ y se usa para copiar una string a otra. En C está presente en el archivo de encabezado string.h y en C++ está presente enencabezado cstring .
- strlen : La función strlen() calcula la longitud de una string determinada . La función strlen() se define enel archivo de encabezado string.h . No cuenta el carácter nulo ‘\0’.
- strncat : en C/C++, strncat() es una función predefinida que se utiliza para el manejo de strings. string.h es el archivo de encabezado requerido para las funciones de string.
Esta función agrega no más de n caracteres de la string a la que apunta src al final de la string a la que apunta dest más un carácter Nulo de terminación. El carácter inicial de string(src) sobrescribe el carácter nulo presente al final de string(dest). Por lo tanto, la longitud de la string (dest) se convierte en strlen (dest) + n. Pero, si la longitud de string(src) es menor que n , solo se copia el contenido hasta el carácter nulo final y la longitud de string(dest) se convierte en strlen(src) + strlen(dest).
El comportamiento es indefinido si
- las cuerdas se superponen.
- la array dest no es lo suficientemente grande para agregar el contenido de src.
- La función strncmp : std::strncmp() compara lexicográficamente no más que contar caracteres de las dos strings terminadas en nulo y devuelve un número entero basado en el resultado.
- Esta función toma dos strings y un número num como argumentos y compara como máximo los primeros num bytes de ambas strings.
- num debe ser como máximo igual a la longitud de la string más larga. Si num se define mayor que la longitud de la string, la comparación se realiza hasta el carácter nulo (‘\ 0’) de cualquiera de las strings.
- Esta función compara lexicográficamente las dos strings. Comienza la comparación desde el primer carácter de cada string. Si son iguales entre sí, continúa y compara el siguiente carácter de cada string y así sucesivamente.
- Este proceso de comparación se detiene hasta que se alcanza un carácter nulo de terminación de cualquiera de las strings o el número de caracteres de ambas strings coincide.
- strncpy : la función strncpy() es similar a la función strcpy(), excepto que se copian como máximo n bytes de src. Si no hay ningún carácter NULL entre los primeros n caracteres de src, la string colocada en dest no terminará en NULL. Si la longitud de src es menor que n, strncpy() escribe caracteres NULL adicionales en dest para garantizar que se escriba un total de n caracteres.
- strrchr : la función strrchr() en C/C++ localiza la última aparición de un carácter en una string. Devuelve un puntero a la última aparición en la string. El carácter nulo de terminación se considera parte de la string C. Por lo tanto, también se puede ubicar para recuperar un puntero al final de una string. Se define enencabezado cstring .
Programa para verificar si dos strings son idénticas o no :
// C program to check if
// two strings are identical
#include <stdio.h>
#include <string.h>
int
main()
{
char
string1[100], string2[100];
// Get the strings which
// is to be checked
scanf
(
"%s"
, string1);
printf
(
"Enter the first string: %s"
, string1);
// Get the strings which
// is to be checked
scanf
(
"%s"
, string2);
printf
(
"\nEnter the second string: %s"
, string2);
// Check if both strings are equal
printf
(
"\nAre both strings same: "
);
if
(
strcmp
(string1, string2) == 0) {
printf
(
"Yes"
);
}
else
{
printf
(
"No"
);
}
return
0;
}
Producción:
Enter the first string: GeeksForGeeks Enter the second string: GeeksForGeeks Are both strings same: Yes
- Defina el concepto de puntero ? Defina también la asignación de memoria dinámica y sus diversas funciones.
Los punteros son representaciones simbólicas de direcciones. Permiten que los programas simulen llamadas por referencia, así como que creen y manipulen estructuras de datos dinámicas. Su declaración general en C/C++ tiene el formato:
Sintaxis:
datatype *var_name; int *ptr; //ptr can point to an address which holds int data
¿Cómo usar un puntero?
- Definir una variable de puntero
- Asignar la dirección de una variable a un puntero usando el operador unario (&) que devuelve la dirección de esa variable.
- Acceder al valor almacenado en la dirección mediante el operador unario (*) que devuelve el valor de la variable ubicada en la dirección especificada por su operando.
La razón por la que asociamos el tipo de datos a un puntero es que sabe en cuántos bytes se almacenan los datos . Cuando incrementamos un puntero, aumentamos el puntero por el tamaño del tipo de datos al que apunta.
Asignación de memoria dinámica en C : se puede definir como un procedimiento en el que el tamaño de una estructura de datos (como Array) se cambia durante el tiempo de ejecución.
C proporciona algunas funciones para lograr estas tareas. Hay 4 funciones de biblioteca proporcionadas por C definidas en el archivo de encabezado <stdlib.h> para facilitar la asignación de memoria dinámica en la programación de C. Están:
- malloc()
- llamar()
- libre()
- reasignar()
Veamos cada uno de ellos en detalle.
-
malloc()
El método «malloc» o «asignación de memoria» se utiliza para asignar dinámicamente un solo bloque grande de memoria con el tamaño especificado. Devuelve un puntero de tipo void que se puede convertir en un puntero de cualquier forma.
Sintaxis:
ptr = (cast-type*) malloc(byte-size) For Example: ptr = (int*) malloc(100 * sizeof(int)); Since the size of int is 4 bytes, this statement will allocate 400 bytes of memory. And, the pointer ptr holds the address of the first byte in the allocated memory.
Si el espacio es insuficiente, la asignación falla y devuelve un puntero NULL.
Ejemplo:
#include <stdio.h>
#include <stdlib.h>
int
main()
{
// This pointer will hold the
// base address of the block created
int
* ptr;
int
n, i, sum = 0;
// Get the number of elements for the array
n = 5;
printf
(
"Enter number of elements: %d\n"
, n);
// Dynamically allocate memory using malloc()
ptr = (
int
*)
malloc
(n *
sizeof
(
int
));
// Check if the memory has been successfully
// allocated by malloc or not
if
(ptr == NULL) {
printf
(
"Memory not allocated.\n"
);
exit
(0);
}
else
{
// Memory has been successfully allocated
printf
(
"Memory successfully allocated using malloc.\n"
);
// Get the elements of the array
for
(i = 0; i < n; ++i) {
ptr[i] = i + 1;
}
// Print the elements of the array
printf
(
"The elements of the array are: "
);
for
(i = 0; i < n; ++i) {
printf
(
"%d, "
, ptr[i]);
}
}
return
0;
}
Producción:Enter number of elements: 5 Memory successfully allocated using malloc. The elements of the array are: 1, 2, 3, 4, 5,
-
llamar()
El método «calloc» o «asignación contigua» se utiliza para asignar dinámicamente el número especificado de bloques de memoria del tipo especificado. Inicializa cada bloque con un valor predeterminado ‘0’.
Sintaxis:
ptr = (cast-type*)calloc(n, element-size); For Example: ptr = (float*) calloc(25, sizeof(float)); This statement allocates contiguous space in memory for 25 elements each with the size of float.
Si el espacio es insuficiente, la asignación falla y devuelve un puntero NULL.
Ejemplo:
#include <stdio.h>
#include <stdlib.h>
int
main()
{
// This pointer will hold the
// base address of the block created
int
* ptr;
int
n, i, sum = 0;
// Get the number of elements for the array
n = 5;
printf
(
"Enter number of elements: %d\n"
, n);
// Dynamically allocate memory using calloc()
ptr = (
int
*)
calloc
(n,
sizeof
(
int
));
// Check if the memory has been successfully
// allocated by malloc or not
if
(ptr == NULL) {
printf
(
"Memory not allocated.\n"
);
exit
(0);
}
else
{
// Memory has been successfully allocated
printf
(
"Memory successfully allocated using calloc.\n"
);
// Get the elements of the array
for
(i = 0; i < n; ++i) {
ptr[i] = i + 1;
}
// Print the elements of the array
printf
(
"The elements of the array are: "
);
for
(i = 0; i < n; ++i) {
printf
(
"%d, "
, ptr[i]);
}
}
return
0;
}
Producción:Enter number of elements: 5 Memory successfully allocated using calloc. The elements of the array are: 1, 2, 3, 4, 5,
-
libre()
El método «libre» se utiliza para desasignar dinámicamente la memoria. La memoria asignada mediante las funciones malloc() y calloc() no se desasigna por sí sola. Por lo tanto, se usa el método free() siempre que se lleva a cabo la asignación de memoria dinámica. Ayuda a reducir el desperdicio de memoria al liberarla.
Sintaxis:
free(ptr);
Ejemplo:
#include <stdio.h>
#include <stdlib.h>
int
main()
{
// This pointer will hold the
// base address of the block created
int
*ptr, *ptr1;
int
n, i, sum = 0;
// Get the number of elements for the array
n = 5;
printf
(
"Enter number of elements: %d\n"
, n);
// Dynamically allocate memory using malloc()
ptr = (
int
*)
malloc
(n *
sizeof
(
int
));
// Dynamically allocate memory using calloc()
ptr1 = (
int
*)
calloc
(n,
sizeof
(
int
));
// Check if the memory has been successfully
// allocated by malloc or not
if
(ptr == NULL || ptr1 == NULL) {
printf
(
"Memory not allocated.\n"
);
exit
(0);
}
else
{
// Memory has been successfully allocated
printf
(
"Memory successfully allocated using malloc.\n"
);
// Free the memory
free
(ptr);
printf
(
"Malloc Memory successfully freed.\n"
);
// Memory has been successfully allocated
printf
(
"\nMemory successfully allocated using calloc.\n"
);
// Free the memory
free
(ptr1);
printf
(
"Calloc Memory successfully freed.\n"
);
}
return
0;
}
Producción:Enter number of elements: 5 Memory successfully allocated using malloc. Malloc Memory successfully freed. Memory successfully allocated using calloc. Calloc Memory successfully freed.
-
reasignar()
El método de «reasignación» o «reasignación» se utiliza para cambiar dinámicamente la asignación de memoria de una memoria previamente asignada. En otras palabras, si la memoria previamente asignada con la ayuda de malloc o calloc es insuficiente, se puede usar realloc para reasignar memoria dinámicamente .
Sintaxis:
ptr = realloc(ptr, newSize); where ptr is reallocated with new size 'newSize'.
Si el espacio es insuficiente, la asignación falla y devuelve un puntero NULL.
Ejemplo:
#include <stdio.h>
#include <stdlib.h>
int
main()
{
// This pointer will hold the
// base address of the block created
int
* ptr;
int
n, i, sum = 0;
// Get the number of elements for the array
n = 5;
printf
(
"Enter number of elements: %d\n"
, n);
// Dynamically allocate memory using calloc()
ptr = (
int
*)
calloc
(n,
sizeof
(
int
));
// Check if the memory has been successfully
// allocated by malloc or not
if
(ptr == NULL) {
printf
(
"Memory not allocated.\n"
);
exit
(0);
}
else
{
// Memory has been successfully allocated
printf
(
"Memory successfully allocated using calloc.\n"
);
// Get the elements of the array
for
(i = 0; i < n; ++i) {
ptr[i] = i + 1;
}
// Print the elements of the array
printf
(
"The elements of the array are: "
);
for
(i = 0; i < n; ++i) {
printf
(
"%d, "
, ptr[i]);
}
// Get the new size for the array
n = 10;
printf
(
"\n\nEnter the new size of the array: %d\n"
, n);
// Dynamically re-allocate memory using realloc()
ptr =
realloc
(ptr, n *
sizeof
(
int
));
// Memory has been successfully allocated
printf
(
"Memory successfully re-allocated using realloc.\n"
);
// Get the new elements of the array
for
(i = 5; i < n; ++i) {
ptr[i] = i + 1;
}
// Print the elements of the array
printf
(
"The elements of the array are: "
);
for
(i = 0; i < n; ++i) {
printf
(
"%d, "
, ptr[i]);
}
free
(ptr);
}
return
0;
}
Producción:Enter number of elements: 5 Memory successfully allocated using calloc. The elements of the array are: 1, 2, 3, 4, 5, Enter the new size of the array: 10 Memory successfully re-allocated using realloc. The elements of the array are: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
Publicación traducida automáticamente
Artículo escrito por RishabhPrabhu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA