中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【C++探索之旅】第一部分第五課:簡易計算器

發布時間:2020-07-19 19:07:04 來源:網絡 閱讀:572 作者:frogoscar 欄目:移動開發

【C++探索之旅】第一部分第五課:簡易計算器


內容簡介

1、第一部分第課:簡易計算器

2、第一部分第六課預告:控制流程,隨心所至



簡易計算器


上一課《【C++探索之旅】第一部分第四課:內存,變量和引用》中,我們已經學習了挺重要的內存的概念,變量的知識,對引用這個C++中常用的技術也有了初步的了解。


我們在上一課開頭處用一個小小計算器的存儲技術引出內存的概念。其實我們的電腦兄也是一個計算器,只不過高端大氣上檔次了很多,不然怎么會被稱為 computer呢?英語中compute這個詞,正是《計算》的意思,而加上r就構成了名詞。computer就是“計算機”。(復論學好英語對編程的 幫助)。


所以,電腦不僅能儲存數據,還能進行很復雜的計算。


這一課我們就來聊聊計算。



請求用戶輸入信息


上一課中,我們學習了如何在控制臺(console)中顯示變量的值。現在我們來做相反的事情:請求用戶為我們的程序提供輸入,以存儲到內存中。


從控制臺讀數據


也許你也注意到了(如果現在才注意到,是不是有點后知后覺?哈哈),C++用了很多英語的單詞。應該說基本所有的編程語言都使用了很多英語單詞,所以英語很重要。


有些編程你不需要用到太多高深的數學知識,但是英語卻是天天見啊,大寶還不一定天天見呢~


比如我們的輸出流cout,就是由c和out組成,是console out的意思,console表示“控制臺”,out表示“向外,出去”。表示輸出到控制臺。是標準輸出流。因此我們用cout從程序向控制臺輸出數據。


而與它相對應的就是cin啦,是console in的意思,in表示“向內,進來”。表示從控制臺讀入。因此我們用cin從控制臺讀入數據。


與cout配合,我們需要一個運算符 <<

與cin配合,我們需要一個運算符 >>


至于cin和cout,<<和>>究竟原理如何,等以后學了類和對象我們再說。目前只需要知道怎么使用即可。


我們來看一個例子:

#include <iostream>
using namespace std;

int main()
{
    cout << "您幾歲了 ?" << endl;
    int userAge(0);  // 我們在內存中申請一個整型變量(初始值為0),以存放我們的年齡數值
    
    cin >> userAge; // 我們請求用戶輸入數據,賦值給userAge變量
    cout << "您已經" << userAge<< "歲了" <<  endl; // 顯示變量值
    return 0;
}


運行,輸出如下:


您幾歲了 ?

28

您已經28歲了


原理解析


那么上面的程序中究竟發生了什么呢?


首先,程序顯示"您幾歲了 ?"這一段信息,至此并沒有什么特別。然后,在第8行,程序向操作系統請求在內存中為其分配一塊區域(好比上一課說的一個抽屜),用于存放一個int類型的變量,名稱是userAge(抽屜的標簽),并在抽屜里存放入一個初始值0。


接著,就有新知識點了。我們可以看到控制臺里輸出"您幾歲了 ?"之后,換了一行(主要是endl的作用,endl是end line的縮寫,表示"結束行",所以自然要換行啦),然后出現了一個閃爍的光標,等待用戶輸入。


用戶輸入數值以后(例如28),程序就把這個數值賦給userAge,代替原先的0。最后再把變量的值輸出。


巧記 >>和<<


初學C++,我們容易搞混<<和>>的用法,到底哪一個是和cout(標準輸出)配合,哪一個和cin(標準輸入)配合呢?


不用擔心,你不是一個人,很多人也經常記不清楚。


那么如何記住這兩個運算符呢?


其實很簡單:


我們還是用userAge這個變量來舉例。


cout << userAge
cin >> userAge


你看不管怎樣,userAge,也就是內存中的變量,總是位于運算符右邊,而cout和cin總是位于運算符左邊。


那么 << 就是從內存中取出變量的值,給cout使用,使其能夠將變量的值顯示到控制臺,因此 << 的流向是從內存到cout。


而 >> 就是將cin獲取的用戶輸入控制臺的數值賦給變量,因此 >> 的流向是從cin到內存。


當然,我們可以配合圖示來記憶,你就永遠不會搞錯啦:


