编写程序,由用户输入四条指令,程序输出最后小车坐标。

本文介绍了一款简单的C语言程序,用于模拟机器人小车根据用户输入的指令进行移动。通过解析转向和前进指令,程序计算并输出小车最终的位置坐标。

遇到一个学弟向我请教一个问题,按照要求写了一个程序,功能是实现了,但算法设计的不好,代码重复太多,仅供参考

题目描述
某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值