C语言程序设计推箱子算法

C语言程序设计推箱子算法,第1张

#include"stdioh"

#include"biosh"

#define LEFT 75

#define RIGHT 77

#define UPPER 72

#define DOWN 80

#define ESC 27

struct Boxss /定义箱子结构体,其中包含坐标属性/

{

int x,y;

};

union keyboard /定义读取键盘码的共用体类型/

{

unsigned int iKeyInfo;

char chKeyBit[2];

};

int fnGetKey(void) /定义读取键盘码的函数/

{

union keyboard uniKey1; /定义读取键盘码的共用体变量/

while(bioskey(1)==0); /检测用户是否按键/

uniKey1iKeyInfo=bioskey(0); /读取按键信息/

return(uniKey1chKeyBit[0]==0uniKey1chKeyBit[1]:uniKey1chKeyBit[0]); /返回ASCII码或扩充码/

}

void main()

{

int iKey,x=11,y=6,tx=11,ty=6; /x,y为人物移动后坐标,tx,ty为人物移动前坐标/

struct Boxss Box[4]; /定义箱子数量/

int chMap[10][10]={ /用二维数组定义地图/

{0,0,0,0,0,0,0,0,0,0}, /0表示墙1表示路2表示目标/

{0,1,0,0,0,0,1,1,1,0},

{0,1,0,2,0,0,1,0,1,0},

{0,1,0,1,0,0,1,0,1,0},

{0,1,1,1,0,0,1,0,1,0},

{0,1,0,0,0,0,1,0,1,0},

{0,1,1,1,1,1,1,0,1,0},

{0,1,0,1,0,0,0,0,2,0},

{0,2,0,1,1,1,1,2,0,0},

{0,0,0,0,0,0,0,0,0,0},

};

int i,j;

Box[0]x=13; /定义箱子的坐标属性/

Box[1]x=11;

Box[2]x=14;

Box[3]x=18;

Box[0]y=8;

Box[1]y=7;

Box[2]y=13;

Box[3]y=7;

while(1) /反复进行求移动的坐标运算/

{

for(i=0;i<10;i++) /输出新地图(刷新地图)/

{

gotoxy(10,5+i);

for(j=0;j<10;j++)

{

if(chMap[i][j]==0)

printf("#");

if(chMap[i][j]==1)

printf(" ");

if(chMap[i][j]==2)

printf("X");

}

}

j=0; /判断是否所有箱子都在目标坐标上/

for(i=0;i<4;i++)

if(chMap[Box[i]y-5][Box[i]x-10]==2)

j++;

if(j==4) /如果所有箱子都就位输出"YOU WIN!"退出/

{

clrscr();

printf("You Win!");

break;

}

for(i=0;i<4;i++) /在起始(或移动后)的坐标输出箱子/

{

gotoxy(Box[i]x,Box[i]y);

printf("0");

}

gotoxy(x,y); /在起始(或移动后)的坐标输出人/

printf("\b");

tx=x; /记录本次移动前的坐标/

ty=y;

iKey=fnGetKey();

if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变/

x--;

if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)

x++;

if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)

y--;

if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)

y++; /输入ESC退出并输出"YOU LOST"/

if(iKey==ESC)

{

clrscr();

printf("You Lost");

break;

}

for(i=0;i<4;i++) /如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格/

if(Box[i]x==x&&Box[i]y==y)

{

Box[i]x+=(x-tx);

Box[i]y+=(y-ty);

if(chMap[Box[i]y-5][Box[i]x-10]==0) /如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值/

{

Box[i]x-=(x-tx);

Box[i]y-=(y-ty);

x=tx;

y=ty;

}

break;

}

clrscr();

}

getch();

}

各种编程语言算法运算符类似,以C++为例介绍。

C++提供了以下运算符:

1、算术运算符

+(加)

-(减)

(乘)

/(除)

%(整除求余)

++(自加)

--(自减)

2、关系运算符

>(大于)

<(小于)

==(等于)

>=(大于或等于)

<=(小于或等于)

!=(不等于)

3、逻辑运算符

&&(逻辑与)

||(逻辑或)

!(逻辑非)

4、位运算符

<<(按位左移)

>>(按位右移)

&(按位与)

|(按位或)

^(按位异或)

~(按位取反)

5、赋值运算符

(=及其扩展赋值运算符)

6、条件运算符

(:)

7、逗号运算符

(,)

8、指针运算符

()

9、引用运算符和地址运算符

(&)

10、求字节数运算符(sizeof)

11、强制类型转换运算符(

(类型)

或类型(

))

12、成员运算符

()

13、指向成员的运算符

(->)

14、下标运算符

([

])

