寒假作业三
------------恢复内容开始------------
| 这个作业属于哪个课程 | 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
结果如下:


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

浙公网安备 33010602011771号