變數&輸入輸出

課堂目標 : 完成ZJa001
作者 : CBJ
參考資料 : https://zh.wikipedia.org/zh-tw/%E5%8F%98%E9%87%8F_(%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1)

變數

變數(Variable)是指某個值在記憶體中的一塊位置,有著專屬於自己的名稱。之所以稱為變數是因為,變數的值可能在程式執行期間被更動。而變數的值未必要在宣告時就確定,可以透過輸入或是其他流程再去定義。

變數在程式間的運作如:宣告在第a行 -> 使用在第b行 -> 在第c行改變變數的值 -> 再使用在第d行 -> 在第e行將值變成另一個變數的值 -> . . .。

變數命名可以在某些規範下自由取名,雖然看似簡單,但要為變數取一個好名稱,可是一門大學問 ! (詳可參考「變數命名規則」、「匈牙利命名法」等。)

簡介說完了,開始實作!

Step 1:宣告變數

// C/C++
int abc ;  //  A   B  ;
int abc = 5 ; //  A   B  =  C  ;
int abc = efg ; //  A   B1  =  B2  ;

## Python
abc = 5  #  B  =  C 
abc = efg  #  B1  =  B2 

上面範例程式碼中的 A ,指的是「資料型態」,表示要告訴電腦,我的變數是屬於整數 (int)、字元 (char)、浮點數 (float, double) 還是字元陣列 (字串) (char[ ], string) 等等。會發現C/C++會需要 A ,而Python是不需要的,這取決於各種程式語言的特性。

再來是 B 的部分, B 在範例裡指的是「變數名稱」,只要在規範之內都可以自由的去命名,通常會建議使用純英文,比較不會有命名上的問題。

最後是 C C 就是所謂的「值」。會發現在C/C++中,宣告一個變數不一定需要預先給定好他的值,而在Python中,若沒有要先設定值,那大可等到需要這個變數時再宣告就好。

另外,在宣告變數時,也可以直接將變數的值指派成另一個變數的值,例如範例中的 A B1 = B2 B1 = B2

※補充:範例出現的「=」並不是數學上的等於,而是「指派成」的意思,因此 A = B 指的是將 A 的值「指派成」B 的值,如此一來A的值就會接到B的值。(程式中的「等於」是「==」,這在之後的運算符號單元會提到)

※請務必切記,C/C++請在每行後面加上分號!!!

Step 2:操作變數

int a = 10;
int b = a;
a = 4;
a = b;

假設上面的程式片段執行後,a和b的值會是多少?

我們可以拆成一行一行來看

第 1 行: a = 10, b = ?

第 2 行: a = 10, b = a = 10

第 3 行: a = 4, b = 10

第 4 行: a = b = 10, b = 10

因此 a = b = 10

輸入輸出

在家靠父母,出外靠朋友,輸入輸出靠函式。

輸入輸出的原理非常的複雜,所以輸入輸出的函式早已經為我們準備好,我們只需要知道該如何用他就OK了。

// C
輸入 : scanf()
輸出 : printf()
// C++
輸入 : cin
輸出 : cout
## Python
輸入 : input()
輸出 : print()

以下分開來講各個語言的輸入輸出函式 :

。C

int abc;
scanf("%d", &abc);
printf("%d\n", abc);

這裡開始出現了許多難以理解的符號和參數,沒關係我會一一的帶大家認識它們。

焦點 1:“ ”

被 ” ” 所框起來的一律稱為「字串(字元陣列)」,所以可以知道scanf()第一個要放的參數是一個「字串」(函式的參數間由逗號作分隔)。

焦點 2:%d或類似(%c, %f, %lf …)

%_ 指的是「格式化(格式指定)」,表示告訴電腦輸入(or輸出)的東西要轉成甚麼「型別」(int -> %d, char -> %c, float/double -> %f/%lf …),此外,printf()中,%_ 在字串中的位置,就會是最後輸出出來的位置,且允許多個%_,但要搭配一樣多要輸出的內容。

printf("%d x %d = %d", 3, 5, 15)
// output: 3 x 5 = 15

焦點 3:&

「&」指的是「取地址」,也就是取得abc這個變數在記憶體中的位置,詳細的位置是甚麼我們倒不需要去理解,只要知道scanf()需要他就好,我們的任務就是丟給他,然後就沒我們的事了。

(讀入字元陣列不需要&)

(printf() 不需要&)

焦點 4 :\n

「\n」指的是換行字元,他的功能應該是人人都會使用,就是在打文件時按下Enter鍵換行,他就只是變成了一個轉義字元(有興趣可以去查詢「轉義字元」),僅此而已。(\n請當成一個字看待)

printf("123") // output: 123
printf("1\n2\n3") /* output: 1
                             2
                             3     */

。C++

int abc;
cin>>abc;
cout<<abc<<"\n";

C++就比較人性化了,沒有那些奇奇怪怪的「符號」,只剩下「>>」和「<<」,那這部分就必須要用記的(cin配>>, cout配<<),以下提供一種記憶法:

cin 要去抓東西,所以箭頭朝向變數 >>

要輸出東西,要去找cout,所以箭頭朝向cout

(個人是這樣記起來的,算是原創(?)的記憶法吧)

※另外提醒,越靠近cout的會越早輸出(排隊照順序)

。Python

abc = int(input())
print(abc)

Python這邊用到的是int()函式,功能上就類似%d的效果,一樣有str()(轉字串), float()(轉浮點數) 等函式幫助做轉換。

※補充:input()函式預設將輸入內容看成字串,所以才要用int()

Python的輸出也十分簡單,只要在print()裡面放入想輸出的變數即可,而且print()函式還自帶換行,連\n都不用認識了(誤)

練習

學完以上這些內容,就來現學現賣,請完成下列題目吧:

提示

題目提到要輸入字串,

若使用C/C++,需要先宣告好字串再輸入

//C
char s[100]; //char是型別, s是名稱, [100]是字元陣列大小
scanf("%s",s) //讀字串用%s, 且字元陣列不需要加「&」

//C++
string s; //若要使用string, 則需要另外include<string>
cin>>s; //直接讀s即可(箭頭朝向變數)

若使用Python,則直接輸入存入變數即可

## Python
s = input() #input()讀入的本身就是字串,所以不需要函式轉換

題目要求輸出Hello, (字串)

若使用C,用格式化輸出(%s專門格式化字串(字元陣列))

// C
printf("hello, %s\n",s);

若使用C++/Python,直接輸出字串相加(運用加號)

// C++
cout<<"hello, " + s + "\n";
## Python
print("hello, " + s)

完整程式碼

請參考本站 解題筆記 > ZJ解題 > 基礎題庫 > a001: 哈囉

相關文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *