目录 第1章C语言概述/1 1.1计算机语言/1 1.1.1低级语言和高级语言/1 1.1.2面向过程和面向对象/2 1.2C语言概述/3 1.2.1C语言的发展/3 1.2.2C语言的特点/3 1.3C语言程序示例/4 1.4C语言程序的开发过程/8 1.5小结/13 1.6习题/13 1.7扩展阅读——初识人工智能/14 第2章算法基础/16 2.1算法的概念/16 2.2算法的描述方法/17 2.3机器博弈的概念/19 2.4博弈算法/21 2.4.1搜索算法的分类与特点/21 2.4.2典型博弈算法介绍/21 2.5机器博弈项目规则/23 2.5.1井字棋规则/23 2.5.2亚马逊棋规则/23 2.5.3五子棋规则/24 2.5.4爱恩斯坦棋规则/24 2.6小结/252.7习题/25 2.8扩展阅读——机器博弈的发展历程/25 第3章数据类型与表达式/28 3.1棋局要素/29 3.2常量与变量/30 3.2.1常量/30 3.2.2变量/33 3.2.3变量的定义与声明/34 3.2.4变量初始化/35 3.3数据类型转换/36 3.3.1隐式类型转换/36 3.3.2显式类型转换/37 3.4运算符和表达式/38 3.4.1算术运算符及其表达式/38 3.4.2赋值运算符及其表达式/39 3.4.3机器博弈中的局面评估函数/40 3.5输入与输出/40 3.5.1字符输入/输出函数/40 3.5.2棋局信息输出/41 3.5.3棋局信息输入/43 3.6小结/45 3.7习题/45 3.8扩展阅读——机器博弈竞赛/46 第4章选择结构/48 4.1引例/48 4.2关系运算与逻辑运算/49 4.2.1关系运算符及其表达式/49 4.2.2逻辑运算符及其表达式/50 4.2.3井字棋落子坐标合法性判断/51 4.3if语句/52 4.3.1简单逻辑判断/52 4.3.2复杂逻辑判断/56 4.3.3井字棋步数和落子颜色判断/57 4.4switch语句/58 4.4.1switch语句的基本应用/59 4.4.2爱恩斯坦棋着法选择/60 4.5小结/60 4.6习题/60 4.7扩展阅读——机器博弈系统组成/61 第5章循环结构/63 5.1引例/63 5.23种循环语句/64 5.2.1while语句/64 5.2.2do…while语句/64 5.2.3for语句/66 5.3计数循环/67 5.3.1计数循环的基本应用/67 5.3.2蒙特卡洛方法求π的近似值/69 5.3.3井字棋随机落子/70 5.4条件循环/71 5.4.1条件循环的基本应用/71 5.4.2井字棋落子坐标控制/73 5.5循环嵌套/73 5.5.1循环嵌套的基本应用/73 5.5.2绘制五子棋棋盘/75 5.6控制转移语句/75 5.7综合程序举例——五子棋棋盘坐标及落子/77 5.8小结/80 5.9习题/80 5.10扩展阅读——博弈树/82 第6章数组/84 6.1一维数组/84 6.1.1引例/84 6.1.2一维数组的基本操作/85 6.1.3一维数组实现井字棋棋盘数字化/93 6.2二维数组/94 6.2.1二维数组的基本操作/94 6.2.2二维数组实现井字棋人人对弈/98 6.3字符数组/101 6.3.1字符数组的定义和引用/1016.3.2字符数组的输入/输出/103 6.3.3常用字符串处理函数/105 6.4综合程序举例——五子棋人人对弈程序/110 6.5小结/116 6.6习题/116 6.7扩展阅读——机器博弈中的蒙特卡洛方法/117 第7章函数/119 7.1概述/119 7.1.1基本概念与引例/119 7.1.2井字棋博弈程序的函数/122 7.2函数的定义/123 7.2.1函数定义的基本格式/124 7.2.2函数的参数/124 7.2.3return语句/128 7.2.4函数原型的声明/129 7.2.5实现博弈程序的一般过程和方法/130 7.3函数的调用/132 7.3.1函数调用的形式/132 7.3.2函数调用的过程/133 7.4递归函数的设计与调用/134 7.4.1简单递归函数的设计与调用/134 7.4.2井字棋博弈程序中的递归函数/136 7.5变量的作用域和生存期/137 7.5.1变量的作用域/138 7.5.2变量的生存期/139 7.5.3井字棋博弈程序中的全局变量/140 7.6综合程序举例/142 7.7小结/149 7.8习题/149 7.9扩展阅读——Minimax算法原理及其实现/150 第8章预处理与位运算/152 8.1预处理命令/152 8.1.1机器博弈中常量值的处理/152 8.1.2文件包含——机器博弈中多文件操作/156 8.1.3条件编译——防止机器博弈中重复包含/159 8.2位运算/161 8.3机器博弈中的Zobrist哈希技术/166 8.4小结/168 8.5习题/168 8.6扩展阅读——AlphaBeta剪枝/169 第9章指针/171 9.1指针的基本概念/171 9.1.1指针在博弈程序中的作用/171 9.1.2变量的地址/172 9.1.3指针变量的概念/174 9.2指针变量的定义与引用/174 9.2.1指针变量的定义与赋值/174 9.2.2指针变量的引用/176 9.2.3指针变量作为函数参数/177 9.3指针与数组/178 9.3.1通过指针访问数组元素/178 9.3.2指针变量所支持的运算/179 9.3.3数组名作函数参数/180 9.3.4指向数组的指针/182 9.4指针与字符串/184 9.5指向函数的指针/186 9.6指针型函数/187 9.7指针数组和多级指针/188 9.7.1指针数组的概念/188 9.7.2多级指针/190 9.7.3main函数的参数/190 9.8指针在博弈程序中的应用/191 9.8.1用命令行参数设置博弈程序的先后手/192 9.8.2构建大小可变的棋盘/193 9.9综合程序举例/194 9.10小结/198 9.11习题/199 9.12扩展阅读——遗传算法/201 第10章结构体和链表/203 10.1结构体的基本操作——记录竞赛相关信息/203 10.1.1记录五子棋棋谱数据/203 10.1.2结构体的声明和定义/204 10.1.3结构体的初始化和引用/207 10.1.4类型定义符typedef/211 10.2结构体指针——记录竞赛得分信息/211 10.2.1指向结构体变量的指针/211 10.2.2指向结构体数组的指针/213 10.3单向链表——记录赛队成绩/213 10.3.1概念/214 10.3.2动态存储分配/216 10.3.3链表的基本操作/218 10.4综合程序举例——比赛积分数据维护/225 10.5小结/227 10.6习题/227 10.7扩展阅读——人工神经网络/228 第11章文件/230 11.1文件的概述/230 11.2文件的打开和关闭/232 11.2.1文件指针/232 11.2.2打开或关闭文件——棋谱文件的打开或关闭/233 11.3文件的读写函数/236 11.3.1字符读写函数——存取五子棋棋盘/236 11.3.2字符串读写函数——读取名言警句/240 11.3.3格式化读写函数——保存落子信息/241 11.3.4块读写函数——保存赛队信息/244 11.4文件的定位函数/245 11.5综合程序举例——五子棋棋谱的读写/246 11.6小结/250 11.7习题/250 11.8扩展阅读——机器学习/251 第12章浅谈面向对象/253 12.1面向对象概念/253 12.2面向对象设计/254 12.2.1类的基本概念/254 12.2.2类的实例化/256 12.3Windows窗体设计/258 12.4综合程序举例/265 12.5小结/268 12.6习题/269 12.7扩展阅读——深度学习/269 第13章项目实战/271 13.1猜数游戏挑战赛/271 13.1.1功能与要求/271 13.1.2程序的构成/271 13.1.3程序运行截图/272 13.2简易五子棋/273 13.2.1关键数据结构设计/273 13.2.2系统设计/274 13.2.3函数功能及说明/280 13.2.4数据结构和搜索算法的优化/281 13.3综合程序举例——五子棋的棋盘设计(C#)/283 13.4小结/291 13.5扩展阅读——AlphaGo/292 附录AC语言运算符优先级和结合性表/295 参考文献/297