[Linguagem C] Instruções de ramificação e instruções de loop

[Linguagem C] Instruções de ramificação e instruções de loop

Classificação de declaração de linguagem C

As declarações na linguagem C podem ser divididas nas cinco categorias a seguir:

  1. declaração de expressão
  2. instrução de chamada de função
  3. declaração de controle
  4. declaração composta
  5. declaração vazia

Entre eles, as instruções de controle são usadas para controlar o fluxo de execução do programa para realizar vários métodos estruturais do programa.Existem nove tipos de instruções de controle na linguagem C. Pode ser dividido nas três categorias a seguir:

  1. As declarações de julgamento condicional também são chamadas de instruções de ramificação: instruções if, instruções switch;
  2. Instruções de execução de loop: instrução do while, instrução while, instrução for;
  3. Instruções Turn: instrução break, instrução goto, instrução continue, instrução return.

A linguagem C é uma linguagem de programação estruturada , incluindo as seguintes estruturas:

  • Estrutura sequencial – execute o código em uma ordem predeterminada
  • Selecionar estrutura – selecione uma parte do código para executar
  • Estrutura de loop – executa o mesmo trecho de código repetidamente

imagem-20230820102122014

A linguagem C usa instruções de ramificação para formar estruturas de seleção e instruções de loop para formar estruturas de loop. Tanto as instruções de ramificação quanto as instruções de loop são instruções de controle .

declaração de filial

se estrutura de sintaxe

A instrução if possui as três estruturas gramaticais a seguir:

  1. ramo único
语法结构:
if(表达式)
    语句;
  • Se a expressão for verdadeira, a instrução é executada.
#include <stdio.h>

int main()
{
    
    
	int age = 16;
	if (age < 18) //表达式为真,输出未成年
		printf("未成年\n");
	return 0;
}
  1. ramo duplo
if(表达式)
    语句1;
else
    语句2;
  • Se a expressão for verdadeira, a instrução 1 será executada.
  • Se a expressão for falsa, a instrução 2 será executada.
#include <stdio.h>

int main()
{
    
    
	int age = 20;
	if (age < 18) //表达式为假,输出成年
		printf("未成年\n"); 
	else
		printf("成年\n");
	return 0;
}
  1. múltiplas filiais
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;
  • Se a expressão 1 for verdadeira, a instrução 1 será executada.
  • Se a expressão 2 for verdadeira, a instrução 2 será executada.
  • Todas as expressões anteriores são falsas e a instrução 3 é executada.
  • Múltiplo pode ser usado else ifpara controlar vários ramos.
#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;
}

Reabastecimento:

  • Na linguagem C, 0 significa falso e 1 significa verdadeiro.
  • Não importa quantas ramificações existam na estrutura da sintaxe if, apenas uma ramificação pode ser selecionada para execução.
  • if, else if, else só podem controlar uma instrução subsequente. Se quiser controlar várias instruções, você precisa usar {} para transformar a instrução em um bloco de código.

Pode haver várias instruções em um bloco de código. A estrutura de uso de um bloco de código é a seguinte:

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

Outras regras de correspondência

else corresponde ao if mais próximo.

#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; //没有输出
}

Como else corresponde ao if mais próximo, else corresponde à instrução if (b == 2), portanto, quando a condição em if (a == 1) não for verdadeira, a instrução print não será executada. Para melhorar a legibilidade do código, recomenda-se modificá-lo da seguinte forma:

#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;
}

As funções dos dois trechos de código acima são iguais, mas a legibilidade é diferente devido aos diferentes métodos de escrita.

declaração de mudança

A instrução switch também é uma instrução de ramificação e é frequentemente usada em situações com várias ramificações.

A estrutura de sintaxe principal da instrução switch é a seguinte:

switch(整型表达式)
{
    
    
    case 整形常量表达式:
    语句;
    //...
}
  • Expressões inteiras devem ser usadas como objetos de julgamento em switch .
  • Expressões constantes inteiras devem ser usadas como condições de julgamento no caso .
  • A expressão inteira no switch e a expressão constante inteira no caso são comparadas e julgadas, e a seleção é feita para entrar no caso correspondente.
#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;//输出为星期四 星期五 星期六 星期天
}

Embora day selecione o caso 4 no código acima, como não há final de controle neste caso, a instrução switch será executada sequencialmente, e o caso 5, o caso 6 e o ​​caso 7 também serão executados.

interromper a instrução switch

A quebra na instrução switch pode dividir a lista de instruções em diferentes partes de ramificação.

#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;//输出为星期四
}

Após executar a instrução no caso 4, break controla o fim da situação, salta e encerra a instrução switch.

padrão na instrução switch

padrão significa todos os casos, exceto o caso acima.

#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; //输出为输入错误
}

instrução de loop

enquanto loop

A estrutura de sintaxe do loop while:

while(表达式)
	循环语句;
  • O loop avalia a expressão. Se a expressão for verdadeira, a instrução do loop é executada.
  • A expressão é falsa, encerrando o loop.
  • Quando a instrução de loop contém várias instruções, {} precisa ser usado para transformá-la em um bloco 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
}

quebrar e continuar no loop while

break in while é usado para encerrar o loop permanentemente. Enquanto o break for encontrado no loop, todos os loops subsequentes serão interrompidos e o loop será encerrado diretamente.

#include <stdio.h>

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

Quando i = 3, a expressão while é considerada verdadeira e a instrução de loop é executada, a expressão if é considerada verdadeira e a instrução break é executada para encerrar o loop while.

continue é usado para encerrar este loop, ou seja, o código após continue neste loop não será executado novamente, mas irá diretamente para a parte de julgamento da instrução while. Faça o julgamento de entrada para o próximo 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
}

Quando i = 3, a expressão while é considerada verdadeira e a instrução de loop é executada. A expressão if é considerada verdadeira. A instrução continue é executada para encerrar este loop e entrar no próximo loop.

Fluxograma aproximado do loop while:

imagem-20230820133359713

para loop

A estrutura de sintaxe do loop for:

for(表达式1; 表达式2; 表达式3)
 循环语句;
  • A expressão 1 é a parte de inicialização, usada para inicializar variáveis ​​de loop.
  • A expressão 2 é a parte do julgamento condicional, que é usada para julgar o término do loop.
  • A expressão 3 é a parte de ajuste, usada para ajustar as condições do loop.
  • Quando a instrução de loop contém várias instruções, {} precisa ser usado para transformá-la em um bloco 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
}

quebrar e continuar no loop for

break e continue também podem aparecer em um loop for e seu significado é o mesmo de um loop 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
}

Quando i = 3, a expressão for é considerada verdadeira e a instrução de loop é executada, a expressão if é considerada verdadeira e a instrução break é executada para encerrar o loop 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
}

Quando i = 3, a expressão for é considerada verdadeira e a instrução de loop é executada. A expressão if é considerada verdadeira. A instrução continue é executada para encerrar o loop atual e entrar no próximo loop.

Fluxograma aproximado do loop for:

imagem-20230820140402568

Variantes do loop for

#include <stdio.h>

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

A parte de inicialização, a parte de julgamento e a parte de ajuste no loop for podem ser omitidas. Omitir todas elas significa que a condição do loop será sempre verdadeira.

#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
}

O loop for é aninhado, o loop externo faz um loop 10 vezes, o loop externo executa o loop interno uma vez por vez e o loop interno executa 10 vezes, então o total é 100 vezes.

#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
}

O loop for é aninhado, o loop externo faz um loop 10 vezes e o loop externo executa o loop interno uma vez de cada vez. Depois que o primeiro loop interno é executado 10 vezes, j é 10 e o próximo loop interno não é inicializado. j é ainda 10, e o loop interno não pode mais ser executado, então o total é 10 vezes.

#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
}

A condição de julgamento do loop é x < 2 && y < 5. Depois de repetir o loop duas vezes, x < 2 não é mais satisfeito, portanto, só pode ser executado duas vezes.

#include <stdio.h>

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

A condição de julgamento é k = 0, que é uma instrução de atribuição. O resultado da instrução de atribuição é o valor atribuído, portanto, o resultado da instrução é 0 e o loop não é executado uma vez.

fazer loop while

Estrutura de sintaxe do loop do while:

do
 循环语句;
while(表达式);
  • A instrução de loop é executada uma vez antes de avaliar a expressão, portanto, o loop é executado pelo menos uma vez.
  • Quando a instrução de loop contém várias instruções, {} precisa ser usado para transformá-la em um bloco 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
}

quebrar e continuar no loop 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 
}

Quando i=3, a expressão if é considerada verdadeira e a instrução break é executada para encerrar o loop.

#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
}

Quando i=3, a expressão if é considerada verdadeira, encerrando este loop e prosseguindo para o próximo loop.

Fluxograma aproximado do loop do while:

imagem-20230820171738939

Resumir:

  • Não importa que tipo de instrução de loop, a função do break é encerrar o loop.
  • Não importa o tipo de instrução de loop, a função de continue não é executar o código após continuar e pular para o julgamento do loop. (O loop for ajustará as condições do loop antes de pular para o julgamento do loop)

declaração goto

A instrução goto na linguagem C pode levar o programa para a posição 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
}

É flag:usado como um bit de sinalizador para a instrução goto saltar. Como a instrução goto salta para a posição do sinalizador, o código intermediário não será executado.

  • O nome do sinalizador pode ser arbitrário, você só precisa usar 标志名:a posição do sinalizador para pular usando a instrução goto.
  • A instrução goto não é comumente usada porque reduz a legibilidade e a capacidade de manutenção do código.
  • A instrução goto é adequada para saltar de dentro para fora de um loop de vários níveis.

Acho que você gosta

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