#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
//声明一个二维数组
// 数据类型 + 数组名[第一维长度][第二维长度] = {值1,值2, ...};
//一般第一维 叫行 第二维叫列
//需求 声明一个 3行4列整型二维数组
int array[3][4] = {{1,6, 8, 23}, {5, 9,11, 25}, {3,7, 16, 28}};
//访问二维数组中的元素
printf("%d\n", array[1][2]);
// 二维数组赋值
array[1][3] =33;
//声明一个4行5列的一个整型二维数组并且随机赋值[20, 100]之间的数
//循环赋值
//遍历二维数组
int array1[4][5] = {0};
//外层循环控制行数
for (int i =0; i < 4; i++) {
//内层循环控制列数
for (int j =0; j < 5; j++) {
int ran = arc4random() % (100 -20 + 1) + 20;
array1[i][j] = ran;
//打印二维数组
printf("%d ", array1[i][j]);
}
printf("\n");
}
printf("\n");
// 1、先随机赋值[10, 50]的数,将一个3行6列二维数组的行和列交换,存储到另外一个数组中去
int arr[3][6] = {0};
int a[6][3] = {0};
for (int i =0; i < 3; i++) {
for (int j =0; j < 6; j++) {
int ran = arc4random() % (50 -10 + 1) + 10;
arr[i][j] = ran;
a[j][i] = arr[i][j];
}
}
for (int i =0; i < 6; i++) {
for (int j =0; j < 3; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
// 2、有一个3行4列的二维数组,要求编程找出最大元素,并输出所在的行和列。
//定义最小值注意给初值 最好给一个数组中的数
int max = 0 ,min = array[0][0];
int Maxrow = 0, Maxline =0;
int Minrow = 0, Minline =0;
for (int i =0; i < 3; i++) {
for (int j =0; j < 4; j++) {
if (array[i][j] > max) {
max = array[i][j];
Maxrow = i;
Maxline = j;
}
if (array[i][j] < min) {
min = array[i][j];
Minrow = i;
Minline = j;
}
}
}
printf("\nmax = %d 行:%d 列:%d", max, Maxrow, Maxline);
printf("\nmin = %d 行:%d 列:%d", min, Minrow, Minline);
// 字符串数组
char str1[] = {'i','p', 'h'};
char str2[] = "iph";
//这个字符串数组保存了3个字符串,且每个字符串20 个字符
//注意: 声明时第二维下标代表每个字符串的长度切记:不要越界
char str3[3][20] = {"wanglong","dajun", "ting"};
//取出字符串数组中 某一个字符串
//用一维下标取出整个字符串 从零开始
printf("\n%s", str3[0]);
//取出字符串数组中的单个字符
printf("\n%c",str3[1][2]);
// 赋值字符串
//字符串在进行赋值的时候 需要使用字符串拷贝
strcpy(str3[0],"dj");
// 1、创建一个字符串数组(内容是你周围一圈人的姓名),输出最⻓字符串的长度。
char name[4][20] = {"matingting", "dajun","zhangwen" ,"xuyang"};
int a1 = 0;
//定义一个最大长度
unsigned long int len = 0;
for (int i =0; i < 4; i++) {
if (strlen(name[i]) > len) {
len =strlen(name[i]);
a1 = i;
}
}
printf("\n最长字符串的长度为:%lu %s\n", len, name[a1]);
printf("\n");
// 2、创建一个字符串数组(内容是你周围一圈人的姓名),对字符串 (英⽂)从小到大排序。
// 声明字符串数组
char name1[4][20] = {"zhangfengtian", "yufan","huangshengzhon" ,"dujianhu"};
char temp1[100] = {0};
// 冒泡排序
for (int i =0; i < 3; i++) {
for (int j =0; j < 3 - i; j++) {
// 字符串比较大小
if (strcmp( name1[j], name1[j +1] ) > 0 ) {
// 字符串拷贝(交换两个字符串)
strcpy( temp1 , name1[j]);
strcpy( name1[j] , name1[j + 1]);
strcpy( name1[j + 1] , temp1);
}
}
}
for ( int i =0; i < 4; i++) {
printf("%s ", name1[i]);
}
//声明一个两层三行四列的整型数组
int a2[2][3][4] ={
{
{1,3, 7, 9}, {2, 4,6, 8}, {3,7, 4, 9}
},
{
{11,16, 14, 19}, {21, 26,15, 7}, {5,11, 24, 44}
}
};
printf("\n%d\n", a2[1][1][2]);
//赋值三维数组中的元素
a2[1][1][2] =33;
printf("\n%d\n", a2[1][1][2]);
// 需求: 声明一个三维数组 3层 5行 3列随机赋值[50 , 100]间的数
int a3[3][5][3] = {0};
// 最外层控制层数
for (int i =0; i < 3; i++) {
// 中间层控制行数
for (int j =0; j < 5; j++) {
// 最内层控制列数
for (int k =0; k < 3; k++) {
int ran = arc4random() % (100 -50 + 1) + 50;
a3[i][j][k] = ran;
printf("%d ", a3[i][j][k]);
}
printf("\n");
}
printf("\n");
}
//三维数组计算元素个数 下标相乘
//定义数组时 可以不给第一维的个数
// 1.初值不够一行时系统自动补齐一行 补0
// 2.初值刚刚够一行啥也不补
// 3.初值超过一行不足2行时自动补齐 补0
// 幼稚迷宫
char move = 'a';
char map[10][10] ={
{'*','*', '*', '*', '*', '*','*', '*', '*', '*',},
{'*','0', ' ', ' ', ' ', '*',' ', '*', ' ', ' ',},
{'*','*', ' ', '*', '*', '*',' ', '*', ' ', '*',},
{'*','*', ' ', ' ', ' ', ' ',' ', '*', ' ', '*',},
{'*','*', '*', ' ', '*', '*',' ', '*', ' ', '*',},
{'*',' ', '*', ' ', ' ', '*',' ', '*', ' ', '*',},
{'*',' ', '*', ' ', ' ', '*',' ', '*', ' ', '*',},
{'*',' ', '*', ' ', ' ', '*',' ', '*', ' ', '*',},
{'*',' ', ' ', ' ', ' ', '*',' ', ' ', ' ', '*',},
{'*','*', '*', '*', '*', '*','*', '*', '*', '*',},
};
char temp = 'a';
int i = 1, j =1;
// 如果出口位置不是'0',执行
while (map[1][9] !='0') {
for (int i =0; i < 10; i++) {
for (int j =0; j < 10 ; j++) {
printf("%c", map[i][j]);
}
printf("\n");
}
scanf("%c", &move);
// getchar(); // 取出缓冲区字符
if (move == 'w' && map[i -1][j] == ' ') { //0向上走一步,行数 -1 ,列数不变
temp = map[i][j];
map[i][j] = map[i -1][j];
map[i -1][j] = temp;
i--;
}elseif(move == 's' && map[i +1][j] == ' '){ //0向下走一步,行数 +1 ,列数不变
// temp = map[i][j];
// map[i][j] = map[i + 1][j];
// map[i + 1][j] = temp;
map[i][j] =' '; // 0的位置变为 ' '
map[i +1][j] = '0'; // ' '的位置变为 0
i++;
}elseif(move == 'a' && map[i][j -1] == ' '){ //0向左走一步,行数不变,列数 - 1
temp = map[i][j];
map[i][j] = map[i][j -1];
map[i][j -1] = temp;
j--;
}elseif(move == 'd' && map[i][j +1] == ' '){ //0向左走一步,行数不变,列数 + 1
temp = map[i][j];
map[i][j] = map[i][j +1];
map[i][j +1] = temp;
j++;
}
}
if(map[1][9] =='0'){
printf("你赢了!这么乱也能过");
}
return 0;
}