宣告
建構子
const
unsigned
static_cast
條件運算子
陣列、二維陣列
輸出格式化控制函式與參數
5/10? 5%10?
重點一:C++宣告變數一定要指定初始值0,否則會有不可預期的值。
int ageForStudent = 0;
double scoreForStudent = 0.0;
char levelForStudent = 'A';
寫法二:
int ageForStudent(0);
double scoreForStudent(0.0);
char levelForStudent('A');
建構子:直接指定變數初始值為0
int ageForStudent = int();
double scoreForStudent = double();
char levelForStudent = char();
const:固定變數的值,以後不能隨意更改
const int maxNum = 10;
maxNum = 20;//這樣就會錯誤
unsigned:修飾字,加上後,變無號整數變數
unsigned int i ;
static_cast:強制轉型關鍵字,可將變數型態轉型。
int num = 0;
double number = 3.14;
num = static_cast<int>(number); //把number轉乘int型態
cout << num;
顯示結果為3
邊轉邊算
int number = 10;
cout << static_cast<double>(number) / 3;
int number = 10;
cout << (double) number/ 3;
if括號內true false的條件判定:
#include此例會印出YOYO,因133/100不等於0,會判定為true,執行if敘述using namespace std; int main() { int n =133; if(n/100){ cout<<"YOYO"; } else{ cout<<"YIYI"; } return 0; }
現在設n=13,13/100等於0,會判定為false,因此執行else敘述,會印出YIYI
不用if else也可條件判斷:條件運算子
int score = 0;
cout << "輸入學生分數:";
cin >> score;
cout << "該生是否及格?" << (score >= 60 ? 'Y' : 'N') << endl;
return 0;
cout << "輸入學生分數:";
cin >> score;
cout << "該生是否及格?" << (score >= 60 ? 'Y' : 'N') << endl;
return 0;
陣列宣告初始值
int irr[10] = {0};
double darr[10] = {0.0};
char carr[10] = {'\0'};
bool barr[10] = {false};
'\0'表示空白字元
也可給前面幾個元素初始值
int iarr[5] = {0, 1}; double darr[5] = {0.0, 0.1};
char carr[5] = {'A', 'B'};
bool barr[5] = {false, true};
沒有指定的它會自動填預設值
也可不宣告元素長度
int iarr[] = {1, 2, 3}; double darr[] = {0.4, 3.2, 1.0, 4.2};
char carr[] = {'A', 'B'};
它會依據你填多少個數,自動設定陣列大小
如何得知該陣列多大(有多少元素)?可利用sizeof()運算子
int iarr[] = {1, 2, 3, 4, 5, 6};
cout << "Array長度:"
<< (sizeof(iarr) / sizeof(iarr[0]))
<< endl;
cout << "Array長度:"
<< (sizeof(iarr) / sizeof(iarr[0]))
<< endl;
sizeof()會回傳該變數佔用多少記憶體大小,
首先iarr是個int型態陣列,一個int佔4bytes,裡面有6個所以是24bytes,sizeof()回傳24,
再除上隨便一個陣列的元素,任一元素都佔4bytes,所以24/4=6,該陣列有6個元素
陣列不能互相指定,也不能互指
int arr1[5];int arr2[5];
arr1 = arr2; // 錯誤!
if(arr1 == arr2) {} // 錯誤!
只能複製過去
const int length = 5;int arr1[length];
int arr2[length];
...
for(int i = 0; i < length; i++) {
arr1[i] = arr2[i];
}
要比對兩陣列值是否相同,只能一個一個比對
二維陣列
int iarr[5][10];第一個[]表列Row(橫的)
第二個[]表行Column(直的)
#include <iostream> using namespace std; int main() { const int row = 5; const int column = 10; int iarr[row][column]; for(int i = 0; i < row; i++) for(int j = 0; j < column; j++) iarr[i][j] = (i+1) * (j+1); for(int i = 0; i < row; i++) { for(int j = 0; j < column; j++) cout << iarr[i][j] << "\t"; cout << endl; } return 0; }直接指定值
int iarr[2][3] = {{1, 2, 3}, {4, 5, 6}};
輸出格式化控制函式與參數範例:
setw(n):保留N個字元的寬度
setfill(ch):內容長度不足保留寬度時,要填補的字元
right:靠右對齊
left:靠左對齊
setprecision(n):設小數點到第N位
fixed:小數位數不足時補0
oct:8進位表示
dec:10進位表示
hex:16進位表示
showpos:強制顯示正負符號
noshowpos:負數則顯示負號,正數不顯示正好
#include <iostream> #include <iomanip> using namespace std; int main() { int a=123; double pi=3.14159,x=-1.83; cout<<"["<<setw(8)<<a<<"]"<<endl;//setw只有一次效果 cout<<"["<<a<<"]"<<endl;//setw第二次沒有 cout<<"["<<setw(8)<<setfill('0')<<a<<"]"<<endl; cout<<"["<<setw(8)<<a<<"]"<<setfill(' ')<<endl; cout<<"["<<setw(8)<<left<<a<<"]"<<endl; cout<<"["<<setw(8)<<right<<a<<"]"<<endl; cout<<"["<<pi<<","<<x<<"]"<<endl; cout<<"["<<setprecision(4)<<pi<<","<<x<<"]:若無fixed,則小數點也算在內"<<endl; cout<<"["<<setprecision(4)<<fixed<<pi<<","<<x<<"]:若有fixed,則取小數到第4位,小數位數不足則補0"<<endl; cout<<"["<<oct<<a<<"]"<<endl; cout<<"["<<hex<<a<<"]"<<endl; cout<<"["<<dec<<a<<"]"<<endl; cout<<"["<<showpos<<a<<","<<x<<"]"<<endl; cout<<"["<<noshowpos<<a<<","<<x<<"]"<<endl; return 0; }輸出結果:
[ 123] [123] [00000123] [00000123] [123 ] [ 123] [3.14159,-1.83] [3.142,-1.83]:若無fixed,則小數點也算在內 [3.1416,-1.8300]:若有fixed,則取小數到第4位,小數位數不足則補0 [173] [7b] [123] [+123,-1.8300] [123,-1.8300]
5/10會印出0
5%10會印出5
簡單說,前面比後面小,相除時,印出0
取餘數時,印出自己,也就是5
參考資料01
沒有留言:
張貼留言