[Lenguaje C] Declaraciones de rama y declaraciones de bucle

[Lenguaje C] Declaraciones de rama y declaraciones de bucle

Clasificación de declaraciones en lenguaje C

Las declaraciones en lenguaje C se pueden dividir en las siguientes cinco categorías:

  1. declaración de expresión
  2. declaración de llamada de función
  3. declaración de control
  4. declaración compuesta
  5. declaración vacía

Entre ellos, las declaraciones de control se utilizan para controlar el flujo de ejecución del programa para implementar varios métodos estructurales del programa . Hay nueve tipos de declaraciones de control en lenguaje C. Se puede dividir en las siguientes tres categorías:

  1. Las declaraciones de juicio condicional también se denominan declaraciones de rama: declaraciones if, declaraciones de cambio;
  2. Declaraciones de ejecución en bucle: declaración do while, declaración while, declaración for;
  3. Declaraciones de giro: declaración de interrupción, declaración de ir a, declaración de continuación, declaración de devolución.

El lenguaje C es un lenguaje de programación estructurado , que incluye las siguientes estructuras:

  • Estructura secuencial: ejecuta el código en un orden predeterminado
  • Seleccionar estructura: seleccione una parte del código para ejecutar
  • Estructura de bucle: ejecuta el mismo fragmento de código repetidamente

imagen-20230820102122014

El lenguaje C utiliza declaraciones de rama para formar estructuras de selección y declaraciones de bucle para formar estructuras de bucle. Tanto las declaraciones de rama como las declaraciones de bucle son declaraciones de control .

declaración de sucursal

si estructura de sintaxis

La declaración if tiene las siguientes tres estructuras gramaticales:

  1. rama única
语法结构:
if(表达式)
    语句;
  • Si la expresión es verdadera, se ejecuta la declaración.
#include <stdio.h>

int main()
{
    
    
	int age = 16;
	if (age < 18) //表达式为真,输出未成年
		printf("未成年\n");
	return 0;
}
  1. doble rama
if(表达式)
    语句1;
else
    语句2;
  • Si la expresión es verdadera, se ejecuta la declaración 1.
  • Si la expresión es falsa, se ejecuta la declaración 2.
#include <stdio.h>

int main()
{
    
    
	int age = 20;
	if (age < 18) //表达式为假,输出成年
		printf("未成年\n"); 
	else
		printf("成年\n");
	return 0;
}
  1. múltiples sucursales
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;
  • Si la expresión 1 es verdadera, se ejecuta la declaración 1.
  • Si la expresión 2 es verdadera, se ejecuta la declaración 2.
  • Todas las expresiones anteriores son falsas y se ejecuta la declaración 3.
  • Se pueden utilizar múltiples else ifpara controlar múltiples ramas.
#include <stdio.h>

int main()
{
    
    
	int age = 59;
	if (age < 18)
		printf("未成年\n");
	else if (age >= 18 && age < 60) //该表达式为真,输出成年
		printf("成年\n");
	else
		printf("老年\n");
	return 0;
}

Reponer:

  • En lenguaje C, 0 significa falso y 1 significa verdadero.
  • No importa cuántas ramas haya en la estructura de sintaxis if, solo se puede seleccionar una rama para su ejecución.
  • if, else if, else solo puede controlar una declaración posterior. Si desea controlar varias declaraciones, debe usar {} para convertir la declaración en un bloque de código.

Puede haber varias declaraciones en un bloque de código. La estructura de uso de un bloque de código es la siguiente:

#include <stdio.h>
int main()
{
    
    
    if(表达式)
   {
    
    
        语句列表1}
    else
   {
    
    
        语句列表2}
    return 0;
}

Otras reglas coincidentes

else coincide con el if más cercano.

#include <stdio.h>

