| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2872 人关注过本帖
标题:写了个计算器程序,求完善~
只看楼主 加入收藏
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
上面的两楼我都没看出有什么不一样
2011-08-11 19:40
ovenwlm123
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-20
收藏
得分:0 
路过 看看
2011-08-11 20:58
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
while (getchar() != q)
{

}

现在写样的程序,一般都会修改4, 5次才允许提交
如果没有vim,很难想像会有多痛苦

[ 本帖最后由 BlueGuy 于 2011-8-11 21:51 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2011-08-11 21:49
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
#include <stdio.h>
//blueguy -- 这里最好有一个空行,
int main(void)
{
    //blueguy -- 最好拿到main()外面去
    double count(double a, char b, double c);// 声明一个计算函数
    //blueguy -- 函数名太短,不明其意
    double a;
    char b;
    double c;

    printf("This is a calculator:\n");
//    printf("格式如: 4*5\n");

    for (;;) //循环多次计算
    {   
        //blueguy -- 下面三个可以整到一行去
        scanf("%lf", &a); //不小心把%lf写成%d会出错
        scanf("%c", &b);
        scanf("%lf", &c);
        printf("%lf\n", count(a,b,c));
    }
    return 0;
}
double count(double a, char b, double c)  //定义一个计算函数
{
    switch (b) //判断b是什么符合
    {   
        //这个格式不常用,
        
        //blueguy -- 尽量不要使用这样的magic值,
        case 42 :  
             return a*c;
             break; //42对应的符合是 *
        case 43 :  return a+c; break; //    +
        case 45 :  return a-c; break; //    -
        case 47 :  return a/c; break; //    /
        
        //blueguy -- 缺少break
        default : printf("错误:只能计算加(+)、减(-)、乘(*)、除(/).\n");
    }
}


我就是真命天子,顺我者生,逆我者死!
2011-08-11 21:58
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
回复 53楼 BlueGuy
就是啊~为什么同一段代码有时会出错,有时不出错。
2011-08-11 22:17
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
回复 54楼 BlueGuy
领教了。
2011-08-11 22:18
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:0 
程序代码:
#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);
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)
    {    
        if(type==46)
        {
            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(((int)type)==10||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);
         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;
    }
}

A real warrior never quits.
2011-08-12 15:28
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:0 
我只能强调这道题用C做并不是那么简单,我浏览了一下前几页的回复,没有一个符合要求的(ESC退出)!

A real warrior never quits.
2011-08-12 15:36
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
回复 57楼 QQ346957135
不错,不过就是程序中输入错的信息会导致全部出错。
2011-08-12 15:37
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:0 
你自己完善吧

A real warrior never quits.
2011-08-12 16:00
快速回复:写了个计算器程序,求完善~
数据加载中...
 
   



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

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