关于C语言海龟图问题

dlmuxwj 2016-06-16 11:33:15
#include <stdio.h>
#include <stdlib.h>
char state = 'a';
int i=0,j=0,xstate=0,Dstate[1][2]={{0,1}};
int floor[50][50]={0};

int direction( int m1);
int move(int n1,int x1);
int print(void);
int main()
{
int x,m,n,wind=1;
int i1=0,j1=0;
for(i1=0;i1<25;i1++)
{for(j1=0;j1<50;j1++)
{
printf("%d",floor[i1][j1]=0);
}
printf("\n");
}//将floor这个数组的前25*50都置为0

while (wind!=0) /*当wind为0时退出*/
{
printf("\ninput the comand:");
scanf("%d",&m);
switch (m){
case 1: /*判断是否为输入状态参数*/
xstate = 0;
break;
case 2:
xstate = 1;
break;
case 3:
direction(m);
break; /*判断选取数组a中的元素*/
case 4:
direction(m);
break;
case 5:
case 10:
printf("\nplease input the distance:");
scanf("%d",&n);
move(n,xstate);
break; /*用数组a中的返回值,对数组floor进行操作*/
case 6:
print();
break; /*打印floor数组*/
case 9:
wind = 0;
break; /*退出程序标志*/
}
}
system("pause");
return 0;
}

int direction(int m1)
{
if (m1 == 3){
switch (state){
case 'a':
Dstate[0][0] = 1;
Dstate[0][1] = 0;
state = 'd';
break;

case 'b':
Dstate[0][0] = -1;
Dstate[0][1] = 0;
state = 'c';
break;
case 'c':
Dstate[0][0] = 0;
Dstate[0][1] = 1;
state = 'a';
break;
case 'd':
Dstate[0][0] = 0;
Dstate[0][1] = -1;
state = 'b';
break;

}
}
else if(m1 == 4)
{
switch (state){
case 'a':
Dstate[0][0] = -1;
Dstate[0][1] = 0;
state = 'c';
break;

case 'b':
Dstate[0][0] = 1;
Dstate[0][1] = 0;
state = 'd';
break;
case 'c':
Dstate[0][0] = 0;
Dstate[0][1] = -1;
state = 'b';
break;
case 'd':
Dstate[0][0] = 0;
Dstate[0][1] = 1;
state = 'a';
break;

}
}
return 0;
}

int move (int n1,int x1)
{
while(n1>0)
{ i = i+ Dstate[0][0];
j = j+ Dstate[0][1];
floor[i][j] = x1;
n1--;
}
return 0;
}

int print(void)
{ int i1=0,j1=0;
for(i1=0;i1<50;i1++)
{for(j1=0;j1<50;j1++)
{ if (floor[i1][j1] == 1)
printf("%c",'*');
else
printf("%d",floor[i1][j1]=0);
}
printf("\n");
}
return 0;
}

这段代码不是自己写的(自己不会)在这段代码中,我有很多问题:1:首先是Dtate这个数组是用来干什么的?2:在direction这个函数中,实现上下左右的时候,应用Dstate这个数组来实现的,但是我没有读懂是怎么使得上下左右走的;3:能不能帮我讲讲move这个函数
...全文
267 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 版主 2016-06-16
  • 打赏
  • 举报
回复
多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程!
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
赵4老师 2016-06-16
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
dlmuxwj 2016-06-16
  • 打赏
  • 举报
回复
谢谢赵老师和版主大人的悉心教诲,因为自学C语言,一开始就没有养成一个好习惯去自己调试程序,真的谢谢你们能够抽出时间来告诉我怎么学习C语言

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