面向对象程序设计作业1

问答题:
回答以下问题:

  1. 如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。
    如果你已经了解C++请回答以下问题:你觉得C++和C语言比有什么优点。
    答:对指针和建立数据类型很不顺手,感觉很麻烦

  2. 查阅相关资料,简述一下C语言/C++的编译过程。(以下内容为百度所取,非本人原创)
    1.预处理.预处理用于将所有的#include头文件以及宏定义替换成其真正的内容。
    2.编译.将经过预处理之后的程序转换成特定汇编代码
    3.汇编.汇编过程将上一步的汇编代码转换成机器码
    4.链接.链接过程将多个目标文以及所需的库文件,链接成最终的可执行文件
    (以上四行内容为百度所取,非本人原创)

自己动手,完成以下任务:
查看自己的C++编译器版本。


** Visual Studio 2019 Developer Command Prompt v16.4.3
** Copyright (c) 2019 Microsoft Corporation
**********************************************************************
C:\Users\15905686425\source\repos>cl.exe
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.24.28315 版
版权所有(C) Microsoft Corporation。保留所有权利。
用法: cl [ 选项... ] 文件名... [ /link 链接选项... ]
C:\Users\15905686425\source\repos>

中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:

整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:

注意:

  1. 输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
  2. 数字只会出现以下 零一二三四五六七八九十 。

第一次思路:设两个函数,一个使阿拉伯数字转化为汉字,一个使汉字转化为阿拉伯数字,错误思路不再介绍,纯属瞎想;

include

include

int main()
{
int hanzihua(int x);
int shuzihua(char n[100]);
char a[100],b[100],c[100],number[100],d[100],caozuo[100],number1[100],f[100];
int result;
scanf("%s %s %s %s",&a,&b,&c,&number);
result=shuzihua(number);
for(;;){
scanf("%s %s %s",&d,&caozuo,&number1);
if(strcmp("钱包",d)==0){
if(strcmp("增加",caozuo)==0)result+=shuzihua(number1);
if(strcmp("减少",caozuo)==0)result-=shuzihua(number1);
}
else break;
}
strcpy(f,hanzihua(result));
printf("%s",f);
return 0;
}
int hanzihua(int x){
char e[100];
if(x>=0&&x<=10){
if(x==0)strcpy(e,"零");
if(x==1)strcpy(e,"一");
if(x==2)strcpy(e,"二");
if(x==3)strcpy(e,"三");
if(x==4)strcpy(e,"四");
if(x==5)strcpy(e,"五");
if(x==6)strcpy(e,"六");
if(x==7)strcpy(e,"七");
if(x==8)strcpy(e,"八");
if(x==9)strcpy(e,"九");
if(x==10)strcpy(e,"十");
}
if((x>10&&x<20)||x==20||x==30||x==40||x==50||x==60||x==70||x==80||x==90){
if(x>10&&x<20){
x=x%10;
strcpy(e,"十");
strcat(e,"hanzihua(x)");

}
  if(x==20||x==30||x==40||x==50||x==60||x==70||x==80||x==90)
  x=x/10;
  strcpy(e,hanzihua(x));
  strcat(e,"十");
}
else{
  int l,g;
  l=x/10;
  g=x%10;
  strcpy(e,hanzihua(l));
  strcat(e,"十");
  strcat(e,hanzihua(g));
}
return e;

}
int shuzihua(char n[100]){
int m;
if(strcmp(n,"零")==0)m=0;
if(strcmp("一",n)==0)m=1;
if(strcmp("二",n)==0)m=2;
if(strcmp("三",n)==0)m=3;
if(strcmp("四",n)==0)m=4;
if(strcmp("五",n)==0)m=5;
if(strcmp("六",n)==0)m=6;
if(strcmp("七",n)==0)m=7;
if(strcmp("八",n)==0)m=8;
if(strcmp("九",n)==0)m=9;
if(strcmp("十",n)==0)m=10;
......
}

第二次思路;改正了第一次中阿拉伯数字转化为汉字,将数分为1,2,....10; 11,12,13.....19; 20,30,40,....90; 21,22,.....99;四类
第一类;直接......
第二类:先输入“十”,再将阿拉伯数字减十,再进行第一类操作
第三类:将阿拉伯数字%10,先进行第一类操作,再加“十”
第四类:用二数,一数代表阿拉伯数字十位,一数代表阿拉伯数字个位,先对前者进行第一类操作,再加十,在对第二个数进行第一类操作;
错误原因;字符串输入有问题

include

include

int main()
{
int shuzihua(char n[100]);
char a[100],b[100],c[100],number[100],d[100],caozuo[100],number1[100];
int result,result1,result2;
scanf("%s %s %s %s",&a,&b,&c,&number);
result=shuzihua(number);
for(;;){
scanf("%s %s %s",&d,&caozuo,&number1);
if(strcmp("钱包",d)==0){
if(strcmp("增加",caozuo)==0)result+=shuzihua(number1);
if(strcmp("减少",caozuo)==0)result-=shuzihua(number1);
}
else break;
}result1=result;
if((result>0&&result<=10)&&result%10==0){
for(;;){
if(result1==1)printf("一");
else if(result1==2)printf("二");
else if(result1==3)printf("三");
else if(result1==4)printf("四");
else if(result1==5)printf("五");
else if(result1==6)printf("六");
else if(result1==7)printf("七");
else if(result1==8)printf("八");
else if(result1==9)printf("九");
else if(result1==10)printf("十");
result1=result1/10;
if(result1==0)break;
}if(result%10==0)printf("十");
}
else if(result>10&&result<20){
printf("十");
result1=result-10;
if(result1==1)printf("一");
else if(result1==2)printf("二");
else if(result1==3)printf("三");
else if(result1==4)printf("四");
else if(result1==5)printf("五");
else if(result1==6)printf("六");
else if(result1==7)printf("七");
else if(result1==8)printf("八");
else if(result1==9)printf("九");
}
else{result1=result/10;
if(result1==2)printf("二");
else if(result1==3)printf("三");
else if(result1==4)printf("四");
else if(result1==5)printf("五");
else if(result1==6)printf("六");
else if(result1==7)printf("七");
else if(result1==8)printf("八");
else if(result1==9)printf("九");
printf("十");
result2=result%10;
if(result2==1)printf("一");
else if(result2==2)printf("二");
else if(result2==3)printf("三");
else if(result2==4)printf("四");
else if(result2==5)printf("五");
else if(result2==6)printf("六");
else if(result2==7)printf("七");
else if(result2==8)printf("八");
else if(result2==9)printf("九");
}
return 0;
}

int shuzihua(char n[100]){
int m;
if(strcmp(n,"零")==0)m=0;
if(strcmp("一",n)==0)m=1;
if(strcmp("二",n)==0)m=2;
if(strcmp("三",n)==0)m=3;
if(strcmp("四",n)==0)m=4;
if(strcmp("五",n)==0)m=5;
if(strcmp("六",n)==0)m=6;
if(strcmp("七",n)==0)m=7;
if(strcmp("八",n)==0)m=8;
if(strcmp("九",n)==0)m=9;
if(strcmp("十",n)==0)m=10;
......
}

第三次

include

include

int main()
{
char a[100],b[100],c[100],number[100],d[100],caozuo[100],number1[100];
int result,result1,result2,m;
scanf("%s %s %s %s",a,b,c,number);
if(strcmp(number,"零")==0)result=0;
if(strcmp(number,"一")==0)result=1;
if(strcmp(number,"二")==0)result=2;
if(strcmp(number,"三")==0)result=3;
if(strcmp(number,"四")==0)result=4;
if(strcmp(number,"五")==0)result=5;
if(strcmp(number,"六")==0)result=6;
if(strcmp(number,"七")==0)result=7;
if(strcmp(number,"八")==0)result=8;
if(strcmp(number,"九")==0)result=9;
if(strcmp(number,"十")==0)result=10;
for(;;){
scanf("%s",d);
if(strcmp("钱包",d)==0){
scanf("%s %s",caozuo,number1);
if(strcmp(number1,"零")==0)m=0;
if(strcmp(number1,"一")==0)m=1;
if(strcmp(number1,"二")==0)m=2;
if(strcmp(number1,"三")==0)m=3;
if(strcmp(number1,"四")==0)m=4;
if(strcmp(number1,"五")==0)m=5;
if(strcmp(number1,"六")==0)m=6;
if(strcmp(number1,"七")==0)m=7;
if(strcmp(number1,"八")==0)m=8;
if(strcmp(number1,"九")==0)m=9;
if(strcmp(number1,"十")==0)m=10;
if(strcmp("增加",caozuo)==0)result+=m;
if(strcmp("减少",caozuo)==0)result-=m;
}
else break;
}result1=result;
if((result>0&&result<=10)||result%10==0){
for(;;){
if(result1==1)printf("一");
else if(result1==2)printf("二");
else if(result1==3)printf("三");
else if(result1==4)printf("四");
else if(result1==5)printf("五");
else if(result1==6)printf("六");
else if(result1==7)printf("七");
else if(result1==8)printf("八");
else if(result1==9)printf("九");
else if(result1==10)printf("十");
result1=result1/10;
if(result1==0)break;
}if(result%10==0)printf("十");
}
else if(result>10&&result<20){
printf("十");
result1=result-10;
if(result1==1)printf("一");
else if(result1==2)printf("二");
else if(result1==3)printf("三");
else if(result1==4)printf("四");
else if(result1==5)printf("五");
else if(result1==6)printf("六");
else if(result1==7)printf("七");
else if(result1==8)printf("八");
else if(result1==9)printf("九");
}
else{result1=result/10;
if(result1==2)printf("二");
else if(result1==3)printf("三");
else if(result1==4)printf("四");
else if(result1==5)printf("五");
else if(result1==6)printf("六");
else if(result1==7)printf("七");
else if(result1==8)printf("八");
else if(result1==9)printf("九");
printf("十");
result2=result%10;
if(result2==1)printf("一");
else if(result2==2)printf("二");
else if(result2==3)printf("三");
else if(result2==4)printf("四");
else if(result2==5)printf("五");
else if(result2==6)printf("六");
else if(result2==7)printf("七");
else if(result2==8)printf("八");
else if(result2==9)printf("九");
}
return 0;
}

编译结果
整数 钱包 等于 二
钱包 增加 九
钱包 减少 二
看看 钱包

--------------------------------
Process exited after 5.036 seconds with return value 0
请按任意键继续. . .

不足;汉字转阿拉伯数字不能到99;

你可能感兴趣的:(面向对象程序设计作业1)