首页 > 其他分享 >C语言笔记二的补充(实例应用)——猜数游戏的简单实现

C语言笔记二的补充(实例应用)——猜数游戏的简单实现

时间:2024-04-10 21:58:39浏览次数:21  
标签:rand 函数 猜数 int time C语言 实例 随机数 printf

猜数字游戏
要求:
  • 电脑自动生成1~100的随机数

  • 玩家猜数字,猜数字的过程中,根据猜测数据的大小给出反馈,直至才对,游戏结束。

基础知识搭建:

随机数的生成使用rand函数

int rand (void);

rand函数会返回一个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,大部分编译器上是32767.

rand函数的使用需要包含一个头文件<stdlib.h>

对于伪随机数的解释:伪随机数不是真正的随机数,是通过某种算法生成的随机数,真正的随机数是无法预测下一个数是多少的,而rand函数是对一个叫“种子”的基准值进行运算生成的随机数。

【当我们编码验证rand函数(多搞几个语句并列),连续几次生成的结果相同,原因是此时的默认种子为“1”,如果想生成不同的结果,就得让种子变化。】

C语言中又提供了srand函数,用来初始化随机数的生成器

void srand (unsigned int seed)

程序在调用rand函数之前先调用srand函数,通过种子参数seed来设置rand种子,使每次的随机数列变化。

C语言中的time函数一般作为种子,因为程序运行时间是随时变化的。

time_t time (time_t* timer)

time函数会返回当前的日历时间(其实返回的是1970年1月1日0时0分0秒到现在程序运行时间之间的差值,单位是秒)。返回的类型是time_t类型的,time_t类型本质上其实就是32位或者64位的整型类型。

time函数的参数timer如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。

如果timer是NULL,就只返回这个时间的差值。time函数返回的时间差也叫做:时间戳。

time函数的使用需包含头文件:<time.h>

如果只是让time函数返回时间戳,写为

time(NULL)

生成随机数的代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
    //因为srand参数是unsigned int类型,所以要将time函数的返回值强制类型转换
    srand((unsigned int)time(NULL));
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    return 0;
}

设置随机数的范围

rand() % 100;//余数范围0~99
rand() % 100+1;//1~100
100 + rand() % (200-100+1);//100~200
a + rand() %(b-a+1);//生成的a~b之间的随机数
代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
​
void game()//游戏函数
{
    int r = rand()%100+1;
    int guess = 0;
    while(1)//直接进入循环
    {
        printf("猜数游戏开始,输入你所猜的数:");
        scanf("%d",&guess);
        if(guess < r)
        {
            printf("小于真正数");
        }
        else if(guess > r)
        {
            printf("大于真正数");
        }
        else
        {
            printf("LUCKY!!!猜对了");
            break;
        }
    }
}
​
void menu()//菜单函数,随便设计
{
    printf("------------------------\n");
    printf("-------1. begin ---------\n");
    printf("-------0. exist ----------\n");
    printf("------------------------\n");
}    
​
int main()
{
    int input = 0;
    srand((unsigned int) time(NULL));
    do
    {
        menu();
        printf("进行游戏按1,退出按0\n");
        scanf("%d",&input);
        switch(input)
        {
            case 1:
                game();
                break;
            case 0:
                printf("成功退出\n");
                break;
            default:
                printf("非法输入!重新选择\n");
                break;
        }
    }while(input);//利用了do while先循环一次的特点
    rerurn 0;
}

如果想对猜数次数进行限制,只需在游戏函数中更改循环条件,其余不变。

代码如下:

void game()//游戏函数
{
    int r = rand()%100+1;
    int guess = 0;
    int times = 3;//设置次数,假定为3
    while(times)//直接进入循环
    {
        printf("猜数游戏开始,剩余次数%d,输入你所猜的数:",times);
        scanf("%d",&guess);
        if(guess < r)
        {
            printf("小于真正数");
        }
        else if(guess > r)
        {
            printf("大于真正数");
        }
        else
        {
            printf("LUCKY!!!猜对了");
            break;
        }
        times--;
    }
    if(times==0)
        printf("差点猜对,正确数字是%d",r);
}

标签:rand,函数,猜数,int,time,C语言,实例,随机数,printf
From: https://blog.csdn.net/weixin_64908198/article/details/137612775

相关文章

  • C语言笔记二——分支和循环(上)
    分支和循环1.if语句1.1if语句的语法形式如下:if(表达式)语句表达式成立(为真)语句执行;表达式不成立(为假)语句不执行。在C语言中,0为假,非0为真。//instance#include<stdio.h>intmain(){  intnum=0;  scanf("%d",&num);  if(num%2==1){   ......
  • C语言: 字符串函数(下)
    片头在上一篇中,我们介绍了字符串函数。在这一篇章中,我们将继续学习字符串函数,准备好了吗?开始咯!1.strncpy函数1.1strncpy函数的用法strncpy是C语言中的一个字符串处理函数,它用于将一个字符串的一部分内容复制到另一个字符串中。其函数原型为:char*strncpy(char*dest......
  • C语言分支和循环详解
    在程序中基础的三种结构为顺序结构,选择结构(分支结构),循环结构,几乎所有日常可见的事均可分为这三种结构或者这三种结构的组合.今天,我们就来详细了解一下关于C语言分支和循环语句.在正式介绍之前呢,先给大家提及一下C语言的控制语句:C语言共有9种控制语句,可以分为3类:......
  • C语言—指针变量作函参改错
    下面程序用于将6个数按输入时顺序的逆序进行排列。找出其中错误,并改正之。#include<stdio.h>voidSwap(int*x,int*y){    int*temp;    temp=x;    x=y;        y=temp;}voidSort(char*p,intm){  inti;  charchange,......
  • C语言的结构体
    结构体就是把一些单一类型组合在一起例如人:姓名+年龄+性别+电话程序如下#include<stdio.h>structstu{   charname[20];   intage;   charsex[10];   chartele[15];};intmain(){   structstus={"zhangsan",25,"nan","1663"}; ......
  • C语言学习笔记day18
    1.指针基本概念    1.地址:用来区分内存中不同字节的编号   2.指针:地址就是指针,指针就是地址   3.指针变量:存储指针的变量,有时去掉变量,称为指针2.指针运算符   1.&:      1.获得一个变量在内存空间中的首地址      2.让表达式类......
  • MySQL多表联合查询&聚合函数应用实例
     DDL——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`......
  • 【猜数字游戏】-C语言循环的应用及扩展函数的使用
    一、扩展函数的应用1.rand()生成随机数rand()函数需要引用一个头文件:#include<stdlib.h>intrand(void)//int代表返回一个整数,void代表无参数rand()无参数,会返回一个伪随机数,范围是0-RAND_MAX,这个RAND_MAX的大小依赖于编译器,大部分编译器上是32767rand()函数用法展......
  • 工作流新增实例
    定义xml:org.activiti.db.mapping.entity.insertHistoricTaskInstance调用:org.activiti.engine.impl.db;类:DbSqlSession方法:protectedvoidflushRegularInsert(Entityentity,Class<?extendsEntity>clazz){StringinsertStatement=this.dbSqlSessionFactory......
  • 基于C语言的面向对象设计模式(持续更新)
    前言首先这篇文章只是初步的尝试,不涉及过于高深的编程技巧;同时需要表明的是,面向对象只是一种思想,不局限于什么样的编程语言,不可否认的是基于面向对象特性而设计的语言确实要比面向过程式的语言更加容易进行抽象和统筹,可以说面向对象的设计模式可以很大程度上摆脱过程的实例,但要论......