面向对象程序设计寒假作业3
作业描述 | 详情 |
---|---|
这个作业属于哪个课程 | 2020年面向对象程序设计 |
这个作业的要求在哪里 | 寒假作业3 |
这个作业的目标 | 1.继续完成编程题 2.发布博客 |
作业正文 | 如下 |
参考资料 | 见正文 |
GitHub仓库:https://github.com/83675299/----3
代码拓展性
根据我查的资料,代码拓展性应该是这个代码能不能在插入一些其他东西,如函数或者另外的功能情况下,在保持代码不做巨大的变化时完成改变,让人省事。
我觉得代码拓展性应该注重主函数,让主函数简洁一点,这样就可以通过加几个函数或者对函数修改,尽量让主函数不动,这样代码拓展性可能会好一点。
编程题
对之前的代码进行改进,我首先想到的就是让输入能够读入两位数。
但是我不会呀,所以首先上网查资料,资料乱七八糟,并没有什么好的帮助。
然后助教直播讲题,我没看见,后来录播看不了,换了几个浏览器都不行,然后就放弃了。
看同学的博客,看了好多,才有点头绪,然后又去请教了做完作业的同学,终于明白了。
char数组中的两个元素是可以读入一个汉字的。
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char sz[100];
cin>>sz;
int n1=0,n2=0,i,sum=0;
char sz1[100],sz2[100];
for(i=0;i<2;i++)
sz1[i]=sz[i];
sz1[3]='\0';
cout<<sz1;
return 0;
}
就像这样,输入十六可以读出来一个十,六当然也可以读出来了。
然后做题就好做了。
#include<iostream>
#include<string.h>
using namespace std;
int char_2(char sz[])
{
int n;
if(strcmp(sz,"零")==0) n=0;
if(strcmp(sz,"一")==0)n=1;
if(strcmp(sz,"二")==0)n=2;
if(strcmp(sz,"三")==0)n=3;
if(strcmp(sz,"四")==0)n=4;
if(strcmp(sz,"五")==0)n=5;
if(strcmp(sz,"六")==0)n=6;
if(strcmp(sz,"七")==0)n=7;
if(strcmp(sz,"八")==0)n=8;
if(strcmp(sz,"九")==0)n=9;
if(strcmp(sz,"十")==0)n=10;
return n;
}
int char_4(char sz[])
{
int n1=0,n2=0,i=0,sum=0;
char sz1[100]={0},sz2[100]={0};
for(i=0;i<2;i++)
sz1[i]=sz[i];
for(i=0;i<2;i++)
sz2[i]=sz[i+2];
if(strcmp(sz1,"十")==0) {
n1=1;
n2=char_2(sz2);
}
else {
n1=char_2(sz1);
}
sum=n1*10+n2;
return sum;
}
int char_6(char sz[])
{
int n1=0,n3=0,i,sum=0;
char sz1[100]={0},sz3[100]={0};
for(i=0;i<2;i++)
sz1[i]=sz[i];
for(i=0;i<2;i++)
sz3[i]=sz[i+4];
n1=char_2(sz1);
n3=char_2(sz3);
sum=n1*10+n3;
return sum;
}
int transform(char sz[])
{
if(strlen(sz)==2)
return char_2(sz);
else if(strlen(sz)==4)
return char_4(sz);
else if(strlen(sz)==6)
return char_6(sz);
}
int main()
{
char sz[100];
cin>>sz;
cout<<transform(sz);
return 0;
}
这是一个读入汉字,输出数字的代码,我感觉我做得还算不错的,代码不冗长,比较简洁并且易懂。
这些我花了接近5个小时做出来的。。。。
感觉自己是有点蠢,花了不少时间找方法是应该的,更多时间是花在找错,我就因为没有初始定义数组为{0},导致sz1会出现乱码。
然后一直修改,测试,都要吐了,才想起来初始定义为0,将问题解决。
这个低级错误以后不能再犯了。
#include<stdio.h>
#include<string.h>
void change2(int s);
void change3(int s);
int char_2(char sz[])
{
int n;
if(strcmp(sz,"零")==0) n=0;
if(strcmp(sz,"一")==0)n=1;
if(strcmp(sz,"二")==0)n=2;
if(strcmp(sz,"三")==0)n=3;
if(strcmp(sz,"四")==0)n=4;
if(strcmp(sz,"五")==0)n=5;
if(strcmp(sz,"六")==0)n=6;
if(strcmp(sz,"七")==0)n=7;
if(strcmp(sz,"八")==0)n=8;
if(strcmp(sz,"九")==0)n=9;
if(strcmp(sz,"十")==0)n=10;
return n;
}
int char_4(char sz[])
{
int n1=0,n2=0,i=0,sum=0;
char sz1[100]={0},sz2[100]={0};
for(i=0;i<2;i++)
sz1[i]=sz[i];
for(i=0;i<2;i++)
sz2[i]=sz[i+2];
if(strcmp(sz1,"十")==0) {
n1=1;
n2=char_2(sz2);
}
else {
n1=char_2(sz1);
}
sum=n1*10+n2;
return sum;
}
int char_6(char sz[])
{
int n1=0,n3=0,i,sum=0;
char sz1[100]={0},sz3[100]={0};
for(i=0;i<2;i++)
sz1[i]=sz[i];
for(i=0;i<2;i++)
sz3[i]=sz[i+4];
n1=char_2(sz1);
n3=char_2(sz3);
sum=n1*10+n3;
return sum;
}
int transform(char sz[])
{
if(strlen(sz)==2)
return char_2(sz);
else if(strlen(sz)==4)
return char_4(sz);
else if(strlen(sz)==6)
return char_6(sz);
}
int main()
{
char sz1[100],sz2[100],sz3[100],l1[100],l2[100];
int a,b,i,j,k,t,m,n,f,sum=1;
scanf("%s%s 等于 %s",l2,l1,sz1);
sum=transform(sz1);
while(strcmp(l1,"钱包")==0)
{
scanf("%s%s",l1,l2);
if(strcmp(l1,"钱包")!=0)
break;
scanf("%s",sz2);
if(strcmp(l2,"增加")==0)
{
f=1;
sum=sum+transform(sz2);
}
else if(strcmp(l2,"减少")==0)
{
f=-1;
sum=sum-transform(sz2);
}
}
if(sum>=10) {
change2(sum);
change3(sum);
}
else if(sum>0) change3(sum);
else printf("meiqianla");
return 0;
}
void change2(int sum)
{
int n=sum,i,j;
i=sum/10;
switch(i)
{
case 1: break;
case 2: printf("二");break;
case 3: printf("三");break;
case 4: printf("四");break;
case 5: printf("五");break;
case 6: printf("六");break;
case 7: printf("七");break;
case 8: printf("八");break;
case 9: printf("九");break;
}
printf("十");
}
void change3(int sum)
{
switch(sum%10)
{
case 0: break;
case 1: printf("一");break;
case 2: printf("二");break;
case 3: printf("三");break;
case 4: printf("四");break;
case 5: printf("五");break;
case 6: printf("六");break;
case 7: printf("七");break;
case 8: printf("八");break;
case 9: printf("九");break;
}
}
输出:
这是可以对输入零到九十九,输出零到九十九进行计算的函数,花了三次作业的时间,可算是做完了。
想想还有点小自豪。。。。
负数的话,还没完成。。。
负数感觉没输入两位数难做,对“负”做个判断然后变成减号就行了。
但输入两位数做得我有点心累了,有空补上吧。
脚本什么的,上次作业都弄过了,上次做得比较多,这次就不弄了。
三次寒假作业的感悟吧:
从对c++一无所知到了稍微了解一点的程度了,每天的c++学习,虽然每天一点点,但现在也懂了很多之前不懂的东西,略有进步。
就像脚本这种东西,也粗浅的明白了一些了。