【C++探索之旅】第一部分第五課:簡易計算器


如果以后你還會搞錯,不要跟別人說你是看謝什么恩銘的文章學的。開個玩笑~


其他變量


當然了,上面提到的知識點,也可用于其他變量類型,例如:


#include <iostream>
#include <string>
using namespace std;

int main()
{    
    cout << "您叫什么?" << endl;
    string userName("無名氏"); // 在內存中申請一個string類型的抽屜
    
    cin >> userName; // 將用戶輸入的數據賦值給userName   
     
    cout << "PI的值是多少?" << endl;    
    
    double piValue(-1.); // 在內存中申請一個double類型的抽屜
    
    cin >> piValue; // 將用戶輸入的數據賦值給piValue
    cout << "您叫" << userName<< " ,您認為PI的值是" << piValue << endl;    
    return 0;
}


這次我想不需要給出什么解釋了吧,自己運行此程序試試吧。


空格的問題


測試下上面的程序,是不是發現有點小問題?


假如我們如下運行:


您叫什么?

Isaac Newton

PI的值是多少?

您叫Isaac,您認為PI的值是0


很奇怪是嗎?程序并沒有請求我們輸入PI的值,而是將PI的值改為了0。而且Newton不見了。哦,no,牛頓不見了,咋辦?小蘋果都不知道該往誰頭上掉了(小編你可以了...)


要說原因,這是空格的問題。當用戶按下回車時,程序會把用戶輸入在控制臺的數據拷貝到內存的"抽屜"中,但是它會在第一個空格或回車符處停住。當用戶輸入的是數值時,并沒有問題,因為數值里沒有空格。


但是當輸入的是字符串(string)時,可能會有空格。這樣,電腦就會在第一個單詞結尾處截斷,畢竟電腦也是挺呆萌的。這樣,在上例中,程序就會以為Newton是PI的值。


所以,我們須要截取所有一整行,而不是第一個單詞。那就要用到getline函數了。


我們將 cin >> userName 用getline函數替換,如下:


#include <iostream>
#include <string>
using namespace std;

int main()
{    
    cout << "您叫什么?" << endl;    
    string userName("無名氏"); // 在內存中申請一個string類型的抽屜
    
    getline(cin, userName); // 將用戶輸入的整一行放入userName這個抽屜
    
    cout << "PI的值是多少?" << endl;
    double piValue(-1.); // 在內存中申請一個double類型的抽屜
    
    cin >> piValue; // 將用戶輸入的數據賦值給piValue
    cout << "您叫 " << userName<< " ,您認為PI的值是 " << piValue << endl;
    
    return 0;
}


我們看到cin和userName還是在那里,只不過這次它們是作為getline的參數被使用了。


這次,運行程序后,就沒有問題了:


您叫什么?

Isaac Newton

PI的值是多少?

3.14

您叫Isaac Newton, 您認為PI的值是3.14


首先請求PI的值


假如我么首先使用cin >> 然后才使用getline呢?比如我們先請求用戶輸入PI的值,然后再請求用戶輸入名字。


你會發現程序又出問題了。程序并沒有向用戶請求輸入名字,而且輸出了隨便什么東西。


為了解決這個問題,我們須要在cin >>之后使用cin.ignore()


如下所示:


#include <iostream>
#include <string>
using namespace std;

int main()
{     
    cout << "PI的值是多少?" << endl;
    double piValue(-1.); // 在內存中申請一個double類型的抽屜
    
    cin >> piValue; // 將用戶輸入的數據賦值給piValue
    
    cin.ignore();
 
    cout << "您叫什么?" << endl;
    string userName("無名氏"); // 在內存中申請一個string類型的抽屜
    
    getline(cin, userName); // 將用戶輸入的整一行放入userName這個抽屜
    
    cout << "您叫 " << userName<< " ,您認為PI的值是 " << piValue << endl; 
    
    return 0;
}


如果我們混合使用>>和getline,記得須要在cin >> 語句之后用cin.ignore()。這是一個規則,要記住。



改變變量的值


要進行運算,我們離不開變量。


首先,我們來看看如何改變變量的值吧。我們用=(等號)來進行數值的改變。假設我有一個int型的變量,我想要改變它的值,我首先寫這個int型變量的名稱,后面跟一個=號,再接新的數值。這就是變量的賦值。例如:


int number(0); // 在內存中申請一個抽屜,存放一個int類型變量,叫number,初始值為0
number = 5; // 將number的值改為5


我們也可以直接把一個變量的值賦給另一個變量:


int a(4), b(5); // 定義兩個變量
a = b; // 將變量b的值賦給a


上面兩句程序做了什么呢?


首先,我們定義了兩個int變量,分別取名為a和b,也就是在內存中申請了兩個抽屜,初始值分別是4和5。


接著 a = b; 這句話將b的值賦給a,也就是用5代替了a原先的值4,如下圖所示:


【C++探索之旅】第一部分第五課:簡易計算器


#include <iostream>
using namespace std;

int main()
{
    int a(4), b(5); // 定義兩個變量
    cout << "a的值是 : " << a << ", b的值是 : " << b << endl;
    cout << "賦值!" << endl;
    a = b; // 將b的值賦給a
    cout << "a的值是 : " << a << ", b的值是 : " << b << endl;
    return 0;
}


運行,輸出:


a的值是 : 4, b的值是 : 5

賦值!

a的值是 : 5, b的值是 : 5


b的值并沒有改變,在賦值時,只有等號左邊的值(稱為左值)會改變,等號右邊的值(右值)不會改變。這也不是說賦值運算中的這兩個變量是一樣的,只是它們的值相等而已。


這是個好的開始,但是要稱得上一個最基本的計算器,我們還缺點什么。是的,缺運算符。


最基礎的計算器


我們從最基本的運算符開始介紹,首先是加法運算符:+


例如:


#include <iostream>
using namespace std;
int main()  
{
  int result(0), a(5), b(8);
  result = a + b;
  cout << "5 + 8 = " << result<< endl;
  return 0;
}


運行,輸出:


5 + 8 = 13


給出基礎的運算符的表:


運算

符號

用例

加法

+

result = a + b;

減法

-

result = a - b;

乘法

*

result = a * b;

除法

/

result = a / b;

取模

%

result = a % b;


上表中前面四個運算符都好理解,但是最后一個"取模"是什么意思呢?小學數學老師好像沒有教我啊。


取模就是除法運算的延伸。因為例如整數除法,我們有除不盡的時候,就會多出點"邊角料",這個邊角料就是模了,其實就是余數。


因此,假如 13 / 4 等于 3 余 1 (因為 3 乘以4,再加1等于13)


那么1就是13 / 4 的模。


13 % 4 就等于1


有了這么多運算符,我們就可以組合出復雜一些的運算啦,例如:


result = ((a+b) * c ) - d;



常變量


這標題有點奇怪,不是嗎?


什么叫常變量?要么常量,要么變量。


好吧,常變量就是不能改變的變量。


要聲明常變量,我們使用const關鍵字。const是constant的縮寫,表示"恒定的"。用const聲明的變量不可在之后的程序中被更改,不然程序運行會報錯。


只 要適合用const的地方,都盡量用const。因為我們不但可以避免一些程序的錯誤(比如防止修改我們不想要其值改變的變量),而且const變量使得 編譯器更加有效率(因為const變量,編譯器之后就不會再去檢查它的值有沒有被改變了,不會再去重復取它的值,因為知道其值不能被改變)。


const用法如下:


string const password("wAsTZsaswQ"); // 密碼
double const pi(3.14); // PI的值
unsigned int const maxLifePoint(100); // 生命值的最大取值


下一課中,我們還會再聊const這個關鍵字。



縮略形式


程序員是很勤勞的,但是他們又是很會偷懶的。


會偷懶和偷懶不一樣,偷懶是貶義,會偷懶是褒義。會偷懶是指我們如果可以用更簡便的方法來完成某事,盡量不用原先復雜冗余的形式。因為這樣可以節省開銷,降低程序復雜度。


我們就來看看幾個運算符的縮略形式吧。


在編程中,很多時候,我們需要將變量進行減1的運算,或者加1的運算。一般我們會這樣寫:


int a(4);
a = a + 1; // 使a增加1


但是不覺得 a = a + 1; 寫起來有點重復嗎?寫了兩次a誒,不能忍啊。


因此我們可以用自增運算符來完成同樣的操作。


自增運算


自增運算符是++


也就是在變量名后跟++


例如:


int a(4);
a++;
cout << "a的值是 : " << a << endl;


運行,輸出:


a的值是 : 5


自減運算


自減運算就是將變量的值減1啦。


int a(4);
a--;


之后a的值變為3。


自增運算符和自減運算符,有不同的擺放位置,不一定放在變量名后面,也可以放在變量名前面。作用有所不同。


a++; // 先使用a的值,再對a進行加1操作
++a; // 先對a進行加1操作,再使用a的值


例如:


int b(0), a(2);
b = a++; 
cout << "a的值是 : " << a << " , b的值是 : " << b << endl;
b = ++a;
cout << "a的值是 : " << a << " , b的值是 : " << b << endl;


運行,輸出:


a的值是 : 3 , b的值是 : 2


a的值是 : 4 , b的值是 : 4


為什么呢?


因為第一次的時候,我們使用 b = a++; 是先將a的值賦給b,然后再對a進行加1操作。這句結束后,a的值變為3,b的值是2


接著,我們使用b = ++a; 是先將a的值加1,再將a的值賦給b。所以a的值首先變為4,再賦值給b,因此b的值為4。


要記憶也很容易,假如是a++的形式,由于變量名在左邊,所以先使用變量,再進行之后的++操作;假如是++a的形式,由于++符號在先,因此先進行自增操作,再使用變量。


其他運算符


其他運算符就是基礎運算符(加,減,乘,除,取模)與等號的結合使用了:

+=, -=, *=, /= et %=


例如:


#include <iostream>
using namespace std;

int main()
{
   double number(5.3);
   number += 4.2;       // number現在等于 9.5
   number *= 2.;        // number現在等于 19
   number -= 1.;        // number現在等于 18
   number /= 3.;        // number現在等于 6
   return 0;
}



更多數學運算


也許你覺得不夠過癮,畢竟我們只是做了一些很基礎的運算。


那么如果你要進行比如開平方根這樣的運算,該如何做呢?


我們需要引入一個C++的標準庫:數學庫,是cmath


#include <cmath>


在這個頭文件里,包含了很多數學計算相關的函數。如下表(沒有列全):


函數名稱

符號

函數

用例

平方根

sqrtx

sqrt()

result = sqrt(x);

正弦值

sin(x)

sin()

result = sin(x);

余弦值

cos(x)

cos()

result = cos(x);

正切值

tan(x)

tan()

result = tan(x);

指數

ex

exp()

result = exp(x);

次方

ab

pow()

result = pow(a,b);

自然對數

lnx

log()

result = log(x);

以10為底的對數

log10x

log10()

result = log10(x);

絕對值

|x|

fabs()

result = fabs(x);

向下取整

×

floor()

result = floor(x);

向上取整

×

ceil()

result = ceil(x);




總結


  1. 為了請求用戶輸入數據,我們使用如下格式:cin >> variable,之后用戶輸入的數據就儲存在variable變量中。

  2. 不要搞混了標準輸入和標準輸出運算符的方向:cin >> 是標準輸入,cout <<是標準輸出。

  3. 在C++中,我們可以做很多基本的運算:加,減,乘,除,等等。例如:result = a +b

  4. const變量是一旦定義就不能修改其值的變量(記得,不是常量)。我們用關鍵字const來聲明。

  5. 為了一個變量能夠進行加一運算,我們可以用自增運算符++,variable++。還有一個自減運算符--,variable--,進行減一運算。

  6. 如果你要進行更復雜的數學運算,例如計算平方根,那么需要引入C++的標準數學庫,就是cmath。使用方法: #include <cmath> 之后你就可以用標準數學庫中的各種函數了,例如計算平方根:result = sqrt(100);



第一部分第六課預告


今天的課就到這里,一起加油吧!

下一課我們學習:控制流程,隨心所至


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东平县| 呼和浩特市| 洪洞县| 壤塘县| 西青区| 宝鸡市| 樟树市| 北京市| 洞口县| 吕梁市| 崇阳县| 赤峰市| 休宁县| 高陵县| 准格尔旗| 丽江市| 五台县| 万州区| 南郑县| 苏尼特左旗| 郎溪县| 濮阳县| 炉霍县| 揭东县| 会泽县| 耒阳市| 文山县| 平邑县| 连城县| 高碑店市| 龙岩市| 东光县| 察隅县| 策勒县| 清丰县| 寿阳县| 当雄县| 凤阳县| 祁连县| 柘荣县| 绥阳县|