標籤:
上一次的學習部落格寫的和流水賬差不多,有點生硬的和背目錄一樣,所以既然學習的目的是程式,那麼這個月的學習部落格就用程式來說點東西吧。這個月看了一些C和JAVA的視頻,開始看別人寫的程式,能看的懂但是自己去寫的話前後邏輯還有方法類的使用不是很清楚。好吧,先去膜拜大神,一步一步來吧。
先來說一個C的程式。這個程式是把一個十進位的數字轉成二進位的編碼,十進位當中是逢十進一,二進位逢二進一,無論是什麼樣的語言寫的任何程式,在電腦裡面的記錄方法均為二進位。
#include<iostream>using namespace std;int main(){ int T; cin >> T; while(T--) { unsigned int n; char bas[30]; cin >> n; unsigned int k = 0; if(n == 0) cout<<0; else { while(n) { if(n & 1) bas[k++] = ‘1‘; else bas[k++] = ‘0‘; n >>= 1; } } for(int i=k-1;i >= 0;i--) { cout << bas[i]; } cout << endl; }}
#include<iostream>
這個是C的標準I/O標頭檔,標準庫定義了 4 個 IO 對象。處理輸入時使用命名為 cin(讀作 see-in)的 istream 類型對象。這個對象也稱為標準輸入。處理輸出時使用命名為 cout(讀作 see-out)的 ostream 類型對象,這個對象也稱為標準輸出。
程式裡面有輸入輸出的內容所以這個是必不可少的 using namespace std;
namespace是指標識符的各種可見範圍。命名空間用關鍵字namespace 來定義。命名空間是C++的一種機制,用來把單個標識符下的大量有邏輯聯絡的程式實體組合到一起。此標識符作為此組群的名字。
即讓std內定義的所有標示符都是有效,相當於一個全域變數。
int char
這些標示符是用來聲明變數的類型,int整數,char符號。在這個程式當中聲明了T為int類型,把bas為char字元變數。
if else
標準的if語句,即如果,不然。用來建立條件入口。
while
迴圈語句,電腦的一種基本迴圈模式。當滿足條件時進入迴圈,不滿足跳出。這裡的程式要求使用者輸入一個變數的T,允入準則當T-- unsigned int 在函數體內用到了unsigned int, 是使用無符號的整數類型。char bas[30];建立一個數組長度為30的char 數組。for(int i=k-1;i >= 0;i--)for迴圈條件入口,當整數i等於k-1,且i>=0,就i--,若第一個條件為假,後面的算式就不執行了。看明白這個程式還有一個很重要的東西就是明白十進位轉化為二進位的原理,基本的演算法是這樣的。
用x表示十進位的x,假定x變成2進位後的數為三位abc,其中a為最高位,b為次高位,c為最低位。
則有 x = a*2^2 + b*2^1 + c*2^0= 4a+2b+c
所以
x%2 = c,
x/2 = a*2 + b
令x=x/2,則x=a*2+b
x%2 = b,
x/2 = a
令x=x/2,則x=a
x%2 = a
x/2 = 0
故每一步的餘數為:
c, b, a
把它們顛倒,就得到a,b,c
原理只有一條,可以證明/看出每次除以2的餘數正好是2進位的每一個數。(……看了好半天……)
這個是一個非常短的程式,一個很實用的小工具,它可以作為一個方法放到一個class當中,也可以把這個當做父類做繼承。
現在來說一個JAVA程式。
import javax.swing.JOptionPane; // program uses JOptionPane public class Converter { public static void main(String args[]) { String firstNumber; double number1 = 0; double number2 = 0; boolean loop = true; while (loop) { firstNumber = JOptionPane.showInputDialog("請輸入華氏溫度"); try { number1 = Double.parseDouble(firstNumber); loop = false; } catch (NumberFormatException e) { // (2)當使用者輸入錯誤資料時候,提示使用者輸入錯誤,並要求使用者重新輸入內容。 JOptionPane.showMessageDialog(null, "輸入錯誤,請重新輸入華氏溫度.", "輸入", JOptionPane.PLAIN_MESSAGE); } } // 攝氏度=(5/9)*(華氏度-32) , 即 攝氏度=(華氏度-32)÷1.8 // secondNumber = JOptionPane.showInputDialog("輸入被乘數"); number2 = (number1 - 32) / 1.8; JOptionPane.showMessageDialog(null, number1 + "華氏度 = " + number2 + "攝氏度", "結果", JOptionPane.PLAIN_MESSAGE); } // end method main} // end class Addition
這是一個將華氏度轉化成為一個攝氏度的程式
//後面是注釋,程式不讀這些內容
當然這個程式的演算法也是基於華氏度和攝氏度的轉化演算法
攝氏度=(5/9)*(華氏度-32)
程度考慮到使用者輸入錯誤的情況。
感覺C和JAVA有種不一樣的使用方法,JAVA喜歡調用很多已有的東西,C喜歡設定一些規則。
-------------------------------------------------------------------------------
因為主要是去學JAVA的,所以現在主要看別人寫的JAVA代碼,先去明白基本的規則,目前還是很菜,在敲別人的代碼的同時去想別人為什麼這麼寫,這樣的設計有什麼好處,或者這些代碼能不能夠作為其他程式的一個方法。TUT。
JAVA學習部落格---2015.5