遇到一个学弟向我请教一个问题,按照要求写了一个程序,功能是实现了,但算法设计的不好,代码重复太多,仅供参考
题目描述
某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走(D), 走的长度(直接记数字)。设初始朝向直角坐标的Y正方向,起点坐标为(0,0)。
例如,我们可以对小车输入如下的四条指令:
L,10
L,10
L,10
L,10
则,小车先左转,然后直行10厘米,左转,再走10厘米,再... 不难看出,对于此指令串,小车又回到了出发地(0,0)。
若输入以下动作:
D 10
D 10
D 10
D 10,则:小车在(0,40)位置。
编程任务是:编写程序,由用户输入四条指令,程序输出最后小车坐标。
#include<stdio.h>
int main(void)
{
char cDirection = 0; //获取命令中的方向
char cOldDirection = 'U';//原来的方向,U:up;D:down;L:left;R:right
int iNumber=0;//命令中走的单位
int x=0,y=0;//坐标x,y的值
int iLoop=0;//记录命令的次数
puts("please your command:\n");
while(iLoop<4)
{
scanf("%c,%d",&cDirection,&iNumber);
switch(cDirection)
{
case 'L':
if('U' == cOldDirection)
{
x-=iNumber;
cOldDirection='L';
}
else if('L' == cOldDirection)
{
y-=iNumber;
cOldDirection='D';
}
else if('R' == cOldDirection)
{
y+=iNumber;
cOldDirection='U';
}
else if('D' == cOldDirection)
{
x+=iNumber;
cOldDirection='R';
}
else
{
;
}
iLoop++;
break;
case 'R':
if('U' == cOldDirection)
{
x+=iNumber;
cOldDirection='R';
}
else if('L' == cOldDirection)
{
y+=iNumber;
cOldDirection='U';
}
else if('R' == cOldDirection)
{
y-=iNumber;
cOldDirection='D';
}
else if('D' == cOldDirection)
{
x-=iNumber;
cOldDirection='L';
}
else
{
;
}
iLoop++;
break;
case 'D':
if('U' == cOldDirection)
{
y+=iNumber;
cOldDirection='U';
}
else if('L' == cOldDirection)
{
x-=iNumber;
cOldDirection='L';
}
else if('R' == cOldDirection)
{
x+=iNumber;
cOldDirection='R';
}
else if('D' == cOldDirection)
{
y-=iNumber;
cOldDirection='D';
}
else
{
;
}
iLoop++;
break;
}
};
printf("the localtion is:(%d,%d)\n",x,y);
getchar();
return 0;
}