[Notas de estudo básico da linguagem C] 2. Instruções de ramificação e loop (3)

Apresentação pessoal: Xiaobai que é iniciante na linguagem C e um novato que adora programação.
Na vida, devemos viver lindamente e caminhar sonoramente. Se você não lutar contra si mesmo, é apenas uma decoração. Não importa quem você seja, você prefere ser um perdedor batalhador do que uma pessoa comum que está satisfeita com o status quo. O propósito de construir um navio não é ficar no porto, mas bater no vento e nas ondas; o propósito de ser homem não é ficar em casa, mas criar um sonho.



prática de programação

1. Calcule o fatorial de n (cálculo fatorial)

#include<stdio.h>
int main()
{
    
    
	int i = 0;
	int n = 0;
	int ret = 0;
	scanf("%d", &n);

	//i = 1;//方法一:while语句结构
	//ret = 1;
	//while (i <= n)
	//{
    
    
	//	ret *= i;
	//	i++;
	//}

	//方法二:for语句结构
	//for (i = 1, ret = 1; i <= n; i++)
	//{
    
    
	//	ret *= i;
	//}

	//方法三:do while语句结构
	i = 1;
	ret = 1;
	do
	{
    
    
		ret *= i;
		i++;
	} while (i <= n);

	printf("%d\n", ret);
	return 0;
}

insira a descrição da imagem aqui


2. Calcule 1! + 2! + 3! + .... + 10! (soma do cálculo fatorial)

Maneira comum:

int main()
{
    
    
	int i = 0;
	int n = 0;
	int sum = 0;
	//printf("请输入一个数来计算其阶乘:>>\n");
	//scanf("%d", &n);
	for (n = 1; n <= 3; n++)
	{
    
    
		int s = 1;
		for (i = 1; i <= n; i++)
		{
    
    
			s = s * i;
		}
		sum = sum + s;
	}
	printf("前n项阶乘之和为:%d\n", sum);
	return 0;
}

insira a descrição da imagem aqui

Embora este método realize a soma fatorial, a eficiência não é alta. Toda vez que o fatorial é calculado, ele precisa ser multiplicado por 1.
Na verdade n! = (n - 1!) * n; por exemplo, 3! = 2! * 3. De acordo com essa ideia, otimizamos o seguinte código original para se tornar:

int main()
{
    
    
	int i = 0;
	int n = 0;
	int s = 1;
	int sum = 0;
	//printf("请输入一个数来计算其阶乘:>>\n");
	//scanf("%d", &n);
	for (i = 1; i <= 3; i++)
	{
    
    
		s = s * i;
		sum = sum + s;
	}
	printf("sum = %d\n", sum);
	return 0;
}

insira a descrição da imagem aqui


3. Encontre um número específico n em uma matriz ordenada. (matriz ordenada para encontrar números)

Maneira comum, percorra todos os elementos na matriz

int main()
{
    
    
	int arr[] = {
    
     1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
    
    
		if (arr[i] == k)
		{
    
    
			printf("找到了,下标为%d\n", i);
			break;
		}
	}
	if (i == sz)
		printf("找不到\n");
	return 0;
}

insira a descrição da imagem aqui

Embora o método acima possa encontrar um certo número, é muito ineficiente (a eficiência é n).
Na verdade, já sabemos que este é um array ordenado, então podemos pesquisar de acordo com a relação de ordenação do array.
O seguinte é usar o método de pesquisa binária\meio método de pesquisa para pesquisar, a eficiência é log2n

#include<stdio.h>
//二分查找法查找特定数字
int main()
{
    
    
	int arr[] = {
    
     1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;
	while (left <= right)//left小于=right代表中间还有元素可查找
	{
    
    
		int mid = (left + right) / 2;//找到中间元素
		if (arr[mid] > k)//中间元素与被查找变量的比较
			right = mid - 1;
		else if (arr[mid] < k)
			left = mid + 1;
		else
		{
    
    
			printf("找到了,下标是:%d\n", mid);
			break;//找到后要退出循环体
		}
	}
	if (left > right)//需要进行判断,因为来到这一步的也有可能是通过break来的,不一定是执行完循环才到这里的
		printf("找不到了\n");
	return 0;
}

insira a descrição da imagem aqui


4. Escreva um código para demonstrar que vários caracteres se movem de ambas as extremidades e convergem para o meio.

Antes de tudo, devemos entender o significado do título e saber o que ele significa.
Por exemplo: semelhante a este efeito
insira a descrição da imagem aqui

Existem duas strings de caracteres aqui, então podemos definir duas matrizes de caracteres para armazená-las.
Podemos mover os elementos da matriz superior para a matriz inferior e, em seguida, imprimir a matriz inferior.
insira a descrição da imagem aqui
insira a descrição da imagem aqui
O código mostra:

#include<stdio.h>
#include<string.h>
//welcome to c_code!!!!!!
//#######################
//w#####################!
//we###################!!
//wel#################!!!
//.......
//welcome to c_code!!!!!!
int main()
{
    
    
	char arr1[] = "welcome to c_code!!!!!!";
	char arr2[] = "#######################";
	int left = 0;
	/*int right = sizeof(arr1) / sizeof(arr1[0]) - 1;*///这种是错误的,arr1最后一个字符是字符串结束标志\0
	/*int right = sizeof(arr1) / sizeof(arr1[0]) - 2;*///-2是正确的,但是我们不推荐这种方式,容易出错
	int right = strlen(arr1) - 1;//strlen计算字符串长度是不会将\0计算进去
	while (left <= right)
	{
    
    
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		left++;
		right--;
	}
	return 0;
}

A exibição do resultado:
insira a descrição da imagem aqui


Descobrimos que o resultado será impresso abaixo e não podemos sentir a mudança, então esperamos que toda vez que imprimirmos, possamos fazer uma pausa por um curto período de tempo.
Use o arquivo de cabeçalho da função Sleep() Windows.h
Sleep(1000) para descansar por 1000ms = 1s
insira a descrição da imagem aqui
insira a descrição da imagem aqui
para executar o programa, você pode verificar as alterações nele.
Além de deixar o programa pausar por um determinado período de tempo cada vez que imprimir, também podemos executar outra etapa de transformação, como limpar a tela. O
arquivo de cabeçalho da função system() é stdlib.h
system ("cls") para executar comandos do sistema Uma função cls --- - limpa a tela


5. Escreva o código a ser implementado, simule o cenário de login do usuário e efetue login apenas três vezes.

(Só permite digitar a senha três vezes. Se a senha estiver correta, ele avisará que o login foi bem-sucedido. Se a entrada estiver errada três vezes, o programa será encerrado)

Ponto propenso a erros: Use == para comparar diretamente se as strings são iguais.
Solução: Use a função de biblioteca strcmp para comparar se as strings são iguais. Se as duas strings forem iguais,
o valor de retorno de strcmp(arr1, arr2) é 0. Você só precisa julgar se o valor de retorno de strcmp é 0 para determinar se as strings são iguais

#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char password[20];
	int i = 0;
	for (i = 0; i < 3; i++)
	{
    
    
		printf("Please input your password:>>\n");
		scanf("%s", password);
		/*if (password == "123456")*///不能直接用==来比较两个字符串是否相等
		if (strcmp(password, "123456") == 0)
		{
    
    
			printf("password is right,good luck to you!");
			break;
		}
	}
	if (i == 3)
		printf("you idiot,put the wrong password three times,don't have another chance!");
	return 0;
}

A exibição do resultado:
insira a descrição da imagem aqui
insira a descrição da imagem aqui


