这个作业属于哪个课程 | 2020年面向对象程序设计 (福州大学 - 数学与计算机科学学院) |
---|---|
这个作业要求在哪里 | 面向对象程序设计寒假作业3 |
这个作业的目标 | 继续完成编程题 发布博客 |
作业正文 | 如下 |
我的github代码库 | https://github.com/LRlicious/AC |
目前我能做好的只有把负数进行输出了,这样就把数据范围扩大到99~-99了,而进一步扩大输入输出范围好像有点艰难。。以及那扩展性要咋搞啊。。。
#include
#include
#include
char key[6][20]={"整数","钱包","等于","增加","减少","看看"};
char num[11][4]={"零","一","二","三","四","五","六","七","八","九","十"};
int change(char a[20]);//转换
void error();
void print(int n);
int main(){
int flag=1,i=0,n=0,m;
char a[20]={" "},b[20]={" "},c[20]={" "},d[20]={" "};
while(1){
if(flag==1){
scanf("%s %s %s %s",a,b,c,d);
if(strcmp(a,key[0])==0&&strcmp(b,key[1])==0&&strcmp(c,key[2])==0)//初始化
{
flag=0;
n=change(d);
if(n==-1){
error();
flag=0;
continue;
}
}
else error();
}
else{
scanf("%s %s",a,b);
if(strcmp(a,key[1])==0&&strcmp(b,key[3])==0)//增加
{
scanf(" %s",c);
m=change(c);
if(m>=0)
n=n+m;
else {
error();
continue;
}
}
else if(strcmp(a,key[1])==0&&strcmp(b,key[4])==0)//减少
{
scanf(" %s",c);
m=change(c);
if(m>=0)
n=n-m;
else
{
error();
continue;
}
}
else if(strcmp(a,key[5])==0&&strcmp(b,key[1])==0)//输出
{
print(n);
break;
}
else {
error();
scanf(" %s",c);
}
}
}
system("pause");
return 0;
}
void error(){
printf("输入错误\n");
}//输入报错情况
int change(char a[20])
{
int i,n,sum;
char x[10],y[10];
n=strlen(a);
if(n==2)//0-10的输入
{
for(i=0;i<=11;i++)
{
if((strcmp(a,num[i])==0))
return i;
if(i==11)
return -1;
}
}
if(n==4)//11-20以及10的倍数
{
for(i=0;i<2;i++){
x[i]=a[i];
}
for(i=2;i<4;i++){
y[i-2]=a[i];
}
if(strcmp(x,"十")==0){
for(i=0;i<=11;i++){
if(strcmp(y,num[i])==0)
return 10+i;
if(i==11)
return -1;
}
}
else if(strcmp(y,"十")==0){
for(i=1;i<=11;i++){
if(strcmp(x,num[i])==0)
return i*10;
if (i==11)
return -1;
}
}
else return -1;
}
else if(n==6)//几十几
{
for(i=2;i<4;i++){
x[i-2]=a[i];
}
if(strcmp(x,num[10])!=0)
return -1;
for(i=0;i<2;i++){
x[i]=a[i];
}
for(i=4;i<6;i++){
y[i-4]=a[i];
}
for(i=0;i<=11;i++){
if(strcmp(x,num[i])==0){
sum=i*10;
break;
}
if (i==11)
return -1;
}
for(i=0;i<=11;i++){
if(strcmp(y,num[i])==0){
sum=sum+i;
break;
}
if (i==11)
return -1;
}
return sum;
}
else return -1;
}//文字转换数字
void print(int n)//输出
{
if(n<0){
printf("负");
n=-n;
}
if(n>99)
printf("数字过大这渣渣计算器办不到。。。");
else{
int x,y;
x=n/10;
y=n%10;
if(x==0)//0-9阶段
{
printf("%s",num[y]);
}
else if(x!=0&&y==0)//几十
{
if(x==1)
printf("十");
else
printf("%s十",num[x]);
}
else if(x==1&&y!=0)//十几
{
printf("十%s",num[y]);
}
else//几十几
{
printf("%s十%s",num[x],num[y]);
}
}
}
以及对输出函数进行的单独测试
#include
char num[11][4]={"零","一","二","三","四","五","六","七","八","九","十"};
void print(int n);
int main (){
int n;
n=5;print(n);printf("\n");
n=10;print(n);printf("\n");
n=-20;print(n);printf("\n");
n=-51;print(n);printf("\n");
n=1;print(n);printf("\n");
n=-10;print(n);printf("\n");
n=21;print(n);printf("\n");
n=-11;print(n);printf("\n");
n=13;print(n);printf("\n");
n=-85;print(n);printf("\n");
n=-36;print(n);printf("\n");
getchar();
}
void print(int n)
{
if(n<0){
printf("负");
n=-n;
}
if(n>99)
printf("数字过大这渣渣计算器办不到。。。");
else{
int x,y;
x=n/10;
y=n%10;
if(x==0)//0-9阶段
{
printf("%s",num[y]);
}
else if(x!=0&&y==0)//几十
{
if(x==1)
printf("十");
else
printf("%s十",num[x]);
}
else if(x==1&&y!=0)//十几
{
printf("十%s",num[y]);
}
else//几十几
{
printf("%s十%s",num[x],num[y]);
}
}
}
不过还是无法用脚本来实现。。。
其他部分第一次作业时候测试了半天应该没问题了就没再去理它了。。。
————————————————————————分割线————————————————————————————
话说这是啥鬼问题啊。。。为啥我这次作业vscode的断点都无法出现呢。。。导致我一直看不到结果。。。最后还是通过devc++来测试。。。输入完毕后vscode的程序直接关掉,无论是加断点还是system("pause");还是两个getchar()都行不通。。。但是相同代码啊放在devc++却能实现,尤其是system("pause");
以及打开以前写的倒是断点能运行,不过与这次对比能看到两次有不同结果
并且在程序运行时鼠标放在那个失败的断点上面会出现malformed linespec error: unexpected number, "-"但是没在网上找到对应的报错。。。