C语言课程设计,打上注释!再给个流程图.给150分啊题目是这个:用英文单词模拟数学计算:读入两个小于100的正整数A和B,计算A+B.需要注意的是:A和B的每一位数字由对应的英文单词给出.具体

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/28 00:35:14
C语言课程设计,打上注释!再给个流程图.给150分啊题目是这个:用英文单词模拟数学计算:读入两个小于100的正整数A和B,计算A+B.需要注意的是:A和B的每一位数字由对应的英文单词给出.具体
xYRI~&lKZ0,ƾ?1!$a# [fC9 63w[6VVwVvVfVVw쁶Ҳvx97|/M@S)>(_FpIB)6[z8T6%fsuu_O̚(W:3ѲE4++hQ.,x$I}>U֎=)UJi{26 0좜K23uQaxM@m4]pS|''B<@Ԧn + N3t@ޘI;@Si5JDhwmntp|1'>$="$ Cp O\iN6|ܓs([3ذ7\q Ҽ bQeF=_nɹ 2LMc Se>:<:s|r x! P !!NXo!z`(|/!D v 䇑t9䎼Lˏ0yP'N'OiŷΨ.p$? >1!24p#uk 6 huV {OJɅUZܼ@ M1,Qo=zBM>M~]>f&v9w 0""{v3o>󶃨k Mew[Y.FBnE&suOl\;Lm?;|.QKhH)eej4"|Mm)yu49Զ>ЋV2 j7Em"j"i ef妺Z5v7OaQMV“4Y\'CLi `OSXPG+ zU0\):fOpw>$+x=2A<71O>cCP_0Xw"ObA0cEƂ# :Kt ^]K)e4EUn79wd-: "&Nx*O>x`r ڑ9ZaL @Zo1ߟRgشfR&&)R5Cy(I&gՕWkdBVN/JPO &pZ+А{tU?~l{r\=aSQJ?Gv^l0Y[e~ѝC9s/`02##nSQ=L&fd8z'F 2 )R_wz7 X9?s}Q\[5 .3Se0®GRhq4(R 6;McF=L€隖_lҤ&eA aXy6+bR,. j}[2gl*xL2HGaOewKra X@ 6@UiDGè2S&u6z'^8ʟ@vtkQ*K=Pz$ 1<Xv#HZ 7٠?T*W[Eh\YXwt-765דL 'ēa*ta{re^g1Y;a%RnMmDs3H  X`hBoKco(+?4y0RSerNK5P{}iqޅGW`$r')R5!}Mm9VXQfVPW'҃!s@:IӟX訙ӳ A2X!2kwZR+xC줹E;ŸΖ{)BC &\rdjB6KOƕKRS2DLoefc{x>[_{~g|Db/nw/<MD88 D}?~w͒t"Ix~w' yzlx[Z-M n?6@c'mlnli 6yOs S46a]u]zV)pGJƀimy%jI]wA/Y

C语言课程设计,打上注释!再给个流程图.给150分啊题目是这个:用英文单词模拟数学计算:读入两个小于100的正整数A和B,计算A+B.需要注意的是:A和B的每一位数字由对应的英文单词给出.具体
C语言课程设计,打上注释!再给个流程图.给150分啊
题目是这个:用英文单词模拟数学计算:读入两个小于100的正整数A和B,计算A+B.需要注意的是:A和B的每一位数字由对应的英文单词给出.
具体的输入输出格式规定如下:
输入格式:测试输入包含若干测试用例,每个测试用例占一行,格式为 "A + B = ",相邻两字符串有一个空格间隔.当A和B同时为zero时输入结束,相应的结果不要输出.
输出格式:对每个测试用例输出1行,即A+B的值.
输入样例:
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
输出样例:
three
nine zero
nine six
然后个了一个这个代码:
#include
#include
#include
char num[10][6] = { "zero","one","two","three","four","five","six","seven","eight","nine" };
int parse(char * input)
{
int i = 0; int match = 0;
for (i = 0; i < 10; i++) {
match = strcmp(input,num[i]);
if (match == 0) return i;
}
return -1;
}
struct TStack {
int data;
struct TStack * next;
};
struct TStack * root = 0;
void stack_push(int data)
{
struct TStack * x = (struct TStack *)malloc(sizeof(struct TStack));
x->data = data;
x->next = root;
root = x;
}
int stack_pop(int * data)
{
struct TStack * x = root;
if x) return 0;
root = x->next ;
*data = x->data ;
free(x);
return 1;
}
int SumFromStack(void)
{
int x = 0,y = 0,z = 0,sum = 0;
int tens[] = {1,10,100,1000,10000};
do {
x = stack_pop(&y);
if (x == 0) break;
sum += y * tens[z++];
}while(z < 5); /*最大计算到五位数*/
return sum;
}
void print(int C)
{
char str[256]=""; size_t i = 0;
sprintf(str,"%d",C);
for (i = 0; i < strlen(str); i++) printf("%s ",num[str[i] - '0']);
printf("\n");
}
int main(void)
{
char str[256] = ""; int A = 0,B = 0,x = 0;
do {
A = 0; B = 0; root = 0; x = 0;
for(;;) {
str[0] = 0;
scanf("%s",str);
x = parse(str);
if (x < 0 ) {
if (str[0] == '+') A = SumFromStack();
if (str[0] == '=') {
B = SumFromStack();
break;
}
}else{
stack_push(x);
}
}
if (A || B) print(A + B);
}while(A || B);
system("pause");
return 0;
}
运行是成功的!然后我想知道 “方案设计与论证”也就是这个代码利用的思想,还有请高手帮忙画一个流程图!程序清单与调用关系~
先给100,再给50分啊!

C语言课程设计,打上注释!再给个流程图.给150分啊题目是这个:用英文单词模拟数学计算:读入两个小于100的正整数A和B,计算A+B.需要注意的是:A和B的每一位数字由对应的英文单词给出.具体

哎,累死了.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char num[10][6] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

int parse(char * input)//就3中操作数 要么是+号,要么是=号 要么是要运算的数据【英文标示的】 

{

\x09int i = 0; int match = 0;

\x09for (i = 0; i < 10; i++) 

    {

\x09\x09match = strcmp(input, num[i]);//比较用户输入和 num数组中的值 比如 three 是第3个元素, 输入three 刚好能返回3 

\x09\x09if (match == 0) return i;

\x09}

\x09return -1;

}//+,=返回-1 数据返回对应的十进制数 

struct TStack  //栈的结构体定义 

{

\x09int data;

\x09struct TStack * next;

};

struct TStack * root = 0; //全局变量,栈的根节点 

void stack_push(int data)//元素入栈 

{

\x09struct TStack * x = (struct TStack *)malloc(sizeof(struct TStack)); //实例化一个节点 

\x09x->data = data; //给节点赋值 

\x09x->next = root; //新节点指向根 

\x09root = x; //根从新赋值为根 保证跟都指向最后一个元素  

}

int stack_pop(int * data) //弹出栈顶元素 并用data返回 ,栈非空返回1 否则返回0  

{

\x09struct TStack * x = root; //x=跟节点 

\x09if (!x) return 0;//如果栈为空就返回0 

\x09root = x->next ; //出栈后 栈顶指针下移 

\x09*data = x->data ;//用data返回栈顶元素的值 

\x09free(x);//释放栈顶元素的内存空间 

\x09return 1;//返回操作成功  

}

int SumFromStack(void)//把栈内所有的英文数据换成一个十进制数据. 

{

\x09int x = 0, y = 0, z = 0, sum = 0;

\x09int tens[] = {1, 10, 100, 1000, 10000};

\x09do 

{

\x09\x09x = stack_pop(&y);// y得到栈顶元素,x为返回状态 

\x09\x09if (x == 0) break;//栈中元素为空,就退出 

\x09\x09sum += y * tens[z++]; //sum 用来得到一个操作数 例如 three five  =35 

\x09}while(z < 5); /*最大计算到五位数*/

\x09return sum;

}

void print(int C) //给定一个数值 返回对应的英文形式 如: 256-->two five sxi

{

\x09char str[256]=""; size_t i = 0;

\x09sprintf(str, "%d", C);//c的%d形式存到str中 比如 C=258 那么 str[0]='2',str[1]='5',str[2]='8' 

\x09for (i = 0; i < strlen(str); i++)

          printf("%s ", num[str[i] - '0']);//根据字符与‘0’的距离 打印出数字对应的num中的字符串. 

\x09printf("\n");

}

int main(void)

{

\x09char str[256] = ""; int A = 0, B = 0, x = 0;//A,B用来记录2个要加的数的十进制  x 用来记录输入的是数据还是+,=号 

\x09do 

\x09{

\x09\x09A = 0; B = 0; root = 0;  x = 0;

\x09\x09for(;;) 

\x09\x09{

\x09\x09\x09str[0] = 0;

\x09\x09\x09scanf("%s", str);//获取字符串的输入 

\x09\x09\x09x = parse(str);//根据输入的字符串转换成对应进制数 

\x09\x09\x09if (x < 0 )//parse 返回-1 有可能是+号,有可能是=号 

\x09\x09\x09{

\x09\x09\x09\x09if (str[0] == '+') A = SumFromStack();//遇到+号,那么肯定+左边的数据全入栈,可以用A得到一个翻译成十进制的运算数 

\x09\x09\x09\x09if (str[0] == '=') 

\x09\x09\x09\x09{

\x09\x09\x09\x09\x09B = SumFromStack();// 遇到=号那么肯定第二个家数也全部入栈了,B得到一个翻译成10进制的元算数据 

\x09\x09\x09\x09\x09break;

\x09\x09\x09\x09}

\x09\x09\x09}

\x09\x09\x09else //否则是运算数据那么就入栈 

\x09\x09\x09{

\x09\x09\x09\x09stack_push(x);

\x09\x09\x09}

\x09\x09}

\x09\x09if (A || B) print(A + B);//如果A,B不同时为0,那么用print函数打印A+B对应的 特殊编码字符 如234->tow three four 

\x09}while(A || B);//一旦A,B同时为0 就退出 

\x09system("pause");

\x09return 0;  

}

流程图中写出了详细的函数调用和程序思路.

楼主如果不给出程序的话,我自己动手写还方便点.人家的代码看着蛋疼.好在他的思路还是清晰好理解的. 流程图附下,楼主赶紧去准备课程设计吧. 

【楼主好好珍惜啊,注释也是一句一句写的,流程图一个一个在visio里面话的,看着你是真的想学东西,所以我弄的很详细.不是为了你的分数来的,而是我对程序的 兴趣】