Índice
3.1.1 interromper e continuar no loop while
Em primeiro lugar, a linguagem C é uma linguagem de programação estruturada, que é uma linguagem para comunicação entre humanos e computadores.
A linguagem C suporta três estruturas:
- estrutura sequencial
- selecione a estrutura
- estrutura de loop
Estrutura sequencial: Passo 1->Passo 2->Passo 3... (passo a passo em ordem)
Estrutura de seleção: selecione com base em critérios
Estrutura de loop: geralmente é usada em nossos eventos de execução recorrentes.
1. O que é uma declaração?
As instruções da linguagem C podem ser divididas em:
- declaração de expressão
- instrução de chamada de função
- declaração de controle
- declaração composta
- declaração vazia
Onde branches e loops são instruções de controle
As instruções de controle da linguagem C são:
- Instrução de ramificação (instrução de julgamento condicional): instrução if, instrução switch
- Instrução de loop: instrução do while, instrução while, instrução for
- Comando Turn: comando break, comando goto, comando continue, comando return
2. Extrato da filial
2.1 declaração if
Na linguagem C, 0 significa falso, diferente de zero significa verdadeiro
//语法
if(表达式) //表达式为真,就执行下面的语句
语句;
if(表达式) //表达式为真,就执行语句1
语句1;
else //表达式为假,执行语句2
语句2;
#include<stdio.h>
int main()
{
int age = 0; //初始化变量
scanf("%d",&age);
if(age < 18)
{
printf("未成年");
}
else
{
printf("成年了!"); //age >= 18
}
return 0;
}
Observação: a instrução if é um tipo de instrução de ramificação, que pode realizar uma ramificação única ou várias ramificações
//多分支
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
else
{
语句3;
}
Lembrete propenso a erros:
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age<18)
{
printf("少年");
}
else if(18<=age<30) //注意此代码
{
printf("青年");
}
else if (age>=30&&age<50)
{
printf("中年");
}
else
{
printf("老年");
}
}
senão if(18<=idade<30)
Esta declaração é para julgar 18 <=idade primeiro e depois julgar idade <30
Se 18<=idade for verdadeiro (1), 1<30 também for verdadeiro, a instrução é executada
更正:else if(age>=18&&age<30)
Simplifique o código enquanto mantém a ordem do estado do código inalterada
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age<18)
{
printf("少年");
}
else if(age<30)
{
printf("青年");
}
else if (age<50)
{
printf("中年");
}
else
{
printf("老年");
}
}
2.1.1 Outra flutuação
else é correspondido com seu 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;
}
Se não prestar atenção: está imprimindo haha, na verdade o resultado real é não imprimir nada
O código correto para imprimir haha é
#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;
}
2.2 declaração de troca
A instrução switch também é um tipo de instrução de ramificação, que costuma ser usada em situações com várias ramificações
alternar (expressão)
{
case expressão constante de número inteiro:
declaração;
break; //O efeito real é dividir a instrução em diferentes partes de ramificação
case expressão constante de número inteiro:
declaração;
quebrar;
.....
padrão:
declaração;
quebrar;
}
Perceber:
alternar (expressão)
A expressão aqui só pode ser short, char, int, long integer, enumeration
Não pode ser: float, double
Após a instrução case, a expressão constante ou tipo de enumeração do resultado inteiro é geralmente colocado, e o tipo de enumeração também pode ser considerado como uma constante especial
Quando o valor da expressão não corresponde ao valor do caso, a declaração de padrão é executada
A cláusula default na instrução switch pode ser colocada em qualquer lugar, e o caso geral é melhor colocado antes de default
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
printf("吃饭\n");
case 2:
printf("睡觉\n");
case 3:
printf("打豆豆\n");
default:
printf("编程!!!");
}
return 0;
}
Observe que não há quebra aqui, quando o teclado digita 1
junte-se à pausa
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
printf("吃饭\n");
break;
case 2:
printf("睡觉\n");
break;
case 3:
printf("打豆豆\n");
break;
default:
printf("编程!!!");
break;
}
return 0;
}
entrada de teclado 1
Uso coerente do caso: quando necessário
1. Entrada 1-5, a saída é "dia da semana";
2. Entrada 6-7, a saída é "fim de semana"
int main()
{
int day = 0;
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
return 0;
}
3. Instrução de loop
3.1 loop while
Quando um evento, precisamos executar várias vezes. Enquanto na linguagem C, você pode perceber o loop
[Exemplo] imprimir números 1-10
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
3.1.1 interromper e continuar no loop while
quebrar
Observe a saída do código abaixo
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf("%d ", i);
i = i + 1;
}
return 0;
}
A saída resultante é
Resumo: A função break no loop while encerra diretamente o loop e o loop subsequente não continua.
continuar
Observe a saída do código abaixo
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d ", i);
i = i + 1;
}
return 0;
}
Saída: 1 2 3 4 entra em um loop infinito
[Exemplo] Julgando o resultado da saída
#include<stdio.h>
int main()
{
int i = 1;
while (i<=10)
{
i = i + 1;
if (i==5)
continue;
printf("%d ",i);
}
return 0;
}
Propenso a erros, a saída é fácil de ver: 2 3 4 6 7 8 9 10
Mas o resultado é: 2 3 4 6 7 8 9 10 11
Porque i<=10 no loop while, seguido por i= i+1;
Resumo: A função de continue no loop while é encerrar esse loop, ou seja, o código por trás desse loop não será executado novamente, mas pulará diretamente para a parte de julgamento da instrução while para julgar a entrada do próximo loop
3.2 loop for
for(expressão1;expressão2;expressão3)
declaração;
- Expressão 1: Usada para inicializar a variável do loop
- Expressão 2: Usada para determinar quando o loop termina
- Expressão 3: Ajuste para condição de loop
Exemplo: use o loop for para gerar 1-10
#include<stdio.h>
int main()
{
int i = 0;
for (i =1;i<=10;i++)
{
printf("%d ",i);
}
return 0;
}
Também pode haver instruções break e continue no loop for
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
O resultado é: 1 2 3 4
Algumas variantes do loop for
#include<stdio.h>
int main()
{
for (;;)
{
printf("666 ");
}
return 0;
}
Às vezes, a expressão dentro do loop for pode ser omitida. No entanto, a omissão da parte do julgamento continuará em loop [não é recomendável omitir]
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 0;i<3;i++)
{
for (j = 0; j < 3;j++)
{
printf("6 ");//一共打印9个6
}
}
return 0;
}
Este é o loop aninhado
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (;i<3;i++)
{
for (; j < 3;j++)
{
printf("6 ");//一共打印3个6
}
}
return 0;
}
Resultado: 6 6 6
Como não há parte de inicialização nos dois loops for, quando o loop mais interno j é igual a 3 (três 6s são impressos), a condição não é satisfeita ao entrar no loop posteriormente.
【Perguntas de exercícios】
//请问循环要循环多少次?
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 0, j = 0; j = 0; i++, j++)
j++;
return 0;
}
O resultado é: não fazer loop uma vez
Porque a parte do julgamento j = 0; ou seja, j é atribuído um valor de zero, que é falso, e o loop não pode entrar.
3.3 loop do...while()
fazer
declaração de loop;
while(expressão);
O loop do...while() é executado uma vez primeiro e depois julgado. Se a expressão for verdadeira, execute a instrução de loop até que a condição não seja satisfeita para parar.
4. declaração goto
O lugar mais comum para a instrução goto é encerrar o programa em alguma estrutura profundamente aninhada
Porque em um loop de várias camadas, pulando para uma determinada camada de loop, uma quebra não pode ser alcançada. A instrução goto pode fazer isso.
//goto语句运用
#include<stdio.h>
int main()
{
int i = 0;
int error = 1;
for (i = 0; i < 3;i++)
{
for (int j = 0; i < 3; i++)
{
for (int k = 0; k < 3; i++)
{
goto end1;//跳转标记
}
}
}
end1://所跳转的位置
if (error)
{
printf("hh");
}
return 0;
}
Resultados do:
Recomenda-se usar a instrução goto o mínimo possível
5. Pratique
1. Calcule o fatorial de n
//计算n的阶乘
#include <stdio.h>
int main()
{
int n = 0;
int ret = 0;
while (~scanf("%d",&n))//实现多组输入
{
int i = 0;
ret = 1;
for (i = 1; i <= n;i++)
{
ret *= i;
}
printf("%d\n",ret);
}
return 0;
}
2. Calcule a soma dos fatoriais entre 1-10
#include<stdio.h>
int main()
{
int i = 0;
int sum = 0;
int ret = 1;
for (i = 1; i <= 10;i++)
{
ret *= i;
sum += ret;
}
printf("%d",sum);
return 0;
}
A saída é: