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

Índice

 1. O que é uma declaração?

 2. Extrato da filial

2.1 declaração if

2.1.1 Outra flutuação 

2.2 declaração de troca

 3. Instrução de loop

3.1 loop while

 3.1.1 interromper e continuar no loop while

quebrar

continuar

3.2 loop for

【Perguntas de exercícios】

3.3 loop do...while() 

4. declaração goto

5. Pratique 


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:

  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

 Onde branches e loops são instruções de controle

As instruções de controle da linguagem C são:

  1. Instrução de ramificação (instrução de julgamento condicional): instrução if, instrução switch
  2. Instrução de loop: instrução do while, instrução while, instrução for
  3. 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 é:

Acho que você gosta

Origin blog.csdn.net/qq_72505850/article/details/131766555
Recomendado
Clasificación