C语言趣味编程演示_第1页
C语言趣味编程演示_第2页
C语言趣味编程演示_第3页
C语言趣味编程演示_第4页
C语言趣味编程演示_第5页
已阅读5页,还剩21页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C趣味编程演示 -黑白子交换1 有三个白子和三个黑子如下图布置: 游戏的目的是用最少的步数将上图中白子和黑子的位置进行交换:2 游戏的规则是: (1)一次只能移动一个棋子; (2)棋子可以向空格中移动,也可以跳过一个对方的棋子进入空格,但不能向后跳,也不能跳过两个子。请用计算机实现上述游戏。3 0 1 2 3例如按下列方法移动棋子:4 4 两个连在一起产生阻塞 或4 两个连在一起产生阻塞5“阻塞”现象就是: 在移动棋子的过程中,两个尚未到位的同色棋子连接在一起,使棋盘中的其它棋子无法继续移动。6 产生阻塞的现象的原因是在第2步(状态)时,棋子不能向右移动,只能将向左移动。 7 总结产生阻塞的原

2、因,当棋盘出现“黑、白、空、黑”或“白、空、黑、白”状态时,不能向左或向右移动中间的棋子,只移动两边的棋子。 按照上述规则,可以保证在移动棋子的过程中,不会出现棋子无法移动的现象,且可以用最少的步数完成白子和黑子的位置交换8 计算机解决胜这类问题的要害是要找出问题的规律,或者说是要制定一套计算机行动的规则。分析本题,先用人来解决问题,可总结出以下规则: (1) 黑子向左跳过白子落入空格,转(5) (2) 白子向右跳过黑子落入空格,转(5) (3) 黑子向左移动一格落入空格(但不应产生棋子阻塞现象),转(5) (4) 白子向右移动一格落入空格(但不应产生棋子阻塞现萌),转(5) (5) 判定游戏

3、是否结束,若没有结束,则转(1)继续。9 *程序与程序注释 #includeint number;void print(int a );void change(int *n,int *m);void main() int t7=1,1,1,0,2,2,2; /*初始化数组1:白子 2:黑子 0:空格*/ int i,flag; print(t); while(t0+t1+t2!=6|t4+t5+t6!=3) /*判断游戏是否结束若还没有完成棋子的交换则继续进行循环*/10 flag=1; /*flag 为棋子移动一步的标记1:尚未移动棋子 0:已经移动棋子*/ for(i=0;flag&i5;

4、i+) /*若白子可以向右跳过黑子,则白子向右跳*/ if(ti=1&ti+1=2&ti+2=0)change(&ti,&ti+2); print(t); flag=0; for(i=0;flag&i5;i+) /*若黑子可以向左跳过白子,则黑子向左跳*/11 if(ti=0&ti+1=1&ti+2=2) change(&ti,&ti+2); print(t); flag=0; for(i=0;flag&i6;i+) /*若向右移动白子不会产生阻塞,则白子向右移动*/ if(ti=1&ti+1=0&(i=0|ti-1!=ti+2) change(&ti,&ti+1); print(t);fla

5、g=0;12for(i=0;flag&i6;i+) /*若向左移动黑子不会产生阻塞,则黑子向左移动*/ if(ti=0&ti+1=2&(i=5|ti-1!=ti+2) change(&ti,&ti+1); print(t);flag=0; void print(int a ) int i; printf(No. %2d:.n,number+); printf( );13 for(i=0;i=6;i+) printf(| %c,ai=1?*:(ai=2?: ); printf( |n .nn); void change(int *n,int *m) int term; term=*n; *n=*

6、m; *m=term;14涉及的C语言知识点1.数组 语言对数组的初始赋值 int t7=1,1,1,0,2,2,2; /*1:白子 2:黑子 0:空格*/2.循环语句while(t0+t1+t2!=6|t4+t5+t6!=3) /*判断游戏是否结束*/for(i=0;flag&i5;i+) /*若白子可以向右跳过黑子,则白子向右跳*/153.指针变量做函数参数 void change(int *n,int *m) int term; term=*n; *n=*m; *m=term;16数组 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据

7、元素的集合称为数组。 在语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。17数组说明的一般形式为: 类型说明符 数组名 常量表达式,; 其中,类型说明符是任一种基本数据类型或构造数据类型。 数组名是用户定义的数组标识符。 方括号中的常量表达式表示数据元素的个数,也称为数组的长度。18语言对数组的初始赋值: 1.可以只给部分元素赋初值。当 中值的个数少于元素个数时,只给前面部分元素赋值。例如:int a10=0,1,2,3,4;表示只给a0a45个元

8、素赋值,而后5个元素自动赋0值。2.只能给元素逐个赋值,不能给数组整体赋值。 例如给十个元素全部赋1值,只能写为: int a10=1,1,1,1,1,1,1,1,1,1;而不能写为: int a10=1; 193.如不给可初始化的数组赋初值,则全部元素均为0值。4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如: int a5=1,2,3,4,5;可写为: int a =1,2,3,4,5; 动态赋值可以在程序执行过程中,对数组作动态赋值。 这时可用循环语句配合scanf函数逐个对数组元素赋值。 20用while语句实现循环1.一般形式如下:while (表达式)语句 2

9、. 当表达式为非0值时,执行while语句中的内嵌语句注意:(1)循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。(2)在循环体中应有使循环趋向于结束的语句。21用for语句实现循环1.一般形式如下:for(表达式1;表达式2;表达式3)语句2.也可以改写为while循环的形式:表达式1;while表达式2语句 表达式3;22说明:(1)语句的一般形式中的“表达式1”可以省略,此时应在语句之前给循环变量赋初值。省略表达式1时,其后的分号不能省略。(2)如果表达式2省略,即不判断循环条件,循环无终止地进行下去。(3)也可以省略表达式1和表达式3,只有表达式2,即只给循环条件

10、。(4)表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式。在逗号表达式内自左向右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。23 几种循环的比较 while循环,do .while循环和for循环 可以用break语句跳出循环 用continue语句结束本次循环 而用goto语句和if语句构成的循环 不能用break语句和continue语句进行控制。24指针变量做函数参数 指针变量1.定义一个指针变量的一般形式: 基类型*指针变量型例:float * pointer_3;char * pointer_4;2.当实参是指针变量,在函数调用时,将实参变量的值传给形参变量。采用的依然是按值传递的方式。25注意:void change(int *n,int *m) int *term; *term=*n; /*此语句有问题*/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论