大家好,欢迎来到IT知识分享网。
这个作业属于哪个课程 | 2020面向对象程序设计 |
---|---|
这个作业要求在哪里 | 面向对象程序设计寒假作业3 |
这个作业的目标 | 1:继续完成编程题 2:发布博客 |
继续完成编程题
由于每次做作业时,总会忘记上一次自己的思路,所以每次都得再次查看上次作业的代码。由于作业2中的代码只运行了一遍是正确的,就没有继续运行第二遍,然后这次又重新运行了一遍我的代码,发现…好像有做错的地方。
为了找出这个错误然后我发现,在要输出的数为整十时,我的想法是先将整十的数量输出,然后再输出“十”。比如:输出为四十时,先输出四,再输出十。于是必须先把40除以10后,再作为参数带入“change2函数”中(我代码中的change2是将阿拉伯数字转化为白话文),而在上次作业中的代码中,此处部分我的代码如下:
else if (sum > 10 && sum < 20)
{
printf("十");
change2(sum); //其中sum是加减过后的钱包数值
}
是的,我居然忘记输出整十的数量了
修改后的代码如下:
else if (sum % 10 == 0 && sum >= 20)
{
change2(sum/10);
printf("十");
}
修改完后,就要开始继续完成这个编程题了。
当输入的白话文数字为负数时:
需要增加代码的地方有三处:①“整数 钱包 等于 负几”(给钱包赋初值时)
②“钱包 增加(减少) 负几”(将钱包中的钱数做加减法时)
③“看看 钱包”(最后输出钱包中的钱数时)
①“整数 钱包 等于 负几”(给钱包赋初值时)
思路:由于“负几”是两个字的形式,与作业二中的“十几”“几十”为同一种形式,所以在优化代码时应该将此代码归于strlen(d) == 4
的行列中(其中d为输入的字符数组)。修改后的代码为:
else if (strcmp("负", i) == 0)
{
i[0] = d[2];
i[1] = d[3];
i[2] = '\0';
sum =change1(i)*(-1);
}
运行结果:
②“钱包 增加(减少) 负几”(将钱包中的钱数做加减法时)
思路:第一种情况:“钱包 增加 负几”相当于将原来的钱数减去一个数;
第二种情况:“钱包 减少 负几”,减一个数相当于加上这个数的负数,所欲是将原来的钱数增加一个数。
修改后的代码如下:
else if (strcmp("负", i) == 0) //"钱包 增加 负几"的情况
{
i[0] = g[2];
i[1] = g[3];
i[2] = '\0';
sum = sum - change1(i);
}
运行结果:
else if (strcmp("负", i) == 0) //“钱包 减少 负几”的情况
{
i[0] = g[2];
i[1] = g[3];
i[2] = '\0';
sum = sum + change1(i);
}
运行结果:
③“看看 钱包”(最后输出钱包中的钱数时)
思路:只需先输出一个“负”字后再将钱数(在我的代码中为sum变量)乘(-1)后,再带入change2函数(change2函数为将阿拉伯数字转化成白话文数字)。
代码如下:
else if(sum<0)
{
printf("负");
change2(-sum);
}
运行结果:
完整代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
int sum, k;
int change1(char d[10]);
void change2(int sum);
char a[10], b[10], c[10], d[10], e[10], f[10], g[10], h[10], i[10], j[10];
scanf("%s %s %s %s", a, b, c, d);
if (strcmp("整数", a) == 0 && strcmp("钱包", b) == 0 && strcmp("等于", c) == 0)
{
if (strlen(d) == 2) sum = change1(d);
if (strlen(d) == 4)
{
i[0] = d[0];
i[1] = d[1];
i[2] = '\0';
if (change1(i) == 10)
{
i[0] = d[2];
i[1] = d[3];
i[2] = '\0';
sum = 10 + change1(i);
}
else if (strcmp("负", i) == 0)
{
i[0] = d[2];
i[1] = d[3];
i[2] = '\0';
sum =change1(i);
}
else
{
sum = change1(i) * 10;
}
}
if (strlen(d) == 6)
{
i[0] = d[0];
i[1] = d[1];
i[2] = '\0';
sum = change1(i) * 10;
i[0] = d[4];
i[1] = d[5];
sum = sum + change1(i);
}
}
scanf("%s", e);
while (strcmp("钱包", e) == 0)
{
scanf("%s %s", f, g);
if (strcmp("增加", f) == 0)
{
if (strlen(g) == 2)
sum = sum + change1(g);
if (strlen(g) == 4)
{
i[0] = g[0];
i[1] = g[1];
i[2] = '\0';
if (change1(i) == 10)
{
i[0] = g[2];
i[1] = g[3];
i[2] = '\0';
sum = sum + 10 + change1(i);
}
else if (strcmp("负", i) == 0)
{
i[0] = g[2];
i[1] = g[3];
i[2] = '\0';
sum = sum - change1(i);
}
else
{
sum = sum + change1(i) * 10;
}
}
if (strlen(g) == 6)
{
i[0] = g[0];
i[1] = g[1];
i[2] = '\0';
k = change1(i) * 10;
i[0] = g[4];
i[1] = g[5];
k = k + change1(i);
sum = sum + k;
}
}
if (strcmp("减少", f) == 0)
{
if (strlen(g) == 2)
sum = sum - change1(g);
if (strlen(g) == 4)
{
i[0] = g[0];
i[1] = g[1];
i[2] = '\0';
if (change1(i) == 10)
{
i[0] = g[2];
i[1] = g[3];
i[2] = '\0';
sum = sum - 10 - change1(i);
}
else if (strcmp("负", i) == 0)
{
i[0] = g[2];
i[1] = g[3];
i[2] = '\0';
sum = sum + change1(i);
}
else
{
sum = sum - change1(i) * 10;
}
}
if (strlen(g) == 6)
{
i[0] = g[0];
i[1] = g[1];
i[2] = '\0';
k = change1(i) * 10;
i[0] = g[4];
i[1] = g[5];
k = k + change1(i);
sum = sum - k;
}
}
scanf("%s", e);
}
if (strcmp("看看", e) == 0)
{
scanf("%s", h);
if (strcmp("钱包", h) == 0)
{
if (sum >= 0 && sum <= 10)
{
change2(sum);
}
else if (sum > 10 && sum < 20)
{
printf("十");
change2(sum);
}
else if (sum % 10 == 0 && sum >= 20)
{
change2(sum/10);
printf("十");
}
else
{
change2(sum / 10);
printf("十");
change2(sum % 10);
}
}
}
return 0;
}
int change1(char d[])
{
int sum;
if (strcmp("零", d) == 0)
sum = 0;
if (strcmp("一", d) == 0)
sum = 1;
if (strcmp("二", d) == 0)
sum = 2;
if (strcmp("三", d) == 0)
sum = 3;
if (strcmp("四", d) == 0)
sum = 4;
if (strcmp("五", d) == 0)
sum = 5;
if (strcmp("六", d) == 0)
sum = 6;
if (strcmp("七", d) == 0)
sum = 7;
if (strcmp("八", d) == 0)
sum = 8;
if (strcmp("九", d) == 0)
sum = 9;
if (strcmp("十", d) == 0)
sum = 10;
return (sum);
}
void change2(int sum)
{
switch (sum)
{
case 0:printf("零"); break;
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;
}
}
思考:
1:测试脚本,唉,琢磨了挺久都无果,再想想叭
2:这次的代码只添加了负数(准确地说只有“负几”的情况),那如果是“负十几”,“负几十”,“负几十几”的情况呢?(虽然还没实践,不过我认为处理方法和“十几”,“几十”,“几十几”的情况有相似之处)。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33476.html