这个作业属于哪个课程 | 2020年面向对象程序设计 |
---|---|
这个作业要求在哪里 | 面向对象程序设计寒假作业1 |
这个作业的目标 | 1.安装C++开发环境 2.完成问答题、实践题及编程题 3.发布博客 |
作业正文 | https://www.cnblogs.com/ying-hua/p/12222477.html |
其他参考文献 | https://jingyan.baidu.com/article/b2c186c81e79a6c46ef6ffd1.html |
一.问答题
1.c语言的缺陷:
我不了解c++,学习c语言到现在的确遇到一些不顺手的地方。例如:输入或输出不同类型的变量时要用不同的格式符,比如%d %lf。有时整个程序都要修改,比较麻烦。最烦恼的地方就是在程序某些地方写错的时候不会编译错误,比如把%d写成%n,或者忘记加地址符&,这类错误就难以找到。
2.c语言的编译过程:
(1)进行编译预处理:对程序中的伪指令和特殊符号进行处理。
(2)编译:将经过预处理之后的程序转换成特定汇编代码。
(3)汇编:将汇编代码转化为机器码,产生目标文件。
(4)连接:连接多个目标文件和库文件,产生可执行文件。
二.实践题
1.查看c++编译器版本
打开devc++,就在右上角,如图
2.使用命令行编译一份c语言代码
由于不懂什么事命令行,我搜索到了如下网址,并按他的方法操作
https://jingyan.baidu.com/article/b2c186c81e79a6c46ef6ffd1.html
然而里面有错误,无论如何我都找不到vsvarsall.bat 后来看到图片中是vcvarsall.bat
于是我就找到vcvarsall.bat的目录,模仿图片中的代码写,居然成功了
然后继续模仿图片代码,成功生成exe文件
但是我输入数据按了回车后程序就退出了,我还没来得及看清答案QAQ
于是我就在命令行中直接运行程序,终于成功了
三.编程题(c语言)
问题分解
1.如何辨别汉字?
汉字本质上是字符串,经过查阅资料,了解c语言中的strcmp函数可以比较字符串,于是所有的汉字我都用以下的方法辨别。strcmp(str,"整数")==0
2.如何让计算机知道需要定义、计算还是输出?
我用了类似模拟题的方法做的:
程序每行第一个字符串只能是“整数”、“看看”或一个变量
- 如果第一个字符串是关键字或数字对应的汉字则输入不合法
- 如果字符串是“整数”,就再读取三个字符串并判断合法性
- 如果字符串是“看看”,就再读取一个字符串并判断合法性
- 如果不是以上三种情况,就将字符串作为一个变量名
3.将汉字变量与英文变量一一对应
输入的汉字变量名不能作为程序的变量名,那么如何使输入的汉字变量对应程序中的一个变量呢?
这里我用了结构体数据类型,定义了一个结构体,并用如下方式初始化
struct Var{ int engv; //英文变量 char chi[20]; //汉字变量 }; struct Var var[100]={0,""};
4.汉字与数字相互转换
我定义了两个如下的函数来实现该功能
int to_num(char num[]) //汉字转数字 { if(strcmp(num,"零")==0)return 0; if(strcmp(num,"一")==0)return 1; } void print_chi(int engv) //输出汉字 { switch(engv){ case 0:printf("零\n");break; case 1:printf("一\n");break; } }
5.合法性判断
用户输入的数据可能不合法,有如下几种情况
- 将关键字或数字对应的汉字作为变量名
- 关键字打错
- 输入的数字不合法(二十一写成二一就不行)
- 重复定义变量
- 还未定义变量就做运算或输出
- 做增加运算时超过99
- 做减少运算时小于0
遇到以上几种情况时输出错误提示
6.如何定义变量、运算和输出?
定义
定义变量时将汉字变量名存入结构体数组中,并对其对应的英文变量赋值
运算
读取到“增加”时将对应英文变量加上汉字对应的数值
读取到“减少”时将对应英文变量减去汉字对应的数值
输出
读取到“看看”时输出数值对应的汉字
完整代码
#include<stdio.h> #include<math.h> #include<stdlib.h> #include<string.h> struct Var{ int engv; //英文变量 char chi[20]; //汉字变量 }; struct Var var[100]={0,""}; void error() { printf("你写错啦!!!"); } int op_legal(char op[]) { if(strcmp(op,"等于")==0||strcmp(op,"增加")==0||strcmp(op,"减少")==0|| strcmp(op,"零")==0||strcmp(op,"一")==0||strcmp(op,"二")==0|| strcmp(op,"三")==0||strcmp(op,"四")==0||strcmp(op,"五")==0|| strcmp(op,"六")==0||strcmp(op,"七")==0||strcmp(op,"八")==0|| strcmp(op,"九")==0||strcmp(op,"十")==0||strcmp(op,"十一")==0||strcmp(op,"十二")==0|| strcmp(op,"十三")==0||strcmp(op,"十四")==0||strcmp(op,"十五")==0|| strcmp(op,"十六")==0||strcmp(op,"十七")==0||strcmp(op,"十八")==0|| strcmp(op,"十九")==0||strcmp(op,"二十")==0||strcmp(op,"二十一")==0|| strcmp(op,"二十二")==0||strcmp(op,"二十三")==0||strcmp(op,"二十四")==0|| strcmp(op,"二十五")==0||strcmp(op,"二十六")==0||strcmp(op,"二十七")==0|| strcmp(op,"二十八")==0||strcmp(op,"二十九")==0||strcmp(op,"三十")==0||strcmp(op,"三十一")==0|| strcmp(op,"三十二")==0||strcmp(op,"三十三")==0||strcmp(op,"三十四")==0|| strcmp(op,"三十五")==0||strcmp(op,"三十六")==0||strcmp(op,"三十七")==0|| strcmp(op,"三十八")==0||strcmp(op,"三十九")==0||strcmp(op,"四十")==0||strcmp(op,"四十一")==0|| strcmp(op,"四十二")==0||strcmp(op,"四十三")==0||strcmp(op,"四十四")==0|| strcmp(op,"四十五")==0||strcmp(op,"四十六")==0||strcmp(op,"四十七")==0|| strcmp(op,"四十八")==0||strcmp(op,"四十九")==0||strcmp(op,"五十")==0||strcmp(op,"五十一")==0|| strcmp(op,"五十二")==0||strcmp(op,"五十三")==0||strcmp(op,"五十四")==0|| strcmp(op,"五十五")==0||strcmp(op,"五十六")==0||strcmp(op,"五十七")==0|| strcmp(op,"五十八")==0||strcmp(op,"五十九")==0||strcmp(op,"六十")==0||strcmp(op,"六十一")==0|| strcmp(op,"六十二")==0||strcmp(op,"六十三")==0||strcmp(op,"六十四")==0|| strcmp(op,"六十五")==0||strcmp(op,"六十六")==0||strcmp(op,"六十七")==0|| strcmp(op,"六十八")==0||strcmp(op,"六十九")==0||strcmp(op,"七十")==0||strcmp(op,"七十一")==0|| strcmp(op,"七十二")==0||strcmp(op,"七十三")==0||strcmp(op,"七十四")==0|| strcmp(op,"七十五")==0||strcmp(op,"七十六")==0||strcmp(op,"七十七")==0|| strcmp(op,"七十八")==0||strcmp(op,"七十九")==0||strcmp(op,"八十")==0||strcmp(op,"八十一")==0|| strcmp(op,"八十二")==0||strcmp(op,"八十三")==0||strcmp(op,"八十四")==0|| strcmp(op,"八十五")==0||strcmp(op,"八十六")==0||strcmp(op,"八十七")==0|| strcmp(op,"八十八")==0||strcmp(op,"八十九")==0||strcmp(op,"九十")==0||strcmp(op,"九十一")==0|| strcmp(op,"九十二")==0||strcmp(op,"九十三")==0||strcmp(op,"九十四")==0|| strcmp(op,"九十五")==0||strcmp(op,"九十六")==0||strcmp(op,"九十七")==0|| strcmp(op,"九十八")==0||strcmp(op,"九十九")==0) return 0; return 1; } int var_legal(char vari[]) { int i; if(strcmp(vari,"整数")==0||strcmp(vari,"等于")==0|| strcmp(vari,"增加")==0||strcmp(vari,"减少")==0||strcmp(vari,"看看")==0) return 0; for(i=0;strlen(var[i].chi)!=0;i++) if(strcmp(vari,var[i].chi)==0) //变量已被定义过 return 0; return 1; } int num_legal(char num[]) { if(strcmp(num,"零")==0||strcmp(num,"一")==0||strcmp(num,"二")==0|| strcmp(num,"三")==0||strcmp(num,"四")==0||strcmp(num,"五")==0|| strcmp(num,"六")==0||strcmp(num,"七")==0||strcmp(num,"八")==0|| strcmp(num,"九")==0||strcmp(num,"十")==0||strcmp(num,"十一")==0||strcmp(num,"十二")==0|| strcmp(num,"十三")==0||strcmp(num,"十四")==0||strcmp(num,"十五")==0|| strcmp(num,"十六")==0||strcmp(num,"十七")==0||strcmp(num,"十八")==0|| strcmp(num,"十九")==0||strcmp(num,"二十")==0||strcmp(num,"二十一")==0|| strcmp(num,"二十二")==0||strcmp(num,"二十三")==0||strcmp(num,"二十四")==0|| strcmp(num,"二十五")==0||strcmp(num,"二十六")==0||strcmp(num,"二十七")==0|| strcmp(num,"二十八")==0||strcmp(num,"二十九")==0||strcmp(num,"三十")==0||strcmp(num,"三十一")==0|| strcmp(num,"三十二")==0||strcmp(num,"三十三")==0||strcmp(num,"三十四")==0|| strcmp(num,"三十五")==0||strcmp(num,"三十六")==0||strcmp(num,"三十七")==0|| strcmp(num,"三十八")==0||strcmp(num,"三十九")==0||strcmp(num,"四十")==0||strcmp(num,"四十一")==0|| strcmp(num,"四十二")==0||strcmp(num,"四十三")==0||strcmp(num,"四十四")==0|| strcmp(num,"四十五")==0||strcmp(num,"四十六")==0||strcmp(num,"四十七")==0|| strcmp(num,"四十八")==0||strcmp(num,"四十九")==0||strcmp(num,"五十")==0||strcmp(num,"五十一")==0|| strcmp(num,"五十二")==0||strcmp(num,"五十三")==0||strcmp(num,"五十四")==0|| strcmp(num,"五十五")==0||strcmp(num,"五十六")==0||strcmp(num,"五十七")==0|| strcmp(num,"五十八")==0||strcmp(num,"五十九")==0||strcmp(num,"六十")==0||strcmp(num,"六十一")==0|| strcmp(num,"六十二")==0||strcmp(num,"六十三")==0||strcmp(num,"六十四")==0|| strcmp(num,"六十五")==0||strcmp(num,"六十六")==0||strcmp(num,"六十七")==0|| strcmp(num,"六十八")==0||strcmp(num,"六十九")==0||strcmp(num,"七十")==0||strcmp(num,"七十一")==0|| strcmp(num,"七十二")==0||strcmp(num,"七十三")==0||strcmp(num,"七十四")==0|| strcmp(num,"七十五")==0||strcmp(num,"七十六")==0||strcmp(num,"七十七")==0|| strcmp(num,"七十八")==0||strcmp(num,"七十九")==0||strcmp(num,"八十")==0||strcmp(num,"八十一")==0|| strcmp(num,"八十二")==0||strcmp(num,"八十三")==0||strcmp(num,"八十四")==0|| strcmp(num,"八十五")==0||strcmp(num,"八十六")==0||strcmp(num,"八十七")==0|| strcmp(num,"八十八")==0||strcmp(num,"八十九")==0||strcmp(num,"九十")==0||strcmp(num,"九十一")==0|| strcmp(num,"九十二")==0||strcmp(num,"九十三")==0||strcmp(num,"九十四")==0|| strcmp(num,"九十五")==0||strcmp(num,"九十六")==0||strcmp(num,"九十七")==0|| strcmp(num,"九十八")==0||strcmp(num,"九十九")==0) return 1; return 0; } int equal_legal(char equal[]) { if(strcmp(equal,"等于")==0) return 1; return 0; } int to_num(char num[]) { if(strcmp(num,"零")==0)return 0; if(strcmp(num,"一")==0)return 1; if(strcmp(num,"二")==0)return 2; if(strcmp(num,"三")==0)return 3; if(strcmp(num,"四")==0)return 4; if(strcmp(num,"五")==0)return 5; if(strcmp(num,"六")==0)return 6; if(strcmp(num,"七")==0)return 7; if(strcmp(num,"八")==0)return 8; if(strcmp(num,"九")==0)return 9; if(strcmp(num,"十")==0)return 10; if(strcmp(num,"十一")==0)return 11; if(strcmp(num,"十二")==0)return 12; if(strcmp(num,"十三")==0)return 13; if(strcmp(num,"十四")==0)return 14; if(strcmp(num,"十五")==0)return 15; if(strcmp(num,"十六")==0)return 16; if(strcmp(num,"十七")==0)return 17; if(strcmp(num,"十八")==0)return 18; if(strcmp(num,"十九")==0)return 19; if(strcmp(num,"二十")==0)return 20; if(strcmp(num,"二十一")==0)return 21; if(strcmp(num,"二十二")==0)return 22; if(strcmp(num,"二十三")==0)return 23; if(strcmp(num,"二十四")==0)return 24; if(strcmp(num,"二十五")==0)return 25; if(strcmp(num,"二十六")==0)return 26; if(strcmp(num,"二十七")==0)return 27; if(strcmp(num,"二十八")==0)return 28; if(strcmp(num,"二十九")==0)return 29; if(strcmp(num,"三十")==0)return 30; if(strcmp(num,"三十一")==0)return 31; if(strcmp(num,"三十二")==0)return 32; if(strcmp(num,"三十三")==0)return 33; if(strcmp(num,"三十四")==0)return 34; if(strcmp(num,"三十五")==0)return 35; if(strcmp(num,"三十六")==0)return 36; if(strcmp(num,"三十七")==0)return 37; if(strcmp(num,"三十八")==0)return 38; if(strcmp(num,"三十九")==0)return 39; if(strcmp(num,"四十")==0)return 40; if(strcmp(num,"四十一")==0)return 41; if(strcmp(num,"四十二")==0)return 42; if(strcmp(num,"四十三")==0)return 43; if(strcmp(num,"四十四")==0)return 44; if(strcmp(num,"四十五")==0)return 45; if(strcmp(num,"四十六")==0)return 46; if(strcmp(num,"四十七")==0)return 47; if(strcmp(num,"四十八")==0)return 48; if(strcmp(num,"四十九")==0)return 49; if(strcmp(num,"五十")==0)return 50; if(strcmp(num,"五十一")==0)return 51; if(strcmp(num,"五十二")==0)return 52; if(strcmp(num,"五十三")==0)return 53; if(strcmp(num,"五十四")==0)return 54; if(strcmp(num,"五十五")==0)return 55; if(strcmp(num,"五十六")==0)return 56; if(strcmp(num,"五十七")==0)return 57; if(strcmp(num,"五十八")==0)return 58; if(strcmp(num,"五十九")==0)return 59; if(strcmp(num,"六十")==0)return 60; if(strcmp(num,"六十一")==0)return 61; if(strcmp(num,"六十二")==0)return 62; if(strcmp(num,"六十三")==0)return 63; if(strcmp(num,"六十四")==0)return 64; if(strcmp(num,"六十五")==0)return 65; if(strcmp(num,"六十六")==0)return 66; if(strcmp(num,"六十七")==0)return 67; if(strcmp(num,"六十八")==0)return 68; if(strcmp(num,"六十九")==0)return 69; if(strcmp(num,"七十")==0)return 70; if(strcmp(num,"七十一")==0)return 71; if(strcmp(num,"七十二")==0)return 72; if(strcmp(num,"七十三")==0)return 73; if(strcmp(num,"七十四")==0)return 74; if(strcmp(num,"七十五")==0)return 75; if(strcmp(num,"七十六")==0)return 76; if(strcmp(num,"七十七")==0)return 77; if(strcmp(num,"七十八")==0)return 78; if(strcmp(num,"七十九")==0)return 79; if(strcmp(num,"八十")==0)return 80; if(strcmp(num,"八十一")==0)return 81; if(strcmp(num,"八十二")==0)return 82; if(strcmp(num,"八十三")==0)return 83; if(strcmp(num,"八十四")==0)return 84; if(strcmp(num,"八十五")==0)return 85; if(strcmp(num,"八十六")==0)return 86; if(strcmp(num,"八十七")==0)return 87; if(strcmp(num,"八十八")==0)return 88; if(strcmp(num,"八十九")==0)return 89; if(strcmp(num,"九十")==0)return 90; if(strcmp(num,"九十一")==0)return 91; if(strcmp(num,"九十二")==0)return 92; if(strcmp(num,"九十三")==0)return 93; if(strcmp(num,"九十四")==0)return 94; if(strcmp(num,"九十五")==0)return 95; if(strcmp(num,"九十六")==0)return 96; if(strcmp(num,"九十七")==0)return 97; if(strcmp(num,"九十八")==0)return 98; if(strcmp(num,"九十九")==0)return 99; } int is_defined(char vari[]) { int i; for(i=0;strlen(var[i].chi)!=0;i++) if(strcmp(vari,var[i].chi)==0) return 1; return 0; } void print_chi(int engv) { switch(engv){ case 0:printf("零\n");break; case 1:printf("一\n");break; case 2:printf("二\n");break; case 3:printf("三\n");break; case 4:printf("四\n");break; case 5:printf("五\n");break; case 6:printf("六\n");break; case 7:printf("七\n");break; case 8:printf("八\n");break; case 9:printf("九\n");break; case 10:printf("十\n");break; case 11:printf("十一\n");break; case 12:printf("十二\n");break; case 13:printf("十三\n");break; case 14:printf("十四\n");break; case 15:printf("十五\n");break; case 16:printf("十六\n");break; case 17:printf("十七\n");break; case 18:printf("十八\n");break; case 19:printf("十九\n");break; case 20:printf("二十\n");break; case 21:printf("二十一\n");break; case 22:printf("二十二\n");break; case 23:printf("二十三\n");break; case 24:printf("二十四\n");break; case 25:printf("二十五\n");break; case 26:printf("二十六\n");break; case 27:printf("二十七\n");break; case 28:printf("二十八\n");break; case 29:printf("二十九\n");break; case 30:printf("三十\n");break; case 31:printf("三十一\n");break; case 32:printf("三十二\n");break; case 33:printf("三十三\n");break; case 34:printf("三十四\n");break; case 35:printf("三十五\n");break; case 36:printf("三十六\n");break; case 37:printf("三十七\n");break; case 38:printf("三十八\n");break; case 39:printf("三十九\n");break; case 40:printf("四十\n");break; case 41:printf("四十一\n");break; case 42:printf("四十二\n");break; case 43:printf("四十三\n");break; case 44:printf("四十四\n");break; case 45:printf("四十五\n");break; case 46:printf("四十六\n");break; case 47:printf("四十七\n");break; case 48:printf("四十八\n");break; case 49:printf("四十九\n");break; case 50:printf("五十\n");break; case 51:printf("五十一\n");break; case 52:printf("五十二\n");break; case 53:printf("五十三\n");break; case 54:printf("五十四\n");break; case 55:printf("五十五\n");break; case 56:printf("五十六\n");break; case 57:printf("五十七\n");break; case 58:printf("五十八\n");break; case 59:printf("五十九\n");break; case 60:printf("六十\n");break; case 61:printf("六十一\n");break; case 62:printf("六十二\n");break; case 63:printf("六十三\n");break; case 64:printf("六十四\n");break; case 65:printf("六十五\n");break; case 66:printf("六十六\n");break; case 67:printf("六十七\n");break; case 68:printf("六十八\n");break; case 69:printf("六十九\n");break; case 70:printf("七十\n");break; case 71:printf("七十一\n");break; case 72:printf("七十二\n");break; case 73:printf("七十三\n");break; case 74:printf("七十四\n");break; case 75:printf("七十五\n");break; case 76:printf("七十六\n");break; case 77:printf("七十七\n");break; case 78:printf("七十八\n");break; case 79:printf("七十九\n");break; case 80:printf("八十\n");break; case 81:printf("八十一\n");break; case 82:printf("八十二\n");break; case 83:printf("八十三\n");break; case 84:printf("八十四\n");break; case 85:printf("八十五\n");break; case 86:printf("八十六\n");break; case 87:printf("八十七\n");break; case 88:printf("八十八\n");break; case 89:printf("八十九\n");break; case 90:printf("九十\n");break; case 91:printf("九十一\n");break; case 92:printf("九十二\n");break; case 93:printf("九十三\n");break; case 94:printf("九十四\n");break; case 95:printf("九十五\n");break; case 96:printf("九十六\n");break; case 97:printf("九十七\n");break; case 98:printf("九十八\n");break; case 99:printf("九十九\n");break; } } void look(char vari[]) { int i; for(i=0;strlen(var[i].chi)!=0;i++) if(strcmp(vari,var[i].chi)==0){ print_chi(var[i].engv); break; } } int compute_legal(char compute[]) { if(strcmp(compute,"增加")==0||strcmp(compute,"减少")==0) return 1; return 0; } void computef(char vari[],char com[],char num[]) { int i; if(strcmp(com,"增加")==0){ for(i=0;strlen(var[i].chi)!=0;i++) if(strcmp(vari,var[i].chi)==0){ if((var[i].engv+to_num(num))>=100) printf("增加的数值过大\n"); else var[i].engv+=to_num(num); break; } } else{ for(i=0;strlen(var[i].chi)!=0;i++) if(strcmp(vari,var[i].chi)==0){ if((var[i].engv-to_num(num))<0) printf("减少的数值过大\n"); else var[i].engv-=to_num(num); break; } } } int main() { int i=0,j; char op[10],vari[10],num[10],compute[10],equal[10]; while(1){ scanf("%s",op); if(op_legal(op)==0) error(); else{ if(strcmp(op,"整数")==0){ scanf("%s%s%s",vari,equal,num); if(var_legal(vari)==0||num_legal(num)==0||equal_legal(equal)==0) error(); else{ var[i].engv=to_num(num); strcpy(var[i].chi,vari); i++; } } else if(strcmp(op,"看看")==0){ scanf("%s",vari); if(is_defined(vari)==0) error(); else look(vari); } else{ //计算 if(is_defined(op)==0) error(); else{ scanf("%s%s",compute,num); if(compute_legal(compute)==0||num_legal(num)==0) error(); else{ computef(op,compute,num); } } } } } return 0; }
原谅我的代码过于冗长QAQ 之后我会再想办法不这么暴力
来源:https://www.cnblogs.com/ying-hua/p/12222477.html