Comenzando con C

¿Qué es C ?

  • En 1972 , un gran informático, Dennis Ritchie , creó un nuevo lenguaje de programación llamado C en los laboratorios Bell .
  • Fue creado a partir del lenguaje de programación ALGOL , BCL y B.
  • Contiene todas las características de estos lenguajes y muchos más conceptos adicionales que lo hacen único de otros lenguajes de programación.
  • Es un poderoso lenguaje de programación que está fuertemente asociado con el sistema operativo UNIX y la mayoría de los sistemas operativos UNIX están codificados en lenguaje C.
  • Inicialmente, estaba limitado al sistema operativo UNIX , pero a medida que comenzó a extenderse por todo el mundo, se hizo comercial y se lanzaron muchos compiladores para sistemas multiplataforma .
  • Hoy en día, C se ejecuta en una variedad de sistemas operativos y plataformas de hardware.
  • A medida que comenzó a evolucionar, se lanzaron muchas versiones del lenguaje.
  • En ocasiones, a los desarrolladores les resultaba difícil mantenerse al día con la última versión, ya que los sistemas se ejecutaban con las versiones anteriores.
  • Para garantizar que el lenguaje C siga siendo el estándar, el Instituto Nacional Estadounidense de Estándares (ANSI) definió un estándar comercial para el lenguaje C en 1989 .
  • Posteriormente, fue aprobado por la Organización Internacional de Normalización (ISO) en 1990. El lenguaje de programación C también se denomina ANSI C.

Aplicaciones de C :

  • Es ampliamente utilizado para desarrollar aplicaciones de escritorio y para desarrollar navegadores y sus extensiones.
  • Chromium de Google está construido usando un lenguaje de programación C.
  • Es ampliamente utilizado en sistemas embebidos .
  • Se utiliza para desarrollar bases de datos. MySQL es el software de base de datos más popular que se construye usando C.
  • Se utiliza en el desarrollo de un sistema operativo como OS X de Apple , Windows de Microsoft y Symbian se desarrollan utilizando el lenguaje C.
  • Se utiliza para desarrollar sistemas operativos de escritorio y de teléfonos móviles .
  • Se utiliza para la producción de compiladores.
  • Es ampliamente utilizado en aplicaciones IoT .

Características de C :

  • C es un lenguaje de programación estructurado en el que el programa se divide en varios módulos.
  • C es un lenguaje de programación orientado a procedimientos.
  • C es un lenguaje de nivel medio.
  • Cada módulo se puede escribir por separado y juntos forman un solo programa en C. Esta estructura facilita los procesos de prueba, mantenimiento y depuración.
  • C contiene 32 palabras clave , varios tipos de datos y un conjunto de potentes funciones integradas que hacen que la programación sea muy eficiente.
  • El programa C contiene varias funciones que forman parte de una biblioteca. El programador puede agregar sus propias características y funciones a la biblioteca.
  • Estas funciones son accesibles y utilizadas en cualquier momento en el programa. Esta característica simplifica el trabajo con una programación compleja.
  • Es una opción popular para aplicaciones de nivel de sistema.

Trabajo de C :

  • C es un lenguaje compilado.
  • Un compilador es una herramienta especial que compila el programa y lo convierte en un archivo de objeto que es legible por máquina.
  • Después del proceso de compilación, el enlazador combinará diferentes archivos de objetos y creará un solo archivo ejecutable para ejecutar el programa.
  • El siguiente diagrama muestra la ejecución de un programa ‘C’:

Hoy en día, varios compiladores están disponibles en línea. La funcionalidad nunca diferirá y la mayoría de los compiladores proporcionarán las funciones necesarias para ejecutar los programas ‘C’ y ‘C++’. A continuación se muestra el nombre de dichos compiladores:

  • Compilador de sonido
  • Compilador MinGW (GNU minimalista para Windows)
  • Compilador C portátil
  • Turbo C

Programa 1:
A continuación se muestra el programa en C para imprimir Hello World:
 

C

// C program printing Hello World
 
// Pre-processor directive
#include <stdio.h>
 
// Driver Code
void main()
{
    // Print on the screen
    printf("Hello World");
 
    // Terminating function
    getch();
}
Producción: 

Hello World

 

Producción

Explicación:

  • Directiva de preprocesador 
    • #include es una directiva de preprocesador en C.
    • #include, stdio es la biblioteca donde se define la función printf() .
    • Se utiliza para generar salida. Antes de usar esta función, primero incluya el archivo requerido, también conocido como archivo de encabezado (.h).
  • Función principal: La función principal es una parte de cada programa C. Se puede representar de varias formas como: 
    • principal()
    • int principal()
    • vacío principal()
    • principal (vacío)
    • vacío principal (vacío)
    • int principal (vacío)
  • Los paréntesis vacíos indican que esta función no toma ningún argumento, valor o parámetro.
  • La palabra clave void significa que la función no devuelve ningún valor, en este caso, la última instrucción siempre es getch() .

Programa 2:
A continuación se muestra el programa C que imprime «Hello World»:
 

C

// C program printing Hello World
 
// Pre-processor directive
#include <stdio.h>
 
// Driver Code
int main()
{
    // Prints Hello World
    printf("Hello World");
 
    // Terminating function
    return 0;
}
Producción: 

Hello World

 

