寒假作业3
| 这个作业属于哪个课程 | 2020面向对象程序设计张栋班 |
|---|---|
| 这个作业要求在哪里 | 面向对象程序设计寒假作业3 |
| 这个作业的目标 | 1.继续完成作业二的编程题。2.优化架构,思考代码的拓展性,比如我需要增加其他功能,如选择,循环语句怎么办。3.思考:可以参考现有的编程语言,把这些语言的内容加入。如选择、循环语句、函数、或者扩大数字范围,支持负数等。 |
| 作业正文 | |
| 其它参考文献 |
编程题
优化
终于把那一长串字符串改掉了,替换为如下函数(emmmmmmmm好像更长了)
void NumberToChn(int numIn, char* buffer)
{
char* numbers[] = { "零","一","二","三","四","五","六","七", "八", "九" };
char* units[] = { "","十","百","千" };
int index = 0;
int digits[10] = {};
if (numIn < 0)
{
numIn = -numIn;
strcat(buffer, "负");
}
if (numIn == 0)
{
strcat(buffer, "零");
}
while (numIn != 0)
{
digits[index] = numIn % 10;
numIn /= 10;
index++;
}
int zeroCount = 0;
for (int i = index - 1; i >= 0; i--)
{
if (digits[i] == 0)
{
zeroCount++;
}
else if (digits[i] == 1)
{
if (zeroCount >= 1)
{
strcat(buffer, "零");
}
if (i == index - 1 && i != 0 || zeroCount >= 1)
{
if (index <= 2)
{
strcat(buffer, units[i]);
}
else
{
strcat(buffer, numbers[digits[i]]);
strcat(buffer, units[i]);
}
}
else
{
if (i == 0)
strcat(buffer, "一");
else
{
strcat(buffer, "一");
strcat(buffer, units[i]);
}
}
zeroCount = 0;
}
else
{
if (zeroCount >= 1)
{
strcat(buffer, "零");
}
strcat(buffer, numbers[digits[i]]);
strcat(buffer, units[i]);
zeroCount = 0;
}
}
}
拓展
现在支持负数了,且支持运算数字上升到千位了

以下是完整代码
#include<stdio.h>
#include<string.h>
struct Var {
char Name[20] = {};
int Value = 0;
};
void NumberToChn(int numIn, char* buffer)
{
char* numbers[] = { "零","一","二","三","四","五","六","七", "八", "九" };
char* units[] = { "","十","百","千" };
int index = 0;
int digits[10] = {};
if (numIn < 0)
{
numIn = -numIn;
strcat(buffer, "负");
}
if (numIn == 0)
{
strcat(buffer, "零");
}
while (numIn != 0)
{
digits[index] = numIn % 10;
numIn /= 10;
index++;
}
int zeroCount = 0;
for (int i = index - 1; i >= 0; i--)
{
if (digits[i] == 0)
{
zeroCount++;
}
else if (digits[i] == 1)
{
if (zeroCount >= 1)
{
strcat(buffer, "零");
}
if (i == index - 1 && i != 0 || zeroCount >= 1)
{
if (index <= 2)
{
strcat(buffer, units[i]);
}
else
{
strcat(buffer, numbers[digits[i]]);
strcat(buffer, units[i]);
}
}
else
{
if (i == 0)
strcat(buffer, "一");
else
{
strcat(buffer, "一");
strcat(buffer, units[i]);
}
}
zeroCount = 0;
}
else
{
if (zeroCount >= 1)
{
strcat(buffer, "零");
}
strcat(buffer, numbers[digits[i]]);
strcat(buffer, units[i]);
zeroCount = 0;
}
}
}
int ChnToNumber(char str[20])
{
for (int i = -9999; i < 10000; i++)
{
char buffer[20] = {};
NumberToChn(i, buffer);
if (strcmp(str, buffer) == 0)
{
return i;
}
}
return -1;
}
Var Vars[1000] = {};
int VarCount = 0;
int main()
{
char symbol[30] = {};
while (scanf("%s", symbol) != EOF)
{
if (strcmp(symbol, "整数") == 0)
{
char name[20] = {}, op[20] = {}, value[20] = {};
scanf("%s %s %s", name, op, value);
VarCount++;
int val = ChnToNumber(value);
strcpy(Vars[VarCount - 1].Name, name);
Vars[VarCount - 1].Value = val;
printf("创建新变量: %s\n", name);
}
else if (strcmp(symbol, "看看") == 0)
{
char name[20] = {};
scanf("%s", name);
for (int i = 0; i < VarCount; i++)
{
if (strcmp(name, Vars[i].Name) == 0)
{
char buffer[20] = {};
NumberToChn(Vars[i].Value, buffer);
printf("%s 的值为: %s(%d)\n", name, buffer, Vars[i].Value);
break;
}
}
}
else
{
char op[20] = {}, value[20] = {};
scanf("%s %s", op, value);
for (int i = 0; i < VarCount; i++)
{
if (strcmp(symbol, Vars[i].Name) == 0)
{
if (strcmp(op, "增加") == 0)
{
int val = ChnToNumber(value);
Vars[i].Value += val;
printf("%s 的值增加了 %s(%d)\n", symbol, value, val);
}
else if (strcmp(op, "减少") == 0)
{
int val = ChnToNumber(value);
Vars[i].Value -= val;
printf("%s 的值减少了 %s(%d)\n", symbol, value, val);
}
break;
}
if (i == VarCount - 1) printf("错误的输入!请重新输入!\n");
}
}
}
}

浙公网安备 33010602011771号