標籤:style blog io ar color os sp for on
1).求一個數組中的第二大值.數組中的值範圍10 - 30 ,儲存空間大小為10.
代碼如下:
int a[10] = {0}; int max = 0, secMax = 0; //定義第一大值,第二大值. for (int i = 0; i< 10; i++) { a[i] = arc4random() %(30 - 10 + 1) + 10;//隨機值 10-30 printf("a[%d] = %d\n" ,i ,a[i]); } for (int i = 0 ; i < 10; i++) { if (max < a[i]) { secMax = max ; //先將手中的第二大值給 secMax.然後在儲存當前最大值. max = a[i]; } else if (a[i] > secMax && max != a[i]) { //為了不出現 max= 30 ,sexMax =30 現象. 即 a[i] < secMax < max secMax = a[i]; //如果當前值比sexMax要大,比max小,則是第二大值. } } printf("max = %d,sexMax = %d \n" ,max ,secMax);
2.)隨機產生20 個10~50的正整數存放到數組中,並求數組中的多有元素最大值、最小值、平均值及各元素之和。
代碼如下:
int m[20] = {0}; for (int i = 0; i < 20; i++) { m[i] = arc4random() % (50 - 10 + 1) + 10; printf("%d\n", m[i]); } int max = 0, min = 0 , sum = 0; float avg = 0; //最大值 for (int i = 0; i < 20; i++) { if (max < m[i]) { max = m[i]; } } printf("max = %d\n", max); //最小值 for (int i = 0; i < 20; i++) { if ( i == 0) { min = m[i]; } else { if (min > m[i]) { min = m[i]; } } } printf("min = %d\n", min); //和 for (int i = 0; i < 20; i++) { sum += m[i]; } printf("sum = %d\n", sum); //平均數 avg = sum / 20; printf("avg = %.2f\n",avg);
3).將兩個排好序的數組,合并到另外一個數組中,並且合并之後的數組也是有序的(歸併排序)。
//定義兩個數組m,n int m[10] = {0}; int n[10] = {0}; //給數組賦值,隨機值範圍[20,40]之間 for (int i = 0; i < 10; i++) { m[i] = arc4random() % (40 - 20 + 1) + 20; n[i] = arc4random() % (40 - 20 + 1) + 20; } //對數組m升序排列 for (int i = 0; i < 10 - 1; i++) { for (int j = 0; j < 10 - i - 1; j++) { if (m[j] > m[j+1]) { int temp = m[j]; m[j] = m[j+1]; m[j+1] = temp; } } } //對數組n升序排列 for (int i = 0; i < 10 - 1; i++) { for (int j = 0; j < 10 - i - 1; j++) { if (n[j] > n[j+1]) { int temp = n[j]; n[j] = n[j+1]; n[j+1] = temp; } } } //排序後列印結果 for (int i = 0; i < 10 ; i++) { printf("m[%d] = %d,n[%d] = %d \n", i, m[i], i, n[i]); } int c[10] ={0};//定義第三個數組.兩個數組合并.歸併排序 int k = 0, i = 0, j = 0; while (i < 10 && j < 10 ) { if (a[i] < b[j]) { c[k++] = a[i++]; } else { c[k++] = b[j++]; } } while(i < 10){ c[k++] = a[i++]; } while (j < 10) { c[k++] = b[j++]; } for (int i = 0; i< 10; i++) { printf("%d\n",c[i]); //輸出結果 }
4).在一個已知的字串中,尋找最長單詞,並且輸出最長單詞.
char str[] = "name is a mk fuckd is fucshish"; int len = 0;//儲存當前單詞的長度 int max = 0;//儲存最長單詞的長度 int maxIndex = 0;//儲存最長單詞的位置 int i = 0;//迴圈變數初始值 while (str[i] != '\0') { if (str[i] != ' ') { //如果去到的字元不是空格 len++; } else { //擷取到的是字元是空格. if (len > max) { max = len; maxIndex = i - len; } len = 0;//將單詞長度清零,計算新的單詞. } i++; } //如果最後一個單詞是最長單詞,不會遇到空格,則不會和maxLength 比較.所以我們只需要在迴圈外部比較一次即可. if (len > max) { max = len; maxIndex = i - len; } for (int i = maxIndex; i < maxIndex + max ; i++) { printf("%c",str[i]);//最長單詞 }
5).耶穌有13個門徒,其中有一個就是出賣耶穌的叛徒,請用排除法找出這位叛徒:13人圍坐一圈,從第一個開始報號:1,2,3,1,2,3...。凡是報到“3”就退出圈子,最後留在圈子內的人就是出賣耶穌的叛徒。請找出它原來的序號。
思路:
1.如何描述13個人? 定義數組
2.如何報數? 定義變數 count記錄報數
3.一旦報數為3,做什麼處理?
4.如何剔除一個人? 將該元素置0
5.表示當前或者的人數? 定義變數number;
6.因為不確定迴圈次數,用whlie迴圈 迴圈條件 number > 1
7.如何迴圈報數? 如果 i = 13 ,就轉到第一個人繼續報數.
代碼如下:
int arr[13] ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; int count = 0, number = 13,i = 0 ; while (number > 1) { if (arr[i] != 0) { count++; if (count == 3) { arr[i] = 0; number--; count = 0; } } i++; if (i == 13) { //下標 i = 0;//及第一個個人 } } //對數組遍曆,找到活著的人 for ( int i = 0; i < 13; i++) { if (arr[i] != 0) { printf("當前活著的人:%d\n",arr[i]); } }
6),有1000000個數,每個數取值範圍是0-999999找出其中重複的數,重複次數。
int n[1000000]; for (int i = 0; i < 1000000; i++) { //隨機產生1000000個數,範圍0-999999 n[i] = arc4random() % 999999 ; printf("%d ", n[i]); } printf("\n"); int count = 0; int temp = 0; for (int i = 0; i < 1000000; i++) { count = 0; for (int j = i; j < 1000000 ; j++) { if (n[i] == n[j] && i != j && n[i] != -1) { count++; temp = n[i]; n[j] = -1; } } n[i] = -1; if (count > 0) { printf("重複數為:%d,重複次數為:%d\n",temp,count); } }
【學習ios之路:C語言】數組.迴圈.語句總和運用試題練習