15、其他

(如函数调用运算符())。

一个简单的程序设计一般包含以下四个步骤:

(1) 分析问题,建立数学模型。

(2) 确定数据结构和算法。

解决问题确定的方法和有限的步骤称作为算法。通常计算机算法分为两大类:数值运算算法和非数值运算算法。任何简单或复杂的算法都是由基本功能 *** 作和控制结构这两个要素组成。

计算机的基本功能 *** 作包括以下四个方面:

(1) 逻辑运算:与、或、非;

(2) 算术运算:加、减、乘、除;

(3) 数据比较:大于、小于、等于、不等于、大于等于、小于等于;

(4) 数据传送:输入、输出、赋值。

算法的基本控制结构通常包括顺序结构、分支结构和循环结构。

算法是对程序控制结构的描述,而数据结构是对程序中数据的描述。

在计算机的高级语言中,数据结构是通过数据类型表现的

算法是一个有穷规则的集合,这些规则确定了解决某类问题的一个运算序列。对于该类问题的任何初始输入值,它都能机械地一步一步地执行计算,经过有限步骤后终止计算并产生输出结果。归纳起来,算法具有以下基本特征:

(1) 有穷性:一个算法必须在执行有限个 *** 作步骤后终止;

(2) 确定性:算法中每一步的含义必须是确切的,不可出现任何二义性;

(3) 有效性:算法中的每一步 *** 作都应该能有效执行,一个不可执行的 *** 作是无效的。例如,一个数被0除的 *** 作就是无效的,应当避免这种 *** 作。

(4) 有零个或多个输入:这里的输入是指在算法开始之前所需要的初始数据。这些输入的多少取决于特定的问题。有些非凡算法也可以没有输入。

(5) 有一个或多个输出:所谓输出是指与输入有某种特定关系的量,在一个完整的算法中至少会有一个输出。

算法可以用任何形式的语言和符号来描述,通常有自然语言、程序语言、流程图、N-S图、PAD图、伪代码等。所有的程序是直接用程序设计语言表示算法。流程图、N-S图和PAD图是表示算法的图形工具,其中,流程图是最早提出的用图形表示算法的工具,所以也称为传统流程图。它具有直观性强、便于阅读等特点,具有程序无法取代的作用。N-S图和PAD图符合结构化程序设计要求,是软件工程中强调使用的图形工具。

(3) 编制程序。

4) 调试程序。

语言、程序和程序设计;算法、算法设计和算法的表示;程序结构、结构化程序和程序风格。

语言是交流的工具,程序是指令的集合,而程序设计就是用计算机语言对所要解决的问题进行完整而准确的描述过程。一个完整的程序应该涉及到以下四个方面的问题:

数据结构、算法、编程语言、程序设计方法

程序设计过程的五个步骤是:①分析问题,建立数学模型;②确定数据结构和算法;③编制程序;④测试程序。其中第①、②步就是确定解决问题的方案;第③步是用程序语言把这个解决方案严格的描述出来;第④步是在计算机上测试这个程序。在这里,工作过程的第①、②步与其他领域里解决问题的方法相类似,只是考虑问题的基础不同、出发点不同。在程序设计领域里,我们需要从计算的观点、程序的观点出发,由此引出了数据结构、算法设计以及算法的表示等新问题。这是本章的重点,也是程序设计的基础。第③、④步是程序设计工作的非凡问题。由于程序设计具有严格规定的组成结构,各种结构有明确定义的功能和形式,要把问题解决方案转变为符合这些结构的形式,这也不是轻而易举的,需要把握相关的技术和方法。由此引出了程序的三种基本结构、流程图、N-S图和结构化程序设计等方法和技术。这些都是程序设计的基本知识,每一个程序设计工作者都必须把握。

会用一些常用算法(例如迭代法、枚举法、递归法等)解决实际问题,对于初学者来说,是至关重要的。许多初学者往往是把要解决的问题首先和程序设计语言中的语句联系在一起,影响了程序设计质量。设计算法和编写程序要分开考虑,当你还没有学习程序语言时,就学会针对一些简单问题设计算法,这是学习程序设计入门的好方法。

程序的结构化技术是程序设计的基本技术,它使得程序在逻辑上层次分明、结构清楚、易读、易维护,从而提高程序质量和开发效率。采用结构化程序设计方法,并且用流程图表示算法是必须的。将算法转换成程序代码,并注重程序风格,这都是编写代码时要注重的问题。

以上就是关于C语言程序设计推箱子算法全部的内容,包括:C语言程序设计推箱子算法、算法与程序设计中的运算符有哪些、2012年软考程序员知识点:程序设计基础知识等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9998366.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存