| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2872 人关注过本帖
标题:写了个计算器程序,求完善~
只看楼主 加入收藏
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
回复 57楼 QQ346957135
return 后面加break 不是多余的么?
2011-08-12 16:45
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
讲一下你的思路吧,看别人的代码特别辛苦。
2011-08-12 16:46
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:0 
回复 62楼 a9517495424
不好意思,现在才看到。上次忘了作注释了,这次你看看,不懂了再问。我强调过这道题不是那么简单。第二个函数内的break是多余的,可以去掉,我习惯了先写上break~
程序代码:
#include<stdio.h>
#include <conio.h> 
#include <math.h>
#include <stdlib.h> 
//函数声明:
double NumberParse(int temp_number_integer[],int temp_number_decemal[],int integer,int decemal);
//此函数根据提供的整数部分和小数部分及(integer整数部分的数字个数)和(decemal小数部分的数字个数)返回实数
double NumberDeal(double number_one,double number_two,char deal);//实现两个实数的加减乘除的函数
void main()
{
    
    int temp_number_integer[200];//整数部分
    int temp_number_decemal[200];//小数部分
    int integer =0;//输入整数部分的计数器
    int decemal =0;//输入小数部分的计数器
    int sign =1;//用来标记小数点
    char deal;//记录运算符
    char type;//临时变量,存储每次输入的字符
    double number_one=0;
    double number_two=0;//对两个实数作初始化
    int k=0;//用来标记负号
    printf("这是一个加减乘除计算器,(输入格式为:4*5=):\n");//注意格式
    while((type=getch())!=27)//循环输入,输入为ESC时跳出循环
    {    
        if(type==46)//小数点,46为小数点的ASCII码
        {
            printf("%c",'.');
            sign =0;
        }
        else if(type>=49&&type<=57)//0到9
        {
            
            printf("%d",type-48);
            if(sign==1)//输入整数部分
            {
                
                temp_number_integer[integer] =(int)type-48;
                integer++;
            }
            else//输入小数部分
            {    
                
                temp_number_decemal[decemal] =(int)type-48;
                decemal++;
            }
        }
        else
        {
            if(type=='=')//等号情况为最后输出,各值要进行初始化操作用于下次循环
            {
                number_two =NumberParse(temp_number_integer,temp_number_decemal,integer,decemal);
                integer =0;
                decemal =0;
                sign =1;
                printf("%c",'=');
                printf("%f",NumberDeal(number_one,number_two,deal));
                printf("%c",10);
                number_one=0;
                number_two=0;
            }
            else if(k==0&&type==45)//输入为负号且不是作为运算符
            {
                printf("%c",type);
                k=1;
            }
            else //其他情况
            {
                printf("%c",type);
                deal =type;
                if(number_one==0&&k==1)//第一个数为负实数
                {

                    number_one =(-1)*NumberParse(temp_number_integer,temp_number_decemal,integer,decemal);
                    integer =0;
                    decemal =0;
                    sign =1;//初始化
            
                }
                else//第一个数为正实数
                {
                    number_one =NumberParse(temp_number_integer,temp_number_decemal,integer,decemal);
                    integer =0;
                    decemal =0;
                    sign =1;//初始化
                }
            }
        }
    }
  exit(0);
}
//以下较为简单,不做注释
double NumberParse(int temp_number_integer[200],int temp_number_decemal[200],int integer,int decemal)
{

    int i=0;
    double number=0;
    while(integer>0)
    {
         number=number + temp_number_integer[i]*pow((double)10,integer-1);//pow(x,y),计算x的次幂
         integer --;
         i++;
    }
    if(decemal!=0)
    {
        i=0;
        while(i<=decemal)
        {
            number =number + temp_number_decemal[i]*pow(0.1,i+1);
            decemal --;
            i++;
        }
    }
    return number;
}
double NumberDeal(double number_one,double number_two,char deal)
{
    switch(deal)
    {
        case '+' :return number_one+number_two;break;
        case '-' :return number_one-number_two;break;
        case '*' :return number_one*number_two;break;
        case '/' :return number_one/number_two;break;
    }
}


[ 本帖最后由 QQ346957135 于 2011-8-17 12:25 编辑 ]
收到的鲜花
  • a95174954242011-08-17 13:12 送鲜花  5朵   附言:我很赞同

A real warrior never quits.
2011-08-17 12:23
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
回复 63楼 QQ346957135
我觉得你的思路非常好,不过既然你用数组的每一个元素来存储每一位数,那为什么不用字符数组?字符数组已经完全足够存储0~9了啊。
2011-08-17 12:57
骡子拉马
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2011-8-2
收藏
得分:0 
能不能再细点儿呀!看不懂算法呀!
2011-08-17 15:15
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:0 
回复 64楼 a9517495424
谢谢你能思考并提出建议,用字符数组也是可以的;但要明白原理,因为字符和浮点数相乘则字符会自动转换为浮点数类型~

A real warrior never quits.
2011-08-17 17:56
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
那你的程序我拿去了
2011-08-18 10:38
快速回复:写了个计算器程序,求完善~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019988 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved