El manual de programación en C para principiantes

Aprenda los conceptos básicos de la programación en C desde cero con este manual completo. Cubre variables, tipos de datos, operadores, declaraciones de flujo de control, funciones, bibliotecas, API, depuración, pruebas e implementación.

C es uno de los lenguajes de programación más antiguos, conocidos e influyentes.

Se utiliza en muchas industrias porque es un lenguaje muy flexible y potente.

Aprender C es un esfuerzo que vale la pena, sin importar su punto de partida o sus aspiraciones, porque construye una base sólida en las habilidades que necesitará para el resto de su carrera en programación.

Le ayuda a comprender cómo funciona una computadora internamente, cómo almacena y recupera información y cómo se ve la arquitectura interna.

Dicho esto, C puede ser un lenguaje difícil de aprender, especialmente para principiantes, ya que puede resultar críptico.

Este manual tiene como objetivo enseñarle los fundamentos de la programación en C y está escrito pensando en el programador principiante.

No existen requisitos previos y no se asume ningún conocimiento previo de ningún concepto de programación.

Si nunca antes has programado y eres un completo principiante, has venido al lugar correcto.

Esto es lo que aprenderá en este manual:

  • Capítulo 1: Introducción a la programación en C
  • Capítulo 2: Variables y tipos de datos en C
  • Capítulo 3: Operadores en C
  • Capítulo 4: Declaraciones condicionales en C
  • Capítulo 5: Bucles en C
  • Capítulo 6: Matrices en C
  • Capítulo 7: Cuerdas en C
  • Aprendizaje adicional: Temas avanzados de C

Sin más preámbulos, ¡comencemos a aprender C!


Capítulo 1: Introducción a la programación en C

En este capítulo introductorio, aprenderá las principales características y casos de uso del lenguaje de programación C.

También aprenderá los conceptos básicos de la sintaxis de C y se familiarizará con la estructura general de todos los programas en C.

Al final del capítulo, habrá configurado un entorno de desarrollo para la programación en C de modo que pueda seguir los ejemplos de codificación de este libro en su máquina local.

Habrá escrito, compilado y ejecutado exitosamente su primer programa C simple que imprime el texto "¡Hola, mundo!" a la pantalla.

También habrá aprendido algunas características básicas del lenguaje C, como comentarios para documentar y explicar su código y secuencias de escape para representar caracteres no imprimibles en el texto.

¿Qué es la programación?

Las computadoras no son tan inteligentes.

Aunque pueden procesar datos incansablemente y realizar operaciones a muy alta velocidad, no pueden pensar por sí mismos. Necesitan que alguien les diga qué hacer a continuación.

Los humanos le dicen a las computadoras qué hacer y exactamente cómo hacerlo dándoles instrucciones detalladas y paso a paso a seguir.

Una colección de instrucciones detalladas se conoce como programa.

La programación es el proceso de escribir una colección de instrucciones que una computadora puede comprender y ejecutar para realizar una tarea específica y resolver un problema particular.

Se utiliza un lenguaje de programación para escribir las instrucciones.

Y los humanos que escriben las instrucciones y las suministran a la computadora se conocen como programadores.

Lenguajes de programación de bajo nivel versus alto nivel versus lenguajes de nivel medio: ¿cuál es la diferencia?

Hay tres tipos de lenguajes de programación: lenguajes de bajo nivel, lenguajes de alto nivel y lenguajes de nivel medio.

Los lenguajes de bajo nivel incluyen el lenguaje de máquina (también conocido como binario) y el lenguaje ensamblador.

Ambos lenguajes proporcionan poca o ninguna abstracción del hardware de la computadora. Las instrucciones del lenguaje están estrechamente relacionadas o corresponden directamente a instrucciones específicas de la máquina.

Esta "cercanía a la máquina" permite velocidad, eficiencia, menor consumo de memoria y control detallado sobre el hardware de la computadora.

El lenguaje de máquina es el nivel más bajo de los lenguajes de programación.

Las instrucciones constan de series de 0sys 1que corresponden directamente a la memoria de instrucciones y ubicaciones de una computadora en particular.

Las instrucciones también son ejecutadas directamente por el procesador de la computadora.

Aunque el lenguaje de máquina era el lenguaje elegido para escribir programas en los primeros días de la informática, no es un lenguaje legible por humanos y su escritura requiere mucho tiempo.

El lenguaje ensamblador permite al programador trabajar estrechamente con la máquina en un nivel ligeramente superior.

Utiliza mnemónicos y símbolos que corresponden directamente al conjunto de instrucciones de una máquina en particular en lugar de utilizar secuencias de 0s y 1s.

A continuación, los lenguajes de alto nivel, como Python y JavaScript, están muy alejados del conjunto de instrucciones de una arquitectura de máquina particular.

Su sintaxis se asemeja al idioma inglés, lo que hace que sea más fácil trabajar con ellos y comprenderlos.

Los programas escritos en lenguajes de alto nivel también son portátiles e independientes de la máquina. Es decir, un programa puede ejecutarse en cualquier sistema que admita ese idioma.

Dicho esto, tienden a ser más lentos, consumir más memoria y dificultar el trabajo con hardware y sistemas de bajo nivel debido a lo abstractos que son.

Por último, los lenguajes de nivel medio, como C y C++, actúan como un puente entre los lenguajes de programación de bajo y alto nivel.

Permiten cercanía y un nivel de control sobre el hardware de la computadora. Al mismo tiempo, también ofrecen un nivel de abstracción con instrucciones que son más legibles y comprensibles para los programadores.

¿Qué es el lenguaje de programación C?

C es un lenguaje de programación procedimental y de propósito general.

Un lenguaje de procedimientos es un tipo de lenguaje de programación que sigue un enfoque paso a paso para resolver un problema.

Utiliza una serie de instrucciones, también conocidas como procedimientos o funciones, que se ejecutan en un orden específico para realizar tareas y lograr objetivos. Estas instrucciones le dicen a la computadora paso a paso qué hacer y en qué orden.

Así, los programas en C se dividen en funciones más pequeñas y específicas que realizan una determinada tarea y se ejecutan secuencialmente, una tras otra, siguiendo un enfoque de arriba hacia abajo.

Esto promueve la legibilidad y el mantenimiento del código.

Una breve historia del lenguaje de programación C

C fue desarrollado a principios de la década de 1970 por Dennis Ritchie en AT&T Bell Laboratories.

El desarrollo de C estuvo estrechamente relacionado con el desarrollo del sistema operativo Unix en Bell Labs.

Históricamente, los sistemas operativos se escribían normalmente en lenguaje ensamblador y sin tener en cuenta la portabilidad.

Durante el desarrollo de Unix, existía la necesidad de un lenguaje de programación más eficiente y portátil para escribir sistemas operativos.

Dennis Ritchie creó un lenguaje llamado B, que fue una evolución de un lenguaje anterior llamado BCPL (lenguaje de programación combinado básico).

Su objetivo era cerrar la brecha entre las capacidades de bajo nivel de Assembly y los lenguajes de alto nivel utilizados en ese momento, como Fortran.

B no era lo suficientemente potente para soportar el desarrollo de Unix, por lo que Dennis Ritchie desarrolló un nuevo lenguaje que se inspiró en B y BCPL y tenía algunas características adicionales. Llamó a esta lengua C.

El diseño simple, la velocidad, la eficiencia, el rendimiento y la estrecha relación de C con el hardware de una computadora lo convirtieron en una opción atractiva para la programación de sistemas. Esto llevó a que el sistema operativo Unix fuera reescrito en C.

Características del lenguaje C y casos de uso

A pesar de que C es un lenguaje relativamente antiguo (en comparación con otros lenguajes de programación más modernos que se utilizan en la actualidad), ha resistido la prueba del tiempo y sigue siendo popular.

Según el índice TIOBE , que mide la popularidad de los lenguajes de programación cada mes, C es el segundo lenguaje de programación más popular en agosto de 2023.

Esto se debe a que C se considera la "madre de los lenguajes de programación" y es uno de los lenguajes más fundamentales de la informática.

La mayoría de los lenguajes modernos y populares que se utilizan hoy en día usan C bajo el capó o están inspirados en él.

Por ejemplo, la implementación y el intérprete predeterminados de Python, CPython, están escritos en C. Y lenguajes como C++ y C# son extensiones de C y proporcionan funcionalidad adicional.

Aunque C se diseñó originalmente teniendo en mente la programación de sistemas, se usa ampliamente en muchas otras áreas de la informática.

Los programas C son portátiles y fáciles de implementar, lo que significa que pueden ejecutarse en diferentes plataformas con cambios mínimos.

C también permite una manipulación y gestión de memoria directa y eficiente, lo que lo convierte en un lenguaje ideal para aplicaciones críticas para el rendimiento.

Y C proporciona abstracciones de nivel superior junto con capacidades de bajo nivel, lo que permite a los programadores tener un control detallado sobre los recursos de hardware cuando lo necesitan.

Estas características hacen de C un lenguaje ideal para crear sistemas operativos, sistemas integrados, utilidades de sistemas, dispositivos de Internet de las cosas (IoT), sistemas de bases de datos y varias otras aplicaciones.

C se usa prácticamente en todas partes hoy en día.

Cómo configurar un entorno de desarrollo para la programación en C en su máquina local

Para comenzar a escribir programas C en su máquina local, necesitará lo siguiente:

  • Compilador de CA
  • Un entorno de desarrollo integrado (IDE)

C es un lenguaje de programación compilado, como Go, Java, Swift y Rust.

Los lenguajes compilados son diferentes de los lenguajes interpretados, como PHP, Ruby, Python y JavaScript.

La diferencia entre lenguajes compilados e interpretados es que un lenguaje compilado se traduce directamente a código de máquina de una sola vez.

Este proceso lo realiza un programa especial llamado compilador.

El compilador lee el código fuente completo, lo comprueba en busca de errores y luego traduce todo el programa a código de máquina. Este es un lenguaje que la computadora puede entender y está directamente asociado con las instrucciones particulares de la computadora.

Este proceso crea un archivo ejecutable binario independiente que contiene secuencias de 0s y 1s, que es una forma más amigable para la computadora del código fuente inicial. Este archivo contiene instrucciones que la computadora puede entender y ejecutar directamente.

Un lenguaje interpretado, por otro lado, no se traduce a código de máquina de una sola vez y no produce un archivo ejecutable binario.

En cambio, un intérprete lee y ejecuta el código fuente una instrucción a la vez, línea por línea. El intérprete lee cada línea, la traduce a código de máquina y luego la ejecuta inmediatamente.

Si está utilizando Unix o un sistema similar a Unix, como macOS o Linux, probablemente ya tenga instalada la popular Colección de compiladores GNU (GCC) en su máquina.

Si está ejecutando cualquiera de esos sistemas operativos, abra la aplicación de terminal y escriba el siguiente comando:

gcc --version

Si está utilizando macOS y no ha instalado las herramientas de desarrollo de la línea de comandos, aparecerá un cuadro de diálogo pidiéndole que las instale, así que si ve eso, continúe y hágalo.

Si ya ha instalado las herramientas de línea de comandos, verá un resultado con la versión del compilador, que será similar al siguiente:

Apple clang version 14.0.0 (clang-1400.0.29.202)

Si está utilizando Windows, puede consultar Code::Blocks o considerar instalar Linux en Windows con WSL . Siéntase libre de elegir el entorno de programación que mejor se adapte a sus necesidades.

Un IDE es donde escribes, editas, guardas, ejecutas y depuras tus programas en C. Puedes considerarlo como un procesador de textos pero para escribir código.

Visual Studio Code es un excelente editor para escribir código y ofrece muchas funciones similares a IDE.

Es gratuito, de código abierto, admite muchos lenguajes de programación y está disponible para todos los sistemas operativos.

Una vez que haya descargado Visual Studio Code, instale la extensión C/C++ .

También es una buena idea habilitar el guardado automático seleccionando: "Archivo" -> "Guardar automáticamente".

Si desea obtener más información, puede consultar la documentación de Visual Studio Code para C/C++ .

Con su máquina local configurada, ¡está listo para escribir su primer programa en C!

Cómo escribir su primer programa C

Para comenzar, abra Visual Studio Code y cree una nueva carpeta para su programa C navegando a "Archivo" -> "Abrir" -> "Nueva carpeta".

Asigne un nombre a esta carpeta, por ejemplo, c-practicey luego seleccione "Crear" -> "Abrir".

Ahora debería tener la c-practicecarpeta abierta en Visual Studio Code.

Dentro de la carpeta que acaba de crear, cree un nuevo archivo C.

Mantenga presionada la Commandtecla y presione Nen macOS o mantenga presionada Controly presione Npara Windows/Linux para crear un Untitled-1archivo.

Mantenga presionada la Commandtecla y presione Sen macOS o mantenga presionada la Controltecla y presione Spara Windows/Linux, y guarde el archivo como un main.carchivo.

Finalmente, haga clic en "Guardar".

Asegúrese de guardar el archivo que creó con una .cextensión, o no será un archivo C válido.

Ahora debería tener main.cabierto el archivo que acaba de crear en Visual Studio Code.

A continuación, agregue el siguiente código:

#include <stdio.h>

int main(void) {

  // output 'Hello, world!' to the console

  printf("Hello, world!\n");
}

Repasemos cada línea y expliquemos qué está sucediendo en el programa.

¿Qué son los archivos de encabezado en C?

Comencemos con la primera línea #include <stdio.h>.

La #includeparte de #include <stdio.h>es un comando de preprocesador que le dice al compilador de C que incluya un archivo.

Específicamente, le dice al compilador que incluya el stdio.harchivo de encabezado.

Los archivos de encabezado son bibliotecas externas.

Esto significa que algunos desarrolladores han escrito algunas funciones y características que no están incluidas en el núcleo del lenguaje C.

Al agregar archivos de encabezado a su código, obtiene funciones adicionales que puede usar en sus programas sin tener que escribir el código desde cero.

El stdio.harchivo de encabezado significa entrada-salida estándar.

Contiene definiciones de funciones para operaciones de entrada y salida, como funciones para recopilar datos del usuario e imprimir datos en la consola.

Específicamente, proporciona funciones como printf()y scanf().

printf()Entonces, esta línea es necesaria para que funcione la función que tenemos más adelante en nuestro programa, .

Si no incluye el stdio.harchivo al principio de su código, el compilador no entenderá cuál printf()es la función.

¿ Cuál es la main()función en C?

A continuación, int main(void) {}se encuentra la función principal y el punto de partida de cada programa en C.

Es lo primero que se llama cuando se ejecuta el programa.

Todo programa en C debe incluir una main()función.

La intpalabra clave in int main(void) {}indica el valor de retorno de la main()función.

En este caso, la función devolverá un número entero.

Y la voidpalabra clave dentro de la main()función indica que la función no recibe argumentos.

Todo lo que esté dentro de las llaves, {}se considera el cuerpo de la función; aquí es donde incluye el código que desea escribir. Cualquier código escrito aquí siempre se ejecutará primero.

Esta línea actúa como modelo y punto de partida para todos los programas en C. Le permite a la computadora saber dónde comenzar a leer el código cuando ejecuta sus programas.

¿Qué son los comentarios en C?

En la programación C, los comentarios son líneas de texto que el compilador ignora.

Escribir comentarios es una forma de proporcionar información adicional y describir la lógica, el propósito y la funcionalidad de su código.

Los comentarios proporcionan una manera de documentar su código y hacerlo más legible y comprensible para cualquiera que lo lea y trabaje con él.

Tener comentarios en su código fuente también es útil para su futuro. Entonces, cuando vuelvas al código dentro de unos meses y no recuerdes cómo funciona, estos comentarios pueden ayudarte.

Los comentarios también son útiles para depurar y solucionar problemas. Puede comentar temporalmente líneas de código para aislar problemas.

Esto le permitirá ignorar una sección de código y concentrarse en el fragmento de código que está probando y en el que está trabajando sin tener que eliminar nada.

Hay dos tipos de comentarios en C:

  • Comentarios de una sola línea
  • Comentarios de varias líneas

Los comentarios de una sola línea comienzan con dos barras diagonales, //y continúan hasta el final de la línea.

Aquí está la sintaxis para crear un comentario de una sola línea en C:

// I am a single-line comment

El compilador ignora cualquier texto escrito después de las barras diagonales y en la misma línea.

Los comentarios de varias líneas comienzan con una barra diagonal, /seguida de un asterisco, *y terminan con un asterisco, seguido de una barra diagonal.

Como sugiere el nombre, abarcan varias líneas.

Ofrecen una forma de escribir explicaciones o notas un poco más largas dentro de su código y explicar con más detalle cómo funciona.

Aquí está la sintaxis para crear un comentario de varias líneas en C:

/*
This is
a multi-line
comment
*/

¿ Cuál es la printf()función en C?

Dentro del cuerpo de la función, la línea printf("Hello, World!\n");imprime el texto Hello, World!en la consola (este texto también se conoce como cadena).

Siempre que quieras mostrar algo, utiliza la printf()función.

Rodee el texto que desea mostrar entre comillas dobles ""y asegúrese de que esté dentro de los paréntesis de la printf()función.

El punto y coma, ;termina la declaración. Todas las declaraciones deben terminar con un punto y coma en C, ya que identifica el final de la declaración.

Puede pensar en un punto y coma similar a cómo un punto/punto finaliza una oración.

¿Qué son las secuencias de escape en C?

¿Notaste el \nal final de printf("Hello, World!\n");?

Se llama secuencia de escape, lo que significa que es un carácter que crea una nueva línea y le dice al cursor que se mueva a la siguiente línea cuando la ve.

En programación, una secuencia de escape es una combinación de caracteres que representa un carácter especial dentro de una cadena.

Proporcionan una manera de incluir caracteres especiales que son difíciles de representar directamente en una cadena.

Consisten en una barra invertida, \también conocida como carácter de escape, seguida de uno o más caracteres adicionales.

La secuencia de escape para un carácter de nueva línea es \n.

Otra secuencia de escape es \t. Representa \tun carácter de tabulación e insertará un espacio dentro de una cadena.

Cómo compilar y ejecutar su primer programa en C

En la sección anterior, escribiste tu primer programa en C:

#include <stdio.h>

int main(void) {

  // output 'Hello, world!' to the console

  printf("Hello, world!\n");
}

Cualquier código que escriba en el lenguaje de programación C se llama código fuente.

Su computadora no comprende ninguna de las declaraciones C que ha escrito, por lo que este código fuente debe traducirse a un formato diferente que la computadora pueda comprender. Aquí es donde resulta útil el compilador que instaló anteriormente.

El compilador leerá el programa y lo traducirá a un formato más cercano al idioma nativo de la computadora y hará que su programa sea adecuado para su ejecución.

Podrás ver el resultado de tu programa, que debería ser Hello, world!.

La compilación de un programa en C consta de cuatro pasos: preprocesamiento, compilación, ensamblaje y vinculación.

El primer paso es el preprocesamiento.

El preprocesador escanea el código fuente para encontrar directivas de preprocesador, que son líneas que comienzan con un #símbolo, como #include.

Una vez que el preprocesador encuentra estas líneas, las sustituye por otra cosa.

Por ejemplo, cuando el preprocesador encuentra la línea #include <stdio.h>, le #includeindica que incluya todo el código del stdio.harchivo de encabezado.

Entonces, reemplaza la #include <stdio.h>línea con el contenido real del stdio.harchivo.

El resultado de esta fase es una versión modificada del código fuente.

Después del preprocesamiento, el siguiente paso es la fase de compilación, donde el código fuente modificado se traduce al código ensamblador correspondiente.

Si hay algún error, la compilación fallará y deberá corregir los errores para continuar.

El siguiente paso es la fase de ensamblaje, donde el ensamblador convierte las declaraciones de código ensamblador generadas en instrucciones de código de máquina.

El resultado de esta fase es un archivo objeto que contiene las instrucciones del código de máquina.

El último paso es la fase de vinculación.

La vinculación es el proceso de combinar el archivo objeto generado en la fase de ensamblaje con las bibliotecas necesarias para crear el archivo binario ejecutable final.

Ahora, repasemos los comandos que debe ingresar para compilar su main.carchivo.

En Visual Studio Code, abra la terminal integrada seleccionando "Terminal" -> "Nueva Terminal".

Dentro de la terminal, ingrese el siguiente comando:

gcc main.c

La gccparte del comando se refiere al compilador de C y main.ces el archivo que contiene el código C que desea compilar.

A continuación, ingrese el siguiente comando:

ls

El lscomando enumera el contenido del directorio actual.

a.out  main.c

El resultado de este comando muestra un a.outarchivo: este es el archivo ejecutable que contiene las declaraciones del código fuente en sus correspondientes instrucciones binarias.

Es a.outel nombre predeterminado del archivo ejecutable creado durante el proceso de compilación.

Para ejecutar este archivo, ingrese el siguiente comando:

./a.out

Este comando le dice a la computadora que busque en el directorio actual, ./, un archivo llamado a.out.

El comando anterior genera el siguiente resultado:

Hello, world!

También tiene la opción de nombrar el archivo ejecutable en lugar de dejarlo con el a.outnombre predeterminado.

Supongamos que desea nombrar el archivo ejecutable helloWorld.

Si desea hacer esto, deberá ingresar el siguiente comando:

gcc -o helloWorld main.c

Este comando con la -oopción (que significa salida) le dice al gcccompilador que cree un archivo ejecutable llamado helloWorld.

Para ejecutar el nuevo archivo ejecutable que acaba de crear, ingrese el siguiente comando:

./helloWorld

Este es el resultado del comando anterior:

Hello, world!

Tenga en cuenta que cada vez que realiza un cambio en su archivo de código fuente, debe repetir el proceso de compilación y ejecución de su programa desde el principio para ver los cambios que realizó.

Capítulo 2: Variables y tipos de datos

En este capítulo, aprenderá los conceptos básicos de las variables y los tipos de datos: las unidades de almacenamiento fundamentales que le permiten conservar y manipular datos en sus programas.

Al final de este capítulo, sabrá cómo declarar e inicializar variables.

También habrá aprendido sobre varios tipos de datos disponibles en C, como números enteros, números de punto flotante y caracteres, que dictan cómo se procesa y almacena la información dentro de la memoria de un programa.

Finalmente, habrá aprendido cómo recibir entradas del usuario en sus programas y cómo usar constantes para almacenar valores que no desea que se cambien.

¿Qué es una variable en C?

Las variables almacenan diferentes tipos de datos en la memoria de la computadora y ocupan una cierta cantidad de espacio.

Al almacenar información en una variable, puede recuperarla y manipularla, realizar varios cálculos o incluso usarla para tomar decisiones en su programa.

Los datos almacenados reciben un nombre y así es como puedes acceder a ellos cuando los necesites.

Cómo declarar variables en C

Antes de poder utilizar una variable, debe declararla; este paso le permite al compilador saber que debe asignarle algo de memoria.

C es un lenguaje fuertemente tipado, por lo que para declarar una variable en C, primero debe especificar el tipo de datos que contendrá la variable, como un número entero para almacenar un número entero, un número de punto flotante para números con decimales, o un carácter para un solo carácter.

De esa manera, durante el tiempo de compilación, el compilador sabe si la variable es capaz de realizar las acciones para las que se propuso.

Una vez que haya especificado el tipo de datos, le dará un nombre a la variable.

La sintaxis general para declarar variables se parece a esta:

data_type variable_name;

Tomemos el siguiente ejemplo:

#include <stdio.h>

int main(void) {

    int age;
}

En el ejemplo anterior, declaré una variable denominada ageque contendrá valores enteros.

¿Cuáles son las convenciones de nomenclatura para variables en C?

Cuando se trata de nombres de variables, deben comenzar con una letra o un guión bajo.

Por ejemplo, agey _ageson nombres de variables válidos.

Además, pueden contener letras mayúsculas o minúsculas, números o un carácter de subrayado. No puede haber ningún otro símbolo especial además del guión bajo.

Por último, los nombres de las variables distinguen entre mayúsculas y minúsculas. Por ejemplo, agees diferente de Age.

Cómo inicializar variables en C

Una vez que haya declarado una variable, es una buena práctica inicializarla, lo que implica asignar un valor inicial a la variable.

La sintaxis general para inicializar una variable tiene este aspecto:

data_type variable_name = value;

El operador de asignación, =se utiliza para asignar el valueal variable_name.

Tomemos el ejemplo anterior y asignemos ageun valor:

#include <stdio.h>

int main(void) {

    int age;

    age = 29;
}

Inicialicé la variable ageasignándole un valor entero de 29.

Dicho esto, puedes combinar los pasos de inicialización y declaración en lugar de realizarlos por separado:

#include <stdio.h>

int main(void) {

    // declaration + initialization
    int age = 29;
}

Cómo actualizar valores de variables en C

Los valores de las variables pueden cambiar.

Por ejemplo, puede cambiar el valor de agesin tener que volver a especificar su tipo.

Así es como cambiarías su valor de 29a 30:

#include <stdio.h>

int main(void) {

    // the variable age with its original value
    int age = 29;

    // changing the value of age
    // the new value will be 30
    age = 30;
}

Tenga en cuenta que el tipo de datos del nuevo valor que se asigna debe coincidir con el tipo de datos declarado de la variable.

Si no es así, el programa no se ejecutará como se esperaba. El compilador generará un error durante el tiempo de compilación.

#include <stdio.h>

int main(void) {

    int age = 29;
    
    /*
    trying to assign a floating-point value
    to a variable with type int
    will cause an error in your program
    */
    age = 29.5;
}

¿Cuáles son los tipos de datos básicos en C?

Los tipos de datos especifican el tipo de forma que puede tener la información en los programas C. Y determinan qué tipo de operaciones se pueden realizar con esa información.

Hay varios tipos de datos integrados en C, como char, inty float.

Cada uno de los tipos de datos requiere una asignación de memoria diferente.

Antes de explorar cada uno con más detalle, primero repasemos la diferencia entre tipos de datos con y sin signo en C.

Los tipos de datos firmados pueden representar valores tanto positivos como negativos.

Por otro lado, los tipos de datos sin signo solo pueden representar valores no negativos (valores cero y positivos).

¿Se pregunta cuándo utilizar tipos de datos firmados y cuándo no firmados?

Utilice tipos de datos con signo cuando necesite representar valores positivos y negativos, como cuando trabaje con números que pueden tener variaciones positivas y negativas.

Y utilice tipos de datos sin signo cuando desee asegurarse de que una variable solo pueda contener valores no negativos, como cuando se trata de cantidades.

Ahora, veamos los tipos de datos C con más detalle.

¿ Cuál es el chartipo de datos en C?

El tipo de datos más básico en C es char.

Significa "carácter" y es uno de los tipos de datos más simples y fundamentales del lenguaje de programación C.

Se utiliza para almacenar un único carácter individual, como una letra mayúscula y minúscula del gráfico ASCII (Código estándar americano para el intercambio de información).

Algunos ejemplos de chars son 'a'y 'Z'.

También puede almacenar símbolos como '!'y dígitos como '7'.

A continuación se muestra un ejemplo de cómo crear una variable que contendrá un charvalor:

#include <stdio.h>

int main(void) {

    char initial = 'D';

 }

Observe cómo utilicé comillas simples alrededor del carácter único.

Esto se debe a que no puedes usar comillas dobles cuando trabajas con chars.

Se utilizan comillas dobles para cadenas.

En cuanto a la asignación de memoria, un signo charle permite almacenar números que van desde [-128 to 127] y utiliza al menos 1 byte (u 8 bits) de memoria.

Un carácter sin firmar almacena números que van desde [0 to 255].

¿ Cuál es el inttipo de datos en C?

An intes un número entero, que también se conoce como número entero.

Puede contener un valor positivo o negativo o 0, pero no puede contener números que contengan puntos decimales (como 3.5).

Algunos ejemplos de números enteros son 0, -3y 9.

Así es como se crea una variable que contendrá un intvalor:

#include <stdio.h>

int main(void) {

    int age = 29;
 }

Cuando declaras un int, la computadora asigna al menos 2 bytes (o 16 bits) de memoria.

Dicho esto, en la mayoría de los sistemas modernos, intnormalmente se asignan 4 bytes (o 32 bits) de memoria.

El rango de números disponibles para un signo intes [-32,768 to 32,767]cuando ocupa 2 bytes y [-2,147,483,648 to 2,147,483,647]cuando ocupa 4 bytes de memoria.

El rango de números para un sin firmar intno incluye ninguno de los números negativos en el rango mencionado para intlos s con signo.

Entonces, el rango de números para unigned intsque ocupan 2 bytes de memoria es [0 to 65,535]y el rango es [0 to 4,294,967,295]para aquellos que ocupan 4 bytes.

Para representar números más pequeños, puede utilizar otro tipo de datos: el short int. Normalmente ocupa 2 bytes (o 16 bits) de memoria.

Un signo short intpermite números en un rango de [-32,768 to 32,767].

Un sin firmar short intpermite números en un rango de [0 to 65,535].

Utilice a shortcuando desee trabajar con números enteros más pequeños o cuando la optimización de la memoria sea de vital importancia.

Si necesita trabajar con números enteros más grandes, también puede utilizar otros tipos de datos como long into long long int, que proporcionan un rango mayor y una mayor precisión.

Normalmente , A long intocupa al menos 4 bytes de memoria (o 32 bits).

Los valores para un long intrango con signo van desde [-2,147,483,648 to 2,147,483,647].

Y los valores para un long intrango sin firmar van desde [0 to 4,294,967,295].

El long long inttipo de datos puede utilizar números incluso mayores que un long int. Por lo general, ocupa 8 bytes (o 64 bits) de memoria.

Un firmado long long intpermite un rango de[-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807]

Y un sin firmar long long inttiene un rango de números desde [0 to 18,446,744,073,709,551,615].

¿ Cuál es el floattipo de datos en C?

El floattipo de datos se utiliza para contener números con un valor decimal (que también se conocen como números reales).

Tiene 4 bytes (o 32 bits) de memoria y es del tipo punto flotante de precisión simple.

Así es como se crea una variable que contendrá un floatvalor:

#include <stdio.h>

int main(void) {

   float temperature = 68.5;
 }

A doublees un valor de punto flotante y es el tipo de datos de punto flotante más utilizado en C.

Tiene 8 bytes (o 64 bits) de memoria y es del tipo punto flotante de doble precisión.

Así es como se crea una variable que contendrá un doublevalor:

#include <stdio.h>

int main(void) {

	double number = 3.14159;
 }

Al elegir qué tipo de datos de punto flotante usar, considere la compensación entre uso de memoria y precisión.

A floattiene menos precisión que a doublepero consume menos memoria.

Utilice a floatcuando el uso de la memoria sea un problema (por ejemplo, cuando trabaje con un sistema con recursos limitados) o cuando necesite realizar cálculos en los que la alta precisión no sea crítica.

Si necesita mayor precisión y exactitud para sus cálculos y el uso de memoria no es crítico, puede usar un archivo double.

¿Qué son los códigos de formato en C?

Los códigos de formato se utilizan en funciones de entrada y salida, como scanf()y printf(), respectivamente.

Actúan como marcadores de posición y sustitutos de variables.

Específicamente, especifican el formato esperado de entrada y salida.

Le dicen al programa cómo formatear o interpretar los datos que se pasan o se leen desde las funciones scanf()y .printf()

La sintaxis de los códigos de formato es el %carácter y el especificador de formato para el tipo de datos de la variable.

Tomemos el siguiente ejemplo:

#include<stdio.h>

int main(void)
{
	int age = 29;

	printf("My age is %i\n", age);  // My age is 29
}

En el ejemplo anterior, agees la variable del programa. Es de tipo int.

El código de formato (o marcador de posición) para valores enteros es %i. Esto indica que se debe imprimir un número entero.

En la salida del programa, %ise reemplaza con el valor de age, que es 29.

Aquí hay una tabla con los especificadores de formato para cada tipo de datos:

ESPECIFICADOR DE FORMATOTIPO DE DATOS
%Ccarbonizarse
%Ccarácter sin firmar
%identificaciónEn t
%enentero sin firmar
%en, %hdcorto int
%huint corto sin firmar
%li o %ldlargo int
% luint largo sin firmar
%lli o %lldlargo largo int
%luint largo largo sin firmar
%Fflotar
%lfdoble
%Lfdoble largo

Cómo recibir entradas del usuario utilizando la scanf()función

Anteriormente viste cómo imprimir algo en la consola usando la printf()función.

Pero, ¿qué sucede cuando desea recibir información del usuario? Aquí es donde scanf()entra la función.

La scanf()función lee la entrada del usuario, que normalmente se ingresa mediante un teclado.

El usuario ingresa un valor, presiona la tecla Enter y el valor se guarda en una variable.

La sintaxis general de uso scanf()es similar a la siguiente:

scanf("format_string", &variable);

Vamos a desglosarlo:

  • format_stringes la cadena que le permite a la computadora saber qué esperar. Especifica el formato esperado de la entrada. Por ejemplo, ¿es una palabra, un número o algo más?
  • &variablees el puntero a la variable donde desea almacenar el valor recopilado de la entrada del usuario.

Echemos un vistazo a un ejemplo scanf()en acción:

#include <stdio.h>

int main(void) {
  
  int number;

  printf("Please enter your age: ");
  
  scanf("%i", &number);

  printf("Your age is %i\n", number);
}

En el ejemplo anterior, primero tengo que incluir el stdio.harchivo de encabezado, que proporciona funciones de entrada y salida en C.

Luego, en la main()función, declaro una variable denominada numberque contendrá valores enteros. Esta variable almacenará la entrada del usuario.

Luego, le solicito al usuario que ingrese un número usando la printf()función.

A continuación, suelo scanf()leer y guardar el valor que ingresa el usuario.

El especificador de formato %ile permite saber a la computadora que debe esperar una entrada de número entero.

Tenga en cuenta también el &símbolo antes del nombre de la variable. Si olvida agregarlo, se producirá un error.

Por último, después de recibir la entrada, muestro el valor recibido en la consola usando otra printf()función.

¿Qué son las constantes en C?

Como vio anteriormente, los valores de las variables se pueden cambiar durante la vida de un programa.

Dicho esto, puede haber ocasiones en las que no desee que se cambie un valor. Aquí es donde las constantes resultan útiles.

En C, una constante es una variable con un valor que no se puede cambiar después de la declaración y durante la ejecución del programa.

Puede crear una constante de forma similar a como crea variables.

La diferencia entre constantes y variables es que con las constantes debes usar la constpalabra clave antes de mencionar el tipo de datos.

Y cuando trabaje con constantes, siempre debe especificar un valor.

La sintaxis general para declarar constantes en C es la siguiente:

const data_type constant_name = value;

Aquí, data_typerepresenta el tipo de datos de la constante, constant_namees el nombre que elige para la constante y valuees el valor de la constante.

También es una buena práctica utilizar todas las letras mayúsculas al declarar el nombre de una constante.

Veamos un ejemplo de cómo crear una constante en C:

#include <stdio.h>

int main(void) {

    const int LUCKY_NUM = 7;

    printf("My lucky number is: %i\n", LUCKY_NUM);
}

En este ejemplo, LUCKY_NUMse define como una constante con un valor de 7.

El nombre de la constante, LUCKY_NUMestá en letras mayúsculas, ya que se trata de una práctica recomendada y una convención que mejora la legibilidad del código y distingue las constantes de las variables.

Una vez definido no se puede modificar en el programa.

Si intenta cambiar su valor, el compilador de C generará un error indicando que está intentando modificar una constante.

#include <stdio.h>

int main(void) {

    const int LUCKY_NUM = 7;

    printf("My lucky number is: %i\n", LUCKY_NUM);

    LUCKY_NUM = 13; // this will cause an error

}

Capítulo 3: Operadores

Los operadores son componentes esenciales en todos los lenguajes de programación.

Le permiten realizar diversas operaciones con variables y valores utilizando símbolos.

Y le permiten comparar variables y valores entre sí para realizar cálculos de toma de decisiones.

En este capítulo, aprenderá sobre los operadores más comunes en la programación en C.

Primero aprenderá sobre los operadores aritméticos, que le permiten realizar cálculos matemáticos básicos.

Luego aprenderá sobre los operadores relacionales (también conocidos como operadores de comparación), que le ayudarán a comparar valores.

Y aprenderás sobre operadores lógicos, que te permiten tomar decisiones en función de condiciones.

Después de comprender estos operadores fundamentales, aprenderá sobre algunos operadores adicionales, como los operadores de asignación y los operadores de incremento y decremento.

Al final de este capítulo, tendrá una comprensión sólida de cómo utilizar diferentes operadores para manipular datos.

¿Qué son los operadores aritméticos en C?

Los operadores aritméticos se utilizan para realizar operaciones aritméticas básicas en tipos de datos numéricos.

Las operaciones incluyen suma, resta, multiplicación, división y cálculo del resto después de la división.

Estos son los principales operadores aritméticos en C:

OPERADOROPERACIÓN
+Suma
-Sustracción
*Multiplicación
/División
%Resto después de la división (módulo)

Veamos ejemplos de cada uno en acción.

Cómo utilizar el +operador de suma ( )

El operador de suma suma dos operandos y devuelve su suma.

#include <stdio.h>

int main(void) {

    int a = 5;

    int b = 3;

    int sum = a + b;

    printf("Sum: %i\n", sum); // Output: Sum: 8
}

Cómo utilizar el -operador de resta ( )

El operador de resta resta el segundo operando del primer operando y devuelve su diferencia.

#include <stdio.h>

int main(void) {

    int a = 10; 

    int b = 5;

    int difference = a - b;

    printf("Difference: %i\n", difference); // Output: Difference: 5
}

Cómo utilizar el *operador de multiplicación ( )

El operador de multiplicación multiplica dos operandos y devuelve su producto.

#include <stdio.h>

int main(void) {

    int a = 4;
    
    int b = 3;

    int product = a * b;

    printf("Product: %i\n", product); // Output: Product: 12
}

Cómo utilizar el /operador División ( )

El operador de división divide el primer operando por el segundo operando y devuelve su cociente.

#include <stdio.h>

int main(void) {

    int a = 10;
    
    int b = 2;

    int quotient = a / b;

    printf("Quotient: %i\n", quotient); // Output: Quotient: 5
}

Cómo utilizar el %operador Módulo ( )

El operador de módulo devuelve el resto del primer operando cuando se divide por el segundo operando.

#include <stdio.h>

int main(void) {

    int a = 10;
    
    int b = 3;

    int remainder = a % b;

    printf("Remainder: %i\n", remainder); // Output: Remainder: 1
}

El operador de módulo se usa comúnmente para determinar si un número entero es par o impar.

Si el resto de la operación es 1, entonces el número entero es impar. Si no hay resto, entonces el número entero es par.

¿Cuáles son los operadores relacionales en C?

Los operadores relacionales se utilizan para comparar valores y devolver un resultado.

El resultado es un valor booleano. Un valor booleano es true(representado por 1) o false(representado por 0).

Estos operadores se utilizan comúnmente en declaraciones de toma de decisiones, como ifdeclaraciones y whilebucles.

Estos son los operadores relacionales en C:

OPERADORNOMBRE DEL OPERADOR
==Igual a
!=No igual a
>Mas grande que
<Menos que
>=Mayor qué o igual a
<=Menos que o igual a

Veamos un ejemplo de cada uno en acción.

Cómo utilizar el ==operador igual a ( )

El operador igual a comprueba si dos valores son iguales.

Básicamente plantea la pregunta: "¿Son iguales estos dos valores?"

Tenga en cuenta que utiliza el operador de comparación (dos signos iguales – ==) y no el operador de asignación ( =) que se utiliza para asignar un valor a una variable.

#include <stdio.h>

int main(void) {

    int a = 5;

    int b = 5;
    
    int result = (a == b);

    printf("Result: %i\n", result); // Output: Result: 1
}

El resultado es 1(verdadero), porque ay bson iguales.

Cómo utilizar el !=operador No igual a ( )

El operador distinto de comprueba si dos valores NO son iguales.

#include <stdio.h>

int main(void) {

    int a = 5; 

    int b = 3;

    int result = (a != b);

    printf("Result: %i\n", result); // Output: Result: 1
}

El resultado es 1(verdadero), porque ay bno son iguales.

Cómo utilizar el >operador mayor que ( )

Este operador compara dos valores para comprobar si uno es mayor que el otro.

#include <stdio.h>

