<C language> instrução de ramificação e instrução de loop

1. Declaração de linguagem C

Uma instrução em linguagem C ;termina com um ponto e vírgula

As instruções 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

Este capítulo descreve instruções de controle

As instruções de controle são usadas para controlar o fluxo de execução do programa para realizar vários modos estruturais do programa (a linguagem C suporta três estruturas: estrutura de sequência, estrutura de seleção e estrutura de loop), que são compostas de definidores de instrução específicos. na instrução de controle de linguagem C.

Pode ser dividido nas três categorias a seguir:

  1. As declarações de julgamento condicional também são chamadas de declarações ramificadas: ifdeclaração, switchdeclaração;
  2. Instrução de execução de loop: do whileinstrução, whileinstrução, instrução for;
  3. Vá para instrução: breakinstrução, gotoinstrução, continue instrução, returninstrução.

2. Extrato da filial

2.1 declaração if

Ao escrever programas C, muitas vezes é necessário executar seletivamente o código com base em diferentes condições. Isso é o que a instrução if faz. Uma instrução if é uma instrução condicional que executa diferentes blocos de código, dependendo se a condição é verdadeira ou falsa.

ifA sintaxe básica da instrução é a seguinte:

if (condition) {
    
    
    // 如果条件为真,执行这里的代码
}

Uma instrução if consiste em palavras-chave if, uma expressão condicional entre parênteses conditione um bloco de código entre chaves. A expressão condicional será avaliada. Se o resultado for verdadeiro (diferente de zero), o bloco de código dentro das chaves será executado; se o resultado for falso (zero), toda a instrução if será ignorada e o código subsequente será continuar a ser executado.

Veja a seguir o fluxo de execução da instrução if:

  1. Determina o valor da expressão condicional.
  2. O bloco de código da instrução if é executado se a condição for verdadeira.
  3. Se a condição for falsa, ignore o bloco de código da instrução if e continue a executar o código subsequente.

if-elseA sintaxe da declaração é a seguinte:

if (condition) {
    
    
    // 如果条件为真,执行这里的代码
} else {
    
    
    // 如果条件为假,执行这里的代码
}

Aqui está um exemplo usando uma instrução if-else:

int num = -5;

if (num > 0) {
    
    
    printf("Number is positive.\n");
} else {
    
    
    printf("Number is not positive.\n");
}

No exemplo acima, de acordo com numo valor de , se numfor maior que 0, será gerado "Número é positivo."; se numnão for maior que 0, será exibido "Número não é positivo.".

A sintaxe para multibranch else ifé a seguinte:

if (condition1) {
    
    
    // 如果条件1为真,执行这里的代码
} else if (condition2) {
    
    
    // 如果条件1为假且条件2为真,执行这里的代码
} else {
    
    
    // 如果所有条件都为假,执行这里的代码
}

Quando usado else if, deve ser colocado após a instrução if e elseantes da instrução. Vários outros ifs podem ser usados ​​para adicionar mais ramificações condicionais.

Aqui está um else ifexemplo de uso:

int score = 75;

if (score >= 90) {
    
    
    printf("优秀\n");
} else if (score >= 80) {
    
    
    printf("良好\n");
} else if (score >= 70) {
    
    
    printf("中等\n");
} else if (score >= 60) {
    
    
    printf("及格\n");
} else {
    
    
    printf("不及格\n");
}

No exemplo acima, dependendo do scorevalor da variável, diferentes notas são geradas de acordo com diferentes intervalos de pontuação. De acordo com a ordem das condições, apenas o primeiro bloco de código que satisfaça as condições será executado. Se scorefor maior ou igual a 90, imprima "excelente"; se a primeira condição não for atendida, mas a segunda condição (80 <= pontuação < 90), imprima "bom";

Nas expressões da linguagem C, 0 significa falso e diferente de zero significa verdadeiro .

2.1.1 Outra flutuação

Quando você escreveu este código:

int main()
{
    
    
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}
//注意程序中else不是跟第一个if匹配,而是和第二个匹配,所以a==1 为假,程序直接return 0;

Em C, else corresponde à instrução if incomparável mais próxima

Emenda:

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main() {
    
    
    int a = 0;
    int b = 2;
    if (a == 1) {
    
    
        if (b == 2) {
    
    
            printf("hehe\n");
        }
    } else {
    
       //else匹配左边的右括号的if
        printf("haha\n");
    }
    return 0;
}

2.1.2 Comparação das formas de escrita de if

//代码1
if (condition) {
    
    
    return x;
}
return y;

//代码2
if (condition) 
{
    
    
    return x;
} 
else 
{
    
    
    return y;
}

//代码3
int num = 1;
if (num == 5) 
{
    
    
    printf("hehe\n");
}

//代码4
int num = 1;
if (5 == num) 
{
    
    
    printf("hehe\n");
}

2.2 declaração de troca

switchUma instrução condicional que seleciona diferentes caminhos de execução com base no valor de uma expressão. Ele fornece uma ifmaneira mais concisa e legível de lidar com várias ramificações possíveis do que usar várias instruções.

switchA estrutura básica da declaração é a seguinte:

switch (expression) {
    
    
    case constant1:
        // 执行代码块1
        break;
    case constant2:
        // 执行代码块2
        break;
    ...
    case constantN:
        // 执行代码块N
        break;
    default:
        // 当expression与上述常量都不匹配时执行的代码块
}

expressioné uma expressão cujo resultado é casecomparado com a constante que segue cada instrução. Se expressiono valor de casecorresponder a uma das seguintes constantes, caseo bloco de código associado à instrução será executado. breakA instrução é usada para saltar da instrução após a execução de uma ramificação switch, impedindo a execução da próxima ramificação.

Aqui estão switchalgumas notas importantes sobre declarações:

  1. expressionO resultado de deve ser um tipo inteiro (como int, charou enum), não um float ou string.
  2. caseA constante a seguir deve ser uma expressão constante, ou seja, um valor que pode ser determinado em tempo de compilação e não pode ser uma variável.
  3. O bloco de código em cada caseramificação pode conter qualquer número de instruções, se não houver breakinstrução, ele continuará a executar a próxima ramificação, chamada de "penetração de caso".
  4. defaultAs ramificações são opcionais e são usadas para lidar com casos em que nenhum corresponde expressiona todos . caseSe não houver ramificação, a instrução não fará nada quando defaultnão houver correspondência .caseswitch
  5. switchAs instruções podem ser aninhadas dentro de outras switchinstruções, mas deve-se tomar cuidado para evitar o aninhamento excessivo que dificulta a compreensão do código.

Aqui está um exemplo de uma switchdeclaração simples:

int day = 2;
switch (day) {
    
    
    case 1:
        printf("Monday\n");
        break;
    case 2:
        printf("Tuesday\n");
        break;
    case 3:
        printf("Wednesday\n");
        break;
    default:
        printf("Invalid day\n");
}

Neste exemplo, dependendo do dayvalor da variável, o programa imprime a saída correspondente, ou seja, "terça-feira". Se dayo valor for 1, 3 ou qualquer outro, uma saída diferente será impressa. Se dayo valor não corresponder a nenhum case, defaulta ramificação será executada e "Dia inválido" será impresso.

Usando switchinstruções, você pode alternar rapidamente entre várias opções com base no valor de uma expressão e executar o bloco de código correspondente.

2.2.1 mudar o uso aninhado

void test{
    
    
    int n = 1;
    int m = 2;
    switch (n) {
    
    
        case 1:
            m++;
        case 2:
            n++;
        case 3:
            switch (n) {
    
    //switch允许嵌套使用
                case 1:
                    n++;
                case 2:
                    m++;
                    n++;
                    break;
            }
        case 4:
            m++;
            break;
        default:
            break;
    }
    printf("m = %d, n = %d\n", m, n);
}
//输出结果:m = 5, n = 3
  • caseAs instruções podem ser combinadas continuamente para obter o efeito de "penetração de caso", ou seja, depois que uma correspondência é encontrada case, as instruções subsequentes casecontinuarão a ser executadas até que breakuma instrução seja encontrada ou switcha instrução termine.
  • switchAs instruções podem ser aninhadas, permitindo que as instruções casesejam usadas novamente dentro de uma instrução switch.
  • defaultAs ramificações são opcionais e são usadas para lidar com todos os casos não correspondentes.
  • Observe que, ao usar switchinstruções, preste atenção à direção do fluxo de controle para garantir que a lógica do código esteja correta.

