C語言--關於二維陣列,字串陣列,多維陣列
阿新 • • 發佈:2019-02-08
int main(int argc, const char * argv[]) { @autoreleasepool { #pragma mark-----------二維陣列 int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {12,10,11,12} }; //列印二維陣列 for (int i = 0; i<3; i++) { for (int j =0; j<4; j++) { printf(" %d ",a[i][j]); } printf("\n"); } //把行和列交換,放到新的二維陣列 int b[4][3]={0}; for (int i = 0; i<3; i++) { for (int j =0; j<4; j++) { b[j][i]=a[i][j]; } } printf("\n"); for (int i =0; i<4; i++) { for (int j =0; j<3; j++) { printf(" %d ",b[i][j]); } printf("\n"); } //找出二維陣列中的最大值,並把行和列表示出來 int max = 0; for (int i =0; i<3; i++) { for (int j =0; j<4; j++) { if (max<a[i][j]) { max=a[i][j]; } } } printf("max=%d",max); for (int i = 0; i<3; i++) { for (int j = 0; j<4; j++) { if (max==a[i][j]) { printf("第%d行,第%d列 ",i+1,j+1); } } } #pragma mark--------------總結 /** * 1:求和演算法(累加) * 2:求最大值演算法是(逐一比較) * 3:排序演算法是(先比較再交換) * 4:二維陣列運用,地圖,掃雷,電影院,(選了就是1,沒選就是0) */ #pragma mark--------------字串陣列 /** * 1:訪問某個字串(陣列名[第一維下標]) * 2:訪問某個字元(陣列名[第一維下標][第二維下標]) */ char str[3][10]={"iPhone","Android","Win8"}; //1操作字串(拷貝strcpy 拼接strcat 長度strlen 比較strcmp) strcpy(str[2], "lanou"); printf("\n%s ",str[2]); //2操作單個字元,陣列名[第一維下標][第二維下標] //通過雙下標精確定位 要操作的字元 //字串可以直接strcpy //字元可以直接賦值 str[1][3]='a'; printf("\n%s",str[1]); //練習題 //1,輸入三個單詞,找出最長的單詞 long length = 0; for (int i =0; i<3; i++) { if (length<strlen(str[i])) { length=strlen(str[i]); } } //%lu printf("\n%ld",length); for (int i =0; i<3; i++) { if (length == strlen(str[i])) { printf("\n最長的單詞:%s \n",str[i]); } } //2,十個單詞,排序(小--大) for (int i = 0; i<3-1; i++) { //注意 for (int j =0; j<3-1-i; j++) { if (strcmp(str[j], str[j+1])>0) { char temp[10]={0} ; strcpy(temp, str[j]); strcpy(str[j], str[j+1]); strcpy(str[j+1], temp); } } } for (int i = 0; i<3; i++) { printf(" %s ",str[i]); } #pragma mark-------------多維陣列 //1:多維陣列,維數大於2 //2:for迴圈,第一層層數,第二層行數,第三層列數 //3:多個一維成二維,多個二維成三維 #pragma mark--------------作業 //1、(**)有一個3行4列的二維陣列,要求程式設計找出最大的元素,並輸出所在的行和列。 //2、(**)輸入6個字串,並對它們按從小到大的順序排序後輸出. //3、(****)找出一個二維陣列中的“鞍點”,即該位置上的元素在該行中最大,在該列中最小(也可能沒有“鞍點”),列印有關資訊。(提示:注意特殊情況 //解題思路(分析) //4 3 2 1 //5 1 3 9 //6 7 8 3 //1,定義一個二維陣列 //2,判斷有無鞍點 //3,在該行中最大(最大值) //4,在該列中最小(最小值) //5,列印輸出 //1,定義一個二維陣列 // int c[3][4]={ // {4,3,2,1}, // {5,1,3,9}, // {6,7,8,3}, // }, min = 0,maxs = 0,d = 0,e = 0;//maxs行最大數,min為列最小數,d,e為記下下標的變數. // int flag = 0; // // for (int i = 0; i<3; i++) { // maxs = c[i][0];//行最大數 // for (int j = 0; j<4; j++) { // if (maxs<c[i][j]) { // maxs = c[i][j]; // //d,e為記下下標的變數 // d=i; // e=j; // } // // min = c[0][e];//min為列最小數 // for (int k = 0; k<3; k++) { // if (min > c[k][e] ) { // min=c[k][e]; // } // } // } // // if (min ==maxs) { // printf("\n鞍點為:%d,位於%d行,%d列",maxs,d+1,e+1); // flag=1; // } // } // if (flag == 0) { // printf("該二維陣列無鞍點"); // } //2,判斷有無鞍點 //3,在該行中最大(最大值) //4,在該列中最小(最小值) //5,行和列相等 // for (int i=0 ; i<3; i++) { // for (int j = 0; j<4; j++) { // if (min>c[j][j]) { // min = c[j][j]; // } // } // if (min<c[i][i]) { // min = c[i][i]; // } // } // printf("\n %d ",min); int a1[2][3]={ {1,2,3}, {4,5,6}, }; int max1 = 0; int min1 = 0; int index1=0; int index2=0; for (int i =0; i<2; i++) { max1=a1[i][0]; for (int j = 0; j<3; j++) { if (max1<a1[i][j]) { max1=a1[i][j]; index1 = i; index2 = j; } min1=a1[0][index2]; for (int k =0; k<2; k++) { if (min1>a1[k][index2]) { min1=a1[k][index2]; } } } if (max1==min1) { printf("\n鞍點是%d,在第%d行,在第%d列",min1,index1,index2); } } } return 0; }