Explicación:

  • En el ejemplo anterior, la palabra clave int significa que la función devolverá un valor entero. En este caso, la última sentencia siempre debería devolver 0.
  • En el código fuente, después de que se haya declarado la función principal, especifique los paréntesis de apertura y cierre. Los corchetes { } indican el inicio y el final de un programa.
  • Estos corchetes deben colocarse siempre después de la función principal.
  • Todo el código del programa está escrito dentro de estos corchetes, como las partes declarativas y ejecutables.
  • La función printf genera la salida y «Hello World» se muestra en la consola.
  • El punto y coma; determina el final de la declaración. En C, cada declaración debe terminar con un punto y coma.

Pasos para ejecutar el programa C en CodeBlocks:
 

  • Cree un nuevo proyecto como se muestra a continuación: 
     

  • En la ventana emergente, primero seleccione el archivo, luego elija «Fuente C/C++» y haga clic en «Ir» como se muestra a continuación: 
     

  • Continúe haciendo clic en “siguiente”. 
     

  • Para crear el nuevo archivo, seleccione un archivo «C» y luego haga clic en el botón «Siguiente» para continuar. 
     

  • Establezca la ruta del archivo haciendo clic en el botón «…», la ventana del explorador permite la creación del archivo C. 
     

  • Seleccione la ruta de su nuevo archivo C, luego su nombre que tiene una extensión .c y guárdelo. 
     

  • Finalmente, para confirmar la creación del archivo C, haga clic en «Finalizar». 
     

  • Ingrese el código, guárdelo y compílelo haciendo clic en el botón «Build & Run».
     

Comentarios y sus tipos en el programa C:

Comentario: Un comentario es una explicación o descripción del código fuente del programa. Ayuda a un desarrollador a explicar la lógica del código y mejora la legibilidad del programa. En tiempo de ejecución, el compilador ignora un comentario.

Tipos de comentarios: 

  1. Comentario de una sola línea: Comentarios de una sola línea que utiliza una barra inclinada doble // dedicada a comentar líneas individuales
  2. Comentario de varias líneas: un comentario que comienza con un asterisco de barra inclinada /* y termina con una barra inclinada de asterisco */ y puede colocarse en cualquier lugar de su código, en la misma línea o en varias líneas.

Programa 1:

A continuación se muestra el programa C que ilustra el uso de comentarios de una sola línea:

C

// C program illustrating the
// use of single-line comment
 
#include <stdio.h>
 
// Driver Code
int main(void)
{
    // Single line comment
    printf("Geeks for Geeks");
 
    return 0;
}
Producción: 

Geeks for Geeks

 

Programa 2:

A continuación se muestra el programa C que ilustra el uso de comentarios de varias líneas:

C

// C program illustrating the
// use of multi-line comment
 
#include <stdio.h>
 
// Driver Code
int main()
{
    /* In main function
    programmer can write
    their principal code
    And this in several
    comments line */
 
    int x = 42;
    printf("%d", x);
    return 0;
}
Producción: 

42

 

Necesidad de comentarios:

  1. Un buen programador que escribe códigos entendidos por un humano es mejor que un programador que genera códigos entendidos solo por la máquina.
  2. Por lo tanto, se recomienda encarecidamente insertar comentarios en el código porque es una buena práctica de programación.
  3. Los comentarios no afectan a un programa porque el compilador los ignora.
  4. Los comentarios ayudan al desarrollador a comprender la lógica/algoritmo del código si lo revisa después de mucho tiempo.

Conjunto de caracteres:

  • Como cualquier otro idioma, ‘C’ también tiene su propio conjunto de caracteres .
  • Un programa es un conjunto de instrucciones que, cuando se ejecutan, generan una salida.
  • Los datos que procesa un programa consisten en varios caracteres y símbolos.
  • La salida generada también es una combinación de caracteres y símbolos.

Un compilador siempre ignora el uso de caracteres, pero se usa ampliamente para formatear los datos. A continuación se muestra el juego de caracteres en la programación ‘C’. Un conjunto de caracteres en C se divide en los siguientes tipos:
 

Un compilador siempre ignora el uso de caracteres, pero se usa ampliamente para formatear los datos. El siguiente es el conjunto de caracteres en la programación ‘C’:

  • Letras: Todos los caracteres en minúsculas y mayúsculas de la A a la Z.
  • Números: Todos los dígitos del 0 al 9.
  • Espacios en blanco: como espacio en blanco, nueva línea, retorno de carro y pestaña horizontal.
  • Caracteres especiales

ficha :

  • Token es la unidad más pequeña en un programa ‘C’.
  • Son todas y cada una de las palabras y signos de puntuación con los que te encuentras en el programa C.
  • El compilador divide un programa en las unidades más pequeñas posibles (tokens) y procede a las distintas etapas de la compilación.
  • Un token se divide en seis tipos diferentes, a saber, palabras clave, operadores, strings , constantes , caracteres especiales e identificadores.
     

Palabras clave e identificadores :

En ‘C’ cada palabra puede ser una palabra clave o un identificador.

  • Las palabras clave tienen significados fijos y el significado no se puede cambiar. Actúan como un bloque de construcción de un programa ‘C’. Hay un total de 32 palabras clave en ‘C’. Las palabras clave se escriben en minúsculas.
  • Un identificador no es más que un nombre asignado a un elemento en un programa.
    • Ejemplo: nombre de una variable, función, etc.
    • Los identificadores son los nombres definidos por el usuario que consisten en el conjunto de caracteres estándar ‘C’.
    • Como su nombre lo dice, los identificadores se utilizan para identificar un elemento particular en un programa.
    • Cada identificador debe tener un nombre único.
    • Se deben seguir las siguientes reglas para los identificadores:
      • El primer carácter siempre debe ser un alfabeto o un guión bajo.
      • Debe formarse usando solo letras, números o guiones bajos.
      • No se puede utilizar una palabra clave como identificador.
      • No debe contener ningún carácter de espacio en blanco.
      • El nombre debe ser significativo.
         

Resumen:

  • Un token es la unidad más pequeña de un programa.
  • Una palabra clave son palabras reservadas por idioma.
  • Hay un total de 32 palabras clave.
  • Un identificador se utiliza para identificar elementos de un programa.

Variables:

  • Una variable es un identificador que se utiliza para almacenar algún valor.
  • Las constantes nunca pueden cambiar en el momento de la ejecución.
  • Las variables pueden cambiar durante la ejecución de un programa y actualizar el valor almacenado en su interior.
  • Una sola variable se puede utilizar en varias ubicaciones de un programa.
  • Un nombre de variable debe ser significativo.
  • Debe representar el propósito de la variable.
  • Ejemplo: Altura, edad, son las variables significativas que representan el propósito para el que se está utilizando.
    • La variable de altura se puede utilizar para almacenar un valor de altura.
    • La variable edad se puede utilizar para almacenar la edad de una persona.
  • Una variable debe declararse primero antes de que se use en algún lugar dentro del programa.
  • Un nombre de variable se forma utilizando caracteres, dígitos y un guión bajo.
     

Las siguientes son las reglas que se deben seguir al crear una variable:

  1. Un nombre de variable debe constar únicamente de caracteres, dígitos y un guión bajo.
  2. Un nombre de variable no debe comenzar con un número.
  3. Un nombre de variable no debe constar de espacios en blanco.
  4. Un nombre de variable no debe consistir en una palabra clave.
  5. ‘C’ es un lenguaje que distingue entre mayúsculas y minúsculas, lo que significa que una variable llamada ‘edad’ y ‘EDAD’ son diferentes.
     

Tipos de datos : ‘C’ proporciona varios tipos de datos para facilitar que un programador seleccione un tipo de datos adecuado según los requisitos de una aplicación. Los siguientes son los tres tipos de datos:

  • Tipos de datos primitivos
  • Tipos de datos derivados
  • Tipos de datos definidos por el usuario
     

Los siguientes son cinco tipos de datos fundamentales primarios :

  • int para datos enteros
  • char para datos de caracteres
  • float para números de coma flotante
  • double para números de punto flotante de precisión doble
  • vacío

Tipos de datos derivados:

  • Arreglos, funciones, punteros, estructuras son tipos de datos derivados.
  • El lenguaje C proporciona versiones más extendidas de los tipos de datos primarios mencionados anteriormente.
  • Cada tipo de datos difiere entre sí en tamaño y rango.
  • La siguiente tabla muestra el tamaño y el rango de cada tipo de datos:

Tipos de datos

Tamaño

Rango

char o char firmado  1 -128 a 127
carácter sin firmar 1 0 a 0 255
int o firmado ent 2 -32768 a 32767
int sin firmar 2 0 a 65535
int corto o int corto sin signo 2 0 a 255
int corto firmado 2 -128 a 127
int largo o int largo con signo 4 -2147483648 al 2147483647
int largo sin firmar 4 0 al 4294967295
flotar 4 3.4E-38 a 3.4E+38

Sentencia condicional:

  • Las declaraciones condicionales en la programación C se utilizan para tomar decisiones basadas en las condiciones.
  • Se ejecuta secuencialmente cuando no hay ninguna condición alrededor de las declaraciones.
  • Si pone algunas condiciones para un bloque de declaraciones, el flujo de ejecución puede cambiar según el resultado evaluado por la condición. Este proceso se denomina toma de decisiones en ‘C.’
  • En la programación ‘C’, las sentencias condicionales son posibles con la ayuda de las siguientes dos construcciones:
    • Si declaración
    • Declaración if-else
  • También se denomina bifurcación, ya que un programa decide qué instrucción ejecutar en función del resultado de la condición evaluada.

Tipos de declaración condicional:

  • Si declaración
  • Operadores relacionales
  • La sentencia If-Else
  • Expresiones condicionales
  • Declaraciones If-else anidadas
  • Declaraciones Else-if anidadas
     

Si declaración:

  • Es una de las poderosas declaraciones condicionales.
  • La sentencia If se encarga de modificar el flujo de ejecución de un programa.
  • Siempre se usa con una condición.
  • La condición se evalúa primero antes de ejecutar cualquier declaración dentro del cuerpo de if.

Sintaxis:
             if(condición)
             {
                 instrucción;
            }

  • La condición se evalúa como verdadera o falsa.
  • Verdadero es siempre un valor distinto de cero y falso es un valor que contiene cero.
  • Las instrucciones pueden ser una sola instrucción o un bloque de código entre llaves {}.

A continuación se muestra el programa C que ilustra el uso de la instrucción if:

C

// C program illustrates the
// use of if statement
 
#include <stdio.h>
 
// Function to illustrate the if
// conditional statement
void if_demo()
{
    int num1 = 1;
    int num2 = 2;
 
    // Test Condition
    if (num1 < num2) {
        printf("num1 is smaller "
               "than num2");
    }
}
 
// Driver Code
int main()
{
    // Function Call
    if_demo();
 
    return 0;
}
Producción: 

num1 is smaller than num2

 

Explicación:

  • En el programa anterior, dos variables se inicializan con num1 , num2 con valores de 1 , 2 respectivamente.
  • Luego, usó la declaración if con una expresión de prueba para verificar qué número es el más pequeño y qué número es el más grande.
  • La expresión relacional se ha utilizado en si se construye. Dado que el valor de num1 es menor que num2 , la condición se evaluará como verdadera .
  • Así imprimirá la declaración dentro del bloque de If.
  • Después de eso, el control saldrá del bloque y el programa finalizará con un resultado exitoso.

Operadores relacionales: C tiene seis operadores relacionales que se pueden usar para formular una expresión booleana para tomar una decisión y probar las condiciones, que devuelve verdadero o falso, a continuación se muestran algunos de ellos:

  • < menos que
  • <= menor o igual que
  • > mayor que
  • >= mayor o igual que
  • == igual a
  • != no igual a

A continuación se muestra el programa C que ilustra el uso del operador relacional:

C

// C program to illustrate the
// use of relational operator
 
#include <stdio.h>
 
// Function illustrating use
// of relational operator
void relationalOperator()
{
    int x = 41;
    x = x + 1;
    if (x == 42) {
        printf("You succeed!");
    }
}
 
// Driver Code
int main()
{
    // Functional Call
    relationalOperator();
    return 0;
}
Producción: 

You succeed!

 

Sentencia If-Else : Es una versión extendida de If. A continuación se muestra el diagrama de flujo que representa la declaración if-else :

Sintaxis:
           if (prueba – expresión)
          {
              Bloque verdadero de declaración;
         }
       else
       { 
            bloque de sentencias falso;
      } Declaraciones;

  • En este tipo de declaración, si el valor de expresión-prueba es verdadero, entonces se ejecutará el bloque verdadero de declaraciones.
  • Si el valor de expresión-prueba es falso, entonces se ejecutará el bloque falso de declaraciones.
  • En cualquier caso, tras la ejecución, el control se trasladará automáticamente a las sentencias que aparezcan fuera del bloque de If.

A continuación se muestra el programa C que demuestra la declaración if-else:

C

// C program demonstrating the
// if-else statement
 
#include <stdio.h>
 
// Function showing use of if-else
void ifElseStatement()
{
    int num = 19;
    if (num < 10) {
        printf("The value is less"
               " than 10");
    }
    else {
        printf("The value is greater"
               " than 10");
    }
}
 
// Driver Code
int main()
{
    // Function Call
    ifElseStatement();
 
    return 0;
}
Producción: 

The value is greater than 10

 

Expresiones condicionales : hay otra forma de expresar una declaración if-else mediante la introducción deloperador ?: . En una expresión condicional, el operador ?: tiene solo una declaración asociada con if y else.

A continuación se muestra el programa C que demuestra la declaración condicional: 

C

// C program demonstrating the
// conditional statement
 
#include <stdio.h>
 
// Function demonstrating the
// conditional statement
void conditionalStatement()
{
    int y;
    int x = 2;
 
    // Conditional statement
    y = (x >= 6) ? 6 : x;
 
    printf("y =%d ", y);
}
 
// Driver Code
int main()
{
    // Function Call
    conditionalStatement();
 
    return 0;
}
Producción: 

y =2

 

Declaraciones If-else anidadas:

  • Cuando se requiere una serie de decisiones, se utiliza if-else anidado.
  • Anidar significa usar una construcción if-else dentro de otra.

A continuación se muestra el programa C que demuestra el uso de if-else anidado:

C

// C program demonstrating the
// use of nested if-else
 
#include <stdio.h>
 
// Function showing nested If else
void nestedIfElse()
{
    int num = 1;
    if (num < 10) {
        if (num == 1) {
            printf("The value is"
                   ":%d\n",
                   num);
        }
        else {
            printf("The value is "
                   "greater than 1");
        }
    }
    else {
        printf("The value is "
               "greater than 10");
    }
}
 
// Driver Code
int main()
{
    // Functional Call
    nestedIfElse();
 
    return 0;
}
Producción: 

The value is:1

 

  • El else-if anidado se usa cuando se requieren decisiones de rutas múltiples.

A continuación se muestra el programa en C que ilustra el uso de if-else anidado para la decisión de trayectos múltiples:

C

// C program illustrating the
// use of nested if-else for
// multipath decision
 
#include <stdio.h>
 
// Function illustrating the
// use of nested if-else for
// multipath decision
void multiPath()
{
    int marks = 83;
    if (marks > 75) {
        printf("First class");
    }
    else if (marks > 65) {
        printf("Second class");
    }
    else if (marks > 55) {
        printf("Third class");
    }
    else {
        printf("Fourth class");
    }
}
 
// Driver Code
int main()
{
    // Function Call
    multiPath();
 
    return 0;
}
Producción: 

First class

 

Bucles:

  • Un bucle ejecuta la secuencia de declaraciones muchas veces hasta que la condición establecida se vuelve falsa.
  • Un ciclo consta de dos partes, un cuerpo de un ciclo y una instrucción de control.
  • La declaración de control es una combinación de algunas condiciones que dirigen el cuerpo del bucle para que se ejecute hasta que la condición especificada se vuelva falsa.
  • El propósito del bucle es repetir el mismo código varias veces.
  • Existen principalmente 3 tipos de bucles, son los siguientes:
    • Mientras bucle
    • Bucle Do-While
    • En bucle

Declaración de cambio:

  • La declaración de cambio en C prueba el valor de una variable y lo compara con múltiples casos.
  • Una vez que se encuentra la coincidencia de caso, se ejecuta un bloque de declaraciones asociadas con ese caso en particular.
  • Cada caso en un bloque de un interruptor tiene un nombre/número diferente que se denomina identificador.
  • El valor proporcionado por el usuario se compara con todos los casos dentro del bloque del interruptor hasta que se encuentra la coincidencia.