Para melhorar a experiência de interação do usuário, podemos fornecer um prompt quando a senha for digitada incorretamente:
insira a descrição da imagem aqui
insira a descrição da imagem aqui
strcmp comparação de strings parsing
char string1[] = “abcdef”;
char string2[] = “abccqqqqqq”
strcmp(string1, string2)
use strcmp para comparar Quando string1 e string2, compare cada caractere da esquerda para a direita, os três primeiros caracteres "abc" de string1 e string2 são iguais, o quarto caractere de string1 é d, o quarto caractere de string2 é c e o código ASCII de d é maior que c código ASCII, então strcmp julgará string1 > string2 e retornará um valor maior que 0.


adivinhe o jogo de números

Requisitos:
1) O computador irá gerar um número aleatório
2) Adivinhe o número

猜数字游戏思路:
1、进入游戏后先打印菜单栏
提示是否进行猜数字游戏 (1为是,0为否)
2、首先要至少玩一次游戏,使用do while语句   只要不退出游戏就一直进行
3、使用switch语句对输入内容进行判断
1 玩游戏 调用game函数进行猜数字游戏
0 打印  退出游戏
其它  打印  选择错误

菜单栏实现 menu函数
猜数字实现  先要生成一个随机数 比如1 - 200
1.先生成一个随机数 rand()
2.rand()是伪随机,在使用之前要调用srand
3.为了让srand生成一个随机值,使用电脑时时刻刻都在变动的时间-- - 时间戳
srand((unsigned int)time(NULL))  //强制类型转换
4.为了产生1 - 200之间的随机数 我们让rand去模上200 + 1
5.猜数字具体操作
(1)先提示输入数字
(2)判断输入数字和随机数之间的大小关系并给予提示
(3)猜对了之后退出本回合猜数字游戏
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
    
    
	printf("***************************\n");
	printf("****  1.play   0.exit  ****\n");
	printf("***************************\n");
}
//RAND_MAX
void game()//猜数字函数
{
    
    
	int guess = 0;
	int ret = 0;
	//拿时间戳来设置随机数的起点   time_t time( time_t *timer ); time_t long类型
	//需要一个变化的数字,电脑上的时间是变化的
	//1.生成随机数
	ret = rand() % 100 + 1;//设置生成1-100之间的随机数
	//printf("%d\n",ret);
	//2.猜数字
	//printf("猜数字\n");
	while (1)
	{
    
    
		printf("请猜数字:>>\n");
		scanf("%d", &guess);
		if (guess > ret)
			printf("猜大了\n");
		else if (guess < ret)
			printf("猜小了\n");
		else
		{
    
    
			printf("你真棒!猜对了!\n");
			break;
		}
	}
}
int main()
{
    
    
	srand((unsigned int)time(NULL));
	int input = 0;
	do//游戏至少进行一次,可以进行多次,选择do...while语句
	{
    
    
		menu();
		printf("请选择:>>\n");
		scanf("%d", &input);
		switch (input)
		{
    
    
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}

	} while (input);
	return 0;
}

A exibição do resultado:
insira a descrição da imagem aqui


ir para declaração

A função do comando goto: salta para a posição do comando característico

aplicativo de instrução goto

Jogo de desligamento automático

Dica:
Configurações do sistema: shutdown - s - t 60 Defina o computador para desligar automaticamente após 60s
system("shutdown -s -t 60") //sistema( ) o arquivo de cabeçalho da função é stdlib.h

#include<stdio.h>
//设置电脑2分钟后自动关机,如果输入“我是猪”就取消关机
int main()
{
    
    
	char input[20];
	//shutdown -s -t 120  设置在120s后关机
	system("shutdown -s -t 120");
again:
	printf("电脑将在两分钟后自动关机,如果输入“我是猪”将取消关机\n请输入:>>\n");
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0)
	{
    
    
		printf("成功取消关机\n");
		system("shutdown -a");
	}
	else
	{
    
    
		printf("输入错误,请重新输入\n");
		goto again;
	}
	return 0;
}


insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/QIYICat/article/details/115764555
Recomendado
Clasificación