这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/2020OOP |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10231 |
这个作业的目标 | 继续完成编程题,新建一个github仓库,发布博客 |
其他参考文献 | ... |
一、实践题
新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。
请使用.gitignore文件忽略不要上传的文件
建立一个仓库
线上线下仓库
将文件传至线上仓库,点击commit to master,需要一个一个上传....
二、编程题
编程题要求:
读题,提取出题目的要求。
分解需求,把需求分解为几个模块。
思考每个模块如何编写。
查阅资料。
对每个模块设计测试用例。
思路:
题目中要求优化架构及优化优化命名规范
优化架构:之前我的函数确实较长,有些难读,一开始我才用if语句判断个位数与两位数,但是这个函数的行数就达到40+行...又蠢又难读...后来我用循环语句来代替一部分作用...,不过还是没有低于要求的15行...我对比了其他大佬同学的代码,想想可能是我解题的思路比较不同...痛苦,以下是这部分函数的代码
void arab(int n)
{
for(int i=0,ins;i<=2;i++){
ins=10;
if(i==0&&n>10)ins=n/10;
if(i==0&&n==10){printf("十");break;}
if(i==0&&n<10)ins=n;
if(i==1&&n>=10){printf("十");continue;}
if(i==2)ins=n%10;
switch(ins)
{
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;
case 10:printf("十");break;
}
if(n<10)break;
}
}
再然后就是命名规范
https://blog.csdn.net/u010980705/article/details/52847046
https://blog.csdn.net/qq_28877125/article/details/82289399
这是我查到的两个关于命名规范的介绍...
以下是全代码
include
include
int main()
{
printf("输入文件名\n");
char e[10];
scanf("%s",e);
freopen(e,"r",stdin);
int chinese(char c);
void arab(int n);
int purse;
char s[25],a[5]="钱包",cal[10],num[10],d[5];
gets(s);
purse=chinese(&s[15]);
while(strcmp(a,"钱包")==0){
scanf("%s",a);
scanf("%s",cal);
if(!strcmp(a,"看看"))break;
scanf("%s",num);
if(!strcmp(cal,"增加")&&strncmp(&num[2],&s[15],4)>=0){strncpy(d,num,2);purse=purse+chinese(&d[0])10+chinese(&num[4]);}
else if(!strcmp(cal,"增加")&&strncmp(&num[2],&s[15],4)<0)purse=purse+chinese(&num[0]);
else if(!strcmp(cal,"减少")&&strncmp(&num[2],&s[15],4)>=0){strncpy(d,num,2);purse=purse-chinese(&d[0])10-chinese(&num[4]);}
else purse=purse-chinese(&num[0]);
printf("%d\n",purse);
}
arab(purse);
return 0;
}
int chinese(char c)
{
char a[5];
strcpy(a,c);
if(!strcmp(a,"一"))return 1;
else if(!strcmp(a,"二"))return 2;
else if(!strcmp(a,"三"))return 3;
else if(!strcmp(a,"四"))return 4;
else if(!strcmp(a,"五"))return 5;
else if(!strcmp(a,"六"))return 6;
else if(!strcmp(a,"七"))return 7;
else if(!strcmp(a,"八"))return 8;
else if(!strcmp(a,"九"))return 9;
else if(!strcmp(a,"十"))return 10;
else return 0;
}
void arab(int n)
{
for(int i=0,ins;i<=2;i++){
if(i==0)ins=n/10;
if(i==1){printf("十");continue;}
if(i==2)ins=n%10;
switch(ins)
{
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;
}
}
}
然后就是这次作业最烦的脚本了...
刚开始学一样东西确实很麻烦,百度到的东西太零碎都不知道从哪里开始(看两小时教程不知道看了啥着实搞心态)
首先是制作一个编译脚本可以运行自己的作业代码(windows 批处理)
以下是代码
@echo off
echo 文件所在磁盘
set /p a=
cd "%a%"
文件所在路径
set /p b=
cd "%b%"
echo 文件名
set /p c=
gcc "%c%" -o 作业.exe
if exist "作业.exe" echo correct
if not exist "作业.exe" echo error
pause
这是作业一中将输入中文转化成阿拉伯数字的函数测试脚本
代码
@echo off
cd C:\Users\16025\Desktop
echo START
test.cpp
echo FINISH
pause
这是将所储存的阿拉伯数字转化成中文输出的脚本
代码
@echo off
cd C:\Users\16025\Desktop
echo START
测试.cpp
echo FINISH
pause
最后是在作业一中添加读入文件的功能
通过询问以及查询资料
我了解了freopen函数
https://blog.csdn.net/xylon_/article/details/81257268
将以下代码加入原代码中
printf("输入文件名\n");
char s[10];
scanf("%s",s);
freopen(s,"r",stdin);
然后不知道为什么输入的数据导致代码运行卡在循环那里死循环...我想了下感觉是文件中数据读入的问题,可是我又不太了解文件中数据读入是怎么读入的..