初阶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函数的功能里的

实现代码

复制代码
#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;
 } 
相关推荐
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海8 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨10 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区11 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大12 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai12 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜12 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa12 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio