练习
编写代码,演示多个字符从两端移动,向中间汇聚。
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
char arr[] = "bit";//[b i t \0]
0 1 2 3
strlen(arr)-1;
char arr1[] = "welcome to bit!!!!!";
char arr2[] = "*******************";
int left = 0;//左下标
int right = strlen(arr1)-1;//strlen计算字符串长度,头文件是<string.h>
while (left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);//Sleep函数是实现睡眠,单位是毫秒
在windows下:#include <windows.h>,Linux下:#include <unistd.h>.
system("cls");//system是一个库函数,可以执行系统命令,cls是清空屏幕的一个命令,头文件是#include<stdlib.h>
left++;
right--;
}
printf("%s\n", arr2);
return 0;
}
编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则
提示登录成,如果三次均输入错误,则退出程序。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("**********************************\n");
printf("*********** 1.play **********\n");
printf("*********** 0.exit **********\n");
printf("**********************************\n");
}
//RAND_MAX--rand函数能返回随机数的最大值。
void game()
{
int random_num = rand()%100+1;
int input = 0;
while(1)
{
printf("请输入猜的数字>:");
scanf("%d", &input);
if(input > random_num)
{
printf("猜大了\n");
}
else if(input < random_num)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf("请选择>:");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误,请重新输入!\n");
break;
}
}while(input);
return 0;
}
判断两个字符串是否相等,要使用strcmp函数,不能直接使用==
int ret = strcmp(password, "123456");
如果第一个字符串小于第二个字符串,返回<0的数字
如果第一个字符串大于第二个字符串,返回>0的数字
如果第一个字符串等于第二个字符串,返回0
知识点:
rand函数是专门用来生成随机数的
rand函数返回的是0~RAND_MAX(32767)之间的一个随机数
#define RAND_MAX 0x7fff
rand函数在使用之前要使用一个srand函数来设置随机数的生成器
srand函数在程序中只要调用一次就可以了,不需要频繁调用
时间戳
C语言中,time函数会返回时间戳
NULL - 空指针
goto语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过
程。
例如:一次跳出两层或多层循环。
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
goto语言真正适合的场景如下:
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况
可以从goto error直接跳转到error。
#一个关机程序
#include <stdio.h>
int main()
{
char input[10] = {0};
system("shutdown -s -t 60");
again:
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if(0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
#写代码将三个整数数按从大到小输出
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
//输入3个整数
scanf("%d %d %d", &a, &b, &c);
//调整
//最大的值放在a中,最小值放在c中,剩余的一个放在b中
if (a < b)
{
int tmp = a;
a = b;
b = tmp;
}
if (a < c)
{
int tmp = a;
a = c;
c = tmp;
}
if (b < c)
{
int tmp = b;
b = c;
c = tmp;
}
//输出
printf("%d %d %d\n", a, b, c);
return 0;
}
打印100~200之间的素数
#include<stdio.h>
int main()
{
int i = 0;
for (i = 9; i <= 200; i++)
{
//判断i是否为素数
//拿2~i-1之间的数字试除
int flag = 1;//假设i是素数
int j = 0;
for (j = 2; j <= i - 1; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
}
}
return 0;
}
给定两个数,求这两个数的最大公约数
#include<stdio.h>
int main()
{
int m = 0;
int n = 0;
//输入
scanf("%d %d", &m, &n);//18 24
int k = (m > n ? n : m);
//假设最大公约数就是m和n的较小值
while (1)
{
if (m % k == 0 && n % k == 0)
{
break;
}
k--;
}
printf("%d\n", k);
return 0;
}