寒假作业三

------------恢复内容开始------------

这个作业属于哪个课程 2020面向对象程序设计
这个作业要求在哪里 寒假作业3
这个作业的目标 编程题
作业正文 寒假作业三
其他参考文献 ...

代码扩展

1.将取值范围从09扩展为099

int change1(char num[])
{
  if(strlen(num)==2)
  {
	if(strcmp("零",num)==0)
	return 0;
	else if(strcmp("一",num)==0)
	return 1;
	else if(strcmp("二",num)==0)
	return 2;
	else if(strcmp("三",num)==0)
	return 3;
	else if(strcmp("四",num)==0)
	return 4;
	else if(strcmp("五",num)==0)
	return 5;
	else if(strcmp("六",num)==0)
	return 6;
	else if(strcmp("七",num)==0)
	return 7;
	else if(strcmp("八",num)==0)
	return 8;
	else if(strcmp("九",num)==0)
	return 9;
	else if(strcmp("十",num)==0)
	return 10;
  }
  else if(strlen(num)==4)
  {
  	int x=0,y;
  	char n1[10],n2[10];
  	while(x<2)
  	{
  		n1[x]=num[x];
  		n2[x]=num[x+2];
  		x+=1;
	}
	if(change1(n1)==10)
		y=10+change1(n2);
	else if(change1(n2)==10)
		y=10*change1(n1);
	return y;
  }
  else if(strlen(num)==6)
  {
  	int x=0,y;
  	char n1[10],n2[10];
  	while(x<2)
  	{
  		n1[x]=num[x];
  		n2[x]=num[x+4];
  		x+=1;
	}
	y=change1(n1)*10+change1(n2);
	return y;
  }
}

由于一个汉字占据两个字符,所以我将数组用strlen函数区别,以汉字的使用分为:零到十,十一到十九、整十,几十几三类,通过while循环将数组内多个汉字拆分到不同数组,再进行之前的change循环,再定义一个int型的字母y储存最终结果。
测试结果如下图:

扩展使结果可以为负数

我在主函数中添加if语句,使得最后的结果n分为负数与非负数两种,并将负数n转化为正数进入change2函数中转化成汉字,然后在最终输出中添加一个负字,具体代码如下:

	if(n>=0)
	{
		result(n);	
	}
	else 
	{
		n=0-n;
		printf("负");
		result(n);
	}		

测试结果如下图:

完整代码如下:

#include<stdio.h>
#include<string.h>
int change1(char num[])
{
  if(strlen(num)==2)
  {
	if(strcmp("零",num)==0)
	return 0;
	else if(strcmp("一",num)==0)
	return 1;
	else if(strcmp("二",num)==0)
	return 2;
	else if(strcmp("三",num)==0)
	return 3;
	else if(strcmp("四",num)==0)
	return 4;
	else if(strcmp("五",num)==0)
	return 5;
	else if(strcmp("六",num)==0)
	return 6;
	else if(strcmp("七",num)==0)
	return 7;
	else if(strcmp("八",num)==0)
	return 8;
	else if(strcmp("九",num)==0)
	return 9;
	else if(strcmp("十",num)==0)
	return 10;
  }
  else if(strlen(num)==4)
  {
  	int x=0,y;
  	char n1[10],n2[10];
  	while(x<2)
  	{
  		n1[x]=num[x];
  		n2[x]=num[x+2];
  		x+=1;
	}
	if(change1(n1)==10)
		y=10+change1(n2);
	else if(change1(n2)==10)
		y=10*change1(n1);
	return y;
  }
  else if(strlen(num)==6)
  {
  	int x=0,y;
  	char n1[10],n2[10];
  	while(x<2)
  	{
  		n1[x]=num[x];
  		n2[x]=num[x+4];
  		x+=1;
	}
	y=change1(n1)*10+change1(n2);
	return y;
  }
}
int change2(int n)
{
    if(n==0) printf("零");
	if(n==1) printf("一");
	if(n==2) printf("二");
	if(n==3) printf("三");
	if(n==4) printf("四");
	if(n==5) printf("五");
	if(n==6) printf("六");
	if(n==7) printf("七");
	if(n==8) printf("八");
	if(n==9) printf("九");
	if(n==10) printf("十");	
} 
void result(int n)
{
	if(n<=10)
			change2(n);
		else if(n<20)
			{
			printf("十");
			change2(n%10);
			}
		else if(n%10==0)
		    {
			 change2(n/10);
			 printf("十");
			}	 
		else if(n>20)
		    {
             change2(n/10);
			 printf("十");
			 change2(n%10);		    
		    }		
}
int main()
{
	char a[10],b[10],c[10],num[10];
	int n;
	scanf("%s %s %s %s",a,b,c,num);
	n=change1(num);
	while(1)
	{
		scanf("%s ",b);
		if(strcmp(b,"看看")!=0)
		{
			scanf("%s %s",c,num);
			if(strcmp(c,"增加")==0)
			n+=change1(num);
			if(strcmp(c,"减少")==0)
			n-=change1(num);
		}
		else
		break;
	}
	scanf("%s",c);
	if(n>=0)
	{
		result(n);	
	}
	else 
	{
		n=0-n;
		printf("负");
		result(n);
	}		
	return 0;
}

编译脚本

@echo off
echo 请输入文件所在磁盘
set /p a=
echo 正在转移到该磁盘
cd "%a%"
echo 请输入文件所在路径
set /p b=
echo 转移到文件路径
cd "%b%"
echo 请输入文件名
set /p c=
echo 编译开始
gcc "%c%" -o test1.exe
if exist "test.exe" echo 编译成功
if not exist "test.exe" echo 编译失败
Pause

结果如下:

测试脚本

@echo off
cd d:
echo 开始测试
s2.exe
echo 测试结束
pause

结果如下:

思考反思

这次代码优化让我发现了自己的进步,当初一道我连做都不会,甚至要去参考大佬代码的题目,随着这三次写作业,现在的我已经可以优化更改这道代码,如果不是太懒,我甚至还可以给他添加乘除,小数来进一步扩展。
我为自己的进步感到开心,同时也希望学到更多有用的编程知识,在一步步的探索中慢慢进步。

posted @ 2020-02-16 19:43  今夕9  阅读(119)  评论(0)    收藏  举报