程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
/*logo海龟画图游戏*/
void draw(int pen,int dir,int step,int arrayDir[],int arrayTotal[][50]);
int main(void)
{
int penStatus=1; /*determine the pen status down or up*/
int dir=0; /*detemine the direction*/
int command=0; /*first input command*/
int command2=0; /*steps */
int array1[50][50]={0};
int arrayDir[2]={0};
int a=0;
int i=0;
int j=0;
while(a!=-1)
{
printf("Enetr the command:");
scanf("%d", &command);
switch(command)
{
case 1:
penStatus=1;
break;
case 2:
penStatus=2;
break;
case 3:
dir+=1;
break;
case 4:
dir-=1;
break;
case 5:
printf("dir:%d\n",dir);
scanf(",%d", &command2);
draw(penStatus,dir,command2,arrayDir,array1);
printf("poisition now is %d %d\n",arrayDir[0],arrayDir[1]);
break;
case 6:
for(i=0;i<50;i++)
{
for (j=0;j<50;j++)
{
if (array1[i][j]==1)
printf("*");
else
printf(" ");
}
printf("\n");
}
break;
case 9:
a=-1;
break;
default:
printf("Wrong Input");
}
}
}
void draw(int pen,int dir,int step,int arrayDir[],int arrayTotal[][50])
{
int i=0;
int x;
x=dir%4;
printf("%d\n",x);
if (dir%4==0)
{
if(pen==2)
{
for (i=0;i<=step;i++)
{
arrayTotal[arrayDir[0]][arrayDir[1]+i]+=1;
}
arrayDir[1]+=step;
}
}
if (dir%4==1||-3)
{
if (pen==2)
{
for(i=0;i<=step;i++)
{
arrayTotal[arrayDir[0]+i][arrayDir[1]]+=1;
}
arrayDir[0]+=step;
}
}
if (dir%4==3||-1)
{
if (pen==2)
{
for(i=0;i<=step;i++)
{
arrayTotal[arrayDir[0]-i][arrayDir[1]]+=1;
}
arrayDir[0]-=step;
}
}
if (dir%4==2||-2)
{
if (pen==2)
{
for(i=0;i<=step;i++)
{
arrayTotal[arrayDir[0]][arrayDir[1]-i]+=1;
}
arrayDir[1]-=step;
}
}
}
这是完整的程序
下面是 题目
4.23(龟图)Logo语言在个人计算机用户中非常流行,该语言形成了龟图的概念。
假设有两个机器海龟,通过C++程序控制在房子中移动。在两个方向之一打开画笔,即向上或向下。画笔向下时,海龟跟踪移动的形状并留下移动的路径,画笔向上时,海龟自由移动不写下任何东西。在这个问题中,要模拟海龟的操作和生成计算机化的草图框。
用20*20数组floor,初始化为0。从数组中读取命令。跟踪任何时候海龟的当前位置和画笔的向上或向下状态。假设海龟总是从位置0,0开始,画笔向上。程序要处理的海龟命令如下:
命令 含义
1 笔向上
2 笔向下
3 右转
4 左转
5,10 前进10格(或几格)
6 打印20*20数组
9 数据结束(标记)
假设海龟接近平面中心。下列“程序”绘制和打印12*12正方形并让画笔向上:
2
5,12
3
5,12
3
5,12
3
5,12
1
6
9
画笔向下并移动海龟时,将数组floor的相应元素设置为1。指定命令6(打印)时,只要数组中右1,就显示星号或选择的其他符号,画一些有趣的图形。增加其他命令以增加龟图语言的功能