日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《c语言从入门到精通》看书笔记——第8章 数组

發布時間:2023/12/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《c语言从入门到精通》看书笔记——第8章 数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、一維數組 一維數組是用于存儲一維數列中數據的集合。一般形式為 類型說明符 ?數組標識符[常量表達式]? ,例如:int iArray[5]; 一維數組的引用: 數組標識符[下標] ?;例如:iArray[2]; 一維數組的初始化: (1)定義數組時直接對數組元賦初值 (2)只給一部分元素賦值,為賦值的部分元素值為0 (3)在對全部數組元素賦初值時可以不指定數組長度 2、二維數組 一般形式:數據類型 數組名[常量表達式1][常量表達式2] 常量表達式1為行下標,常量表達式2為列下標 二維數組元素的引用形式: 數組名[下標][下標]; 二維數組的初始化 (1)可以將所有數據寫在一個大括號內,按照數組元素排列順序最元素賦值 (2)在為所有元素賦值時,可以省略行下標,但是不能省略列下標 (3)可以分行個數組元素賦值。例如:int a[2][3]={{1,2,3},{4,5,6}} (4)二維數組也可以直接對數組元素賦值 3、字符數組 數組中的元素類型為字符型時稱為字符數組。字符數組的定義和使用方法和其他類型的數組類似。 字符數組的結束標志是“\0”,即,要比數值型數組存儲時多用一個字節。 4、多維數組 多維數組的聲明和二維數組相同,只是下標更多。 5、數組的排序算法 (1)、選擇法排序:指每次選擇所要排序的數組中的最大值(由大到小排序)的數組元素,將這個數組元素的值與前面沒有進行排序的數組元素互換。即:最后一個元素和最前面沒有排序的數比較 /*從小到大排序*/ for(i=0;i<9;i++) ??????????????????? /*設置外層循環為下標0~8的元素*/ { iTemp = a[i]; ??????????????????? /*設置當前元素為最小值*/ iPos = i;???????????????????????? /*記錄元素位置*/ for(j=i+1;j<10;j++) ????????? /*內層循環i+1到9*/ { if(a[j]<iTemp) ?????????????? /*如果當前元素比最小值還小*/ { iTemp = a[j];???? ???? /*重新設置最小值*/ iPos = j; ?????????????? /*記錄元素位置*/ } } /*交換兩個元素值*/ a[iPos] = a[i]; a[i] = iTemp; } (2)、冒泡法排序:指在排序時,每次比較數組中相鄰的兩個數組元素的值,將較小的數(從小到大排序)排在較大的數前面。即:從最后一個元素開始依次和前面的元素比較,小則靠前。 /*從小到大排序*/ for(i=1;i<10;i++) ??????????????????? /*外層循環元素下標為1~9*/ { for(j=9;j>=i;j--) ?????????????? /*內層循環元素下標為i~9*/ { if(a[j]<a[j-1]) ????????? /*如過前一個數比后一個數大*/ { /*交換兩個數組元素的值*/ iTemp? = a[j-1]; a[j-1] = a[j]; a[j]?? = iTemp; } } } (3)、交換法排序:將每一位數與氣候的所有數一一比較,如果發現符合條件的數據則交換數據。即,依次比較,滿足條件換,沒滿足條件就保持那個位子,然后由又用前面的數依次比較。 /*從小到大排序*/ for(i=0;i<9;i++) ??????????????????? /*外層循環元素下標為0~8*/ { for(j=i+1;j<10;j++) ?????????????? /*內層循環元素下標為i+1到9*/ { if(a[j] < a[i]) ?????????????? /*如果當前值比其他值大*/ { /*交換兩個數值*/ iTemp = a[i]; a[i]? = a[j]; a[j]? = iTemp; } } }? ? (4)、插入法排序:基本工作原理是抽出一個數據,在前面的數據中尋找相應的位置插入,然后繼續下一個數據,直到完成排序。即取一個數放一個位置,取后一個數與前面排好了的數比較再放入。 ? ?? /*從小到大排序*/ for(i=1;i<10;i++) ?????????????????????????????????? /*循環數組中元素*/ { iTemp = a[i]; ????????????????????????????? /*設置插入值*/ iPos = i-1; while((iPos>=0) && (iTemp<a[iPos])) ???? /*尋找插入值的位置*/ { a[iPos+1] = a[iPos]; ??????????????????? /*插入數值*/ iPos--; } a[iPos+1] = iTemp; } (5)、折半法排序:又稱快速排序,是選擇一個中間值middle(在程序中使用數組中間值),然后把比中間值小的數據放在左邊,比中間值打的數據放在右邊(具體的實現是從兩邊找,找到一對后進行交換)。然后對兩邊分別進行遞歸使用這個過程。即:從兩頭出發和中間的比較,兩邊都停止時(左邊的比中間的大,右邊的比中間的小)然后交換這兩個停下的數,下次從xxxx開始 void CelerityRun(int left, int right, int array[]) { int i,j; int middle,iTemp; i = left; j = right; middle = array[(left+right)/2];??????????????????? /*求中間值*/ do { while((array[i]<middle) && (i<right))???? /*從左找小于中值的數*/ i++;????? while((array[j]>middle) && (j>left))???? /*從右找大于中值的數*/ j--; if(i<=j)??????????????????????????????????????? /*找到了一對值*/ { iTemp = array[i]; array[i] = array[j]; array[j] = iTemp; i++; j--; } }while(i<=j);??????????????????? /*如果兩邊的下標交錯,就停止(完成一次)*/
/*遞歸左半邊*/ if(left<j) CelerityRun(left,j,array); /*遞歸右半邊*/ if(right>i) CelerityRun(i,right,array); 6、排序算法的比較 插入法、冒泡法、交換法排序的速度比較慢,但參加排序的序列局部或整體有序時,這種排序能達到較快的速度;在這種情況下,折半法排序反而會顯得速度慢了。當n較小時,對穩定性不作要求時宜用選擇法排序,對穩定性有要求時宜用插入法或冒泡法排序。 7、字符串處理函數:要添加頭文件string.h (1)字符串復制:strcpy(目的字符串組名,源字符串組名) (2)字符串連接:strcat(目的字符數組名,源字符數組名) (3)字符串比較:strcmp(字符數組名1,字符數組名2)。按照ASCII碼順序比較兩個數組中的字符串,并由函數返回值返回比較結果(1>2=正;1<2=負;1=2=0;) (4)字符串中小寫字母變大寫:strupr(字符串) (5)字符串中大寫字母變小寫:strlwr(字符串) (6)獲得字符串長度:strlen(字符數組名) 8、反轉輸出字符串 int main() { int i; char String[7]? = {"mrsoft"}; char Reverse[7] = {0}; int size; size = sizeof(String);???? /*計算源字符串長度*/
/*循環讀取字符*/ for(i=0;i<6;i++)?????//是6是因為字符串的大小為6,又是從0開始的, { Reverse[size-i-2] = String[i];???? /*向目標字符串中插入字符*///“size-i-2”是因為String末尾一位是"\0",i的排位是從0開始,“size-1”結束。 }
/*輸出源字符串*/ printf("輸出源字符串:%s\n",String); /*輸出目標字符串*/ printf("輸出目標字符串:%s\n",Reverse); printf("%d\n",size); getchar();
return 0;????????????????????????????? /*程序結束*/
9、獲取系統日期和時間(要添加頭文件time.h) 輸出系統日期: time_t nowTime; time(&nowTime);?????????????????????????????????? /*獲取系統日期*/
?????????????? sysTime= localtime(&nowTime);?????????????? /*轉換為系統日期*/
?????????????? printf("系統日期:%d-%d-%d \n",1900 + sysTime->tm_year,sysTime->tm_mon + 1 ,sysTime->tm_mday);? 輸出系統時間: time_t nowTime; time(&nowTime);?????????????????????????????????? /*獲取系統時間*/
?????????????? sysTime = localtime(&nowTime);?????????????? /*轉換為系統時間*/
?????????????? printf("系統時間:%d:%d:%d \n",sysTime->tm_hour ,sysTime->tm_min ,sysTime->tm_sec);??????????????????? /*輸出信息*/??????????????????? /*輸出信息*/

總結

以上是生活随笔為你收集整理的《c语言从入门到精通》看书笔记——第8章 数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。