3. Instrução de loop

3.1 loop while

whileUm loop é uma estrutura iterativa baseada em condição usada para executar repetidamente um bloco de código até que uma determinada condição não seja mais satisfeita. Sua sintaxe básica é a seguinte:

while (condition) {
    
    
    // 循环体代码
    // 在每次迭代时执行的代码
}

conditioné uma expressão, geralmente uma condição associada a um valor booleano. Enquanto conditionfor verdadeiro (diferente de zero), o código no corpo do loop será executado. Em cada iteração, conditionum julgamento será feito primeiro e, se o resultado do julgamento for verdadeiro, o código no corpo do loop será executado. Em seguida, verifique novamente conditionpara decidir se deve prosseguir para a próxima iteração. O loop continuará sendo executado enquanto conditionpermanecer verdadeiro.

whileA execução do loop é a seguinte:

  1. conditionValor verificado .
  2. Se conditionfalso (0), o loop é encerrado e nenhum código no corpo do loop é executado.
  3. Se conditionverdadeiro (diferente de zero), o código no corpo do loop é executado.
  4. Retorne à etapa 1, continue verificando conditiono valor e decida se deseja continuar a executar o loop de acordo com o resultado da avaliação.

Aqui está um exemplo simples mostrando whileo uso de loops:

int count = 0;
while (count < 5) {
    
    
    printf("Count: %d\n", count);
    count++;
}

Neste exemplo, countuma variável com valor inicial 0 é definida. Em seguida, entre whileno loop, verificando count < 5a condição. Como o valor inicial é 0, a condição é atendida, então o código no corpo do loop é executado. O valor atual counté impresso no corpo do loop e depois countincrementado. Em seguida, volte ao whileinício do loop, verifique a condição novamente e repita as etapas acima até que counto valor de não seja menor que 5.

3.1.1 interromper e continuar no loop while

Dentro de whileum loop, você pode usar breaka continueinstrução e para controlar o comportamento do loop.

  1. breakInstrução: quando uma instrução é encontrada no loop break, o programa sai imediatamente do loop e continua a executar o código após o loop. Ele é usado para encerrar o loop prematuramente sem executar as iterações restantes.

Aqui está um breakexemplo usando a declaração:

int i = 0;
while (i < 5) {
    
    
    if (i == 3) {
    
    
        break;
    }
    printf("%d ", i);
    i++;
}

Neste exemplo, a instrução ifoi encontrada quando o valor de é igual a 3 break. Neste ponto, o loop é encerrado e nenhuma outra iteração é executada. Portanto, a saída é:

0 1 2

2. continueInstrução: Quando uma instrução é encontrada no loop continue, o programa imediatamente pulará o código restante da iteração atual e entrará diretamente na próxima iteração. Ele é usado para pular algumas iterações específicas sem terminar o loop.

Aqui está um continueexemplo usando a declaração:

Aqui está um continueexemplo usando a declaração:

int i = 0;
while (i < 5) {
    
    
    i++;
    if (i == 3) {
    
    
        continue;
    }
    printf("%d ", i);
}

Neste exemplo, a instrução ifoi encontrada quando o valor de é igual a 3 continue. Nesse ponto, printfo código após a instrução na iteração atual é ignorado e vai diretamente para a próxima iteração. Portanto, a saída é:

1 2 4 5

Observação: ao usar breaka instrução and continue, tome cuidado para evitar loops infinitos ou erros de lógica. Certifique-se de usar essas instruções sob condições apropriadas para atingir o fluxo de controle pretendido.

Observe alguns códigos:

#include <stdio.h>
int main() {
    
    
    int ch = 0;
    while ((ch = getchar()) != EOF)
        putchar(ch);
    return 0;
}
//这里的代码适当的修改是可以用来清理缓冲区的.

#include <stdio.h>
int main() {
    
    
    char ch = '\0';
    while ((ch = getchar()) != EOF) {
    
    
        if (ch < '0' || ch > '9')
            continue;
        putchar(ch);
    }
    return 0;
}
//这个代码的作用是:只打印数字字符,跳过其他字符的

3.2 fazer loop while

do...whileUm loop é uma construção de loop pós-teste que executa o código no corpo do loop antes de verificar a condição do loop. A execução do corpo do loop continua enquanto a condição do loop for atendida até que a condição do loop não seja mais atendida. do...whileUm loop executa o corpo do loop pelo menos uma vez, mesmo se a condição do loop não for atendida em primeiro lugar.

do...whileA sintaxe básica de um loop é a seguinte:

do {
    // 循环体代码
    // 在每次迭代时执行的代码
} while (condition);

Primeiro, doo código no corpo do loop após a palavra-chave é executado uma vez. Então, depois de executar o corpo do loop uma vez, o programa verifica a condição do loop condition. Se a condição do loop for verdadeira (diferente de zero), a execução continua para a próxima iteração, executando o código no corpo do loop novamente. Se a condição do loop for falsa (0), saia do loop e continue executando o código após o loop.

Aqui está um exemplo simples mostrando do...whileo uso de loops:

int count = 0;
do {
    
    
    printf("Count: %d\n", count);
    count++;
} while (count < 5);

Neste exemplo, o corpo do loop é executado uma vez, imprimindo o countvalor inicial. A condição do loop é então verificada count < 5e, se for atendida, prossegue para a próxima iteração. Em cada iteração, imprima o countvalor atual e, em seguida, countincremente-o. O loop continua até que counto valor de não seja menor que 5.

3.2.1 quebrar e continuar no loop do while

do...whileEm um loop, o uso e a função da instrução breakand são os mesmos de outras estruturas de loop (como and ). Eles são usados ​​dentro do corpo do loop para controlar o fluxo de execução do loop.continueforwhile

  1. breakInstrução: Quando uma instrução é encontrada em um loop break, o programa sairá imediatamente do loop atual, não executará as iterações restantes e continuará a executar o código após o loop.

Aqui está um breakexemplo usando a declaração:

int i = 0;
do {
    
    
    if (i == 3) {
    
    
        break;
    }
    printf("%d ", i);
    i++;
} while (i < 5);

Neste exemplo, a instrução ié encontrada quando o valor de é igual a 3 break. Neste ponto, o loop é encerrado e nenhuma outra iteração é executada. Portanto, a saída é:

0 1 2
  1. continueInstruções: Quando uma instrução é encontrada em um loop continue, o programa pula imediatamente o código restante da iteração atual e vai diretamente para a próxima iteração.

Aqui está um continueexemplo usando a declaração:

int i = 0;
do {
    
    
    i++;
    if (i == 3) {
    
    
        continue;
    }
    printf("%d ", i);
} while (i < 5);

Neste exemplo, a instrução ié encontrada quando o valor de é igual a 3 continue. Nesse ponto, printfo código que segue a instrução na iteração atual é ignorado e a próxima iteração segue diretamente. Portanto, a saída é:

1 2 4 5

3.3 for loop

forUm loop é uma estrutura de loop comumente usada para executar repetidamente um pedaço de código. Ele consiste em três partes: expressão de inicialização, condição de loop e instrução de iteração de loop.

forA sintaxe básica de um loop é a seguinte:

for (初始化表达式; 循环条件; 循环迭代语句) {
    
    
    // 循环体代码
    // 在每次迭代时执行的代码
}
  1. Executa expressões de inicialização, geralmente usadas para inicializar variáveis ​​de loop.
  2. A condição do loop é verificada e, se a condição do loop for verdadeira (diferente de zero), o código dentro do corpo do loop é executado. Se a condição do loop for falsa (0), saia do loop e continue executando o código após o loop.
  3. Execute o código dentro do corpo do loop.
  4. Execute a instrução de iteração do loop, geralmente usada para atualizar o valor da variável do loop.
  5. Volte para a segunda etapa, verifique novamente a condição do loop e decida se deseja continuar o loop com base no resultado da condição do loop.

Abaixo está um exemplo simples mostrando foro uso de loops

for (int i = 0; i < 5; i++) {
    
    
    printf("%d ", i);
}

Neste exemplo, a expressão de inicialização int i = 0inicializa a variável de loop icom um valor inicial de 0. A condição do loop i < 5verifica ise a variável é menor que 5 e, se for, executa o código no corpo do loop. Em cada iteração, imprima o ivalor atual. A instrução de iteração do loop i++é usada para incrementar io valor da variável do loop. O loop continuará até que a condição do loop não seja mais atendida.

