1、多維數組:每多一個維度,就會出現一個更大的容器去裝裹之前的維度
注意:有幾維就由幾個for進行嵌套循環,通常使用一維和二維較多
定義二維數組的步驟: 類型修飾符 數組名[常量表達式1][常量表達式2] = {初始值};
2、 不管是幾維數組,數組都是不能直接拿來運算,訪問二維數組元素使用雙下標
定義二位數組的時候可以不指定第一維的長度,但是必須要給定第二維得長度
行數 = 元素個數 除以 第二維長度 若沒有餘數,結果就是行數;若有餘數,(結果+1)等於行數
3、元素個數
=各維數乘積;
4、字符串就是字符數組,字符串數組每一個元素都是字符串,字符串數組是一個二維數組; 以\0結尾的字符組就是字符串
########二維數組求每一行的平均值##########
總結:先定義數組和行的和(爲了求平均數),兩個for循環取數組的隨機值並打印,然後進行和累加,最後在打印時把平均值表達式寫在打印裏。注意:(float)sum強轉小數。sum清零操作一般放在最後的打印下面;
例題:定義一個四行五列的數組,初始值是0;隨機賦值範圍10~30;打印每一行的元素,並計算每一行的平均值
// int sum = 0;//接受每一行的平均值
// int a[4][5] = {0};
// for (int i = 0; i < 4; i ++) {
// int a[4][5] = {0};
// for (int i = 0; i < 4; i ++) {
// for (int j = 0; j < 5; j ++) {
// //隨機賦值
// a[i][j] = arc4random_uniform(30 - 10 +1) +10;
// a[i][j] = arc4random_uniform(30 - 10 +1) +10;
// printf("%d\t",a[i][j]);//打印結果
// sum += a[i][j];//累加
// }printf("\n");
// printf("\nsum = %d 平均值 = %.2f\n",sum,(float)sum / 5);
// //打印每一行的累加結果和每一行的平均值
//
// printf("\nsum = %d 平均值 = %.2f\n",sum,(float)sum / 5);
// //打印每一行的累加結果和每一行的平均值
//
// sum = 0;//累加結果清零
//}
總結:一維一個for循環,二維兩個for嵌套循環,三維用三個for嵌套循環
5、*****************求二維數組中所有最大的元素,並輸出所在行和列***************
總結:先定義最大值,在進行兩個for循環取得隨機數組並打印,跟着if語句找出最大值;最後再遍歷數組輸出最大值,記得輸出最大值是兩個for輸出;
int max = -100;//賦給最大值
例題:有一個四行五列的數組,初始值爲0;隨機賦值[20 50 ],求所有元素中最大的元素,並輸出所在的行和列
// int a[4][5] = {0};
// for (int i = 0; i < 4; i ++) {
// for (int j = 0; j < 5; j ++) {//隨機賦值並打印結果
// a[i][j] = arc4random_uniform(50 - 20 +1) +20;
// printf("%d\t",a[i][j]);
// for (int i = 0; i < 4; i ++) {
// for (int j = 0; j < 5; j ++) {//隨機賦值並打印結果
// a[i][j] = arc4random_uniform(50 - 20 +1) +20;
// printf("%d\t",a[i][j]);
// //根據條件找出最大值
// if (max < a[i][j]) {//如果max小於數組中的元素,就把元素賦值給max
// max = a[i][j];
// }
// }
// }
// //輸出最大值和下標
// for (int i = 0; i <4; i ++) {
// for (int j = 0; j < 5; j ++) {
//
// if (max == a[i][j]) {
// printf("a[%d][%d] = %d\n", i,j,max);
// }
// }
// }
// //輸出最大值和下標
// for (int i = 0; i <4; i ++) {
// for (int j = 0; j < 5; j ++) {
//
// if (max == a[i][j]) {
// printf("a[%d][%d] = %d\n", i,j,max);
// }
// }
// }
6、 ∞∞∞∞∞∞∞∞∞∞∞∞求每一行的和∞∞∞∞∞∞∞∞∞∞∞∞∞
總結: 做題原則:行標和列標誰變化最快,就把誰作爲內層for循環;
有個四行五列的數組,初始值爲0,元素隨機賦值[10 50 ] ,打印每一列的和
int a[4][5] = {0};
// for (int i = 0; i < 4; i ++) {
// for (int j = 0; j < 5; j ++) {
// //賦給隨機值
// a[i][j] = arc4random_uniform(50 - 10 + 1) + 10;
// //打印結果
// for (int j = 0; j < 5; j ++) {
// //賦給隨機值
// a[i][j] = arc4random_uniform(50 - 10 + 1) + 10;
// //打印結果
// printf("%d\t",a[i][j]);
// }
// printf("\n");
// }
// //求每一行的和,行變化比較快,所以控制行循環放到內層
// //外層控制列
//
// int sum = 0;//接受每一列的和
// //控制列
// for (int i = 0; i < 5; i ++) {
// //控制行
// printf("\n");
// }
// //求每一行的和,行變化比較快,所以控制行循環放到內層
// //外層控制列
//
// int sum = 0;//接受每一列的和
// //控制列
// for (int i = 0; i < 5; i ++) {
// //控制行
// for (int j = 0; j < 4; j ++) {
// sum +=a[j][i];//注意下標的互換
// }
// //打印每一列的和
// printf("sum = %d\n",sum);
// sum = 0;
// }
// //打印每一列的和
// printf("sum = %d\n",sum);
// sum = 0;
// }
7、*********同理,每一列的和如下***************
總結:和每一行的和不同點在於注意下標的互換
有個四行五列的數組,初始值爲0,元素隨機賦值[10 50 ] ,打印每一列的和
// int a[4][5] = {0};
// for (int i = 0; i < 4; i ++) {
// for (int j = 0; j < 5; j ++) {
// //賦給隨機值
// a[i][j] = arc4random_uniform(50 - 10 + 1) + 10;
// //打印結果
// for (int i = 0; i < 4; i ++) {
// for (int j = 0; j < 5; j ++) {
// //賦給隨機值
// a[i][j] = arc4random_uniform(50 - 10 + 1) + 10;
// //打印結果
// printf("%d\t",a[i][j]);
// }
// printf("\n");
// }
// //求每一行的和,行變化比較快,所以控制行循環放到內層
// printf("\n");
// }
// //求每一行的和,行變化比較快,所以控制行循環放到內層
// //外層控制列
// int sum = 0;//接受每一列的和
// //控制列
// for (int i = 0; i < 5; i ++) {
// //控制行
// //控制列
// for (int i = 0; i < 5; i ++) {
// //控制行
// for (int j = 0; j < 4; j ++) {
// sum +=a[j][i];//注意下標的互換
// }
// //打印每一列的和
// printf("sum = %d\n",sum);
// sum = 0;
// }
// //打印每一列的和
// printf("sum = %d\n",sum);
// sum = 0;
// }
8、字符串的訪問
//定義一個字符串數組
char c4[4][10] = {"xiaoze","wutenglan","songdao","tianhaiyi"};
char a5[][10] = {"jiateng","boduo","linzhiling"};//相當於c5[3][10];
// //如何訪問字符串數組的元素
// char c6[][10] = {"jingkong","mingbu","macunxi"};
// 給字符串數組賦值的時候,字符串的長度一定要小於第二維長度 -1 ,目的是給\0留個空間
// printf("%c\n",c6[0][4]);//訪問字符串數組中的單個字符使用雙下標%c
// c6[0][4] = ‘i';
// printf("%s\n",c6[0]);//訪問字符串數組中的字符串使用單下標
// printf("%s\n",c6[2]);
//
// strcpy(c6[0], "laoshi");
// printf("%s\n",c6[2]);
//
// strcpy(c6[0], "laoshi");
// printf("%s\n",c6[0]);
// //遍歷輸出字符串
// //使用第一維的下標訪問字符串數組
// for (int i = 0; i < 3; i++) {
// printf("%s\n",c6[i]);
// }
// //使用雙下標打印字符串
// //行
// for (int i = 0; i < 3; i ++) {
// //列
// for (int j = 0; j < 10; j ++) {
// if (c6[i][j] != '\0') {
// printf("%c",c6[i][j]);
// }else{
// break;//碰到\0就結束內層循環
// }
// printf("%c",c6[i][j]);
// }
// printf("\n");
// //使用第一維的下標訪問字符串數組
// for (int i = 0; i < 3; i++) {
// printf("%s\n",c6[i]);
// }
// //使用雙下標打印字符串
// //行
// for (int i = 0; i < 3; i ++) {
// //列
// for (int j = 0; j < 10; j ++) {
// if (c6[i][j] != '\0') {
// printf("%c",c6[i][j]);
// }else{
// break;//碰到\0就結束內層循環
// }
// printf("%c",c6[i][j]);
// }
// printf("\n");
// }
9、字符串輸出最長的並排序
//創建一個字符串數組(內容是你一圈的姓名),輸出最長字符串的長度
// char c7[4][20] = {"zhangsan","wanger","mazi"};
// unsigned long length = 0;//記錄最大長度
// for (int i =0; i < 4; i ++) {
// if (length < strlen(c7[i])) {//使用strlen計算字符串的長度
// length = strlen(c7[i]);
// }
// }
// printf("length = %lu\n",length);
// //輸出最長字符串
// for (int i = 0; i < 4; i ++) {
// if (length == strlen(c7[i])) {
// printf("%s\n",c7[i]);
// }
// }
要求 //對字符串升序排序
// for (int i = 0; i < 4 - 1; i ++) {
// for (int j = 0; j < 4 - 1 - i; j ++) {
// //前一個字符串大於後一個字符串時交換位置
// if (strcmp(c7[j],c7[j + 1]) > 0) {
// char temp[20]= {0};
// //使用字符串拷貝函數
// strcpy(temp, c7[j]);
// strcpy(c7[j], c7[j+1]);
// strcpy(c7[j+1], temp);
// char c7[4][20] = {"zhangsan","wanger","mazi"};
// unsigned long length = 0;//記錄最大長度
// for (int i =0; i < 4; i ++) {
// if (length < strlen(c7[i])) {//使用strlen計算字符串的長度
// length = strlen(c7[i]);
// }
// }
// printf("length = %lu\n",length);
// //輸出最長字符串
// for (int i = 0; i < 4; i ++) {
// if (length == strlen(c7[i])) {
// printf("%s\n",c7[i]);
// }
// }
要求 //對字符串升序排序
// for (int i = 0; i < 4 - 1; i ++) {
// for (int j = 0; j < 4 - 1 - i; j ++) {
// //前一個字符串大於後一個字符串時交換位置
// if (strcmp(c7[j],c7[j + 1]) > 0) {
// char temp[20]= {0};
// //使用字符串拷貝函數
// strcpy(temp, c7[j]);
// strcpy(c7[j], c7[j+1]);
// strcpy(c7[j+1], temp);
// }
// }
// }
// //輸出打印查看結果
// for (int i =0; i < 4; i ++) {
// printf("%s\n",c7[i]);
// }
// //輸出打印查看結果
// for (int i =0; i < 4; i ++) {
// printf("%s\n",c7[i]);
// }
10、 對字符串升序排序
總結:字符串的升序,注意比較字符串大小用strcmp,後用strcmp覆蓋前者
創建一個字符串數組(內容是你一圈的姓名),輸出最長字符串的長度
// char c7[4][20] = {"zhangsan","wanger","mazi"};
// unsigned long length = 0;//記錄最大長度
// for (int i =0; i < 4; i ++) {
// if (length < strlen(c7[i])) {//使用strlen計算字符串的長度
// length = strlen(c7[i]);
// }
// }
// printf("length = %lu\n",length);
// //輸出最長字符串
// for (int i = 0; i < 4; i ++) {
// if (length == strlen(c7[i])) {
// printf("%s\n",c7[i]);
// }
// unsigned long length = 0;//記錄最大長度
// for (int i =0; i < 4; i ++) {
// if (length < strlen(c7[i])) {//使用strlen計算字符串的長度
// length = strlen(c7[i]);
// }
// }
// printf("length = %lu\n",length);
// //輸出最長字符串
// for (int i = 0; i < 4; i ++) {
// if (length == strlen(c7[i])) {
// printf("%s\n",c7[i]);
// }
// }
//升序排列。。。。。
// for (int i = 0; i < 4 - 1; i ++) {
// for (int j = 0; j < 4 - 1 - i; j ++) {
// //前一個字符串大於後一個字符串時交換位置
// if (strcmp(c7[j],c7[j + 1]) > 0) {
// char temp[20]= {0};
// //使用字符串拷貝函數
// strcpy(temp, c7[j]);
// strcpy(c7[j], c7[j+1]);
// strcpy(c7[j+1], temp);
// for (int j = 0; j < 4 - 1 - i; j ++) {
// //前一個字符串大於後一個字符串時交換位置
// if (strcmp(c7[j],c7[j + 1]) > 0) {
// char temp[20]= {0};
// //使用字符串拷貝函數
// strcpy(temp, c7[j]);
// strcpy(c7[j], c7[j+1]);
// strcpy(c7[j+1], temp);
// }
// }
// }
// //輸出打印查看結果
// for (int i =0; i < 4; i ++) {
// printf("%s\n",c7[i]);
// }
// //輸出打印查看結果
// for (int i =0; i < 4; i ++) {
// printf("%s\n",c7[i]);
// }