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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

20160205.CCPP体系详解(0015天)

發布時間:2025/3/15 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20160205.CCPP体系详解(0015天) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

程序片段(01):01.楊輝三角.c
內容概要:楊輝三角

#include <stdio.h> #include <stdlib.h>#define N 10//01.楊輝三角: // 1.圖形轉換:將標準楊輝三角采用標準數組進行模擬 // 2.確定標準數組的圖形描述關系: // (1).數組當中第一列的所有元素以及正對角線的所有元素都為1 // (2).數組當中的其它元素等于上一行左一列 // 3.數組模擬楊輝三角的訣竅! // 將整個楊輝三角向左傾斜成為標準的二維數組 int main01(void) {int intArrArr[N][N] = { 0 };for (int i = 0; i < N; ++i){for (int j = 0; j <= i; ++j){if (0 == j || i == j)intArrArr[i][j] = 1;else//核心代碼intArrArr[i][j] = intArrArr[i - 1][j - 1] + intArrArr[i - 1][j];}}//模擬楊輝三角的標準數組打印方式for (int i = 0; i < N; ++i){for (int j = 0; j <= i; ++j){printf("%4d", intArrArr[i][j]);}printf("\n");}//楊輝三角打印方式for (int i = 0; i < N; ++i){//19=10*4/2-1-i*2printf("%*c", 19 - i*2, '\0');//printf();當中的*表示預訂寬度,scanf();當中的*表示忽略寬度for (int j = 0; j <= i; ++j){printf("%4d", intArrArr[i][j]);}printf("\n");}system("pause"); }

程序片段(02):01.Array.c+02.二維數組實戰.c+03.二維數組轉置.c
內容概要:02.二維數組本質

///01.Array.c #include <stdio.h> #include <stdlib.h>//01.二維數組本質: // 1.二維數組的數組名本質: // 就是整個二維數組的首個數組元素首地址 // 2.二維數組當中的數組元素和行元素區分: // 就二維數組整體而言: // 每個數組元素都只是一個數組元素 // 每個行元素當中包含有多個數組元素 // 就一維數組整體而言: // 每個數組元素都只是一個行元素 // 注意事項: // 1.所有數組的存儲方式都是采取線程存儲: // 存儲特點:連續+類型相同 // 2.所有線性存儲方式的數據結構都可以采取 // 線性方式進行順序規律的初始化方式初始 // 3.二維數組也是采取的靜態初始初始化方式 // 也就是長度必須采用常量進行標識 // 4.數組的靜態初始化特點: // (1).一個大括號代表一個維度 // (2).只要存在前置元素初始化,那么后面的所有數組元素 // 都會默認進行初始化為0的操作 // (前置:必須從首個"數組元素"開始,否則不會出現連續默認初始化為0的現象) int main01(void) {int intArrArr[3][4] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };for (int i = 0; i < 3; ++i){for (int j = 0; j < 4; ++j){//%p<==>%#x(將數值以16進制以及攜帶進制標識的方式進行打印)//&intArrArr[i][j]與intArr[i]+j等價的原因:intArrArr[i]表示的是二維數組當中每個一維數組的首個元素的地址(也就是每個一維數組的地址)printf("%2d,%p,%p", intArrArr[i][j], &intArrArr[i][j], intArrArr[i] + j);}printf("\n");}//對二維數組的不同看待方式會有不同的效果!// 將二維數組看做為一維數組的處理方式,// 那么以一維數組的數組元素獲取方式,就是在獲取每個數組元素的首地址printf("%p,%p,%p \n", intArrArr[0], intArrArr[1], intArrArr[2]);system("pause"); } ///02.二維數組實戰.c #include <stdio.h> #include <stdlib.h>#define N 10 int intArrArr[N][N]; //01.不引入任何變量實現二維矩陣數組的標準數據規律化賦值方式: // 表達式:intArrArr[i][j]=i*N+1+j;//從1開始進行的規律化賦值 int main02(void) {for (int i = 0; i < N; ++i){for (int j = 0; j < N; ++j){printf("%3d", intArrArr[i][j] = i * N + j + 1);//舉行數組賦值的規律表達式(不引入任何其他變量)}printf("\n");}system("pause"); }//02.二維數組當中的特殊數據統計方式: // sumA:表示統計所有 // sumB:統計每行 // sumC:統計每列 // sumD:統計正斜線 // sumE:統計反斜線 int main03(void) {int sumA = 0;int sumD = 0;int sumE = 0;for (int i = 0; i < N; ++i){//表示行int sumB = 0;for (int j = 0; j < N; ++j){//表示列printf("%4d", intArrArr[i][j] = i*N + 1 + j);sumA += intArrArr[i][j];sumB += intArrArr[i][j];//if (i == j)// sumD += intArrArr[i][j];if (i + j == N - 1)sumE += intArrArr[i][j];}printf("sumB = %d \n", sumB);sumD += intArrArr[i][i];printf("\n");}printf("\n\n");for (int j = 0; j < N; ++j){//表示列int sumC = 0;for (int i = 0; i < N; ++i){//表示行sumC += intArrArr[i][j];}printf("sumC = %d \n", sumC);}system("pause"); } ///03.二維數組轉置.c #include <stdio.h> #include <stdlib.h>//01.對數組的各種轉置操作: // 1.轉置:正轉置,翻轉置,翻頁轉置 // 相當于對二維平面的任意操作特點 // 2.轉置規律分析: // 就是直接將帶轉置的圖形與 // 轉置之后的結果進行對比分析 // 快速得出二維數組的轉置規律 //02.翻頁轉置效果總結: // 1.待轉置數組與轉置后數組特點: // 待轉置數組:intArrArrA[N1][N2]; // 轉置后數組:intArrArrB[N2][N1]; // 2.轉置效果分類:轉置線+翻頁點 // 反斜線轉置:intArrArrA[j][i] // 上翻頁:intArrArrB[i][j] // 下翻頁:intArrArrB[N2-1-i][N1-1-j] // 正斜線轉置:intArrArrA[N1-1-j][N2-1-j] // 上翻頁:intArrArrB[i][j] // 下翻頁:intArrArrB[N2-1-i][N1-1-j] // 規律:先確定轉置線,再確定翻頁點 int main04(void) { /*//待轉置數組1 2 3 04 5 0 136 7 8 9//正常打印待轉置數組*/int intArrArrA[3][4] = { { 1, 2, 3 }, { 4, 5, 0, 13 }, { 6, 7, 8, 9 } };int intArrArrB[4][3] = { 0 };for (int i = 0; i < 3; ++i){for (int j = 0; j < 4; ++j){//待轉置數組printf("%3d", intArrArrA[i][j]);}printf("\n");}printf("\n");//1 4 6//2 5 7//反斜線轉置//3 0 8//0 13 9//特點:反斜線+以左下角下翻頁:for (int i = 0; i < 4; ++i){for (int j = 0; j < 3; ++j){//轉置后數組:正確打印方式=intArrArrB[j][i];printf("%3d", intArrArrB[i][j] = intArrArrA[j][i]);//以左下角為翻頁點,反斜線為轉置線,作為翻頁轉置效果}printf("\n");}printf("intArrArrB[i][j]<--intArrArrA[j][i] \n\n");//特點:反斜線+以左下角上翻頁for (int i = 0; i < 4; ++i){for (int j = 0; j < 3; ++j) {//轉置后數組:逆向接收方式=intArrArrB[j][i];printf("%3d", intArrArrB[3 - i][2 - j] = intArrArrA[j][i]);//以右上角為翻頁點,反斜線為轉置線,作為翻頁轉置效果}printf("\n");}printf("intArrArrB[3-i][2-j]=intArrArrA[j][i] \n\n");//總結:翻頁轉置的效果相似,都是以斜對角線為基準進行轉置,一個正向翻頁,一個逆向翻頁//9 13 0//8 0 3//正斜線轉置//7 5 2//6 4 1for (int i = 0; i < 4; ++i){for (int j = 0; j < 3; ++j){printf("%3d", intArrArrB[i][j] = intArrArrA[2 - j][3 - i]);} printf("\n");}printf("intArrArrB[i][j]=intArrArrB[2-j][3-i] \n\n");for (int i = 0; i < 4; ++i){for (int j = 0; j < 3; ++j){printf("%3d", intArrArrB[3 - i][2 - j] = intArrArrA[2 - j][3 - i]);}printf("\n");}printf("intArrArrB[3-i][2-j]=intArrArrB[2-j][3-i] \n\n");system("pause"); }#define row 2 #define column 3 //02.翻頁轉置規律大總結: // 先確定轉置線,再確定翻頁點 int main05(void) {int intArrArrA[row][column] = { 1, 2, 3, 4, 5, 6 };printf("原樣輸出: \n");for (int i = 0; i < row; ++i){for (int j = 0; j < column; ++j){printf("%2d", intArrArrA[i][j]);}printf("\n");}printf("\n");int intArrArrB[column][row] = { 0 };printf("以反斜線為轉置線,以左下角為翻頁點,進行翻頁轉置! \n");for (int i = 0; i < column; ++i){for (int j = 0; j < row; ++j){printf("%2d", intArrArrB[i][j] = intArrArrA[j][i]);}printf("\n");}printf("\n");printf("以反斜線作為轉置線,以右上角作為翻頁點,進行翻頁轉置! \n");for (int i = 0; i < column; ++i){for (int j = 0; j < row; ++j){printf("%2d", intArrArrB[column - 1 - i][row - 1 - j] = intArrArrA[j][i]);}printf("\n");}printf("\n");printf("以正斜線作為轉置線,以右下角作為翻頁點,進行翻頁轉置! \n");for (int i = 0; i < column; ++i){for (int j = 0; j < row; ++j){printf("%2d", intArrArrB[i][j] = intArrArrA[row - 1 - j][column - 1 - i]);}printf("\n");}printf("\n");printf("以正斜線作為轉置線,以左上角作為翻頁點,進行翻頁轉置! \n");for (int i = 0; i < column; ++i){for (int j = 0; j < row; ++j){printf("%2d", intArrArrB[column - 1 - i][row - 1 - j] = intArrArrA[row - 1 - j][column - 1 - i]);}printf("\n");}printf("\n");system("pause"); }

程序片段(03):03.Time.c
內容概要:高維數組

#include <stdio.h> #include <stdlib.h>//01.二維數組的初始化方式: // 奧數技巧:線性初始化方式 // 注:凡是線性存儲的數據結構都存在著線性的初始化方式 //02.線性初始化的規律總結: // 1.采用一個循環結構控制循環次數(實質就是數組當中所含元素的個數) // 2.操控數組的時候規律: // intArrArr[變化慢的][變化快的] = i + 1; // 變化慢的:求模最低維數 // 變化快的:取余最低維數 // i+1:使得線性初始化值為1,2,3...(能夠避免不必要的修改循環控制變量的值) // 注:%p<==>%#X的打印實質等價 int main01(void) {//A 0 1 2 3//0 00 01 02 03//1 10 11 12 13//2 20 21 22 23//3 30 31 32 33int intArrArr[3][4] = { 0 };for (int i = 0; i < 12; ++i){intArrArr[12 / 4][12 % 4] = i + 1;//二維數組的線性初始化方式}printf("%p \n", intArrArr);//printf("%#X \n", intArrArr);system("pause"); }//03.三維數組的線性初始化總結: // 1.三維數組組成分析: // 本質:三維數組的具體模型-->立體結構(六個方向:上,下,左,右,前,后) // 特點:intArrArr[z][x][y]; // z:代表立體結構縱坐標-->這是由二維到三維的轉變維度 // x:代表平面結構x坐標 // y:代表平面結構y坐標 // 2.三維數組的線性初始化方式詳解: // intArrArrArr[z][x][y]; // for (int i = 0; i < z*x*y; ++i) // intArrArrArr[i / (x*y)][i % (x*y) / y][i % (x*y) % y] =i + 1; // i / (x*y):代表當前索引所指向的立體結構(第幾層) // i % (x*y) / y:代表當前索引所指向的立體結構的(不完全面)的第幾行 // i % (x*y) % y:代表當前索引所指向的立體結構的(不完全面)的第幾列 // 注: // 1.凡是數據結構為線性的存儲結構,那么前置元素只要初始化為0,后置存儲便會 // 默認初始化為0(尤其是數組的初始化特點) // 2.數組通性特點: // 元素類型一致,連續內存存儲[數組都是以線性內存結果進行的數據存儲,因此才可以進行線性初始化賦值操作] // 3.內層優化技巧: // 能夠減少不必要的運算過程就應當盡量減少 // 比如:三維數組的初始化技巧,不必要使用三層循環結構,減少不不要的兩層循環結構,采用一層結構進行搞定 int main02(void) {int intArrArrArr[3][4][5] = { 0 };intArrArrArr[0][0][0] = 0;intArrArrArr[1][0][0] = 20;//intArrArrArr[1][2][0]=30;=>intArrArrArr[1][2][3]=33;intArrArrArr[2][0][0] = 40;printf("%p \n", intArrArrArr);//三維數組的首地址for (int i = 0; i < 60; ++i){//intArrArrArr[60 / 20][60 % 20 / 5][60 % 20 % 5] = i;//性能優化操作-->游戲開發當中,少一層循環結構,多提升一些效率intArrArrArr[i / (4 * 5)][i % (4 * 5) / 5][i % (4 * 5) % 5] = i;//0,1,2-->0,1,2,3-->0,1,2,3,4}//intArrArrArr[i][j][k]-->程序性能優化:能夠減少的循環層數就一定要進行相應的減少//intArrArrArr[(i*j*k)/(j*k)][(i*j*k)%(j*k)/k][(i*j*k)%(j*k)%k]system("pause"); }//04.從0維數組到N維數組的推導過程: // 0維數組:就是一個變量 // 實質:點 // 1維數組:就是一個一維數組 // 實質:線 // 2維數組:就是一個二維數組 // 實質:面 // 3維數組:就是一個三維數組 // 實質:立體 // 4維數組:就是一個四維數組 // 實質:立體+時間 // 5維數組:就是一個五維數組 // 實質:立體+時間+質量 // 6維數組:就是一個六維數組 // 實質:立體+時間+質量+能量 // n維數組:就是一個N維數組 // 實質:(n-1)維基礎條件+第n維的條件 //05.數組線性初始化特點: // 從第一層第一面第一個點開始進行逐個點的初始化 // 從下層不斷的往上層 // 從一個面不斷的往另外一個面 // 從一個點不斷的往一個點 int main03(void) {int intArrArrArr[2][3][4] = { 0 };int num = 0;for (int z = 0; z < 2; ++z)//層結構(包含面){//遍歷2個平面for (int x = 0; x < 3; ++x)//面結構(包含行){//遍歷3個行數for (int y = 0; y < 4; ++y)//線結構(包含點){//遍歷4個列數printf("%3d, %p", intArrArrArr[z][x][y] = ++num, &intArrArrArr[z][x][y]);}printf("\n");}printf("\n\n");}system("pause"); }

程序片段(04):01.Fun.c
內容概要:數組與函數

#include <stdio.h> #include <stdlib.h>//01.數組作為函數參數進行傳遞的特殊性質: // 數組作為函數的參數傳遞,會自動退化為指針,目的就是為了傳遞地址[數組-->指針-->地址] // 注: // 1.目的是為了節省資源,避免不必要的內存拷貝動作,提升程序性能(直接采用指針操作原始數據) // 2.數組名作為實參,就是指向首個數組元素的指針,數組名沒有作為參數,就是表示整個數組的類型 void testArrName(int intArr[10])//地址:數組是例外,數組傳遞的是指針,也就是地址,數組沒有副本機制 {printf("%p \n", intArr);intArr[3] = 1000;printf("sizeof(intArr) = %d \n", sizeof(intArr));//這里的實質就是求取地址這個整數所占用的內存字節數int intArrTest[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };printf("sizeof(intArrTest) = %d \n", sizeof(intArrTest));//數組沒有用作函數實參進行傳遞,就是數據實際大小 }int main01(void) {int intArr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };printf("%p \n", intArr);testArrName(intArr);for (int i = 0; i < 10; ++i){printf("%d \n", intArr[i]);}system("pause"); }

程序片段(05):01.枚舉數組.c
內容概要:數組與枚舉常量

#include <stdio.h> #include <stdlib.h>enum person{ 吳偉, lzq, zb, yc, 李波 };//0,1,2,3...默認匹配的整數形式 double yanZhiBiao[5] = { 97.9, 93.9, 88.9, 60.9, 98.9 };//01.枚舉數組的特點:枚舉+數組=結合使用(類似于查表法的使用) // 讓枚舉數據具備一定的比較特性 // 查表法:已知一個索引,在已經存在的對應表當中進行數據查詢 int main01(void) {//讓枚舉數據具備一定的比較特性for (enum person people = 吳偉; people <= 李波; ++people){printf("%lf \n", yanZhiBiao[people]);}system("pause"); }

程序片段(06):01.命名.c
內容概要:起名工具

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <locale.h>//01.知識要點: // 1.隨機數生成方式 // 2.查表法的應用 // 先定義表體內容, // 再定義查詢內容 int main01(void) {//time_t te;//定義時間類型//unsigned int seed = (unsigned int)time(&te);//獲取隨機數種子//srand(seed);//種植隨機數種子srand((unsigned int)time(NULL));//種植隨機數種子//int passLength = rand() % 10 + 6;//6~15:密碼長度//2個字兒,3個字兒的密碼生成,定住姓氏,隨機名字char passChr[10] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };//for (int i = 0; i < passLength; ++i)//{// int num = rand() % 10;//隨機獲取組成密碼的單個字符// printf("%c", passChr[num]);//}for (int i = 0; i < rand() % 10 + 6; ++i){printf("%c", passChr[rand() % 10]);}printf("\n");system("pause"); }//02.查表法很重要! int main02(void) {setlocale(LC_ALL, "zh-CN");wchar_t wcharS[8] = { L'龍', L'虎', L'大', L'偉', L'天', L'桂', L'三', L'財' };//putwchar(wcharS[0]);putwchar(L'吳');srand((unsigned int)time(NULL));for (int i = 0; i < rand() % 2 + 1; ++i){putwchar(wcharS[rand() % 8]);}system("pause"); }

程序片段(07):01.洗牌.c
內容概要:07.洗牌

#include <stdio.h> #include <stdlib.h> #include <time.h>//01.洗牌算法透析: // 原理:讓任何一張牌有機會與其后面的任意一張牌進行交換 // int randNum = 0; // for (int i = 0; i < 53; ++i)//只需要讓倒數第二張牌和倒數第一張牌有交換幾率就行了,倒數第一張牌沒有后續的交換概率 // {//由于最大索引為53-->然而前面已經保證了從后面一張牌開始-->因此需要1+X能夠等于53-->rand()%(53-i)-->極限推理法 // randNum = i + 1 + rand() % (53 - i);//(i+1)保證絕對不會發生本體交換特點a;rand()%(53-i)保證隨機數合理,(53-i)防止出界 // } int main01(void) {int intArr[54] = { 0 };printf("洗牌之前:\n");for (int i = 0; i < 54; ++i){printf("%3d", intArr[i] = i + 1);}printf("\n\n");srand((unsigned int)(time(NULL)));//種植隨機數種子for (int i = 0; i < 53; ++i)//少一次:為了避免最后一次沒有交換對象{int num = i + 1 + rand() % (53 - i);intArr[i] = intArr[i] ^ intArr[num];intArr[num] = intArr[i] ^ intArr[num];intArr[i] = intArr[i] ^ intArr[num];}printf("洗牌之后:\n");for (int i = 0; i < 54; ++i){printf("%3d",intArr[i]);}system("pause"); }

轉載于:https://www.cnblogs.com/niulanshan/p/6174614.html

總結

以上是生活随笔為你收集整理的20160205.CCPP体系详解(0015天)的全部內容,希望文章能夠幫你解決所遇到的問題。

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