上一篇我们说过,要以“斗庄家赚元宝”为故事进行C语言的学习,这里我们先交待下游戏规则。
猪八戒是庄家,每期从00000~99999中随机开出五位数,每天开1000期,有多种玩法,赔率统统是1.9,即是沙僧每注可以押下1个元宝,中了可以返奖2个元宝,每期扣去给唐僧的抽成10%保护费,实际上到手的是1.9个元宝,扣去成本1,纯赚0.9,如果挂了,就亏本1个元宝。白龙马负责记帐、收钱、分钱,孙悟空负责帮沙僧想策略赢利。游戏的过程是“1.猪八戒吆喝让大家下注->2.沙僧根据孙悟空的策略下注->3.猪八戒摇号开奖->4.白龙马记帐分钱”,如此往复。
这样算来,每天1000期里面即使中了500期也是亏本的,亏在给唐僧抽成的10%保护费。那么至少要中多少期才能平本?这似乎是条数学题,我们尝试计算一下。
设每天1000期里中了X期,挂了Y期,则 X*0.9-Y >= 0 时开始平本盈利,那么X和Y分别是多少?怎么办,初中学过代数,一个一个代入数值来算。先代入X等于500,不符合,然后501,502,503... ...直到X=527终于符合了,在1000期里,中527期,挂473期,盈利527*0.9=474.3,亏损473*1=473。所以孙猴子需要想出1000期里至少能赢527期的才有利可图,不然就会造成亏损。
下面我们开始和孙猴子一起构思用C语言模拟这个游戏,根据统计和概率,把自己构思的各种策略用C语言模拟运行进行验证,看到底能不能最终得到一个能稳赚的策略。
先用纸笔把游戏过程的思路伪代码写出来:
程序开始
//每天开奖1000期
循环开始(从第1期开始;1000次;每次期号递增1){
//1.猪八戒吆喝,让大家下注
//2.沙僧根据孙悟空的策略下注
//3.猪八戒摇号开奖
//4.白龙马记帐分钱,唐僧抽成
}
然后我们得找个C语言的开发工具,用C语言代码实现出来。用哪款C语言开发工具好呢?有很多可以选择,Visual Studio、Code::Blocks、CodeLite、VC++、CLion、Dev C++、Smart-C++、Aardio等都可以,在这里因为我们只是用于学习,所以得选择轻小的、易安装、易使用的,能把C代码跑起来就行,所以我们选择Smart-C++为主,Aardio为辅,将来我们要用C写DLL给Aaardio写的窗口程序调用,毕竟用C写窗口界面太麻烦了,而用Aaardio写窗口程序就非常简单。当然大家也可以选择你喜欢的、你用着顺手的开发工具,上面提到的都是很不错的。
下载地址:
Smart-C++1.2.5.174 (在Dev-C++ 5.3.0.2的基础上,针对程序设计竞赛大改,支持单文件调试,自带MinGW32编译器,自带基础知识和例程帮助文件,解压即用) 大小:23.1M
http://www.jianma123.com/download/Smart-C++1.2.5.174.7z
(若下载不了可以进简码编程群389536006在群共享里下载)
Aardio (纯绿软,国产,无依赖,解压即用) 大小:5.6M http://www.aardio.com/
然后大家把下面这段C语言代码复制粘贴进去运行一下看看效果:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
//开奖10次的过程
void randomize(void); //初始化随机数发生器
for(int i=1;i<=100;i++){
//1.猪八戒吆喝,让大家下注
printf ("猪八戒:要发财的快来买啦 \n");
//2.沙僧根据孙悟空的策略下注
printf ("沙悟净:我要买个位%d \n",12345);
//3.猪八戒摇号开奖
printf ("猪八戒:开奖啦,第%d期 随机开奖号=%d%d%d%d%d \n",i,rand()%10,rand()%10,rand()%10,rand()%10,(rand()+1)%10);
//4.白龙马记帐分钱,唐僧抽成
printf ("白龙马:本期结算分钱 \n\n");
}
return 0;
}
上面只是一个预览大体框架的过程,只有随机开奖号功能实现了,其它的还只是占着位置还没写实际功能。这也是我写程序的一个经验,先整体,后局部,先把整体逻辑、流程写出来,再去填充具体的各个子功能。上面这段代码是怎么来的?每行又是什么意思?怎么去理解并记住 这些英文?请关注下一篇。
code_c = /** //使C代码第一行位于文件第一行,这样就不需要计算错误信息的行号
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
//Aardio里跑要加这句打开控制台窗口
io_reopen();
//开奖10次的过程
void randomize(void); //初始化随机数发生器
for(int i=1;i<=100;i++){
//1.猪八戒吆喝,让大家下注
printf ("猪八戒:要发财的快来买啦 \n");
//2.沙僧根据孙悟空的策略下注
printf ("沙悟净:我要买个位%d \n",12345);
//3.猪八戒摇号开奖
printf ("猪八戒:开奖啦,第%d期 随机开奖号=%d%d%d%d%d \n",i,rand()%10,rand()%10,rand()%10,rand()%10,(rand()+1)%10);
//4.白龙马记帐分钱,唐僧抽成
printf ("白龙马:本期结算分钱 \n\n");
}
return 0;
}
**/
import tcc;
vm = tcc(); //创建TCC编译器
vm.compile(code_c);//编译C源码
//直接运行 main() 入口函数
var ret = vm.run("測試命令參數","測試命令參數2","支持任意多個參數");
io.print( ret )
vm.close();
execute("pause") //按任意键继续
io.close();//关闭控制台
//Aardio里跑要加这句打开控制台窗口
io_reopen();