Cuerda:

  • Una string en C no es más que una colección de caracteres en una secuencia lineal.
  • ‘C’ siempre trata una string como un solo dato aunque contenga espacios en blanco.
  • Un solo carácter se define mediante una representación de comillas simples.
  • Una string se representa mediante comillas dobles.

Clase de almacenamiento:

  • Una clase de almacenamiento representa la visibilidad y ubicación de una variable.
  • Indica desde qué parte del código podemos acceder a una variable.
  • Una clase de almacenamiento en C se usa para describir las siguientes cosas:
    • El ámbito variable.
    • La ubicación donde se almacenará la variable.
    • El valor inicializado de una variable.
    • Toda la vida de una variable.
    • ¿Quién puede acceder a una variable?
  • Por lo tanto, una clase de almacenamiento se utiliza para representar la información sobre una variable.

NOTA: Una variable no solo está asociada con un tipo de datos, su valor, sino también con una clase de almacenamiento.

Gestión de archivos: un archivo se puede utilizar para almacenar un gran volumen de datos persistentes.
Como muchos otros lenguajes, C proporciona las siguientes funciones de administración de archivos:

  • Creación de un archivo
  • Abriendo un archivo
  • leyendo un archivo
  • Escribir en un archivo
  • Cerrar un archivo

El proceso para crear un archivo:

  • Siempre que trabaje con un archivo, el primer paso es crear un archivo.
  • Un archivo no es más que espacio en una memoria donde se almacenan datos.
  • Para crear un archivo en un programa ‘C’ se utiliza la siguiente sintaxis:

ARCHIVO *fp;

fp = fopen («nombre_archivo», «modo»);

  • En la sintaxis anterior, el archivo es una estructura de datos que se define en la biblioteca estándar.
  • El fopen es una función estándar que se utiliza para abrir un archivo.
  • Si el archivo no está presente en el sistema, entonces se crea y luego se abre.
  • Si un archivo ya está presente en el sistema, entonces se abre directamente usando esta función.
  • fp es un puntero de archivo que apunta al archivo de tipo.
  • Siempre que abra o cree un archivo, especifique las operaciones que se van a realizar con el archivo.
  • Se puede crear o abrir un archivo en programación ‘C’ para fines de lectura/escritura.
  • Se utiliza un modo para especificar si desea abrir un archivo para cualquiera de los propósitos que se indican a continuación.

Los siguientes son los diferentes tipos de modos en la programación ‘C’ que se pueden usar mientras se trabaja con un archivo:

Descripción del modo de archivo :

  • r: Abre un archivo para leer. Si un archivo está en modo de lectura, no se elimina ningún dato si un archivo ya está presente en un sistema.
  • w: Abre un archivo para escribir. Si un archivo está en modo de escritura, se crea un nuevo archivo si no existe ningún archivo. Si un archivo ya está presente en un sistema, todos los datos dentro del archivo se truncan y se abre para fines de escritura.
  • a: Abra un archivo en modo de adición. Si un archivo está en modo de adición, se abre. El contenido dentro del archivo no cambia.
  • r+: Abierto para lectura y escritura desde el principio.
  • w+: Abierto para lectura y escritura, sobrescribiendo un archivo.
  • a+: Abierto para lectura y escritura, agregando al archivo.

En la sintaxis dada, el nombre de archivo y el modo se especifican como strings, por lo que siempre deben estar entre comillas dobles.

A continuación se muestra el fragmento de código C que muestra el uso del modo de archivo:

C

// C program to illustrate the use
// of file mode
#include <stdio.h>
 
// Driver Code
int main()
{
 
    FILE* fp;
 
    fp = fopen("data.txt", "w");
}
Producción: 

 

 

Producción:

A continuación se muestra el fragmento de código C que muestra la ruta donde el usuario desea crear el archivo:

C

// C program to illustrate to create
// the file where user want to create
#include <stdio.h>
 
// Driver Code
int main()
{
 
    // File Pointer
    FILE* fp;
    fp = fopen("D:// data.txt", "w");
}
Producción: 

 

 

Producción:

Cerrar un archivo :

  • Siempre se debe cerrar un archivo cada vez que finalizan las operaciones en el archivo.
  • Significa que el contenido y los enlaces al archivo están terminados.
  • Esto evita daños accidentales al archivo.
  • ‘C’ proporciona la función fclose para realizar la operación de cierre de archivos.
  • La sintaxis de fclose es la siguiente:

Sintaxis: fclose (file_pointer);
Ejemplo: ARCHIVO *fp;
               fp = fopen (“datos.txt”, “r”);
               fcerrar (fp);

  • La función fclose toma un puntero de archivo como argumento.
  • El archivo asociado con el puntero de archivo se cierra con la ayuda de la función fclose.
  • Devuelve 0 si el cierre fue exitoso y EOF (fin de archivo), si hay un error, se ha producido durante el cierre del archivo.

Escribir en un archivo:

  • En C, al escribir en un archivo, se deben agregar explícitamente los caracteres de nueva línea ‘\n’.
  • La biblioteca stdio ofrece las funciones necesarias para escribir en un archivo:
    • fputc(char, file_pointer): escribe un carácter en el archivo al que apunta file_pointer.
    • fputs(str, file_pointer): escribe una string en el archivo al que apunta file_pointer.
    • fprintf(file_pointer, str, variable_lists): Imprime una string en el archivo apuntado por file_pointer. La string puede incluir opcionalmente especificadores de formato y una lista de variables variables_lists.

A continuación se muestra el programa C que ilustra el uso de fputc():

C

// C program illustrating the use of
// fputc()
 
#include <stdio.h>
 
// Function to illustrate the use of
// fputc()
void fputc_func()
{
    int i;
    FILE* fptr;
    char fn[50];
    char str[] = "Hi my name is madhu\n";
 
    // "w" defines "writing mode"
    fptr = fopen("fputc_test.txt", "w");
    for (i = 0; str[i] != '\n'; i++) {
 
        // Write to file using the
        // fputc() function
        fputc(str[i], fptr);
    }
    fclose(fptr);
}
 
// Driver Code
int main()
{
    // Function Call
    fputc_func();
 
    return 0;
}
Producción: 

0x7fffb39a39fc
0x7fffb39a39fc

 

Producción:

Función:

  • La función en la programación C es un bloque de código reutilizable que hace que un programa sea más fácil de entender, probar y puede modificarse fácilmente sin cambiar el programa que lo llama.
  • Las funciones dividen el código y modularizan el programa para obtener mejores y más efectivos resultados.
  • En resumen, un programa más grande se divide en varios subprogramas que se denominan funciones.

punteros :

  • El Puntero en C es una variable que almacena la dirección de otra variable.
  • Un puntero también se puede utilizar para hacer referencia a otra función de puntero.
  • Un puntero se puede incrementar/disminuir, es decir, para apuntar a la ubicación de memoria siguiente/anterior.
  • El propósito del puntero es ahorrar espacio en la memoria y lograr un tiempo de ejecución más rápido.

Uso de punteros: si declara una variable v de tipo int, v almacenará un valor.
                            

              Declaración: int v = 0; 
                                  Donde v es igual a cero ahora.

  • Sin embargo, cada variable, además del valor, también tiene su dirección (o, simplemente, dónde se encuentra en la memoria).
  • La dirección se puede recuperar colocando un ampersand ( & ) antes del nombre de la variable.
  • Si imprime la dirección de una variable en la pantalla, se verá como un número totalmente aleatorio (además, puede ser diferente de una ejecución a otra).

Declarando un puntero:

  • Al igual que las variables, los punteros en la programación C deben declararse antes de que puedan usarse en el programa.
  • Los punteros pueden tener cualquier nombre siempre que obedezcan las reglas de nomenclatura de C.
  • Una declaración de puntero tiene la siguiente forma:

          Declaración: data_type * pointer_variable_name;

Inicializar un puntero:

  • Después de declarar un puntero, inicialícelo como variables estándar con una dirección variable.
  • Si los punteros en la programación C no se inicializan y no se utilizan en el programa, los resultados son impredecibles y potencialmente desastrosos.
  • Para obtener la dirección de una variable, use el operador ampersand (&), colocado antes del nombre de una variable cuya dirección se necesita.
  • La inicialización del puntero se realiza con la siguiente sintaxis:

Sintaxis: puntero = &variable; 

A continuación se muestra el programa C que ilustra la implementación del puntero
Programa 1:

C

// C program to illustrate the use
// of pointer
#include <stdio.h>
 
// Driver Code
void main()
{
    int a = 10;
    int* p = &a;
    printf("%p\n", &a);
    printf("%p\n", p);
}
Producción: 

0x7fff3aa3027c
0x7fff3aa3027c

 

Programa 2:
 

C

// C program to illustrate the concept
// of pointers in C
#include <stdio.h>
 
// Driver Code
void main()
{
    int a = 10;
 
    // Single Pointer
    int* p = &a;
 
    // Double Pointer
    int** q = &p;
    printf("%d\n", **q);
}
Producción: 

10

 

Ventajas de los punteros:

  • Los punteros son útiles para acceder a ubicaciones de memoria.
  • Los punteros proporcionan una forma eficiente de acceder a los elementos de una estructura de array.
  • Los punteros se utilizan tanto para la asignación de memoria dinámica como para la desasignación.
  • Los punteros se utilizan para formar estructuras de datos complejas, como listas enlazadas, gráficos, árboles, etc.

Desventajas de los punteros:

  • Los punteros son un poco complejos de entender.
  • Los punteros pueden provocar varios errores, como fallas de segmentación, o pueden acceder a una ubicación de memoria que no se requiere en absoluto.
  • Si se proporciona un valor incorrecto a un puntero, puede dañar la memoria.
  • Los punteros también son responsables de la pérdida de memoria.
  • Los punteros son comparativamente más lentos que los de las variables.
  • A los programadores les resulta muy difícil trabajar con los punteros; por lo tanto, es responsabilidad del programador manipular un puntero con cuidado.

Operadores bit a bit:

  • Los operadores bit a bit se utilizan para manipular datos a nivel de bit, también llamado programación a nivel de bit.
  • Bitwise opera en uno o más patrones de bits o números binarios al nivel de sus bits individuales.
  • Se utilizan en cálculos numéricos para acelerar el proceso de cálculo.

Bit a bit Y:

  • Este es uno de los operadores lógicos bit a bit más utilizados.
  • Se representa con un único signo de y comercial (&).
  • Se escriben dos expresiones enteras a cada lado del operador (&).
  • El resultado de la operación AND bit a bit es 1 si ambos bits tienen el valor 1; de lo contrario, el resultado siempre es 0.

Bit a bit O:

  • Está representado por un único signo de barra vertical (|).
  • Se escriben dos expresiones enteras a cada lado del operador (|).
  • El resultado de la operación OR bit a bit es 1 si al menos una de las expresiones tiene el valor 1; de lo contrario, el resultado siempre es 0.

Exclusivo bit a bit O:

  • Se representa con un símbolo (^).
  • Se escriben dos expresiones enteras a cada lado del operador (^).
  • El resultado de la operación OR exclusiva bit a bit es 1 si solo una de las expresiones tiene el valor de 1. De lo contrario, el resultado siempre es 0.

