初阶c语言(练习题,猜随机数,关机程序)
目录
第一题,使用函数编写一个随机数,然后自己猜,猜随机数
第二道题(关机程序)
实现代码(关机程序)
实现代码(猜数字)
前言:
学习c语言,学习来源b站鹏哥,37天吧应该是
内容:
这集内容挺多,源代码放到文章最后
第一题,使用函数编写一个随机数,然后自己猜,猜随机数
这里囊括了很多的知识点,理解起来有点吃力,写起来也很吃力,所以慢慢来,我不会奔溃的
首先利用了do while函数
这个函数的知识点,虽然只有一点点,但是合起来就有点麻烦,因为简单,所以没讲什么,
所以到用的时候,我就发现了一个问题,就是忘记了怎么写了
就是这个逻辑,do后面没有括号,然后就是while后面有括号
注意事项
do //每次循环都会执行do里面的语句
{
}
while()
{
}
然后函数可以嵌套一个函数,这也是非常常见的,大部分应该都支持嵌套
嵌套一个switch函数,这个是选择语句,输入一个值,看条件是否成立,这也是之前学的,全都用到了
switch("接受一个变量"),这个函数需要接收变量,然后进入循环,看这个变量对应循环的哪个判断语句,都不相等,则进入default,相当于if else的else
接收一个变量,但是输入0的话,才会退出程序,这应该是判断语句的
switch("变量")
{
case 1: //这里的1就对应变量switch括号里接收的值
{
printf("xxx"); //我记得执行一条语句不需要加大括号,但是这好像是两条,不管了
break; //发现了,老师也没加括号,这个应该不要加大括号
}
case2:
{
printf("xxx");
break;
}
default:
{
printf("xxx");
break;
}
}
运用到了void函数的无返回值,我之前稍微写了一下,对void稍微晓得一点,就是不用在函数里有输入return 0;这些,可以在函数里调用,然后就可以了,相当于一个功能点的样子
接下来编写随机值的函数,就是程序的主要部分
rand()函数,生成随机数的函数,但是这是伪随机数,就是说每次生成随机数的都是固定的,所以要配合时间戳,来实现时间戳的真随机,来实现函数的生成的真随机数
这个需要注意的是,就是头文件,就相当于实现一个功能需要的文件吧
rand函数的随机数的范围是
0~RAND_MAX(32767)
rand函数需要这个头文件
#include <stdlib.h>
void menu()
{
printf("***********************\n");
printf("********猜数字游戏******\n");
printf("********play 1********\n");
printf("********exit 0********\n");
}
void game()
{
int ret = rand(); //生成一个随机数,用一个变量接收
printf("%d\n", ret);
}
但是这样子不能实现数字的真随机生成,需要配合rand函数的另一个功能
srand(),接受一个整型的变量,就是这里面的数字是随机的,那rand生成的数字就是随机的,很像套娃,对了,就是,但是这里的随机数可以用时间来代替,因为时间是唯一的,也都是整型,就可以实现随机数的生成
这段代码还是有错误的,因为我就是他随机值还是固定的,就是说有一个时间戳没有搞好
void game()
{
//1、生成随机数
//0~99 --> 1~ 100
int ret = rand()%100 +1;
while(1)
{
printf("请输入数字:>");
scanf("%d", &guess);
if (guess < ret)
{
printf("太小了\n");
}
else if(guess > ret)
{
printf("太大了\n");
}
else
{
printf("恭喜你猜对了\n");
}
}
}
不知道这个为啥会输入在主函数里面
srand((unsigned int)time(NULL));
然后我试了一下放到game的函数里面,如果我刷新过快的,他的两个随机值是相同的情况
和老师讲的情况是一样的,但是我忘记老师说的为啥了,应该是放主函数更新速度快一点?
这个应该就是调用时间戳来实现,真正的随机数生成,应该就是rand函数的功能里的
第二道题(关机程序)
主要是利用那个system的函数,可以调用系统的命令,但是我输不了中文,好难受
我的处理办法是,在打开一个cmd窗口,输入shutdown -a取消关机
需要这三个头文件
#include <stdio.h>
#include <stdlib.h> //这个好像是system需要用的
#include <string.h> //这个是strcmp需要用的,就是比较两个字符串是否相等
但是运行完程序输入不了中文,还好我打开了cmd命令行,直接输入了shutdown -a结束了所有的关机程序,算了,不管了
但是这主要是goto语句的使用,但是一般goto语句是用的,用其他的方法也是可以替代goto语句,但是在某些情况用goto语句比较好,
比如深层次的循环,用goto可以一下就跳出循环了,提高效率
实现代码(关机程序)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//关机程序
//1、电脑运行起来,1分中内关机
//2、如果输入:我是猪,就取消关机
int main()
{
char input[20] = {};
system("shutdown -s -t 60");
again:
printf("请注意,你的电脑在60秒内关机,如果输入:我是猪,就取消关机\n");
scanf("%s", input);
while(1)
{
if(strcmp(input,"我是猪") == 0)
{
printf("正在取消关机");
system("shutdown -a");
break;
}
else
{
goto again;
//printf("你是笨蛋,正在关机,还有三次机会");
//break;
}
}
实现代码(猜数字)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//电脑产生一个随机数(1-100)
//猜数字
//猜大了
//猜小了
void menu()
{
printf("***********************\n");
printf("********猜数字游戏******\n");
printf("********play 1********\n");
printf("********exit 0********\n");
}
void game()
{
int guess = 0;
//1、生成随机数
//0~99 --> 1~ 100
int ret = rand()%100 +1;
while(1)
{
printf("请输入数字:>");
scanf("%d", &guess);
if (guess < ret)
{
printf("太小了\n");
}
else if(guess > ret)
{
printf("太大了\n");
}
else
{
printf("恭喜你猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:->");
scanf("%d", &input);
switch(input)
{
case 1:
{
game();
break;
}
case 0:
{
printf("退出程序\n");
break;
}
default:
{
printf("选择错误,请重新选择!\n");
break;
}
}
}while(input);
return 0;
}