//
// main.m
// 1-19課程筆記
// 二維數組、字符串數組、多維數組
// 講師:小輝
// 筆者:王學文
// Created by lanouhn on 15/1/19.
// Copyright (c) 2015年 lanouhn. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
/*
//一維數組
int a[10] = {1, 2, 3, 4, 5};
//二維數組,比起一維數組,多了一個維度(多了一個元素下標)
int b[2][3] = {1, 2, 3, 4, 5, 6};
//二維數組的定義
//格式:
//數據類型 數組名[行數][列數] = {值1,值2,…};
// 二維數組的元素個數 = 行數 * 列數;
//定義的其他形式
//1.賦值的時候可以省略,默認值為0
int array1[2][3] = {1, 2, 3};
//2.行數可以省略,由賦值的元素個數 與 列數 決定;
int array2[][3] = {1, 2, 3, 4};
//列數是不能省略的
//int array3[2][] = {1, 2, 3, 4, 5}; //error
//int array4[][] = {1, 2, 3, 4}; //error
//二位數組的使用
//元素的獲取格式
//數組名[行數][列數]
//注:行數和列數從0開始
int array[3][2] = {1, 2, 3, 4, 5, 6};
//獲取元素
// array[0][0];
// array[0][1];
// array[1][0];
// array[1][1];
// array[2][0];
// array[2][1];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
printf("array[%d][%d] = %d\n", i, j, array[i][j]);
}
}
//給數組的某個元素賦值
//定義一個5行6列的數組,並隨機給每個數組賦值,取值范圍[55,88],並求出最大值和最小值所在的位置
//清理緩存command + shift + k;
int a[5][6] = {0};
int max = 0, min = 89;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 6; j++) {
a[i][j] = arc4random() % 34 + 55;
printf("a[%d][%d] = %d ", i, j, a[i][j]);
if (max < a[i][j]) {
max = a[i][j];
}
if (min > a[i][j]) {
min = a[i][j];
}
}
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 6; j++) {
if (max == a[i][j]) {
printf("\n最大值a[%d][%d] = %d\n", i, j, a[i][j]);
}
if (min == a[i][j]) {
printf("最小值a[%d][%d] = %d\n", i, j, a[i][j]);
}
}
}
int a[3][4] = {0};
int b[4][3] = {0};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
a[i][j] = arc4random() % 11 + 50;
printf("a[%d][%d] = %d ", i, j, a[i][j]);
} printf("\n");
}
printf("交換后:\n");
for (int j = 0; j < 4; j++) {
for (int i = 0; i < 3; i++) {
b[j][i] = a[i][j];
printf("b[%d][%d] = %d ", j, i, b[j][i]);
}printf("\n");
}
//字符數組;數組內容存放的元素是字符(char)
//字符串數組:數組內存放的元素是字符串
//字符數組,又叫字符串
//字符串數組:數組內存放的元素是字符數組,數組套數組,所以字符串數組是一個二維的數組
//字符數組
char string1[6] = {'a', 'p', 'p', 'l', 'e', '\0'};
//字符串
char string2[6] = "apple";
//字符串數組
char string3[3][7] = {"apple", "xiaomi", "nokia"};
//輸出字符串數組
printf("%s\n", string1);
//1.字符輸出
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 7 && string3[i][j] != '\0'; j++) {
printf("%c", string3[i][j]);
}printf("\n");
}
printf("%s\n", string2);
for (int i = 0; i < 3; i++) {
printf("%s\n",string3[i]);
}
//創建一個數組,用於存放周圍同學的姓名,並求出誰的名字最長。
char a[4][20] = {"weizijian", "wanhao", "yaochengzheng", "wangxuewen"};
unsigned long max = 0;
for (int i = 0; i < 4;i++) {
if (max < strlen(a[i])) {
max = strlen(a[i]);
}
}
for (int i = 0; i < 4; i++) {
if (max == strlen(a[i])) {
printf("姓名最長的時:%s\n", a[i]);
}
}
//輸入字符串
char c = 0;
scanf("%c", &c);
//輸入字符串
char m[10] = {0};
scanf("%s", m); //不需要加&,
//輸入字符串數組
char k[3][10] = {0};
for (int i = 0; i < 3; i++) {
scanf("%s", k[i]);
}
scanf("%s %s %s", k[0], k[1], k[2]);
//對周圍的學生姓名,進行排序
char name[][20] = {"wanhao", "weizijian", "wangxuewen", "yaochengzheng"};
for (int i = 0; i < 4 - 1; i++) {
for (int j = 0; j < 4- 1 - i; j++) {
if (strcmp(name[i], name[i+1]) > 0) {
char a[20] = {0};
strcpy(a, name[i]);
strcpy(name[i], name[i + 1]);
strcpy(name[i + 1], a);
}
}
}
//輸出結果
for (int i = 0; i < 4; i++) {
printf("%s\n", name[i]);
}
//冒泡排序
int array[5] = {12, 33, 22,1, 20};
for (int i = 0;i < 5 - 1; i++) {
for (int j = 0; j < 5 - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
for (int i = 0; i < 5; i++) {
printf("%d\n", array[i]);
}
*/
//1、(**)有一個 3 行 4 列的二維數組,要求編程找出最大的元素,並輸出所 在的行和列。
// int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 5, 4, 8, 3};
// 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];
// }
// }
// }
// for (int i = 0; i < 3; i++) {
// for (int j = 0; j < 4; j++) {
// if (max == a[i][j]) {
// printf("最大值在%d行%d列\n", i + 1, j+ 1);
// }
// }
// }
//2、(**)輸入 6 個字符串,並對它們按從小到大的順序排序后輸出。
// char a[6][20] = {0};
// printf("請輸入6個字符串:");
// for (int i = 0; i < 6; i++) {
// scanf("%s", a[i]);
// }
// for (int i = 0; i < 6 - 1; i++) {
// for (int j = 0; j < 6 - 1 - i; j++) {
// if (strcmp(a[j], a[j + 1])) {
// char b[20] = {0};
// strcpy(b, a[j]);
// strcpy(a[j], a[j + 1]);
// strcpy(a[j + 1], b);
// }
// }
// }
// for (int i = 0; i < 6; i++) {
// printf("%s\n", a[i]);
// }
//3、(**)隨機生成一個三維數組,編程求深度的平均值,保存在一個二維數組 中(相當於一個魔方從上面看)。
// int a[4][5][6] = {0};
// float b[4][5] = {0};
//
// for (int i = 0; i < 4; i++) {
// for (int j = 0; j < 5; j++) {
// for (int k = 0; k < 6; k++) {
// a[i][j][k] = arc4random() % 20;
// printf("a[%d][%d][%d] = %3d ", i, j, k, a[i][j][k]);
// }printf("\n");
// }
// }
// for (int j = 0; j < 5; j++) {
// for (int k = 0; k < 6; k++) {
// float sum = 0.0;
// for (int i = 0; i < 4; i++) {
// sum = sum + a[i][j][k];
// b[j][k] = sum;
// }
// printf("b[%d][%d] = %5.2f ", j, k, b[j][k] / 4);
// }printf("\n");
// }
return 0;
}