C语言猜数字游戏实验(07-1笔记的补充)

在C/C++编程练习中代码太多,不能明显体现有关分支、循环语句结构的实验变化,在此处单独归纳汇总一份我尝试过的三次猜数字游戏设计。

猜数字初版

#include <stdio.h>
#include <stdlib.h>int main() {int target = 37, n;printf("input guess number(1~100):\n");do {scanf("%d", &n);getchar();if (n == target) {printf("bingo!\n");break;}else if (n > target) {printf("guess a smaller number again\n");}else {printf("guess a bigger number again\n");}    }while (1);system("pause");return 0;
}

代码分析:比较简单,预先内置一个数供猜测使用。如何让这个数会自动变化呢?下面我们使用stdlib.h头文件中的rand函数和time.h头文件中的srand函数实现该功能。

猜数字进阶

#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main() {srand(time(NULL) * 1); //unsigned int time(0/NULL)*m~flexible    &    ?getpid~fixedint target = rand() % 100 + 1; //rand()%b+a: range=[a,b)int n, cnt = 0;char choice;while (1) { //do...while is the samedo {printf("input guess number(1~100):");scanf("%d", &n);getchar();cnt++;if (n == target) {printf("bingo! you used %d times\n", cnt);break;}else if (n > target) {printf("guess a smaller number again\n");}else {printf("guess a bigger number again\n");}  }while (1);printf("do you want again?N/n:no,else yes input: \n");scanf("%c", &choice);getchar();if (choice == 'n' || choice == 'N') {break;}else { //resettarget = rand() % 100 + 1; //cnt = 0;}}system("pause");return 0;
}

代码分析:srand随机种子,rand本质上仍不是真正的随机,当需要随机的数据量达到一定规模时会发现数据分布符合正态分布。

函数说明:
1.rand:可以产生伪随机数,默认随机种子是1,所以可以用srand设置随机种子辅助变得更随机(随机种子相同,每次产生随机数相同)。本质上仍无法真正的随机,当需要随机的数据量达到一定规模(如50,0000)时会发现rand数据分布符合正态分布。注意随机数的范围是左闭右开,因此想达到右端点需要通过+1实现。如:设置[m, n]范围的随机整数可用 int num = rand() % (n-m+1) + m。由于rand函数类型是int,本身范围是0~RAND_MAX(stdlib有定义),故随机的小数可以这样做:double num = (double)rand() / RAND_MAX; 现在范围是0 ~ 1,如果范围是[m, n),就再这样:num = m + num * (n - m); 就行了。C没有random函数。

2.srand随机种子,借助unsigned int型的time(0/NULL)*m实现随时间变化的随机性(flexible),m显然是u int型。如:srand((unsigned int)time(NULL) * 10); 如果这样:srand((unsigned int)getpid()); 在同一个程序中种子值是固定的(fixed)。

猜数字改版

#include <stdio.h>
#include <stdlib.h>
//#include <conio.h> //getchint main() {int target = 0, n, cnt = 0, times, flag = 0;printf("input target number(>=0):");scanf("%d", &target);getchar();/*while (1) { //hide target number    has bugstarget = getch();if (target == '\r') {break;}putchar('*'); // \b back}*/printf("input permit guess times(>0):");scanf("%d", &times);getchar();do {printf("please input guess number(>=0):\n");scanf("%d", &n);getchar();cnt++;if (n < 0) {printf("End\n");flag = 1;}else if (n > target) {printf("You guessed bigger than the target.\n");}else if (n < target) {printf("You guessed smaller than the target.\n");}else {if (cnt == 1) {printf("eye to eye\n");}else if (cnt <=3) {printf("good luck\n");}else {printf("bingo\n");}flag = 1;}if (cnt == times) {if (!flag) {printf("Game Over\n");flag = 1;}}   }while (!flag);system("pause");return 0;
}

代码分析:由人输入数字(人想数字是相对真正随机的),再由另一人猜。<conio.h>不是标准库函数,需要注意可移植性,同时使用getch只读入字符,转换到整型时会产生bug,应该只有部分两位数可以正确猜测。

C语言学习笔记07-2-循环的游戏实验:猜数字(附rand、srand函数说明)相关推荐

  1. R语言学习笔记 07 Probit、Logistic回归

    R语言学习笔记 文章目录 R语言学习笔记 probit回归 factor()和as.factor() relevel() 案例11.4复刻 glm函数 整理变量 回归:Logistic和Probit- ...

  2. C语言学习笔记08-函数、变量作用域{}

    C语言自定义函数 函数 / 方法(面向对象语言),将功能重复的代码段(原始的方式是cv)提取抽象出main方法外,将其放入一个新的函数中,从而在main中只需要调用该函数就可完成一项复杂的工作,代码会 ...

  3. C语言学习笔记06-占位符格式、C基本类型及逃逸字符一些细节(附介绍BCD码)

    主要整理有关占位符格式与逃逸字符的一些细节 朋友们,看栗子--"BCD解码" (文末附BCD码介绍) 一个BCD数的十六进制是0x12(对应二进制表示:0001 0010),它表达 ...

  4. Lawliet|C语言学习笔记5——循环结构

    C语言学习笔记--循环结构 1.求1+2+3+-+100 #include<stdio.h> int main() {int i=1,sum=0; //定义变量i的初值为1,sum的初值为 ...

  5. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  6. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  7. go get 拉取指定版本_go语言学习笔记-基础知识-3

    相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...

  8. Ink脚本语言学习笔记(二)

    目前想要基于Ink脚本语言和Unity新的UIToolkit做一套对话系统,本文对Ink脚本语言的使用方式做一下介绍和总结 Ink脚本语言学习笔记(一) 二.缝合(Weave) 目前没想好怎么翻译这个 ...

  9. C语言学习笔记-P1 初识C语言(2)

    C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...

  10. R语言学习笔记(1~3)

    R语言学习笔记(1~3) 一.R语言介绍 x <- rnorm(5) 创建了一个名为x的向量对象,它包含5个来自标准正态分布的随机偏差. 1.1 注释 由符号#开头. #函数c()以向量的形式输 ...

最新文章

  1. python 直接if判断和is not None的区别
  2. Nginx反向代理和负载均衡部署指南
  3. 一个很奇怪的 OpenCV出错:resize的坑
  4. Kosaraju 算法查找强连通分支
  5. SAP ABAP编辑器里的Code Completion(代码自动完成)的等待时间设置
  6. python oracle blob_如何用python在oracle中插入blob?
  7. css揭秘实战技巧 - 形状 [二]
  8. 39-如何共享数据?
  9. Scss 与 Sass 是什么,他们的区别在哪里?
  10. RDP Wrapper
  11. 使用python暴力破解压缩包密码winrar解压密码破解源代码
  12. Ordinal Regression 年龄估计(CVPR2016)
  13. FS\OFS\RS\ORS的使用
  14. excel怎么筛选?教你一个简单粗暴的筛选技巧
  15. 数字IC/FPGA设计面试与工作_sky
  16. 获取全国行政区域划分数据
  17. 营救(广度优先搜索)题解
  18. 【SGU 448】Controlled Tournament(状态压缩动态规划)
  19. Linux下退出vi编辑模式
  20. 笔记本连网DNS服务器未响应,笔记本连接不到internet,显示DNS服务器未响应,该怎么办?win7系统。...

热门文章

  1. java redis 发送短信验证码
  2. Ubuntu18.04安装微信以及打开闪退问题
  3. 获取当前时间年月周(按每月周一开始到周日算第一周)
  4. mysql性能优化 洪斌_技术分享 | InnoDB Cluster 如何高效加载数据
  5. 记录一个CentOS 6版本中,yum install 命令无法实现的问题 # 谭子
  6. 【WLAN从入门到精通-基础篇】第11期——WLAN接入认证-Portal
  7. 第三十七章 SQL函数 CURRENT_TIMESTAMP
  8. 从零开发Vscode上传图片插件
  9. 两小球冲突,仿优信,拖动小球
  10. Cephalocon APAC 2018在北京成功举办