int main(void) {

    int a = 10;

    int  b = 5;

    int result = (a > b);

    printf("Result: %i\n", result); // Output: Result: 1
}

El resultado es 1(verdadero), porque aes mayor que b.

Cómo utilizar el <operador menor que ( )

Este operador compara dos valores para comprobar si uno es menor que el otro.

#include <stdio.h>

int main(void) {

    int a = 10;

    int b = 5;

    int result = (a < b);

    printf("Result: %i\n", result); // Output: Result: 0
}

El resultado es 0(falso), porque ano es menor que b.

Cómo utilizar el operador mayor o igual que ( )>=

Este operador compara dos valores para comprobar si uno es mayor o igual que el otro.

#include <stdio.h>

int main(void) {

    int a = 5;
    
    int  b = 5;

    int result = (a >= b);

    printf("Result: %i\n", result); // Output: Result: 1
}

El resultado es 1(verdadero), porque aes igual a b.

Cómo utilizar el operador menor o igual que ( )<=

Este operador compara dos valores para comprobar si uno es menor o igual al otro.

#include <stdio.h>

int main(void) {

    int a = 1;

    int b = 5;

    int result = (a <= b);

    printf("Result: %i\n", result); // Output: Result: 1
}

El resultado es 1(verdadero), porque aes menor que b.

Operadores logicos

Los operadores lógicos operan con valores booleanos y devuelven un valor booleano.

Estos son los operadores lógicos utilizados en C:

OPERADORNOMBRE DEL OPERADOR
&&Y lógico
||O lógico
!NO lógico

Entremos en más detalles sobre cada uno en las siguientes secciones.

Cómo utilizar el &&operador AND ( )

El operador lógico AND ( &&) comprueba si todos los operandos lo son true.

El resultado es truesólo cuando todos los operandos son true.

Aquí está la tabla de verdad para el &&operador AND ( ) cuando trabaja con dos operandos:

PRIMER OPERANDOSEGUNDO OPERANDORESULTADO
verdaderoverdaderoverdadero
verdaderoFALSOFALSO
FALSOverdaderoFALSO
FALSOFALSOFALSO

Tomemos el siguiente ejemplo:

El resultado de (10 == 10) && (20 == 20)es trueporque ambos operandos son true.

Veamos otro ejemplo:

El resultado de (10 == 20) && (20 == 20)es falseporque uno de los operandos es false.

Cuando el primer operando es false, el segundo operando no se evalúa (dado que no tiene sentido, ya se ha determinado que el primer operando es falso, por lo que el resultado solo puede ser false).

Cómo utilizar el ||operador O ( )

El ||operador lógico OR() comprueba si al menos uno de los operandos es true.

El resultado es truesólo cuando al menos uno de los operandos es true.

Aquí está la tabla de verdad para el ||operador OR () cuando trabaja con dos operandos:

PRIMER OPERANDOSEGUNDO OPERANDORESULTADO
verdaderoverdaderoverdadero
verdaderoFALSOverdadero
FALSOverdaderoverdadero
FALSOFALSOFALSO

Veamos un ejemplo:

El resultado de (10 == 20) || (20 == 20)es trueporque uno de los operandos es true.

Veamos otro ejemplo:

El resultado de (20 == 20) || (10 == 20)es trueporque uno de los operandos estrue

Si el primer operando es true, entonces el segundo operador no se evalúa.

Cómo utilizar el !operador NOT ( )

El operador lógico NOT ( !) niega el operando.

Si el operando es true, devuelve false.

Y si lo es false, vuelve true.

Es posible que desee utilizar el operador NOT cuando desee invertir el valor de una condición y devolver lo contrario de lo que evalúa la condición.

Aquí está la tabla de verdad para el !operador NOT( ):

OPERANDORESULTADO
verdaderoFALSO
FALSOverdadero

Veamos un ejemplo:

El resultado de !(10 == 10)es false.

La condición 10 == 10es true, pero el !operador la niega por lo que el resultado es false.

Y veamos otro ejemplo:

El resultado de !(10 == 20)es true.

La condición 10 == 20es falsa, pero el !operador la niega.

¿Qué es el operador de asignación en C?

El operador de asignación se utiliza para asignar un valor a una variable.

#include <stdio.h>

int main(void) {

    // declare an integer variable named num
    int num;
		
    // assign the value 10 to num
    num = 10;

    printf("num: %i\n", num); // Output: num: 10

}

En el ejemplo anterior, el valor 10se asigna a la variable nummediante el operador de asignación.

El operador de asignación funciona evaluando la expresión del lado derecho y luego almacenando su resultado en la variable del lado izquierdo.

El tipo de datos asignado debe coincidir con el tipo de datos de la variable.

Cómo utilizar operadores de asignación compuestos

Los operadores de asignación compuesta son notaciones abreviadas.

Le permiten modificar una variable realizando una operación en ella y luego almacenando el resultado de la operación nuevamente en la misma variable en un solo paso.

Esto puede hacer que su código sea más conciso y más fácil de leer.

Algunos operadores de asignación compuesta comunes en C incluyen:

  • +=: Suma y asignación
  • =: Resta y asignación
  • =: Multiplicación y asignación
  • /=: División y asignación
  • %=: Módulo y asignación

Veamos un ejemplo de cómo +=funciona el operador:

#include <stdio.h>

int main(void) {

  int num = 10;

  num += 5; 
 
  printf("Num: %i\n", num); // Num: 15
}

En el ejemplo anterior, creé una variable denominada numy le asigné un valor inicial de 10.

Luego quise incrementar la variable en 5. Para hacer esto, utilicé el +=operador compuesto.

La línea num += 5incrementa el valor de numen 5 y el resultado (15) se vuelve a almacenar numen un solo paso.

Tenga en cuenta que la num += 5;línea funciona exactamente igual que hacer num = num + 5, lo que significaría num = 10 + 5, pero con menos líneas de código.

¿Qué son los operadores de incremento y decremento en C?

Los operadores de incremento ++y decremento --incrementan y disminuyen una variable en uno, respectivamente.

Veamos un ejemplo de cómo utilizar el ++operador:

#include <stdio.h>

int main(void) {
  
  int num = 10;
  num++;

  printf("Num: %i\n", num); // Num: 11

}

El valor inicial de la variable numes 10.

Al utilizar el ++operador de incremento, el valor de numse establece en 11.

Esto es como actuar num = num + 1pero con menos código.

La abreviatura para disminuir una variable en uno es --.

Si quisieras disminuir numen uno, harías lo siguiente:

#include <stdio.h>

int main(void) {
  
  int num = 10;
  num--;

  printf("Num: %i\n", num); // Num: 9

}

El valor inicial de la variable numes 10.

Al utilizar el --operador de incremento, el valor de numahora se establece en 9.
Esto es como actuar num = num - 1.

Capítulo 4: Declaraciones condicionales

Todos los ejemplos que ha visto hasta ahora se ejecutan línea por línea, de arriba a abajo.

No son flexibles ni dinámicos y no se adaptan según el comportamiento del usuario o situaciones específicas.

En este capítulo, aprenderá cómo tomar decisiones y controlar el flujo de un programa.

Puedes establecer las reglas sobre lo que sucederá a continuación en tus programas estableciendo condiciones mediante declaraciones condicionales.

Las declaraciones condicionales toman una acción específica basada en el resultado de una comparación que tiene lugar.

El programa decidirá cuáles serán los próximos pasos en función de si se cumplen o no las condiciones.

Es posible que determinadas partes del programa no se ejecuten según los resultados o según determinadas entradas del usuario. El usuario puede tomar diferentes caminos dependiendo de las distintas bifurcaciones que surgen durante la vida de un programa.

Primero, aprenderá sobre la ifdeclaración, el elemento fundamental de la toma de decisiones en C.

También aprenderá sobre las declaraciones else ify elseque se agregan a la ifdeclaración para brindar flexibilidad adicional al programa.

Luego aprenderá sobre el operador ternario que le permite condensar la lógica de toma de decisiones en una sola línea de código y mejorar la legibilidad de su programa.

Cómo crear una ifdeclaración en C

La declaración condicional más básica en C es la ifdeclaración.

Toma una decisión basada en una condición.

Si la condición dada se evalúa truesolo entonces se ejecuta el código dentro del ifbloque.

Si la condición dada se evalúa como false, el código dentro del ifbloque se ignora y se omite.

La sintaxis general de una ifdeclaración en C es la siguiente:

if (condition) {
  // run this code if condition is true
}

Veamos un ejemplo:

#include <stdio.h>

int main(void) {

    // variable age
   int age;

   // prompt user to enter their age
   printf("Please enter your age: ");

   // store user's answer in the variable
   scanf("%i", &age);

    // check if age is less than 18
    // if it is, then and only then, print a message to the console

   if (age < 18) {
       printf("You need to be over 18 years old to continue\\n");
   }
}

En el código anterior, creé una variable llamada ageque contiene un valor entero.

Luego le pedí al usuario que ingresara su edad y almacené la respuesta en la variable age.

Luego, creé una condición que verifica si el valor contenido en la variable agees menor que 18.

Si es así, quiero que se imprima un mensaje en la consola informándole al usuario que para continuar, debe tener al menos 18 años de edad.

Cuando me preguntan mi edad y entro 16, obtengo el siguiente resultado:

#output

Please enter your age: 16
You need to be over 18 years old to continue

La condición ( age < 18) se evalúa para trueque se ejecute el código del ifbloque.

Luego, vuelvo a compilar y ejecutar el programa.

Esta vez, cuando me preguntan mi edad, digo que entro 28, pero no obtengo ningún resultado:

#output

Please enter your age: 28

Esto se debe a que la condición se evalúa y, por lo tanto , se omite falseel cuerpo del bloque.if

Tampoco he especificado qué debería pasar en el caso de que la edad del usuario sea mayor a 18 años.

Para especificar qué sucede en caso de que la edad del usuario sea mayor a 18 años, puedo usar una if elsedeclaración.

Cómo crear una if elsedeclaración en C

Puede agregar una elsecláusula a una ifdeclaración para proporcionar código que se ejecutará solo cuando la ifdeclaración se evalúe como false.

La if elsedeclaración significa esencialmente que " ifesta condición es verdadera, haz lo siguiente, elsehaz esto en su lugar".

Si la condición dentro del paréntesis se evalúa como , se ejecutará trueel código dentro del bloque.if