Operadores de desplazamiento bit a bit:

  • Los operadores de desplazamiento bit a bit se utilizan para mover/desplazar los patrones de bits hacia el lado izquierdo o derecho. Izquierda y derecha son dos operadores de desplazamiento provistos por ‘C’ que se representan de la siguiente manera:
    • Operando << n (Desplazamiento a la izquierda)
    • Operando >> n (Desplazamiento a la derecha)

Operador de complemento bit a bit:

  • El complemento Bitwise también se denomina operador de complemento, ya que siempre toma solo un valor o un operando.
  • Es un operador unario.
  • Al realizar el complemento en cualquier bit, todos los 1 se convierten en 0 y viceversa.
  • Si una expresión entera contiene 0000 1111 , después de realizar la operación de complemento bit a bit, el valor se convertirá en 1111 0000 .
  • El operador de complemento bit a bit se denota con el símbolo tilde (~) .

A continuación se muestra el programa C que ilustra el operador bit a bit:

C

// C program to illustrate the
// bitwise operator
 
#include <stdio.h>
 
// Function to illustrate the bitwise
// operator
void bitwiseOperator()
{
    // 48 = 0011 0000
    unsigned int x = 48;
    // 13 = 0000 1101
    unsigned int y = 13;
    int z = 0;
 
    // 0 = 0000 0000
    z = x & y;
    printf("Bitwise AND Operator "
           "- x & y = %d\n",
           z);
 
    // 61 = 0011 1101
    z = x | y;
    printf("Bitwise OR Operator "
           "- x | y = %d\n",
           z);
 
    // 61 = 0011 1101
    z = x ^ y;
    printf("Bitwise XOR Operator- "
           "x^y= %d\n",
           z);
 
    // -61 = 1100 0011
    z = ~x;
    printf("Bitwise One's Compliment "
           "Operator - ~x = %d\n",
           z);
 
    // 192 = 1100 0000
    z = x << 2;
    printf("Bitwise Left Shift Operator"
           " x << 2= %d\n",
           z);
 
    // 12 = 0000 1100
    z = x >> 2;
    printf("Bitwise Right Shift Operator "
           "x >> 2= %d\n",
           z);
}
 
// Driver Code
int main()
{
    // Function Call
    bitwiseOperator();
    return 0;
}
Producción: 

Bitwise AND Operator - x & y = 0
Bitwise OR Operator - x | y = 61
Bitwise XOR Operator- x^y= 61
Bitwise One's Compliment Operator - ~x = -49
Bitwise Left Shift Operator x << 2= 192
Bitwise Right Shift Operator x >> 2= 12

 

Trabajo de Gestión de Memoria:

  • Al declarar una variable utilizando un tipo de datos básico, el compilador de C asigna automáticamente espacio de memoria para la variable en un grupo de memoria llamado pila.
  • Por ejemplo, una variable flotante suele ocupar 4 bytes (según la plataforma) cuando se declara.
  • Puede verificar esta información utilizando el operador sizeof .

Asignación de memoria dinámica:

  • La asignación dinámica de memoria es la asignación manual y la liberación de memoria de acuerdo con sus necesidades de programación.
  • La memoria dinámica se administra y sirve con punteros que apuntan al espacio de memoria recién asignado en un área que se denomina montón.
  • Ahora puede crear y destruir una array de elementos dinámicamente en tiempo de ejecución sin ningún problema.
  • En resumen, la administración automática de memoria usa la pila y la asignación dinámica de memoria de C usa el montón.

malloc():

  • La función C malloc() representa la asignación de memoria.
  • Es una función que se utiliza para asignar un bloque de memoria de forma dinámica.
  • Reserva espacio de memoria del tamaño especificado y devuelve el puntero nulo que apunta a la ubicación de la memoria.
  • El puntero devuelto suele ser de tipo void.
  • Significa que podemos asignar la función C malloc() a cualquier puntero.

Sintaxis de malloc():
 ptr = (cast_type *) malloc (byte_size);

gratis():

  • La memoria para variables se desasigna automáticamente en tiempo de compilación.
  • En la asignación de memoria dinámica, desasignar memoria explícitamente.
  • Si no se hace, puede encontrar un error de falta de memoria.
  • Se llama a la función free() para liberar/desasignar memoria en C.
  • Al liberar memoria en su programa, hay más disponible para su uso posterior.

calloc():

  • La función C callao() significa asignación contigua.
  • Esta función se utiliza para asignar varios bloques de memoria.
  • Es una función de asignación de memoria dinámica que se utiliza para asignar la memoria a estructuras de datos complejas, como arrays y estructuras.
  • La función Malloc() se usa para asignar un solo bloque de espacio de memoria, mientras que calloc() en C se usa para asignar múltiples bloques de espacio de memoria.
  • Cada bloque asignado por la función calloc() tiene el mismo tamaño.

Sintaxis de calloc():         
 ptr = (cast_type *) calloc (n, tamaño);

realloc():

  • Usando la función C realloc(), agregue más tamaño de memoria a la memoria ya asignada.
  • Expande el bloque actual mientras deja el contenido original como está.
  • El realloc() en C significa reasignación de memoria.
  • realloc() también se puede usar para reducir el tamaño de la memoria previamente asignada.

Sintaxis de realloc():
 ptr = realloc (ptr, newsize);

Arrays dinámicas:

  • Una array dinámica en C permite que la cantidad de elementos crezca según sea necesario.
  • La array dinámica C se usa ampliamente en los algoritmos de informática.

