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:
- declaração de expressão
- instrução de chamada de função
- declaração de controle
- declaração composta
- 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:
- As declarações de julgamento condicional também são chamadas de declarações ramificadas:
if
declaração,switch
declaração; - Instrução de execução de loop:
do while
instrução,while
instrução, instrução for; - Vá para instrução:
break
instrução,goto
instrução, continue instrução,return
instruçã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.
if
A 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 condition
e 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:
- Determina o valor da expressão condicional.
- O bloco de código da instrução if é executado se a condição for verdadeira.
- 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-else
A 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 num
o valor de , se num
for maior que 0, será gerado "Número é positivo."; se num
nã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 else
antes da instrução. Vários outros ifs podem ser usados para adicionar mais ramificações condicionais.
Aqui está um else if
exemplo 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 score
valor 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 score
for 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
switch
Uma instrução condicional que seleciona diferentes caminhos de execução com base no valor de uma expressão. Ele fornece uma if
maneira mais concisa e legível de lidar com várias ramificações possíveis do que usar várias instruções.
switch
A 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 é case
comparado com a constante que segue cada instrução. Se expression
o valor de case
corresponder a uma das seguintes constantes, case
o bloco de código associado à instrução será executado. break
A 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 switch
algumas notas importantes sobre declarações:
expression
O resultado de deve ser um tipo inteiro (comoint
,char
ouenum
), não um float ou string.case
A 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.- O bloco de código em cada
case
ramificação pode conter qualquer número de instruções, se não houverbreak
instrução, ele continuará a executar a próxima ramificação, chamada de "penetração de caso". default
As ramificações são opcionais e são usadas para lidar com casos em que nenhum correspondeexpression
a todos .case
Se não houver ramificação, a instrução não fará nada quandodefault
não houver correspondência .case
switch
switch
As instruções podem ser aninhadas dentro de outrasswitch
instruçõ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 switch
declaraçã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 day
valor da variável, o programa imprime a saída correspondente, ou seja, "terça-feira". Se day
o valor for 1, 3 ou qualquer outro, uma saída diferente será impressa. Se day
o valor não corresponder a nenhum case
, default
a ramificação será executada e "Dia inválido" será impresso.
Usando switch
instruçõ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
case
As instruções podem ser combinadas continuamente para obter o efeito de "penetração de caso", ou seja, depois que uma correspondência é encontradacase
, as instruções subsequentescase
continuarão a ser executadas até quebreak
uma instrução seja encontrada ouswitch
a instrução termine.switch
As instruções podem ser aninhadas, permitindo que as instruçõescase
sejam usadas novamente dentro de uma instruçãoswitch
.default
As ramificações são opcionais e são usadas para lidar com todos os casos não correspondentes.- Observe que, ao usar
switch
instruçõ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
while
Um 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 condition
for verdadeiro (diferente de zero), o código no corpo do loop será executado. Em cada iteração, condition
um 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 condition
para decidir se deve prosseguir para a próxima iteração. O loop continuará sendo executado enquanto condition
permanecer verdadeiro.
while
A execução do loop é a seguinte:
condition
Valor verificado .- Se
condition
falso (0), o loop é encerrado e nenhum código no corpo do loop é executado. - Se
condition
verdadeiro (diferente de zero), o código no corpo do loop é executado. - Retorne à etapa 1, continue verificando
condition
o valor e decida se deseja continuar a executar o loop de acordo com o resultado da avaliação.
Aqui está um exemplo simples mostrando while
o uso de loops:
int count = 0;
while (count < 5) {
printf("Count: %d\n", count);
count++;
}
Neste exemplo, count
uma variável com valor inicial 0 é definida. Em seguida, entre while
no loop, verificando count < 5
a 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 count
incrementado. Em seguida, volte ao while
início do loop, verifique a condição novamente e repita as etapas acima até que count
o valor de não seja menor que 5.
3.1.1 interromper e continuar no loop while
Dentro de while
um loop, você pode usar break
a continue
instrução e para controlar o comportamento do loop.
break
Instrução: quando uma instrução é encontrada no loopbreak
, 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 break
exemplo usando a declaração:
int i = 0;
while (i < 5) {
if (i == 3) {
break;
}
printf("%d ", i);
i++;
}
Neste exemplo, a instrução i
foi 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. continue
Instruçã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 continue
exemplo usando a declaração:
Aqui está um continue
exemplo usando a declaração:
int i = 0;
while (i < 5) {
i++;
if (i == 3) {
continue;
}
printf("%d ", i);
}
Neste exemplo, a instrução i
foi encontrada quando o valor de é igual a 3 continue
. Nesse ponto, printf
o 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 break
a 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...while
Um 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...while
Um 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...while
A sintaxe básica de um loop é a seguinte:
do {
// 循环体代码
// 在每次迭代时执行的代码
} while (condition);
Primeiro, do
o 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...while
o 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 count
valor inicial. A condição do loop é então verificada count < 5
e, se for atendida, prossegue para a próxima iteração. Em cada iteração, imprima o count
valor atual e, em seguida, count
incremente-o. O loop continua até que count
o valor de não seja menor que 5.
3.2.1 quebrar e continuar no loop do while
do...while
Em um loop, o uso e a função da instrução break
and 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.continue
for
while
break
Instrução: Quando uma instrução é encontrada em um loopbreak
, 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 break
exemplo 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
continue
Instruções: Quando uma instrução é encontrada em um loopcontinue
, o programa pula imediatamente o código restante da iteração atual e vai diretamente para a próxima iteração.
Aqui está um continue
exemplo 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, printf
o 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
for
Um 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.
for
A sintaxe básica de um loop é a seguinte:
for (初始化表达式; 循环条件; 循环迭代语句) {
// 循环体代码
// 在每次迭代时执行的代码
}
- Executa expressões de inicialização, geralmente usadas para inicializar variáveis de loop.
- 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.
- Execute o código dentro do corpo do loop.
- Execute a instrução de iteração do loop, geralmente usada para atualizar o valor da variável do loop.
- 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 for
o uso de loops
for (int i = 0; i < 5; i++) {
printf("%d ", i);
}
Neste exemplo, a expressão de inicialização int i = 0
inicializa a variável de loop i
com um valor inicial de 0. A condição do loop i < 5
verifica i
se a variável é menor que 5 e, se for, executa o código no corpo do loop. Em cada iteração, imprima o i
valor atual. A instrução de iteração do loop i++
é usada para incrementar i
o 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 while
ainda 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, for
o estilo de loop é melhor; for
a frequência de loop também é a mais alta.
3.3.2 quebrar e continuar no loop for
Em for
um loop, o uso e o efeito da instrução break
and são os mesmos de continue
outras construções de loop, como while
and .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:
- Não modifique a variável de loop no corpo do loop for para evitar que o loop fique fora de controle.
- 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, goto
uma 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 goto
o 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 goto
instruçõ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
, if
etc.) podem ser usados em vez de goto
instruções para tornar o código mais estruturado e legível.