c語言練習

2021-06-19 07:55:48 字數 2884 閱讀 4095

經常練練,有易於身心健康,避免出沒遇到熊。

1 請編寫函式fun,對長度為7個字元的字串,除首、尾字元外,將其餘5個字元按ascii碼降序排列。

例如,若原來的字串為ceaedca,則排序後輸出為cedceaa。

注意:部分源程式給出如下。

請勿改動主函式main和其他函式中的任何內容,僅在函式fun的花括號中填入所編寫的若干語句。

#include

#include

#include

void fun( char *s,int num)}}

方式二 錯誤1:

c = *p_start;

for (i = 0; i < 4; i++)

else

c = *(p_start + j + 1);//c 保持為最小}}

方式二 正確1:

c = *p_start;

for (i = 0; i < 4; i++)

c = *(p_start + j + 1);}}

方式二正確2:其實我覺得這個更像冒泡,這邊是把最小的推到最右邊,標準冒泡是每個人來跟自己比,並把最大的留下,不形象。

for (i = 0; i < 4; i++)

else

c = *(p_start + j + 1);}}

} 標準冒泡:

void fun2( char *s,int num)}}

printf("after sorting, the strings is : %s\n", s);}

選擇排序:

思想:n個記錄的檔案的

直接選擇排序

可經過n-1趟直接

選擇排序

得到有序結果:

①初始狀態:無序區為r[1..n],有序區為空。

②第1趟排序

在無序區r[1..n]中選出關鍵字最小的記錄r[k],將它與無序區的第1個記錄r[1]交換,使r[1..1]和r[2..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。

……③第i趟排序

第i趟排序開始時,當前有序區和無序區分別為r[1..i-1]和r(i..n)。該趟排序從當前無序區中選出關鍵字最小的記錄 r[k],將它與無序區的第1個記錄r[i]交換,使r[1..i]和

r(i..n)分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。

常見的選擇排序細分為

簡單選擇排序、樹形選擇排序(

錦標賽排序)、

堆排序。上述演算法僅是

簡單選擇排序的步驟。

通俗的解釋:

對比陣列中前乙個元素跟後乙個元素的大小,如果後面的元素比前面的元素小則用乙個變數k來記住他的位置,接著第二次比較,前面「後乙個元素」現變成了「前乙個元素」,繼續跟他的「後乙個元素」進行比較如果後面的元素比他要小則用變數k記住它在陣列中的位置(下標),等到迴圈結束的時候,我們應該找到了最小的那個數的下標了,然後進行判斷,如果這個元素的下標不是第乙個元素的下標,就讓第乙個元素跟他交換一下值,這樣就找到整個陣列中最小的數了。然後找到陣列中第二小的數,讓他跟陣列中第二個元素交換一下值,以此類推。

void fun3( char *s,int num)

}if (i != k)}}

插入排序:

包括:直接插入排序,二分插入排序(又稱折半插入排序),

鍊錶插入排序,

希爾排序(又稱縮小增量排序)。屬於穩定排序的一種(通俗地講,就是兩個相等的數不會交換位置) 。

將n個元素的數列分為已有序和無序兩個部分,如

插入排序過程示例

下所示:

,}  

,}//紅色有序 …

,}每次處理就是將無序數列的第乙個元素與有序數列的元素從後往前逐個進行比較,找出插入位置,將該元素插入到有序數列的合適位置中。

演算法設計有很多方法。插入排序使用的是增量(incremental)方法;在排好子

陣列a[1..j-1]後,將a[j]插入,形成排好序的子陣列a[1..j];

步驟

⒈從有序數列和無序數列開始進行排序;

⒉處理第i個元素時(i=2,3,…,n),數列是已有序的,而數列是無序的。

用ai與ai-1

,a i-2,…,a1進行比較,找出合適的位置將ai插入;

⒊重複第二步,共進行n-i次插入處理,數列全部有序。

正確插入:

void fun444( char *s,int num)}}

//這個是標準的:

for(i = 1; i < 5; i++)//這樣寫的確比較好記,如果寫成 i < 5 -1, 這樣沒有基點 思維會比較亂

*(array + j) = temp;

}

}插入排序錯誤**:

void fun4( char *s,int num)

}if (k < i && k == 0)

arr[k] = temp;

}else if (k < i && k > 0 )

arr[j] = temp;}}

}main()

C語言練習

練習1 include stdlib.h include iostream.h include stdio.h void main cout 輸入檔案1的資料內容 以 結束 while ch stu n void input char a a用於接收要寫入資料的檔名 inti file fp if ...

C語言練習

輸出7 和7 的倍數,還有包含7 的數字例如 17,27,37,70,71,72,73,2.需求分析 輸出7 和7 的倍數,還有包含7 的數字,從小到大排列的不大於n 的與7 有關的數字,每行乙個 1 輸入的形式和輸入值的範圍 輸入乙個整型資料,輸入值範圍n 30000 2 輸出的形式 每行輸出乙個...

c語言練習

列印出上面的圖案 include include void put int n int main for int i 13 2 i 1 i 2 return 0 求出0 999之間的所有 水仙花數 並輸出。水仙花數 是指乙個三位數,其各位數字的立方和確好等於該數本身,如 153 1 5 3 則153...