A continuación se muestra el programa C que crea y cambia el tamaño de la array dinámica:

C

// C program to create and resize the
// dynamic array
#include <stdio.h>
 
// Function to create and resize the
// dynamic array
void dynamicArray()
{
    int* arr_dynamic = NULL;
    int elements = 2, i;
 
    arr_dynamic = calloc(
        elements,
        sizeof(int));
 
    for (i = 0; i < elements; i++)
        arr_dynamic[i] = i;
 
    for (i = 0; i < elements; i++)
        printf("arr_dynamic[%d]=%d\n",
               i, arr_dynamic[i]);
    elements = 4;
 
    arr_dynamic = realloc(
        arr_dynamic,
        elements * sizeof(int));
 
    printf("After realloc\n");
 
    for (i = 2; i < elements; i++)
        arr_dynamic[i] = i;
 
    for (i = 0; i < elements; i++)
        printf("arr_dynamic[%d]=%d\n",
               i, arr_dynamic[i]);
 
    // Free the memory
    free(arr_dynamic);
}
 
// Driver Code
int main()
{
    // Functional Call
    dynamicArray();
    return 0;
}
Producción: 

10
10

 

Explicación:

  • Se puede administrar dinámicamente la memoria creando bloques de memoria según sea necesario en el montón.
  • En la asignación de memoria dinámica de C, la memoria se asigna en tiempo de ejecución.
  • La asignación de memoria dinámica permite la manipulación de strings y arrays cuyo tamaño es flexible y se puede cambiar en cualquier momento en el programa.
  • Se requiere cuando uno no tiene idea de cuánta memoria va a ocupar una estructura en particular.
  • Malloc() en C es una función de asignación de memoria dinámica que representa la asignación de memoria que bloquea los bloques de memoria con el tamaño específico inicializado en un valor de basura
  • Calloc() en C es una función de asignación de memoria contigua que asigna múltiples bloques de memoria a la vez inicializados en 0
  • Realloc() en C se usa para reasignar la memoria de acuerdo con el tamaño especificado.
  • La función Free() se utiliza para borrar la memoria asignada dinámicamente.

TypeCasting: Typecasting es convertir un tipo de datos en otro. También se denomina conversión de datos o conversión de tipos. Es uno de los conceptos importantes introducidos en la programación ‘C’.

La programación ‘C’ proporciona dos tipos de operaciones de conversión de tipos:

  • Conversión de tipos implícita
  • Casting de tipo explícito

Conversión de tipos implícita:

  • La conversión implícita de tipos significa la conversión de tipos de datos sin perder su significado original.
  • Este tipo de encasillamiento es esencial cuando el tipo de datos cambia sin cambiar el significado de los valores almacenados dentro de la variable.
  • La conversión de tipo implícita ocurre automáticamente cuando un valor se copia a su tipo de datos compatible.
  • Durante la conversión, se aplican reglas estrictas para la conversión de tipos.
  • Si los operandos son de dos tipos de datos diferentes, un operando que tenga un tipo de datos más bajo se convierte automáticamente en un tipo de datos más alto.

A continuación se muestra el programa C que ilustra la conversión implícita de tipos:

C

// C program to illustrate the
// implicit type casting
#include <stdio.h>
 
// Function to show the implicit
// type casting
void implicitTypeCasting()
{
    short a = 10;
    int b;
 
    // Implicit type casting
    b = a;
 
    printf("%d\n", a);
    printf("%d\n", b);
}
 
// Driver Code
int main()
{
    // Function Call
    implicitTypeCasting();
 
    return 0;
}
Producción: 

10
10

 

Casting de tipo explícito:

  • Una conversión de tipo implícita, el tipo de datos se convierte automáticamente.
  • Hay algunos escenarios en los que el programador puede tener que forzar la conversión de tipos.
  • Supongamos una variable div que almacena la división de dos operandos que se declaran como un tipo de datos int.
  • En este caso, luego de la división realizada en las variables var1 y var2, el resultado almacenado en la variable “resultado” estará en formato entero.
  • Siempre que esto sucede, el valor almacenado en la variable “resultado” pierde su significado porque no considera la parte fraccionaria que normalmente se obtiene en la división de dos números.

resultado int, var1=10, var2=3;

resultado=var1/var2;

  • Para forzar la conversión de tipo en tales situaciones, usamos encasillamiento explícito.
  • Requiere un operador de fundición de tipos.

A continuación se muestra el programa C que demuestra la implementación de la conversión de tipos explícita:

C

// C program to demonstrate the use of
// explicit type-casting
 
#include <stdio.h>
 
// Function to demonstrate the use of
// explicit type-casting
void explicitTypeCasting()
{
    float a = 1.2;
 
    // Compiler will throw error
    int b = (int)a + 1;
 
    printf("Value of a is %f\n", a);
    printf("Value of b is %d\n", b);
}
 
// Driver Code
int main()
{
    // Function Call
    explicitTypeCasting();
 
    return 0;
}
Producción: 

Value of a is 1.200000
Value of b is 2

 

Explicación:

  • Typecasting también se llama conversión de tipo
  • Significa convertir un tipo de datos en otro.
  • La conversión de un tipo de datos más pequeño en uno más grande también se denomina promoción de tipo.
  • ‘C’ proporciona una forma implícita y explícita de conversión de tipos.
  • La conversión de tipo implícita opera automáticamente cuando se encuentra el tipo de datos compatible.
  • La conversión de tipos explícita requiere un operador de conversión de tipos.

Publicación traducida automáticamente

Artículo escrito por madhurireddy6055 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *