面向对象程序设计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语言时输出中文会变成问号
- 没限制条件的话可能出现的错误太多(或许面向对象语言有比较好的处理错误的方法,但我目前还不懂)
- 以目前学到的知识能完成的东西十分有限