int main()
{
    
    
    int a = 0;
    int b = 2;
    if (a == 1)
        if (b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0; //没有输出
}

Dado que else coincide con el if más cercano, else coincide con la declaración if (b == 2), cuando la condición en if (a == 1) no es verdadera, la declaración de impresión no se ejecutará. Para mejorar la legibilidad del código, se recomienda modificarlo de la siguiente manera:

#include <stdio.h>

int main()
{
    
    
    int a = 0;
    int b = 2;
    if (a == 1)
    {
    
    
        if (b == 2)
            printf("hehe\n");
        else
            printf("haha\n");
    }
    return 0;
}

Las funciones de los dos códigos anteriores son las mismas, pero la legibilidad es diferente debido a los diferentes métodos de escritura.

declaración de cambio

La declaración de cambio también es una declaración de rama y se usa a menudo en situaciones de múltiples ramas.

La estructura de sintaxis principal de la declaración de cambio es la siguiente:

switch(整型表达式)
{
    
    
    case 整形常量表达式:
    语句;
    //...
}
  • Las expresiones enteras deben usarse como objetos de juicio en switch .
  • Las expresiones constantes enteras deben usarse como condiciones de juicio en caso .
  • La expresión entera en el cambio y la expresión entera constante en el caso se comparan y juzgan, y se realiza la selección para ingresar al caso correspondiente.
#include <stdio.h>

int main()
{
    
    
	int day = 0;
	scanf("%d", &day); //输入为4
	switch (day)
	{
    
    
	case 1:
		printf("星期一\n");
	case 2:
		printf("星期二\n");
	case 3:
		printf("星期三\n");
	case 4:
		printf("星期四\n");
	case 5:
		printf("星期五\n");
	case 6:
		printf("星期六\n");
	case 7:
		printf("星期天\n");
	}
	return 0;//输出为星期四 星期五 星期六 星期天
}

Aunque el día selecciona el caso 4 en el código anterior, dado que en este caso no hay control final, la instrucción de cambio se ejecutará secuencialmente y los casos 5, 6 y 7 también se ejecutarán.

interrupción en la declaración de cambio

La interrupción en la declaración de cambio puede dividir la lista de declaraciones en diferentes partes de rama.

#include <stdio.h>
int main()
{
    
    
	int day = 0;
	scanf("%d", &day);//输入为4
	switch (day)
	{
    
    
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期天\n");
		break;
	}
	return 0;//输出为星期四
}

Después de ejecutar la declaración en el caso 4, break controla el final de la situación, salta y finaliza la declaración de cambio.

predeterminado en la declaración de cambio

predeterminado significa todos los casos excepto el caso anterior.

#include <stdio.h>
int main()
{
    
    
	int day = 0;
	scanf("%d", &day); //输入8
	switch (day)
	{
    
    
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期天\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}
	return 0; //输出为输入错误
}

declaración de bucle

mientras bucle

La estructura de sintaxis del bucle while:

while(表达式)
	循环语句;
  • El bucle evalúa la expresión. Si la expresión es verdadera, se ejecuta la instrucción del bucle.
  • La expresión es falsa, finalizando el ciclo.
  • Cuando la declaración de bucle consta de varias declaraciones, se debe usar {} para convertirla en un bloque de código.
#include <stdio.h>

int main()
{
    
    
	int i = 0;
	while (i < 5)
	{
    
    
		printf("%d ", i);
		i++;
	}
	return 0; //输出 0 1 2 3 4
}

romper y continuar en el bucle while

break in while se utiliza para terminar el bucle de forma permanente. Siempre que se encuentre una interrupción en el bucle, todos los bucles posteriores se detendrán y el bucle finalizará directamente.

#include <stdio.h>

int main()
{
    
    
	int i = 0;
	while (i < 5)
	{
    
    
		if (i == 3)
			break;
		printf("%d ", i);
		i++;
	}
	return 0; //输出为 0 1 2
}

Cuando i = 3, la expresión while se considera verdadera y se ejecuta la instrucción de bucle, la expresión if se considera verdadera y se ejecuta la instrucción break para finalizar el bucle while.

continuar se usa para terminar este ciclo, es decir, el código después de continuar en este ciclo no se ejecutará nuevamente, sino que saltará directamente a la parte de juicio de la declaración while. Realizar el juicio de entrada para el siguiente ciclo.

#include <stdio.h>

int main()
{
    
    
	int i = 0;
	while (i < 5)
	{
    
    
		i++;
		if (i == 3)
			continue;
		printf("%d ", i);
	}
	return 0; //输出为 1 2 4 5
}

Cuando i=3, la expresión while se considera verdadera y se ejecuta la instrucción de bucle. La expresión if se considera verdadera. Se ejecuta la instrucción continue para terminar este bucle e ingresar al siguiente bucle.

Diagrama de flujo aproximado del bucle while:

imagen-20230820133359713

en bucle

La estructura de sintaxis del bucle for:

for(表达式1; 表达式2; 表达式3)
 循环语句;
  • La expresión 1 es la parte de inicialización, utilizada para inicializar variables de bucle.
  • La expresión 2 es la parte de juicio condicional, que se utiliza para juzgar la terminación del bucle.
  • La expresión 3 es la parte de ajuste, que se utiliza para ajustar las condiciones del bucle.
  • Cuando la declaración de bucle consta de varias declaraciones, se debe usar {} para convertirla en un bloque de código.
#include <stdio.h>

int main()
{
    
    
	int i = 0;
	for (i = 1; i < 10; i++)
	{
    
    
		printf("%d ", i);
	}
	return 0; //输出为 1 2 3 4 5 6 7 8 9
}

romper y continuar en el bucle for

romper y continuar también pueden aparecer en un bucle for y su significado es el mismo que en un bucle while.

#include <stdio.h>

int main()
{
    
    
	int i = 0;
	for (i = 1; i < 5; i++)
	{
    
    
		if (i == 3)
			break;
		printf("%d ", i);
	}
	return 0; //输出为 1 2
}

Cuando i = 3, la expresión for se considera verdadera y se ejecuta la instrucción de bucle, la expresión if se considera verdadera y se ejecuta la instrucción break para finalizar el bucle for.

#include <stdio.h>

int main()
{
    
    
	int i = 0;
	for (i = 1; i < 5; i++)
	{
    
    
		if (i == 3)
			continue;
		printf("%d ", i);
	}
	return 0; //输出为 1 2 4
}

Cuando i=3, la expresión for se considera verdadera y se ejecuta la instrucción de bucle. La expresión if se considera verdadera. Se ejecuta la instrucción continue para terminar el bucle actual e ingresar al siguiente bucle.

Diagrama de flujo aproximado del bucle for:

imagen-20230820140402568

Variantes de bucle for

#include <stdio.h>

int main()
{
    
    
	for (;;)
	{
    
    
		printf("hehe\n");
	}
	return 0; //死循环输出 hehe
}

La parte de inicialización, la parte de juicio y la parte de ajuste en el bucle for se pueden omitir. Omitirlas todas significa que la condición del bucle siempre será verdadera.

#include <stdio.h>

int main()
{
    
    
    int i = 0;
    int j = 0;
    for (i = 0; i < 10; i++)
    {
    
    
        for (j = 0; j < 10; j++)
        {
    
    
            printf("hehe\n");
        }
    }
    return 0; //输出为100个hehe
}

El bucle for está anidado, el bucle exterior se repite 10 veces, el bucle exterior ejecuta el bucle interior una vez cada vez y el bucle interior se ejecuta 10 veces, por lo que el total es 100 veces.

#include <stdio.h>

int main()
{
    
    
    int i = 0;
    int j = 0;
    for (; i < 10; i++)
    {
    
    
        for (; j < 10; j++)
        {
    
    
            printf("hehe\n");
        }
    }
    return 0; //输出为10个hehe
}

El bucle for está anidado, el bucle externo se repite 10 veces y el bucle externo ejecuta el bucle interno una vez cada vez. Después de que el primer bucle interno se ejecuta 10 veces, j es 10 y el siguiente bucle interno no se inicializa. j es Todavía son 10 y el bucle interno ya no se puede ejecutar, por lo que el total es 10 veces.

#include <stdio.h>

int main()
{
    
    
    int x, y;
    for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
    {
    
    
        printf("hehe\n");
    }
    return 0; //输出为2个hehe
}

La condición de juicio del bucle es x <2 && y <5. Después de realizar dos bucles, x <2 ya no se cumple, por lo que solo se puede ejecutar dos veces.

#include <stdio.h>

int main()
{
    
    
    int i = 0;
    int k = 0;
    for (i = 0, k = 0; k = 0; i++, k++)
        k++;
    return 0;
}

La condición de juicio es k = 0, que es una declaración de asignación. El resultado de la declaración de asignación es el valor asignado, por lo que el resultado de la declaración es 0 y el ciclo no se ejecuta una vez.

hacer mientras bucle

Estructura de sintaxis del bucle do while:

do
 循环语句;
while(表达式);
  • La instrucción de bucle se ejecuta una vez antes de evaluar la expresión, por lo que el bucle se ejecuta al menos una vez.
  • Cuando la declaración de bucle consta de varias declaraciones, se debe usar {} para convertirla en un bloque de código.
#include <stdio.h>

int main()
{
    
    
	int i = 1;
	do
	{
    
    
		printf("%d ", i);
		i++;
	} while (i <= 5);
	return 0; //输出 1 2 3 4 5
}

romper y continuar en el bucle do while

#include <stdio.h>
int main()
{
    
    
	int i = 1;
	do
	{
    
    
		if (3 == i)
			break;
		printf("%d ", i);
		i = i + 1;
	} while (i <= 5);
	return 0; //输出 1 2 
}

Cuando i = 3, la expresión if se considera verdadera y se ejecuta la instrucción break para finalizar el ciclo.

#include <stdio.h>
int main()
{
    
    
    int i = 0;
    do
    {
    
    
        i = i + 1;
        if (3 == i)
            continue;
        printf("%d ", i);
    } while (i < 5);
    return 0;//输出 1 2 4 5
}

Cuando i=3, la expresión if se considera verdadera, finalizando este ciclo y pasando al siguiente.

Diagrama de flujo aproximado del bucle do while:

imagen-20230820171738939

Resumir:

  • No importa qué tipo de declaración de bucle, la función de break es finalizar el bucle.
  • No importa qué tipo de declaración de bucle, la función de continuar no es ejecutar el código después de continuar y saltar al juicio del bucle. (El bucle for ajustará las condiciones del bucle antes de saltar al juicio del bucle)

ir a declaración

La declaración goto en lenguaje C puede hacer saltar el programa a la posición marcada.

#include <stdio.h>

int main()
{
    
    
	printf("hello world\n");
	goto flag;
	printf("hello goto\n");
flag:
	printf("hello blog\n");
	return 0; //输出为 hello world hello blog
}

Se flag:utiliza como un bit de bandera para que salte la instrucción goto. Debido a que la instrucción goto salta a la posición de la bandera, el código intermedio no se ejecutará.

  • El nombre de la bandera puede ser arbitrario, solo necesita usar 标志名:la posición de la bandera para saltar usando la declaración goto.
  • La declaración goto no se usa comúnmente porque reduce la legibilidad y mantenibilidad del código.
  • La declaración goto es adecuada para saltar desde el interior de un bucle de varios niveles hacia el exterior.

Supongo que te gusta

Origin blog.csdn.net/csdn_myhome/article/details/132406568
Recomendado
Clasificación