面向对象程序设计寒假作业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++学习,虽然每天一点点,但现在也懂了很多之前不懂的东西,略有进步。
就像脚本这种东西,也粗浅的明白了一些了。

posted @ 2020-02-16 15:12  hqk111  阅读(121)  评论(0编辑  收藏  举报