小小君的C语言第五课

#import <Foundation/Foundation.h>


int main(int argc,const char * argv[]) {

    

    

    //声明一个二维数组

    // 数据类型 + 数组名[第一维长度][第二维长度] = {1,2, ...};

    //一般第一维 叫行 第二维叫列

    

    //需求 声明一个 34列整型二维数组

    

   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;

    

    

    //声明一个45列的一个整型二维数组并且随机赋值[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]的数,将一个36列二维数组的行和列交换,存储到另外一个数组中去

   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、有一个34列的二维数组,要求编程找出最大元素,并输出所在的行和列。


    //定义最小值注意给初值 最好给一个数组中的数

   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;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值