[Linguagem C] Instruções de ramificação e instruções de loop
Diretório de artigos
Classificação de declaração de linguagem C
As declarações na linguagem C podem ser divididas nas cinco categorias a seguir:
- declaração de expressão
- instrução de chamada de função
- declaração de controle
- declaração composta
- 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:
- As declarações de julgamento condicional também são chamadas de instruções de ramificação: instruções if, instruções switch;
- Instruções de execução de loop: instrução do while, instrução while, instrução for;
- 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
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:
- 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;
}
- 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;
}
- 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 if
para 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:
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:
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:
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.