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.
Diretório de artigos
-
- prática de programação
-
- 1. Calcule o fatorial de n (cálculo fatorial)
- 2. Calcule 1! + 2! + 3! + .... + 10! (soma do cálculo fatorial)
- 3. Encontre um número específico n em uma matriz ordenada. (matriz ordenada para encontrar números)
- 4. Escreva um código para demonstrar que vários caracteres se movem de ambas as extremidades e convergem para o meio.
- 5. Escreva o código a ser implementado, simule o cenário de login do usuário e efetue login apenas três vezes.
- adivinhe o jogo de números
- ir para declaração
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;
}
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;
}
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;
}
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;
}
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;
}
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
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.
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:
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
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:
Para melhorar a experiência de interação do usuário, podemos fornecer um prompt quando a senha for digitada incorretamente:
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:
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;
}