一:庫函式---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 }
我這裡寫錯了,,,需要修改的地方是:middle這個變數,需要放在迴圈裡面-----抱歉,求放過,重新上程式碼
1 // 寫一個函式,實現一個整形有序陣列的二分查詢 2 #include <stdio.h> 3 4 int Binary_sarch(int *arr, int n, int num) 5 { 6 int left = 0; 7 int right = n - 1; 8 int middle = 0; 9 while (left <= right) 10 { 11 middle = left + (right - left) / 2; 12 if (num > arr[middle]) 13 { 14 left = middle + 1; 15 } 16 else if (num < arr[middle]) 17 { 18 right = middle - 1; 19 } 20 else 21 { 22 return middle; 23 } 24 } 25 return -1; 26 } 27 int main() 28 { 29 int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 30 int num = 0; 31 scanf("%d", &num); 32 int ret = Binary_sarch(arr, sizeof(arr) / sizeof(arr[0]), num); 33 if (ret == -1) 34 { 35 printf("沒有找到."); 36 } 37 else 38 { 39 printf("找到了,下標是%d\n", ret); 40 } 41 42 return 0; 43 }
我這裡更新了一下,運用了函式來完成的