面向对象程序设计寒假作业2
这个作业属于哪个课程 | 2020年面向对象程序设计 |
---|---|
这个作业要求在哪里 | 面向对象程序设计寒假作业2 |
这个作业的目标 | 1继续完成编程题 2新建一个github仓库,并把作业推送到该仓库 3发布博客 |
作业正文 | 作业2 |
其他参考文献 | 1GitHub Desktop的下载及其使用 2Windows批处理常用命令教程 |
实践题
新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。请使用.gitignore文件忽略不要上传的文件。用法自行百度。
1.下载github desktop,进入首页如下图
2进行注册,点在右上角file,点击new repository
3进入仓库所在文件夹,把作业相关文件复制到该文件夹,再点击commit to master
编程题(请使用C语言或者C++完成以下题目):
- 继续完成作业一的编程题。
- 优化架构,一般要求每个函数长度不超过15行。
- 优化规范,尤其是命名规范。
- 制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。
1先进行一个尝试,打开记事本,写下内容
另存为.bat
按照大佬们给的代码,复制打开记事本,生成.bat文件
@echo off
echo 请输入文件所在磁盘
set /p a=
echo 正在转移到该磁盘
cd "%a%"
echo 请输入文件所在路径
set /p b=
echo 转移到文件路径
cd "%b%"
echo 请输入文件名
set /p c=
echo 编译开始
gcc "%c%" -o try.exe
if exist "try.exe" echo 编译成功
if not exist "try.exe" echo 编译失败
Pause
!然后我运行出来的结果为
就非常的懵,后来经过百度得知要添加环境变量
win+r,打开命令行, 输入gcc -v 如果运行出来如下图所示就表明添加成功
但是!添加成功完成后又遇到了新的问题,运行结果为
后来在和同学讨论中她让我尝试换一个路径,结果竟然运行出来(?)
关于测试脚本
按照先前提交的同学的方法,先写一个测试代码
#include<stdio.h>
#include<string.h>
int channg1(char num[]);
void change2(int a);
int change1(char num[])
{
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 return -1;
}
int main()
{ int n,m,i;
char a[11][10]={"零","一","二","三","四","五","六","七","八","九","十"};
char b[8][10]={"望","仔","怎","么","不","喝","旺","仔"};
printf("正确示范\n");
for(i=0;i<11;i++)
{
printf("%s",a[i]);
n=change1(a[i]);
if(m!=-1)
printf("pass\n");
else
printf("error\n");
}
printf("错误示范\n");
for(i=0;i<8;i++)
{
printf("%s",b[i]);
m=change1(b[i]);
if(m!=-1)
printf("pass\n");
else
printf("error\n");
}
printf("结束测试");
return 0;
}
@echo off
cd d:
echo 开始测试
ming.exe
echo 测试结束
Pause
生成.bat文件
测试结果如下
通过命令行读取一个文件
在main函数添加一段代码
printf("请输入文件名\n");
char s[10];
scanf("%s",s);
freopen(s,"r",stdin)
在记事本中写上要测试的数字
但是我运行不出来1551
关于优化程序
- 读题,提取出题目的要求。
- 分解需求,把需求分解为几个你觉得不太相关的模块。
- 思考每个模块怎么写,可以从简单的模块开始写。
- 对于不会的问题进行查阅资料。
- 对于每一个模块设计测试用例。
上一次的代码只能在零到九之间的输入运行,优化后的代码将范围扩大到零到九十九之间的输入运行
第一模块进行零到九之间的识别
int change1(char num[])
{
if(strcmp("零",num)==0)return 0;
if(strcmp("一",num)==0)return 1;
if(strcmp("二",num)==0)return 2;
if(strcmp("三",num)==0)return 3;
if(strcmp("四",num)==0)return 4;
if(strcmp("五",num)==0)return 5;
if(strcmp("六",num)==0)return 6;
if(strcmp("七",num)==0)return 7;
if(strcmp("八",num)==0)return 8;
if(strcmp("九",num)==0)return 9;
}
第二模块在第一个函数的基础下将零到九十九的汉字转换成数字
int change3(char c[])
{
int total;
char a[10];
if(strlen(c)==2)
total=change1(c);
else
{
if(strlen(c)==4)
{
a[0]=c[0];
a[1]=c[1];
a[2]='\0';
if(strcmp(a,"十")!=0)
total=change1(a)*10;
else
{
a[0]=c[2];
a[1]=c[3];
a[2]='\0';
total=change1(a)+10;
}
}
else
{
a[0]=c[0];
a[1]=c[1];a[2]='\0';
total=change1(a)*10;
a[0]=c[4];
a[1]=c[5];
a[2]='\0';
total+=change1(a);
}
}
return total;
}
第三个模块进行数字1-10转换汉字,用来输出
void change2(int a)
{
if(a==1)
printf("一");
else if(a==2)
printf("二");
else if(a==3)
printf("三");
else if(a==4)
printf("四");
else if(a==5)
printf("五");
else if(a==6)
printf("六");
else if(a==7)
printf("七");
else if(a==8)
printf("八");
else if(a==9)
printf("九");
else if(a==10)
printf("十");
}
第四个模块进行数字之间的运算,将运算结果返回第三个函数,最后将结果输出
int main()
{
char s1[20],s2[20],s3[20],s4[20];
int n,sum=0,number;
scanf("%s %s %s %s",s1,s2,s3,s4);
n=change3(s4);
char b1[20],b2[20],b3[20],b4[20];
sum=change3(s4);
while(1)
{
scanf("%s %s",b1,b2);
if(strcmp("看看",b1)==0)
break;
scanf("%s",b3);
number=change3(b3);
if(strcmp("增加",b2)==0)
sum+=number;
else
if(strcmp("减少",b2)==0)
sum-=number;
}
int ten=10;
if(sum<=10)
{
change2(sum);
}
else
{
if(sum<20)
{
change2(ten);
change2(sum%10);}
else
{
if(sum%10==0)
{
change2(sum/10);
change2(ten);}
else{
change2(sum/10);
change2(ten);
change2(sum%10);}
}
}
return 0;
}
最后完整的代码
#include<stdio.h>
#include<string.h>
int channg1(char num[]);
void change2(int a);
int change3(char c[]);
int change1(char num[])
{
if(strcmp("零",num)==0)return 0;
if(strcmp("一",num)==0)return 1;
if(strcmp("二",num)==0)return 2;
if(strcmp("三",num)==0)return 3;
if(strcmp("四",num)==0)return 4;
if(strcmp("五",num)==0)return 5;
if(strcmp("六",num)==0)return 6;
if(strcmp("七",num)==0)return 7;
if(strcmp("八",num)==0)return 8;
if(strcmp("九",num)==0)return 9;
}
int change3(char c[])
{
int total;
char a[10];
if(strlen(c)==2)
total=change1(c);
else
{
if(strlen(c)==4)
{
a[0]=c[0];
a[1]=c[1];
a[2]='\0';
if(strcmp(a,"十")!=0)
total=change1(a)*10;
else
{
a[0]=c[2];
a[1]=c[3];
a[2]='\0';
total=change1(a)+10;
}
}
else
{
a[0]=c[0];
a[1]=c[1];a[2]='\0';
total=change1(a)*10;
a[0]=c[4];
a[1]=c[5];
a[2]='\0';
total+=change1(a);
}
}
return total;
}
void change2(int a)
{
if(a==1)
printf("一");
else if(a==2)
printf("二");
else if(a==3)
printf("三");
else if(a==4)
printf("四");
else if(a==5)
printf("五");
else if(a==6)
printf("六");
else if(a==7)
printf("七");
else if(a==8)
printf("八");
else if(a==9)
printf("九");
else if(a==10)
printf("十");
}
int main()
{
char s1[20],s2[20],s3[20],s4[20];
int n,sum=0,number;
scanf("%s %s %s %s",s1,s2,s3,s4);
n=change3(s4);
char b1[20],b2[20],b3[20],b4[20];
sum=change3(s4);
while(1)
{
scanf("%s %s",b1,b2);
if(strcmp("看看",b1)==0)
break;
scanf("%s",b3);
number=change3(b3);
if(strcmp("增加",b2)==0)
sum+=number;
else
if(strcmp("减少",b2)==0)
sum-=number;
}
int ten=10;
if(sum<=10)
{
change2(sum);
}
else
{
if(sum<20)
{
change2(ten);
change2(sum%10);}
else
{
if(sum%10==0)
{
change2(sum/10);
change2(ten);}
else{
change2(sum/10);
change2(ten);
change2(sum%10);}
}
}
return 0;
}
运行的结果为