溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用C++實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小功能

發(fā)布時(shí)間:2022-02-07 15:48:01 來(lái)源:億速云 閱讀:168 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“怎么用C++實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小功能”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“怎么用C++實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小功能”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

限制:

1、只能使用分支語(yǔ)句與循環(huán)語(yǔ)句;
2、不能使用數(shù)組和自定義函數(shù);
(即把自己當(dāng)作只學(xué)到分支語(yǔ)句和循環(huán)語(yǔ)句的初學(xué)者)

計(jì)算器要求:

1、可以進(jìn)行簡(jiǎn)單的加、減、乘、除四則運(yùn)算;
2、如出現(xiàn)多個(gè)運(yùn)算符號(hào),必須考慮先乘除后加減的運(yùn)算順序;
3、不需要括號(hào)運(yùn)算符;

一個(gè)比較簡(jiǎn)單的程序,但加上了上述的限制后,讓我耗費(fèi)了很大的功夫。

源代碼如下:

#include<iostream>
using namespace std;

int main()
{
    //首先要聲明變量:
    double a0,a1,a2;//為了處理多位小數(shù)的運(yùn)算,這里使用浮點(diǎn)型;
    char ca1,ca2;//字符型用于儲(chǔ)存運(yùn)算符號(hào);
    //先考慮簡(jiǎn)單的情況————輸入一個(gè)數(shù)后直接輸入等號(hào)并輸出結(jié)果;
    cin>>a0>>ca1;
    if(ca1=='=') cout<<a0<<endl;
    else
    {
        //若輸入的第一個(gè)運(yùn)算符不是等號(hào),則可以繼續(xù)輸入;
        cin>>a1>>ca2;
        while(1)//此處進(jìn)入第一個(gè)循環(huán),用于處理僅有加減的運(yùn)算;
        {            
            if(ca1=='=') {cout<<a0<<endl;break;} //用于跳出循環(huán)并輸出結(jié)果;
            switch(ca2)//判斷第二個(gè)輸入的運(yùn)算符;
            {
                case '=':
                    //如果第二個(gè)運(yùn)算符是等號(hào),則可直接進(jìn)行前兩個(gè)數(shù)的運(yùn)算;
                    switch(ca1)
                    {
                        //將前兩個(gè)數(shù)的運(yùn)算結(jié)果存在第一個(gè)變量a0中,下同;
                        case '+': a0=a0+a1;break;
                        case '-': a0=a0-a1;break;
                        case '*': a0=a0*a1;break;
                        case '/': a0=a0/a1;
                    }
                    ca1=ca2;break;//將ca2的值賦給ca1后跳出switch;
                    //由于跳出switch后就會(huì)回到循環(huán)的第一句,即可通過(guò)ca1的值判斷是否繼續(xù)循環(huán),下同;
                case '+':
                case '-':
                    //如果第二個(gè)運(yùn)算符是加號(hào)或減號(hào),也可以直接進(jìn)行前兩個(gè)數(shù)的運(yùn)算;
                    switch(ca1)
                    {
                        case '+': a0=a0+a1;break;
                        case '-': a0=a0-a1;break;
                        case '*': a0=a0*a1;break;
                        case '/': a0=a0/a1;
                    }
                    ca1=ca2;cin>>a1>>ca2;break;//由于ca2賦給ca1的值不是等號(hào),因此會(huì)繼續(xù)循環(huán),所以必須要更新a1與ca2的值;
                case '*':
                case '/':
                    //如果第二個(gè)運(yùn)算符是乘號(hào)或除號(hào),則要進(jìn)入第二個(gè)循環(huán)處理連乘或連除的問(wèn)題;
                    while(1)
                    {
                            //連乘或連除;
                            switch(ca2)
                            {
                                //此處要對(duì)第三個(gè)變量進(jìn)行賦值,并將a1與a2的乘除結(jié)果存入a1中;
                                case '*':cin>>a2;a1=a1*a2;cin>>ca2;break;
                                case '/':cin>>a2;a1=a1/a2;cin>>ca2;
                                //還要對(duì)ca2的值進(jìn)行更新,用于處理接下來(lái)運(yùn)算;
                            }
                            if(ca2=='=')//若ca2的值變?yōu)榈忍?hào);
                            {
                                switch(ca1)
                                {
                                     //將之前乘除的結(jié)果a1與之前的a0進(jìn)行加減運(yùn)算,并將結(jié)果存入a0中;
                                     case '+': a0=a0+a1;break;
                                     case '-': a0=a0-a1;break;
                                }
                                ca1=ca2;
                                break;//這也是跳出第二個(gè)循環(huán)的條件,且ca2為加號(hào)或減號(hào)時(shí)也要跳出循環(huán);
                            }
                            if(ca2=='+'||ca2=='-')
                            {
                                switch(ca1)
                                {
                                     case '+': a0=a0+a1;break;
                                     case '-': a0=a0-a1;break;
                                }
                                ca1=ca2;cin>>a1>>ca2;
                                break;
                            }
                    }
            }

        }
    }
    return 0;
}

注:

1、當(dāng)ca2的值為加號(hào)或減號(hào)或等號(hào)時(shí),就必須要出現(xiàn)ca2對(duì)ca1的賦值,不然沒(méi)有辦法處理接下來(lái)的運(yùn)算或者跳出循環(huán)輸出結(jié)果;
2、a0的作用是將加減的結(jié)果儲(chǔ)存下來(lái),而a1的作用是儲(chǔ)存乘除的結(jié)果,考慮到運(yùn)算順序,因此最后的輸出只能是a0;

運(yùn)行結(jié)果:

怎么用C++實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小功能

用計(jì)算器驗(yàn)證一下結(jié)果:

怎么用C++實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小功能

結(jié)果正確!

讀到這里,這篇“怎么用C++實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小功能”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI