[C Elementary] Instrução de loop e ramificação

Índice

declaração if...else

editar

 falível

Imprimir números ímpares até 100 

declaração switch...case

semana de produção

 instrução de loop

julgamento comparativo 

1.break encerra o loop

2.continuar

ler caracteres

buffer lido

saída apenas caracteres numéricos 

 para loop

fazer... loop while

soma dos fatoriais de n

 Loop para obter impressão dinâmica

Adivinhe o jogo de números 【Resumo】

 Vá para

Editar programa de desligamento

 Vá para

loop while


declaração if...else

Primeiro introduzimos um conceito importante: 0 é verdadeiro, diferente de zero é falso.

A instrução de julgamento de ramificação if...else controla apenas quisermos executar várias instruções, podemos adicionar chaves. {} representa um segmento de código.

A instrução if corresponde ao else mais próximo por padrão.

Então, como determinamos a relação correspondente de if...else de acordo com nossos desejos? A resposta é adicionar chaves:

//形式1
if (condition)
	{
		return x;
	}
	return y;
//形式2
if (condition)
	{
		return x;
	}
else
		return y;

A segunda forma é geralmente recomendada em vez da primeira para melhorar a legibilidade.

 falível
int num = 1;
if (num = 5)
{
	printf("hehe\n");
}

Este código cairá em um loop infinito, preste atenção na distinção entre atribuição e igualdade

//正确
if (num == 5)
//容易检查错误
if(5 == num)

Imprimir números ímpares até 100 

Podemos usar a declaração de julgamento para produzir todos os números ímpares dentro de 100

	int i = 1;
	while (i <= 100)
	{
		if(i%2 == 1)
			printf("%d\n", i);
		i++;
	}
	

Mas também podemos obter essa função usando diretamente a instrução de loop para pular 2 números tentando sem julgar :

while (i <= 100)
	{
		printf("%d\n", i);
		i+=2;
	}

declaração switch...case

A instrução switch...case é usada como uma instrução de ramificação, o que significa um switch. Às vezes, é mais conveniente e legível do que a instrução if...else.

semana de produção

Modo normal:

int day = 0;
scanf("%d", &day);
if (1 == day)
	printf("星期1\n");
	else if (2 == day)
		printf("星期2\n");
	else if (3 == day)
		printf("星期3\n");
	else if (4 == day)
		printf("星期4\n");
	else if (5 == day)
		printf("星期5\n");
	else if (6 == day)
		printf("星期6\n");
	else if (7 == day)
		printf("星期天\n");

mudar reescrita: 

Quando inserimos 4, o programa entra na 4ª instrução, gera 4 semanas com sucesso, mas gera o seguinte ramo, você pode pensar nisso como um fluxo de corrente, que precisa de um portão para controlar o fechamento - break significa interrupção, semelhante a um portão . tecla fechar, ela irá parar quando for encontrada.

int day = 0;
	scanf("%d", &day);
	int n = 1;
	switch (day)//整型表达式
	{
	case 1:  //case 后必须是整型常量表达式
		printf("星期1\n");
		break;
	case 2:
		printf("星期2\n");
		break;
	case 3:
		printf("星期3\n");
		break;
	case 4:
		printf("星期4\n");
		break;
	case 5:
		printf("星期5\n");
		break;
	case 6:
		printf("星期6\n");
		break;
	case 7:
		printf("星期天\n");
		break;
	}

Agora imprimimos feriados e dias da semana, podemos modificar o código assim:

switch (day)//整型表达式
	{
	case 1:  //case 后必须是整型常量表达式
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}

Isso reflete a liberdade da instrução switch.Quando exibimos números diferentes de 1 a 7, podemos usar a palavra-chave default (default) para lidar com isso. default não precisa ser escrito no final da instrução, pode estar em qualquer lugar, então é melhor adicionar break depois dele.

 instrução de loop

Como o nome indica, um loop é uma operação que continuará a ser executada repetidamente depois que a condição de julgamento for atendida.

julgamento comparativo 

  

Quando a condição for atendida, ele continuará em loop. Se inserirmos uma condição verdadeira, ele entrará em um loop infinito. Para controlar o loop com flexibilidade, também adicionamos break e continue a controlar o loop.

1.break encerra o loop

Encontre um loop de interrupção e saia do loop atual

2.continuar

Ao encontrar continue, ignore o conteúdo por trás do corpo do loop e reinicie o loop ( pule este loop)

Quando o loop chegar a 5, o programa entrará em loop infinito, o correto é colocar i++ na primeira frase do loop para que não imprima 5.

ler caracteres

E se quisermos ler vários caracteres do teclado?

Ele retorna seu valor inteiro (correspondente ao valor do código ascii) quando a leitura é bem-sucedida. Isso é para se adaptar ao retorno de EOF (-1) quando falha na leitura. Também podemos encerrar manualmente a leitura - entrada do teclado ctrl+z

putchar é o caractere de saída, se for bem-sucedido, retornará o caractere e o exibirá na tela, se falhar, retornará EOF.

ch julga cada caractere recebendo o valor de retorno de getchar. Quando pressionamos Enter, getchar também irá ler e julgar, e depois imprimir na tela, então haverá um efeito de que um único caractere ocupa uma linha.

buffer lido

 Implementamos um programa simples de confirmação de senha para verificar se o cache existe.

Quando inserimos a senha , o retorno de carro é lido diretamente por ch , resultando na falha da confirmação de impressão direta, pois scanf parará de inserir após encontrar \n ou um espaço, e o conteúdo restante será deixado no buffer. Para evitar essa situação, podemos usar getchar para ler os espaços.

Depois de adicionar getchar, nosso código pode ser executado com sucesso

 Há outra situação a considerar

 Por quê isso aconteceu?

Em outras palavras, ainda não é processado de forma limpa. Neste momento, usamos um loop para limpar o conteúdo do buffer

saída apenas caracteres numéricos 

int ch = 0;
while ((ch = getchar()) != EOF)//多组输入,注意优先级加括号
{
	
	if (ch < '0' || ch > '9')
		continue;
/*if(ch <= '9' && ch >= '0')*/
	putchar(ch);
}

Deve-se notar que, embora o tipo char também possa receber o valor de retorno de getchar, é melhor usar int (pode ser truncado)

 para loop

O loop for é uma integração do loop while, permitindo-nos ajustar o loop com precisão.

for(código 1; código 2; ​​código 3)

Representam, respectivamente, a condição inicial, julgamento e atualização

Este código imprime todos os números de 1 a 10, exceto 5. Ao contrário do loop while, quando a condição de atualização é colocada em continue , ela não será executada, mas usando continue no loop for pode continuar a executar a condição de atualização

A inicialização, julgamento e ajuste de for podem ser omitidos, mas omitir a parte do julgamento significa que o julgamento é sempre verdadeiro

 Se omitirmos a parte inicial, algo assim pode aparecer:

 Imprima 100 vezes antes de não omitir. Após omitir, o valor de j não é reinicializado após imprimir 10 vezes, portanto ainda é 10.

Portanto, é melhor não omitir casualmente as condições de julgamento .

fazer... loop while

Suas características são: executar pelo menos uma vez , geralmente não é comumente usado.

 Qual é o resultado do seguinte código?

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

A resposta é a saída 1 2 3 4. Da mesma forma, como a condição de atualização é colocada após continuar, ele entra em um loop while (loop infinito) após a execução de continue.

soma dos fatoriais de n

A ideia específica é encontrar os fatoriais de 1 a n sucessivamente e somá-los sucessivamente.

    int i = 1;
	int sum = 0;
	int ret = 1;
	int n = 0;
	for (n = 1; n <= 3; n++)
	{
		ret = 1;
		for (i = 1; i <= n; i++)
		{
			ret = i * ret;
		}
		sum = sum + ret;
	}
	printf("%d", sum);

Observe que ret precisa ser alterado para 1 após cada loop

O segundo método (baixo consumo)

n!= (n-1)! * n

    int i = 1;
	int sum = 0;
	int ret = 1;
	int n = 0;
	for (n = 1; n <= 3; n++)
	{
		ret = n * ret;
		sum = sum + ret;
	}
	printf("%d", sum);

 Loop para obter impressão dinâmica