Este código produzirá o seguinte:

0 1 2 3 4

3.3.1 loop for vs. loop while

int i = 0;
//实现相同的功能,使用while
i = 1;         //初始化部分
while (i <= 10)//判断部分
{
    
    
    printf("hehe\n");
    i = i + 1;//调整部分
}

//实现相同的功能,使用for
for (i = 1; i <= 10; i++) {
    
    
    printf("hehe\n");
}

Pode-se descobrir que whileainda existem três condições necessárias para o ciclo no ciclo, mas devido ao problema de estilo, as três partes podem se desviar muito, então a busca e modificação não são concentradas e convenientes o suficiente. Portanto, foro estilo de loop é melhor; fora frequência de loop também é a mais alta.

3.3.2 quebrar e continuar no loop for

Em forum loop, o uso e o efeito da instrução breakand são os mesmos de continueoutras construções de loop, como whileand .do...while

//代码1
int main() {
    
    
    int i = 0;
    for (i = 1; i <= 10; i++) {
    
    
        if (i == 5)
            break;
        printf("%d ", i);
    }
    return 0;
}
//输出结果:1 2 3 4

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

3.3.3 Variável de controle de loop do loop for

sugestão:

  1. Não modifique a variável de loop no corpo do loop for para evitar que o loop fique fora de controle.
  2. Recomenda-se que o valor da variável de controle do loop da instrução for seja escrito na forma de "intervalo aberto após o fechamento primeiro".
int i = 0;
//前闭后开的写法
for (i = 0; i < 10; i++) {
    
    }
//两边都是闭区间
for (i = 0; i <= 9; i++) {
    
    }

3.3.4 Variações do loop for

for (;;) {
    
    
    printf("hehe\n");
}

A parte de inicialização, a parte de julgamento e a parte de ajuste no loop for podem ser omitidas, mas não é recomendável omiti-las para iniciantes, o que pode facilmente causar problemas.

Se a parte de inicialização for omitida, quantos hehes são impressos aqui?

int i = 0;
int j = 0;
for (i = 0; i < 10; i++) {
    
    
    for (j = 0; j < 10; j++) {
    
    
        printf("hehe\n");
    }
}
//100次hehe

Se a parte de inicialização for omitida, quantos hehes são impressos aqui?

int i = 0;
int j = 0;
for (; i < 10; i++) {
    
    
    for (; j < 10; j++) {
    
    
        printf("hehe\n");
    }
}
//10次heh

malha de controle com mais de uma variável

int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++) {
    
    
    printf("hehe\n");
}
//2次hehe

prática:

Posso perguntar quantas vezes repetir?

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

A contagem de loop deste programa é 0 vezes.

Na parte condição do loop for, o operador de atribuição (=) é usado em vez do operador de igualdade (==), fazendo com que a condição seja sempre verdadeira (diferente de zero), de modo que o loop será executado infinitamente. Como a operação de auto-incremento (k++) é executada em k no corpo do loop, mas o valor de k é reatribuído a 0 na condição do loop, o valor de k será redefinido para 0 após cada loop. Portanto, o loop nunca pode terminar e o programa ficará preso em um estado de loop infinito, nunca retornando 0.

4. declaração goto

Na linguagem C, gotouma instrução é usada para transferir incondicionalmente para um rótulo em um programa. Permite pular para qualquer local do programa, inclusive dentro da função ou bloco atual.

Aqui está um programa de exemplo que demonstra gotoo uso da instrução:

#include <stdio.h>

int main() {
    
    
    int i = 0;

    start:
    printf("i = %d\n", i);
    i++;

    if (i < 5) {
    
    
        goto start;
    }

    return 0;
}

É importante observar que o uso indevido de gotoinstruções pode dificultar a compreensão e a manutenção do código, portanto, elas devem ser usadas com cuidado. Freqüentemente, loops e instruções condicionais (por exemplo for, , while, ifetc.) podem ser usados ​​em vez de gotoinstruções para tornar o código mais estruturado e legível.

Acho que você gosta

Origin blog.csdn.net/ikun66666/article/details/131301721
Recomendado
Clasificación