| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1733 人关注过本帖
标题:请教一下关于计算器的编写
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你沒學到函數,就把Show_Memory()中的printf()行直接寫到main()函數中對應的位置,把涉及Show_Memory的部分刪了即可。

授人以渔,不授人以鱼。
2015-02-02 14:05
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 40楼 TonyDeng
版主就是威武!
不过也没有考虑被0除哦,一旦除了后,再输入正确的数,怎么运算都1.0#INF。略改一下即可(红色部分):
        if ((operate != 'e') && (operate != 'E'))
        {
            if(value<1.79e+308&&value>-1.79e+308)
                 Memory = value;
        }
        Show_Memory();

能编个毛线衣吗?
2015-02-02 15:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是的,我沒寫那個,自己補上去。

授人以渔,不授人以鱼。
2015-02-02 16:16
Aliali
Rank: 2
等 级:论坛游民
威 望:1
帖 子:40
专家分:36
注 册:2015-1-31
收藏
得分:0 
回复 40楼 TonyDeng
里面有些语句都没见过呢。先收藏学多点回头再看看。
2015-02-02 19:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用Aliali在2015-2-2 19:04:58的发言:

里面有些语句都没见过呢。先收藏学多点回头再看看。

哪些語句是你沒見過的?我預料你沒見過的都加了注釋啊。

下面是補上除數爲零檢測的代碼:
程序代码:
/*
编写简单的计算器。该程序允许用户输入如下的格式算式:

数字 操作符

其中操作符 可以是下面的任意一个:

+ - * / S E
操作符S将计算器中的“记忆数字”设置为输入的数值。操作符E告诉程序节结束执行。如果输入的是算术操作符,那么就把计算器中
的“记忆数字”作为第一个操作数,用户输入的数字作为第二个操作数,计算结果作为“记忆数字”重新保存起来。下面是我们的计算
器运行的一个示意过程:
Begin calculations
10 s         设置记忆数字为10
= 10.000000   显示记忆数字
2/            除以2
=5.000000     减去55
55-
-50.000000

100.25s       设置记忆数字为100.25
= 100.250000
4 *            Multiply(乘以4)
= 401.000000
0 E            结束运行
= 401.000000
End of calculations.
在程序中要求检查除数为 0 和未知的操作符这两种意外情况。
*/

#include <stdio.h>
#include <stdlib.h>

double Memory = 0.0;            // 寄存器

// 函數原型
void Show_Memory(void);

// 主程序入口函數
int main(void)
{
    double value;                // 操作數
    char   operate;                // 操作符

    printf_s("\nBegin calculations\n");                            // 非vc編譯器改用printf()
    do
    {
        fflush(stdin);                                          // 清空標準輸入流數據以備接收輸入,非標準函數,沒有有效的替代方法!
        if (scanf_s("%lf %c", &value, &operate, 1) != 2)        // 非vc編譯器改用scanf()
        {
            /* 注意scanf()的用法,格式控制符%lf和%c之間有空格,表示輸入應用空格分開。實際上不分開
               也可以,但由於題目要求用到e作操作符,與C的科學記數法衝突,則與前面的數字連在一起會
               造成輸入錯誤。*/
            printf_s("value = %f, operate = %c\n", value, operate);
            printf_s("ERROR\n");
            continue;
        }
        switch (operate)
        {
        case 's':
        case 'S':
        case 'e':
        case 'E':
            break;
        case '+':
            value = Memory + value;
            break;
        case '-':
            value = Memory - value;
            break;
        case '*':
            value = Memory * value;
            break;
        case '/':
            if (value != 0)
            {
                value = Memory / value;
            }
            else
            {
                printf_s("ERROR\n");
                continue;
            }
            break;
        default:
            printf_s("ERROR\n");
            continue;
            break;
        }
        if ((operate != 'e') && (operate != 'E'))
        {
            Memory = value;
        }
        Show_Memory();
    } while ((operate != 'e') && (operate != 'E'));
    printf_s("\nEnd of calculations.\n");

    printf_s("\nPress any key to continue...");
    fflush(stdin);
    getchar();

    return EXIT_SUCCESS;        // 標準退出碼,在stdlib頭中跨平臺宏定義,此處爲零
}

// 顯示寄存器内容
void Show_Memory(void)
{
    printf_s("= %f\n", Memory);
}



[ 本帖最后由 TonyDeng 于 2015-2-4 10:18 编辑 ]

授人以渔,不授人以鱼。
2015-02-04 01:25
快速回复:请教一下关于计算器的编写
数据加载中...
 
   



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

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