面向对象程序设计2020第一次作业

面向对象程序设计2020第一次作业

这个作业属于哪个课程 2020面向对象程序设计张栋班
这个作业要求在哪里 寒假作业1
这个作业的目标 安装开发环境、回顾知识、了解编译过程、实现白话文编程、记录学习过程并发布博客
作业正文 1.问答题2. 实践题3.编程题
其它参考文献 问答题和实践题中已注明

注: 系统是Mac OS


编程题

1. 要求:
  • 在只有“整数、等于、增加、减少、看看”五个关键字、数据范围0-99的情况下,实现白话文编程
2. 分解需求
  • 语法定义:遇到“整数“时开始定义变量,并把“等于“后面的中文所代表的大小赋值给变量;遇到“增加“、”减少“能够进行相应的运算;遇到”看看“能够输出最终结果

  • 超过9的数据能够处理成中文的语言习惯,比如10不是输出”一零“而是”十“
    temp = a.value;
    if(temp <= 10)
    {
        printf("%s",convertToString(temp));
    }
    else if(temp % 10 == 0 && temp < 100)
    {
        printf("%s十",convertToString(temp/10)); #十的整数倍输出为几十而不是几零
    }
    else if(temp < 20)
    {
        temp %= 10;
        printf("十%s",convertToString(temp)); #输出十几而不是一十几
    }
    else if(temp < 100)
    {
        printf("%s十%s",convertToString(temp/10),convertToString(temp%10));
    }
  • 能够实现多个变量的输入、运算、输出(没实现,后面有时间再改善)

完整代码

// 感觉处理方式不太好,提示错误的方式也是很暴力
#include <stdio.h>
#include <string.h>
typedef struct variable
{
    char name[1000];
    int value;
} var;
int convertToInt(char str[]);
char* convertToString(int n);

int main()
{
    var a;
    char integer[6];
    char name[1000],operator[6],number[3];
    int temp;
    scanf("%s",integer);
    if(strcmp(integer,"整数"))
    {
        printf("Error: 您输入的不是“整数”\n");
    }
    else
    {
        scanf("%s%s%s",a.name,operator,number);
        if(strcmp(operator,"等于"))
        {
            printf("Error: 您输入的不是“等于”\n");
        }
        else if(convertToInt(number) == -1)
        {
            printf("Error: 请输入正确的数字大小\n");
        }
        else
        {
            a.value = convertToInt(number); //赋初始值
            scanf("%s",name);
            while(!strcmp(name,a.name))
            {
                scanf("%s%s",operator,number);
                if(convertToInt(number) == -1)
                {
                    printf("Error: 请输入正确的数字大小\n");
                }
                else if(!strcmp(operator, "增加"))
                {
                    a.value += convertToInt(number);
                }
                else if(!strcmp(operator, "减少"))
                {
                    a.value -= convertToInt(number);
                }
                else
                {
                    printf("Error: 请输入正确的运算\n");
                    break;
                }
                scanf("%s",name);
            }
            if(!strcmp(name,"看看"))
            {
                scanf("%s",name);
                if(!strcmp(name,a.name))//“看看”后面输入的内容得和前面的变量名称相同
                {
                    temp = a.value;
                    if(temp <= 10)
                    {
                        printf("%s",convertToString(temp));
                    }
                    else if(temp % 10 == 0 && temp < 100)
                    {
                        printf("%s十",convertToString(temp/10));//十的整数倍输出为几十而不是几零
                    }
                    else if(temp < 20)
                    {
                        temp %= 10;
                        printf("十%s",convertToString(temp));//输出十几而不是一十几
                    }
                    else if(temp < 100)
                    {
                        printf("%s十%s",convertToString(temp/10),convertToString(temp%10));
                    }
                }
                else
                {
                    printf("不存在此变量\n");
                }
            }
        }
        
    }
    return 0;
}

int convertToInt(char str[])
{
    if(!strcmp(str,"零"))    return 0;
    else if(!strcmp(str,"一"))    return 1;
    else if(!strcmp(str,"二"))    return 2;
    else if(!strcmp(str,"三"))    return 3;
    else if(!strcmp(str,"四"))    return 4;
    else if(!strcmp(str,"五"))    return 5;
    else if(!strcmp(str,"六"))    return 6;
    else if(!strcmp(str,"七"))    return 7;
    else if(!strcmp(str,"八"))    return 8;
    else if(!strcmp(str,"九"))    return 9;
    else return -1;
}

char* convertToString(int n)
{
    if(n == 0)  return "零";
    else if(n == 1) return "一";
    else if(n == 2) return "二";
    else if(n == 3) return "三";
    else if(n == 4) return "四";
    else if(n == 5) return "五";
    else if(n == 6) return "六";
    else if(n == 7) return "七";
    else if(n == 8) return "八";
    else if(n == 9) return "九";
    else if(n == 10) return "十";
    else return "Error";
}
运行示例


遇到的问题
  • 中文的存储和比较
  • 运行C语言时输出中文会变成问号
  • 没限制条件的话可能出现的错误太多(或许面向对象语言有比较好的处理错误的方法,但我目前还不懂)
  • 以目前学到的知识能完成的东西十分有限

猜你喜欢

转载自www.cnblogs.com/ganguan/p/12230387.html
今日推荐