Dada uma string e um sinal # do mesmo comprimento, faça um loop todas as vezes, cubra os lados esquerdo e direito até que # esteja coberto em uma string.

#include<stdio.h>
#include<windows.h>
#include<string.h>
int main(){
char arr1[] = "welcome to here!!!!";
char arr2[] = "###################";
int left = 0;
int right = strlen(arr1)-1;
while (left <= right)
{
	arr2[left] = arr1[left];
	arr2[right] = arr1[right];
	printf("%s\n", arr2);
	Sleep(100);//休眠命令
	system("cls");//清空屏幕命令
		left++;
		right--;
}
printf("%s\n", arr2);
}

Você pode copiar esse código e executá-lo no compilador e observar um efeito dinâmico simples.

Adivinhe o jogo de números 【Resumo】

Combinamos o conhecimento aprendido neste artigo e usamos o jogo de adivinhação de números para fazer uma revisão. 

Escreva um menu sugerido:

void menu()
{
	printf("*********************************\n");
	printf("**********  1. play  ************\n");
	printf("**********  0. exit  ************\n");
	printf("*********************************\n");
}
int main()
{
	int n = 0;
	do
	{
		menu();
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			//game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择!\n");
			break;
		}
	}
while (n);
	return 0;
}

 Em seguida, aperfeiçoamos a função do jogo 

Para realizar a função de adivinhar números, precisamos de um computador para gerar números aleatórios, e rand é uma função especialmente usada para gerar números aleatórios.

Mas os números gerados por rand são pseudo-aleatórios, e os números da execução do programa pela segunda vez são exatamente os mesmos da primeira vez !

Portanto, usamos srand ( configurador de inicialização de número aleatório ) para tornar o número aleatório realmente aleatório.

O que vem mudando é o tempo, então use a função time para definir a inicialização. Seu valor de retorno é um timestamp (inteiro), estamos gerando valores aleatórios aqui, então você pode passar NULL para gerar valores aleatórios.

 Observe que srand só pode ser definido uma vez, portanto, não participa do loop, podemos adicioná-lo ao loop do...while

	srand((unsigned int)time(NULL));

 Como o tipo de retorno da função time é time_t, e o parâmetro de srand é um inteiro sem sinal, temos que convertê-lo.

void game()
{
	int num = rand()%100+1;//1-100之间
	int guess = 0;
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);

		if (guess < num)
			printf("猜小了\n");
		else if (guess > num)
			printf("猜大了\n");
		else
		{
			printf("猜对\n");
			break;
		}
	}
}

Integre os códigos acima e nosso jogo de adivinhação de números pode ser executado, apresse-se e experimente seu primeiro pequeno jogo em linguagem c!

 Vá para

Como uma função que salta de uma ou mais camadas de loops, as funções que podem ser realizadas pela instrução goto podem ser realizadas por outras instruções, e seu uso pode causar alguns problemas no programa (por exemplo, pular alguns programas pode causar o programa para aparecer bugs indepuráveis, etc.). Sua taxa de aparição não é alta e geralmente aparece em cenas que precisam pular vários loops de uma só vez . (quebra só pode pular de uma camada de loop)

 programa de desligamento

Como o nome sugere, é um programa que pode desligar o computador em um determinado momento. Eu escreveria este programa de duas maneiras

 Vá para

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    system("shutdown -s -t 60");//60秒内关机
again:
	
	printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机\n");
	char input[20] = { 0 };
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0)
	{
		system("shutdown -a");
		printf("关机取消\n");
	}
	else
		goto again;
	return 0;
}

resultado da operação:

loop while

int main()
{
	char input[20] = { 0 };
	system("shutdown -s -t 60");

	while (1)
	{
		printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机\n");
		scanf("%s", input);
		if (strcmp(input, "我是猪") == 0)
		{
			system("shutdown -a");
			printf("关机取消\n");
			break;
		}
	}
	return 0;
}

Acho que você gosta

Origin blog.csdn.net/dwededewde/article/details/131457661
Recomendado
Clasificación