一:庫函式---printf()
這個函式printf()的返回值是int,這個函式竟然有返回值,值的多少是取決於輸出的內容有多少個字元
二:迴圈
1、for迴圈
這個迴圈中,如果判斷的地方省略的話,這個迴圈就是永遠成立(恆成立),
1 for(;;)
這樣的話,就會無線迴圈下去--------(弊端1)
其中初始化省略的話也會有一些問題,例如下面的程式碼:
1 int i=0; 2 int j=0; 3 for(;i<3;i++){ 4 for(;j<3;j++){ 5 printf("hello world! "); 6 }
prtintf("\n"); 7 }
這個程式碼就是會發生錯誤,原本要列印3X3的hello world的,但是結果就列印了一行的hello world,為什麼?是因為這個初始化沒有寫,
當第一次執行完外層迴圈的時候,內層迴圈會執行完(3次都執行,也就是j=3),然而外層迴圈開始第二次的時候,j沒有初始化,也就是說,j=3,沒有改變值,
所以,內層迴圈會直接不執行,最後結果就是:hello world! hello world! hello world! ,與一開始想要整出矩陣不一樣,那怎麼解決這個問題呢,初始化就可以了
1 #include <stdio.h> 2 3 int main() { 4 int i = 0; 5 int j = 0; 6 7 for (; i < 3; i++) { 8 for (j=0; j < 3; j++) { 9 printf("hello world"); 10 } 11 printf("\n"); 12 } 13 14 return 0; 15 }
結果:
hello worldhello worldhello world
hello worldhello worldhello world
hello worldhello worldhello world
還有就是當判斷變成賦值的時候,這個迴圈可能不會執行,例如下面的程式碼:
1 #include <stdio.h> 2 int main() 3 { 4 for (int i = 0; i = 0; i++) 5 { 6 printf("hello!"); 7 } 8 9 return 0; 10 }
這個判斷的條件就是假,所以,不會執行迴圈,
但如果是其他的等式呢,直接就是變成了死迴圈,因為其他的條件都為true
1 #include <stdio.h> 2 int main() 3 { 4 for (int i = 0; i = 1; i++) 5 { 6 printf("hello!"); 7 } 8 9 return 0; 10 }
所以在這段程式碼裡面,程式會一直輸出:hello!
2、while
當需要在陣列中查詢某一個資料的時候,可以用到----二分查詢,注意:需要陣列是有序陣列,例如以下的程式碼:
1 // 在一個有序的陣列中查詢某個具體的數字。(二分查詢) 2 // 前提:有序 3 #include <stdio.h> 4 int main() 5 { 6 int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 7 int n = 0; 8 scanf("%d", &n); 9 int length = sizeof(arr) / sizeof(arr[0]); 10 int left = 0; 11 int right = length - 1; 12 int middle = (left + right) / 2; 13 while (left <= right)//前提是陣列裡面需要左邊的座標要小於右邊的座標 14 { 15 if (n < middle) 16 { 17 right = length - 1;//這裡是把目光放到了陣列左邊的地方 18 } 19 else if (n > middle) 20 { 21 left = length + 1;//這裡是把目光放到了陣列右邊的地方 22 } 23 else 24 { 25 printf("找到了!\n"); 26 break; 27 } 28 } 29 if (left > right) 30 { 31 printf("沒找到!\n"); 32 } 33 34 return 0; 35 }