Pero si esa condición se evalúa como , se ejecutará falseel código dentro del bloque.else

La elsepalabra clave es la solución cuando la ifcondición es falsa y el código dentro del ifbloque no se ejecuta. Proporciona una alternativa.

La sintaxis general se ve así:

if (condition) {
  // run this code if condition is true
} else {
  // if the condition above is false, run this code
}

Ahora, revisemos el ejemplo de la sección anterior y especifiquemos qué debería suceder si la edad del usuario es mayor de 18 años:

#include <stdio.h>

int main(void) {
   int age;

   printf("Please enter your age: ");

   scanf("%i", &age);

 
    // if the condition in the parentheses is true the code inside the curly braces will execute
    // otherwise it is skipped
    // and the code in the else block will execute
    
   if (age < 18) {
       printf("You need to be over 18 years old to continue\n");
   } else {
      printf("You are over 18 so you can continue \n");
  }
  
   }

Si la condición es trueel código del ifbloque se ejecuta:

#output

Please enter your age: 14
You need to be over 18 years old to continue

Si la condición es que se omite falseel código del ifbloque y en su lugar se ejecuta el código del elsebloque:

#output

Please enter your age: 45
You are over 18 so you can continue

Cómo crear una else ifdeclaración en C

Pero ¿qué pasa cuando quieres tener más de una condición para elegir?

Si desea elegir entre más de una opción puede introducir una else ifdeclaración.

Una else ifdeclaración significa esencialmente que "Si esta condición es verdadera, haga lo siguiente. Si no lo es, haga esto en su lugar. Sin embargo, si nada de lo anterior es verdadero y todo lo demás falla, finalmente haga esto".

La sintaxis general se parece a la siguiente:

if (condition) {
   // if condition is true run this code
} else if(another_condition) {
   // if the above condition was false and this condition is true,
   // run the code in this block
} else {
   // if the two above conditions are false run this code
}

Veamos cómo else iffunciona una declaración.

Digamos que tiene el siguiente ejemplo:

#include <stdio.h>

int main(void) {
   int age;

   printf("Please enter your age: ");

   scanf("%i", &age);

   if (age < 18) {
       printf("You need to be over 18 years old to continue\n");
   }  else if (age < 21) {
       printf("You need to be over 21\n");
   } else {
      printf("You are over 18 and older than 21 so you can continue \n");
  }
  
   }

Si la primera ifafirmación es verdadera, el resto del bloque no se ejecutará:

#output

Please enter your age: 17
You need to be over 18 years old to continue

Si la primera ifafirmación es falsa, entonces el programa pasa a la siguiente condición.

Si eso es cierto, el código dentro del else ifbloque se ejecuta y el resto del bloque no se ejecuta:

#output

Please enter your age: 20
You are need to be over 21

Si las dos condiciones anteriores son todas falsas, entonces el último recurso es el elsebloque que se debe ejecutar:

#output

Please enter your age: 22
You are over 18 and older than 21 so you can continue 

Cómo utilizar el operador ternario en C

El operador ternario (también conocido como operador condicional) le permite escribir una if elsedeclaración con menos líneas de código.

Puede proporcionar una forma de escribir código más legible y conciso y resulta útil al escribir expresiones condicionales simples.

Querrá usarlo cuando tome decisiones simples y desee mantener su código conciso y en una sola línea.

Sin embargo, es mejor ceñirse a una if-elsedeclaración regular cuando se trata de decisiones más complejas, ya que el operador ternario podría dificultar la lectura del código.

La sintaxis general del operador ternario es similar a la siguiente:

condition ? expression_if_true : expression_if_false;

Vamos a desglosarlo:

  • conditiones la condición que desea evaluar. Esta condición se evaluará a cualquiera truedefalse
  • ?separa la condición de las dos posibles expresiones
  • expression_if_truese ejecuta si la conditionevaluación estrue
  • :separa el expression_if_truede elexpression_if_false
  • expression_if_falsese ejecuta si la conditionevaluación es false.

Echemos un vistazo a un ejemplo:

#include <stdio.h>

int main(void) {
  
    int x = 10;
    
    int y = (x > 5) ? 100 : 200;
    
    printf("x: %i\n", x); // x: 10
    
    printf("y: %i\n", y);  // y: 100
   }

En el ejemplo anterior, la condición es (x > 5).

Si xes mayor que 5, la condición se evalúa como true. Y cuando la condición sea true, el valor asignado yserá 100.

Si la condición se evalúa como false, el valor asignado a yserá 200.

Entonces, como xes mayor que 5 ( x = 10), yse le asigna el valor 100.

Capítulo 5: Bucles

En este capítulo aprenderá sobre los bucles, que son esenciales para automatizar tareas repetitivas sin tener que escribir el mismo código varias veces.

Los bucles le permiten ejecutar un bloque específico de instrucciones de código repetidamente una y otra vez hasta que se cumpla una determinada condición.

Aprenderá sobre los diferentes tipos de bucles, como los forbucles whiley do-while, comprenderá su sintaxis y cuándo debe usar cada uno.

También aprenderá sobre la breakdeclaración, que le permite controlar el flujo de ejecución dentro de los bucles de formas específicas.

Cómo crear un forbucle en C

Un forbucle le permite ejecutar un bloque de código repetidamente según una condición específica.

Es útil cuando sabes cuántas veces quieres repetir una determinada acción.

La sintaxis general de un forbucle es la siguiente:

for (initialization; condition; increment/decrement) {
    // Code to be executed in each iteration
}

Vamos a desglosarlo:

  • initializationes el paso donde inicializas una variable de control de bucle.
    Normalmente se utiliza para establecer el punto de partida del bucle.
  • conditiones la condición que se evalúa antes de cada iteración. Si la condición es true, el ciclo continúa. Si es así false, el ciclo termina. El bucle se ejecutará mientras la condición siga siendo verdadera.
  • increment/decrementes la parte responsable de cambiar la variable de control del bucle después de cada iteración. Puede ser un incremento ( ++), un decremento ( --), o cualquier otra modificación.
  • Code to be executed in each iterationes el bloque de código dentro del forcuerpo del bucle que se ejecuta en cada iteración si la condición es true.

Veamos un ejemplo de cómo forfunciona un bucle.

Supongamos que desea imprimir los números del 1 al 5 en la consola:

#include <stdio.h>

int main() {

    for (int i = 1; i <= 5; i++) {
        printf("Iteration %i\n", i);
    }
    
}

Producción:

Iteration 1
Iteration 2
Iteration 3
Iteration 4
Iteration 5

En el ejemplo anterior, primero inicializo la variable de control de bucle icon un valor de 1.

La condición i <= 5es verdadera, por lo que el cuerpo del bucle se ejecuta y "Iteration 1"se imprime.

Después de cada iteración, el valor de ise incrementa en 1. Entonces, ise incrementa a 2.

La condición sigue siendo la misma true, por lo que "Iteration 2"está impresa.

El bucle continuará mientras isea menor o igual a 5.

Cuando ise convierte en 6, la condición se evalúa como falsey el ciclo termina.

Cómo crear un whilebucle en C

Como vio en la sección anterior, un forbucle se utiliza cuando sabe el número exacto de iteraciones que desea que realice el bucle.

El whilebucle es útil cuando desea repetir una acción según una condición pero no sabe de antemano el número exacto de iteraciones.

Aquí está la sintaxis general de un whilebucle:

while (condition) {
    // Code to be executed in each iteration
}

Con un whilebucle, la condición se evalúa antes de cada iteración. Si la condición es true, el ciclo continúa. Si es falso, el ciclo termina.

El whilebucle continuará mientras la condición se evalúe como true.

Algo a tener en cuenta con whilelos bucles es que no se garantiza que el código en el cuerpo del bucle se ejecute ni siquiera una vez si no se cumple una condición.

Veamos un ejemplo de cómo whilefunciona un bucle:

#include <stdio.h>

int main() {

    int count = 1;
    
    while (count <= 5) {
    
        printf("Iteration %i\n", count);
        
        count++;
    }
    
}

Producción:

Iteration 1
Iteration 2
Iteration 3
Iteration 4
Iteration 5

En el ejemplo anterior, primero inicializo una variable countcon un valor de 1.

Antes de ejecutar cualquier código, el whilebucle comprueba una condición.

La condición count <= 5se truedebe a que el conteo es inicialmente 1. Entonces, el cuerpo del bucle se ejecuta y "Iteration 1"se imprime.

Luego, countse incrementa a 2.

La condición sigue siendo la misma true, por lo que "Iteration 2"está impresa.

El ciclo continuará mientras el recuento sea menor o igual a 5.

Este proceso continúa hasta que el recuento se convierte en 6, momento en el que la condición se convierte en false, y el ciclo termina.

Algo a tener en cuenta al trabajar con whilebucles es crear accidentalmente un bucle infinito:

#include <stdio.h> 

int main(void)
{

	while(true)
	{
		printf("Hello world");
	}
}

En este caso la condición siempre se evalúa como true.

Después de imprimir la línea de código dentro de las llaves, verifica continuamente si debe ejecutar el código nuevamente.

Como la respuesta siempre es sí (ya que la condición que necesita verificar es siempre verdadera cada vez), ejecuta el código una y otra vez.

La forma de detener el programa y escapar del bucle sin fin se ejecuta Ctrl Cen la terminal.

Cómo crear un do-whilebucle en C

whileComo se mencionó en la sección anterior, no se garantiza que el código en el cuerpo del bucle se ejecute al menos una vez si no se cumple la condición.

Un do-whilebucle ejecuta un bloque de código repetidamente mientras permanezca una condición true.

Sin embargo, a diferencia de un whilebucle, se garantiza que se ejecutará al menos una vez, independientemente de si la condición es trueo falsedesde el principio.

Por lo tanto, el do-whilebucle es útil cuando desea asegurarse de que el cuerpo del bucle se ejecute al menos una vez antes de verificar la condición.

La sintaxis general de un do-whilebucle es la siguiente:

do {
    // Code to be executed in each iteration
} while (condition);

Echemos un vistazo a un ejemplo que demuestra cómo do-whilefunciona un bucle:

#include <stdio.h>

int main() {

    int count = 1;
    
    do {
        printf("Iteration %i\n", count);
        
        count++;
        
    } while (count <= 5);

}

