Free考研资料 - 免费考研论坛

 找回密码
 注册
打印 上一主题 下一主题

我写的代码-浙大上机题目

[复制链接]
跳转到指定楼层
楼主
haizzz 发表于 08-7-22 15:53:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目要求:
读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和B的每一位数字由对应的英文
单词给出。
具体的输入输出格式规定如下:
输入格式:测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两
字符串有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。
输出格式:对每个测试用例输出1行,即A+B的值。

输入样例:

one + two
three four + five six
zero seven + eight nine
zero + zero

输出样例:

The result is 3
The result is 90
The result is 96
附加要求:
(1)不能用string.h及其相关库函数
(2)出错检测机制

下面的程序是我自己写的,还请大家指教!
/*在VC 6.0 下调试通过*/
#include <stdio.h>
#define ERROR 300

char *num[10]={"zero\n","one\n","two\n","three\n","four\n","five\n","six\n","seven\n","eight\n","nine\n"};
char a[15],b[15];

int Compare(char *a,char *b,int length);
int GetNumber(char *s);
int GetStringLength(char *s);
int GetFinger(char *s);

void main()
{       
        char temp;       
        int i=0,j=0,num1=0,num2=0;
        int flag=0;
        do
        {
                printf("Please input your commend like this: (three four + five six)\n ");
                scanf("%c",&temp);
                while(temp!='\n')
                {               
                        if(temp=='+')
                        {
                                flag=1;                       
                        }
                        if(flag==0)
                        {
                                a=temp;
                                i++;
                        }
                        else                                       
                        {
                                b[j]=temp;
                                j++;
                        }               
                        scanf("%c",&temp);
                }       
                b[j]='\n';
                a[i-1]='\n';
                i=0;
                j=0;
                /*去掉b[]中前面的一个加号和一个空格*/
                while(b!='\n')
                {
                        b=b[i+2];
                        i++;
                }
                i=0;j=0;       
                flag=0;
                num1=GetFinger (a);
                num2=GetFinger (b);
                if(num1==0 && num2==0)
                        break;
                if(num1==ERROR || num2==ERROR)
                        break;
                printf("\nThe reuslt is: %d+%d=%d\n",num1,num2,num1+num2);                       
        }while(1);       
}

/*从num[]数组中找到与输入的s相应的数字*/
int GetNumber(char *s)
{
        int i=0;
        for(i=0;i<10;i++)
        {
                if(Compare(s,num,GetStringLength(s)))
                        return i;
        }

        return 10;
}
/*比较两个字符串是否相等*/
int Compare(char *a,char *b,int length)
{       
        for(int i=0;i<=length;i++)
        {
                if(a!=b)
                        break;
        }
        if(i-1==length)
                return 1;
        else
                return 0;       
}

int GetStringLength(char *s)
{
        int i=0;
        while(s!='\n')
        {
                i++;
        }
        return i;
}
/*将形如three one的字符串转换成31这样的数字*/
int GetFinger(char *s)
{
        char a1[10],a2[10];
        int i=0,j=0,k=0,temp,a;
        while(s!=' ' && s!='\n')
        {
                a1[j]=s;
                i++;
                j++;
        }
        a1[j]='\n';
        temp=GetNumber (a1);
        if(temp==10)
        {
                printf("\nyou have a error number:");
                while(a1[k]!='\n')
                {
                        printf("%c",a1[k]);
                        k++;
                }
                return ERROR;
        }
        a=temp;
        j=0;
        if(s==' ')
        {
                i++;
                while(s!='\n')
                {
                        a2[j]=s;
                        j++;
                        i++;
                }
                a2[j]='\n';
                temp=GetNumber (a2);
                if(GetNumber (a2)==10)
                {
                        k=0;
                        printf("\nyou have a error number:");
                        while(a2[k]!='\n')
                        {
                                printf("%c",a2[k]);
                                k++;
                        }
                        return ERROR;
                }
               
                a=a*10+temp;
        }
        return a;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|Free考研资料 ( 苏ICP备05011575号 )

GMT+8, 24-12-28 12:27 , Processed in 0.083262 second(s), 12 queries , Gzip On, Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表