Producción:

Iteration 1
Iteration 2
Iteration 3
Iteration 4
Iteration 5

En el ejemplo anterior inicializo una variable countcon un valor de 1.

Un do-whilebucle primero hace algo y luego verifica una condición.

Entonces, el bloque de código dentro del bucle se ejecuta al menos una vez.

La cadena "Iteration 1"se imprime y luego countse incrementa a 2.

Luego se verifica la condición count <= 5y se evalúa como true, por lo que el ciclo continúa.

El ciclo continuará mientras countsea menor o igual a 5.

Después de la iteración donde countestá 6, la condición se convierte en falsey el ciclo termina.

Cómo utilizar la breakdeclaración en C

La breakdeclaración se utiliza para salir inmediatamente de un bucle y finalizar su ejecución.

Es una declaración de flujo de control que le permite interrumpir la ejecución normal del bucle y pasar al código después del bucle.

La breakdeclaración es especialmente útil cuando desea salir de un bucle en condiciones específicas, incluso si no se ha cumplido la condición de terminación del bucle.

Puede usarlo cuando encuentre un valor determinado o cuando se cumpla una condición específica.

A continuación se explica cómo utilizar una breakdeclaración en un bucle:

#include <stdio.h>

int main() {
    int target = 5;
    
    for (int i = 1; i <= 10; i++) {
        printf("Current value: %i\n", i);
        
        if (i == target) {
            printf("Target value reached. Exiting loop.\n");
            break; // Exit the loop
        }
    }
    
}

Producción:

Current value: 1
Current value: 2
Current value: 3
Current value: 4
Current value: 5
Target value reached. Exiting loop.

En el ejemplo anterior, un forbucle está configurado para iterar desde 1hasta 10.

Dentro del bucle, el valor actual de ise imprime en cada iteración.

También hay una ifdeclaración que verifica si el valor actual de icoincide con el valor objetivo, que está establecido en 5.

Si icoincide con el valor objetivo, ifse activa la declaración y se imprime un mensaje.

Como resultado, la breakdeclaración sale del bucle actual inmediata y prematuramente.

El programa continuará ejecutando el código que está después del bucle.

Capítulo 6: Matrices

Las matrices ofrecen una forma versátil y organizada de almacenar múltiples datos relacionados que están organizados en una secuencia ordenada.

Le permiten almacenar múltiples valores del mismo tipo de datos bajo un único identificador y realizar tareas repetitivas en cada elemento.

En este capítulo, aprenderá cómo declarar e inicializar matrices. También aprenderá cómo acceder a elementos individuales dentro de una matriz usando notación de índice y modificarlos.

Además, aprenderá a utilizar bucles para iterar a través de elementos de una matriz y realizar operaciones en cada elemento.

Cómo declarar e inicializar una matriz en C

Para declarar una matriz en C, primero especifica el tipo de datos de los elementos que almacenará la matriz.

Esto significa que puede crear matrices de tipo int, float, charetc.

Luego especifica el nombre de la matriz, seguido del tamaño de la matriz entre corchetes.

El tamaño de la matriz es la cantidad de elementos que puede contener. Este número debe ser un número entero positivo.

Tenga en cuenta que las matrices tienen un tamaño fijo y, una vez declaradas, no puede cambiarlas más adelante.

Aquí está la sintaxis general para declarar una matriz:

data_type array_name[array_size];

A continuación se explica cómo declarar una matriz de números enteros:

#include <stdio.h>

int main() {

   int grades[5];
}

En el ejemplo anterior, creé una matriz denominada gradesque puede almacenar 5 intnúmeros.

Después de declarar una matriz, puede inicializarla con valores iniciales.

Para hacer esto, use el operador de asignación, =seguido de llaves {},.

Las llaves encierrarán los valores y cada valor debe estar separado por una coma.

A continuación se explica cómo inicializar la gradesmatriz:

#include <stdio.h>

int main() {

   int grades[5] = {50, 75, 100, 67, 90};
}

Tenga en cuenta que la cantidad de valores debe coincidir con el tamaño de la matriz; de lo contrario, encontrará errores.

Algo a tener en cuenta aquí es que también puedes inicializar parcialmente la matriz:

#include <stdio.h>

int main() {

   int grades[5] = {50, 75, 100};
}

En este caso, los dos elementos restantes se establecerán en 0.

Otra forma de inicializar matrices es omitir la longitud de la matriz dentro de los corchetes y asignar solo los valores iniciales, así:

#include <stdio.h>

int main() {

   int grades[] = {50, 75, 100, 67, 90};
}

En este ejemplo, el tamaño de la matriz se 5debe a que le asigné 5valores.

Cómo encontrar la longitud de una matriz en C usando el sizeof()operador

El sizeofoperador resulta útil cuando necesitas calcular el tamaño de una matriz.

Veamos un ejemplo del sizeofoperador en acción:

#include <stdio.h>

int main() {

    int grades[] = {50, 75, 100, 67, 90};

    // calculate the size of the array
    int array_size = sizeof(grades);

    printf("Size of array: %i bytes\n", array_size);
}

Producción:

Size of array: 20 bytes

En el ejemplo anterior, sizeof(grades)calcula el tamaño total de la matriz en bytes.

En este caso, la matriz tiene cinco números enteros.

Como se mencionó en un capítulo anterior, en la mayoría de los sistemas modernos un intnormalmente ocupa 4 bytes de memoria. Por lo tanto, el tamaño total son 5 x 4 = 20bytes de memoria para toda la matriz.

Así es como puedes comprobar cuánta memoria intocupa cada uno usando el sizeofoperador:

#include <stdio.h>

int main() {
    
    int grades[] = {50, 75, 100, 67, 90};
    
    // calculate the size of a single array element
    int element_size = sizeof(grades[0]);
    
    printf("Size of a single element: %i bytes\n", element_size);

}

Producción:

Size of a single element: 4 bytes

Calcula sizeof(grades[0])el tamaño de un solo elemento en bytes.

Al dividir el tamaño total de la matriz por el tamaño de un solo elemento, puede calcular la cantidad de elementos en la matriz, que es igual a la longitud de la matriz:

#include <stdio.h>

int main() {
    
    int grades[] = {50, 75, 100, 67, 90};
    
     int array_size = sizeof(grades);
     
     int element_size = sizeof(grades[0]);
    
     // calculate the length of the array
     int length = array_size / element_size;

    printf("Length of the array: %i elements\n", length);

}

Producción:

Length of the array: 5 elements

Cómo acceder a elementos de matriz en C

Puede acceder a cada elemento de una matriz especificando su índice o su posición en la matriz.

Tenga en cuenta que en C, la indexación comienza en 0en lugar de 1.

Entonces, el índice del primer elemento es 0, el índice del segundo elemento es 1, y así sucesivamente.

El último elemento de una matriz tiene un índice de array_size - 1.

Para acceder a elementos individuales de la matriz, especifique el nombre de la matriz seguido del número de índice del elemento entre corchetes ( []).

array_name[index];

Echemos un vistazo al siguiente ejemplo:

#include <stdio.h>

int main() {

   int grades[] = {50, 75, 100, 67, 90};

   // Access each array element using index notation
    
   printf("Element at index 0: %i\n", grades[0]);  
    
   printf("Element at index 1: %i\n", grades[1]);  

   printf("Element at index 2: %i\n", grades[2]); 

   printf("Element at index 3: %i\n", grades[3]); 
    
   printf("Element at index 4: %i\n", grades[4]); 
}

Producción:

Element at index 0: 50
Element at index 1: 75
Element at index 2: 100
Element at index 3: 67
Element at index 4: 90

En el ejemplo anterior, para acceder a cada elemento de la matriz de números enteros grades, tengo que especificar el nombre de la matriz junto con la posición del elemento en la matriz entre corchetes.

Recuerde que el índice comienza en 0, por lo que grades[0]le da el primer elemento, grades[1]le da el segundo elemento, y así sucesivamente.

Tenga en cuenta que si intenta acceder a un elemento con un número de índice superior a array_size - 1, el compilador devolverá un número aleatorio:

#include <stdio.h>

int main() {

    int grades[] = {50, 75, 100, 67, 90};

    
    printf("Element at index 5: %d\n", grades[5]);  

}

Producción:

Element at index 5: 220312136

Cómo modificar elementos de una matriz en C

Una vez que sepa cómo acceder a los elementos de la matriz, podrá modificarlos.

La sintaxis general para modificar un elemento de matriz es la siguiente:

array_name[index] = new_value;

Puede cambiar el valor de un elemento asignándole un nuevo valor utilizando su índice.

Tomemos la gradesmatriz de antes:

#include <stdio.h>

int main() {

   int grades[] = {50, 75, 100, 67, 90};
}

Así es como cambiarías el valor 75a 85:

#include <stdio.h>

int main() {

   int grades[] = {50, 75, 100, 67, 90};
   
   grades[1] = 85; // changing the value at index 1 to 85
   
   printf("Element at index 1: %i\n", grades[1]); 
}

Producción:

Element at index 1: 85

Al modificar matrices, tenga en cuenta que el nuevo valor debe coincidir con el tipo de datos declarado de la matriz.

Cómo recorrer una matriz en C

Al recorrer una matriz, puede acceder y realizar operaciones en cada elemento de forma secuencial.

El forbucle se usa comúnmente para iterar a través de matrices.

#include <stdio.h>

int main() {

    int grades[] = {50, 75, 100, 67, 90};
    
    for (int i = 0; i < 5; i++) {
        printf("Element at index %i: %i\n", i, grades[i]);
    }
}

Producción:

Element at index 0: 50
Element at index 1: 75
Element at index 2: 100
Element at index 3: 67
Element at index 4: 90

Cuando se utiliza un forbucle para recorrer una matriz, debe especificar el índice como variable del bucle y luego usar el índice para acceder a cada elemento de la matriz.

Los %imarcadores de posición se reemplazan con el índice actual iy el valor de ese índice en la matriz de calificaciones, respectivamente.

También puedes usar un whilebucle para iterar a través de una matriz:

#include <stdio.h>

int main() {

    int grades[] = {50, 75, 100, 67, 90};
    
    int i = 0;
    
    while (i < 5) {
    
        printf("Element at index %i: %i\n", i, grades[i]);
        i++;
    }
}

Producción:

Element at index 0: 50
Element at index 1: 75
Element at index 2: 100
Element at index 3: 67
Element at index 4: 90

Cuando utilice un whilebucle para recorrer una matriz, necesitará una variable de índice, int i = 0para realizar un seguimiento de la posición actual en la matriz.

El bucle verifica la condición (i < 5)e imprime el índice de la calificación así como el valor de calificación real.

Después de que se muestra cada calificación, la variable iaumenta en uno y el ciclo continúa hasta que se muestran todas las calificaciones de la lista.

A do-whilefunciona de manera similar al whilebucle, pero es útil cuando desea asegurarse de que el cuerpo del bucle se ejecute al menos una vez antes de verificar la condición:

#include <stdio.h>

int main() {

     int grades[] = {50, 75, 100, 67, 90};

    int i = 0;
    
    do {
        printf("Element at index %i: %i\n", i, grades[i]);
        
        i++;
    } while (i < 5);
}

También puede utilizar el sizeofoperador para recorrer una matriz.

Este método es particularmente útil para garantizar que su bucle no exceda la longitud de la matriz:

#include <stdio.h>

int main() {

    int grades[] = {50, 75, 100, 67, 90};
    
    int length = sizeof(grades) / sizeof(grades[0]);

    for (int i = 0; i < length; i++) {
        printf("Element at index %i: %i\n", i, grades[i]);
    }

}

La línea int length = sizeof(grades) / sizeof(grades[0]);calcula la longitud de la gradesmatriz.

La longitud se calcula dividiendo el tamaño total (en bytes) de la matriz por el tamaño de un solo elemento grades[0]. El resultado se almacena en la lengthvariable.

Luego, el bucle recorre la matriz utilizando este lengthvalor.

Para cada iteración, imprime el índice iy el valor de la calificación en ese índice grades[i].

Capítulo 7: Cuerdas

En el capítulo anterior, aprendiste los conceptos básicos de las matrices en C.

Ahora es el momento de aprender sobre las cadenas, un tipo especial de matriz.

Las cadenas están en todas partes en la programación. Se utilizan para representar nombres, mensajes, contraseñas y más.

En este capítulo, aprenderá sobre las cadenas en C y cómo se almacenan como matrices de caracteres.

También aprenderá los fundamentos de la manipulación de cuerdas.

Específicamente, aprenderá cómo encontrar la longitud de una cadena y cómo copiar, concatenar y comparar cadenas en C.

¿Qué son las cadenas en C?

Una cadena es una secuencia de caracteres, como letras, números o símbolos, que se utilizan para representar texto.

En C, las cadenas son en realidad matrices de caracteres. Y cada carácter de la cadena tiene una posición específica dentro de la matriz.

Otra característica única de las cadenas en C es que al final de cada una hay un \0carácter oculto llamado "terminador nulo".

Este terminador le permite a la computadora saber dónde termina la cadena.

Entonces, la cadena ' Hello' en C se almacena como ' Hello\0' en la memoria.

Cómo crear cadenas en C

Una forma de crear una cadena en C es inicializar una matriz de caracteres.

La matriz contendrá los caracteres que componen la cadena.

Así es como inicializarías una matriz para crear la cadena 'Hola':

#include <stdio.h>

int main() {
  char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

}

Observe cómo especifiqué que la matriz debería almacenar 6caracteres a pesar de Hellotener solo 5caracteres. Esto se debe al operador nulo.

Asegúrese de incluir el terminador nulo, \0como último carácter para indicar el final de la cadena.

Veamos cómo crearías la cadena 'Hola mundo':

#include <stdio.h>

int main() {
  char phrase[12] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\0'};
}

En este ejemplo, hay un espacio entre la palabra "Hola" y la palabra "mundo".

Por lo tanto, la matriz debe incluir un carácter de espacio en blanco.

Para imprimir la cadena se utiliza la printf()función, el %scódigo de formato y el nombre del array:

#include <stdio.h>

int main() {
  char phrase[] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\0'};

  printf("%s\n", phrase);

}

Otra forma de crear una cadena en C es utilizar un literal de cadena.

En este caso, crea una matriz de caracteres y luego asigna la cadena encerrándola entre comillas dobles:

#include <stdio.h>

int main() {
  char word[] = "Hello";

}

Con cadenas literales, el terminador nulo ( \0) está implícito.

Crear cadenas con literales de cadena es más fácil, ya que no es necesario agregar el terminador nulo al final. Este método también es mucho más legible y requiere menos código.

Sin embargo, es posible que desee utilizar matrices de caracteres cuando desee modificar el contenido de la cadena. Los literales de cadena son de solo lectura, lo que significa que el contenido es fijo.

Cómo manipular cadenas en C

C proporciona funciones que le permiten realizar operaciones en cadenas, como copiar, concatenar y comparar, por nombrar algunas.

Para utilizar estas funciones, primero debe incluir el string.harchivo de encabezado agregando la línea #include <string.h>en la parte superior de su archivo.

Cómo encontrar la longitud de una cuerda en C

Para calcular la longitud de una cadena, use la strlen()función:

#include <stdio.h>
#include <string.h>

int main() {
  char phrase[] = "Hello";

  int length = strlen(phrase);

  printf("String length: %i\n", length);

}

Producción:

String length: 5

La strlen()función devolverá el número de caracteres que componen la cadena.

Tenga en cuenta que el resultado no incluye el terminador nulo \0.

Cómo copiar una cadena en C

Para copiar una cadena en otra, puede usar la strcpy()función.

Es posible que desee copiar una cadena en C cuando necesite realizar cambios sin modificarla. Resulta útil cuando necesita mantener intacto el contenido de la cadena original.

La sintaxis general de la strcpy()función es la siguiente:

strcpy(destination_string, original_string);

La strcpy()función copia original_stringen destination_string, incluido el terminador nulo ( '\0').

Una cosa a tener en cuenta aquí es que debe asegurarse de que la matriz de destino tenga suficiente espacio para la cadena original:

#include <stdio.h>
#include <string.h>

int main() {
  
    char original[] = "Hello";
  
    char destination[20]; // Make sure this array is big enough

    strcpy(destination, original);

    printf("Copied string: %s\n", destination);
}

Producción:

Copied string: Hello

La strcpy()función copia la cadena original en una matriz vacía y devuelve la cadena copiada, que también incluye el carácter terminador nulo ( '\0').

Cómo concatenar cadenas en C

Puede concatenar (agregar) dos cadenas usando la strcat()función.

La sintaxis general de la strcat()función se parece a la siguiente:

strcat(destination_string, original_string);

La strcat()función toma la originalcadena y la agrega al final de destinationla cadena.

Asegúrese de que destination_stringtenga suficiente memoria para el archivo original_string.

Algo a tener en cuenta aquí es que strcat()no crea una nueva cadena.

En cambio, modifica el original destination_string, incluyendo el original_stringal final.

Veamos un ejemplo de cómo strcat()funciona:

#include <stdio.h>
#include <string.h>

int main(void) {
    
  char greeting[50] = "Hello, ";
  
  char name[] = "Dionysia";

  strcat(greeting, name);

  printf("Message: %s\n", greeting);
  
}

Producción:

Message: Hello, Dionysia

Cómo comparar cadenas en C

Para comparar la igualdad de dos cadenas, puede utilizar la strcmp()función.

La sintaxis general de la strcmp()función es la siguiente:

strcmp(string1, string2);

La strcmp()función compara string1y string2devuelve un número entero.

Si el valor de retorno de strcmp()es 0, significa que las dos cadenas son iguales:

#include <stdio.h>
#include <string.h>

int main() {

  char word1[] = "apples";
  char word2[] = "apples";

  int result = strcmp(word1, word2);

  printf("Result: %i\n", result); // Result: 0

}

Si el valor de retorno de strcmp()es menor que 0, significa que la primera palabra viene antes de la segunda:

#include <stdio.h>
#include <string.h>

int main() {

  char word1[] = "apples";
  char word2[] = "bananas";

  int result = strcmp(word1, word2);

  printf("Result: %i\n", result); // Result: -1

}

Y si el valor de retorno de strcmp()es mayor que 0, entonces significa que la primera palabra viene después de la segunda:

#include <stdio.h>
#include <string.h>

int main() {

  char word1[] = "bananas";
  char word2[] = "apples";

  int result = strcmp(word1, word2);

  printf("Result: %i\n", result); // Result: 1

}

Aprendizaje adicional: Temas avanzados de C

Si bien este manual ha cubierto una amplia gama de temas, todavía hay mucho que aprender, ya que la programación es muy amplia.

Una vez que haya construido una base sólida con los conceptos básicos de la programación en C, es posible que desee explorar conceptos más avanzados.

Es posible que desees pasar a aprender sobre funciones, por ejemplo. Le permiten escribir instrucciones para una tarea específica y reutilizar ese código en todo su programa.

Es posible que también desee obtener información sobre los punteros. Los punteros en C son como flechas que muestran dónde se almacena una información específica en la memoria de la computadora.

Luego, quizás quieras pasar a aprender sobre estructuras. Son como contenedores de datos personalizados que le permiten agrupar diferentes tipos de información bajo un mismo nombre.

Por último, es posible que desees aprender a trabajar con archivos. Trabajar con archivos en C le permite leer y escribir en archivos. Esto es útil para tareas como guardar datos de usuario, leer ajustes de configuración o compartir datos entre diferentes programas.

Estas sugerencias no son una guía definitiva, solo algunas ideas para que continúe su viaje de aprendizaje de programación en C.

Si está interesado en obtener más información, puede consultar los siguientes recursos gratuitos de CodeCamp:

Conclusión

Esto marca el final de esta introducción al lenguaje de programación C.

Muchas gracias por seguir adelante y llegar hasta el final.

Aprendiste a trabajar con variables, varios tipos de datos y operadores.

También aprendiste a escribir bucles y sentencias condicionales. Y aprendiste los conceptos básicos del trabajo con matrices y cadenas.

Con suerte, ha adquirido una buena comprensión de algunos de los fundamentos de la programación en C, se ha inspirado en lo que debe aprender a continuación y está entusiasmado por continuar su viaje en programación.

¡Feliz codificación!

Fuente: https://www.freecodecamp.org

#c #programming 

1.05 GEEK