ioS开发之c语言基础-多维数组,字符串

//

//  main.m

//  C5-多维数组,字符串数组

//

//  Created by dllo on 15/10/11.

//  Copyright (c) 2015 dllo. All rights reserved.

//


#import <Foundation/Foundation.h>


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

//    int a[3]= {4,5,6};

//    printf("%d",1[a + 1]);

    

    //数组a[],这种形式只是为了更好的让人理解,实际上在计算机中只是知道一个数组的首地址,再进行位移操作

    

    

    // 定义一个二维数组

    // int arr[第一维度][第二维度] = 初值   行话中不说几行几列,第一维度也可以表示列,并不确定

    

  //  int arr[2][3] = {1,2,3,4,5,6};

    

    

    //只能第一维度不写,注意,系统会根据初值个数确定数组大小!!第二维度不可以不写

 //   int b[][3] = {1,2,3,4};

    

    

    //访问二维数组数组中的元素

//    int arr[][3] = {0};

   // printf("%d ",arr[1][1]);

    

    //遍历二维数组

//    for(int i = 0;i < 2;i++){

//        for (int j = 0; j < 3; j++) {

//            arr[i][j] = arc4random() % (70 - 30 + 1) + 30;

//            printf("%d  ",arr[i][j]);

//        }

//    }

    // 一个1020 列的二位数组,为每一个数组的元素附一个随机数,编程找出 与第一个元素相等的元素个数

//    int a[10][20] = {0};

//    int count = -1;

//    for (int i = 0; i < 10; i++) {

//        for (int j = 0; j < 20; j++) {

            //遍历赋值

//            a[i][j] = arc4random() % (70 - 20 + 1) + 20;

//            printf("%d ", a[i][j]);

//            

            //若等于第一个元素,计数加1

            //注意第一次比较的时候a[0][0] = a[0][0]成立,count成立,所以count初值为-1

//            if(a[i][j] == a[0][0]){

//                count++;

//            }

//             

//            }

//        printf(" ");

//        }

//    

//    

//        printf("%d", count);

    //1将一个二维数组的行和列交换,储存到另外的一个数组中

    

//    int  a[2][3] = {1, 2, 3, 4, 5, 6};

//    int  b[3][2] = {0};

//    for (int i = 0; i < 2; i++) {

//        for (int j = 0; j < 3; j++) {

             //交换

            //23列交换后的数组为32

//            b[j][i] = a[i][j];

//        }

//    }

    //输出打印交换后的数组

//    for (int i = 0; i < 3; i++) {

//        for (int j = 0; j < 2; j++) {

//            printf("%d ", b[i][j]);

//        }

//    }



    //2有一个34列的二维数组要求编程找出最大元素,并输出所在行列

//    

//    int a[3][4] = {0};

//    int max = 0;

//    int arr = 0;

//    int b = 0;

    //输出随机数组

//    for (int i = 0; i < 3; i++) {

//        for (int j = 0; j < 4; j++) {

//            a[i][j] = arc4random() % (70 - 20 + 1) + 20;

//            printf("%d ", a[i][j]);

//        }

//        printf(" ");

//    }

    //找到最大值

//    for (int i = 0; i < 3; i++) {

//        for (int j = 0; j < 4; j++) {

//  

//            if(a[i][j] > max){

//                max = a[i][j];

//                             }

//                }

//    }

    //输出最大值,和相等的最大值!!注意随机产生的数的最大值有可能相等

//    for (int i = 0; i < 3; i++) {

//        for (int j = 0; j < 4; j++) {

//

//    if(max == a[i][j]){

//        max = a[i][j];

//        arr = i + 1;

//        b = j + 1;

//        printf(":%d:%d最大值:%d", arr, b, max);

//        printf(" ");

//        

//    }

//        }

//      

//   

//    

//    }

//    int arr[2][3][4] = {0};

//    for (int i = 0; i < 2; i++) {

//        for (int j = 0; j < 3; j++) {

//            for (int k= 0; k < 4; k++) {

//                arr[i][j][k] =arc4random() % (70 - 12 + 1) + 12;

//                printf("%d ", arr[i][j][k]);

//            }

//            printf(" ");

//        }

//        printf(" ");

//        

//    }

    

    

    

    //字符串数组

    //字符串数组也是二维数组,只不过每行都用''结尾,而且不一定满所在行

 //   char str[3][7] = {"aaa", "bbbb", "cccccc"};

    //打印一个字符串

 //   printf("%s ", str[1]);

    //打印一个元素

  //  printf("%c ", str[1][0]);

    

    

    //创建一个字符串数组,输出最长字符串的长度,,strlen(a)求得是王琼的长度,因为数组的首地址就是a[0]的首地址.他们的首地址是重合的

//    

    char a[3][20] = {"wangqiong", "lijinmingss", "yuhao"};

    long   len = 0;

    long   maxlen = 0;

    for (int i = 0; i < 3; i++) {

        for (int j = 0;a[i][j] != ''; j++) {

            len++;//计数加1

            

        }

        //比较暂存的最大值

        if (len > maxlen) {

            maxlen = len;

            len = 0;

          

        }

        printf(" ");

    }

    printf("%ld",maxlen);

//    char a[3][20] = {"wangqiongjhgjhhj", "lijinming", "yuhao"};

//    long   len = 0;

//    long   maxlen = 0;

//    for (int i = 0; i < 3; i++) {

//        len = strlen(a[i]);

//        

//        //比较暂存的最大值

//        if (len > maxlen) {

//           maxlen = len;

//           

//        }

//}

//    // 输出最长的字符串

//    for (int i = 0; i < 3; i++) {

//        if (strlen(a[i]) == maxlen) {

//            printf("%s",a[i]);

//        }

//    }

//    printf("%ld",maxlen);

    // 上面的代码可以看成时strlen的具体实现

}


    


    //创建一个字符串,对字符串的内容从大到小排序

//    char a[3][20] = {"yuhao", "lijinming", "wangqiong"};

//    for (int i = 0; i < 3 - 1; i++) {

//        for (int j = 0; j < 3 - i - 1; j++){

//     

//        if(strcmp(a[j], a[j + 1]) < 0){

//          //  交换

//          //  注意b数组元素个数应该参考谁

//         //   注意,数组不可以整体赋值,应该用strcpy代替

//            char b[20] = {0};

//            strcpy(b, a[j]);

//            strcpy(a[j], a[j + 1]);

//            strcpy(a[j + 1], b);

//            

//           

//        }

//        

//              }

//       

//        

//}

//    for (int i = 0; i < 3; i++){

//

//        printf("%s ",a[i]);

//

//    

//    }

//}

    //输入6个字符串,并对它们按从小到大的顺序排序后输出。

//    

//        char strings[][20] = {"wangziyu", "duhaoran", "haoyun", "niuzhiquan", "yangguo", "xiaolongnv", "linghuchog", "guojing", "xiaofeng", "guomeimei", "zhoubotong", "cuiyayun"};

//        int size = sizeof(strings)/sizeof(strings[0]);

//        unsigned long maxlenth = strlen(strings[0]);

//        unsigned long  minlenth = strlen(strings[0]);

//        for (int i = 0; i < size; i++) {

//            maxlenth = maxlenth > strlen(strings[i]) ? maxlenth : strlen(strings[i]);

//            minlenth = minlenth < strlen(strings[i]) ? minlenth: strlen(strings[i]);

//            printf("%s ", strings[i]);

//        }

//    

//    

//        for (int i = 0; i < size; i++){

//            //求最长的字符串 并输出其长度

//            if (maxlenth == strlen(strings[i])) {

//                printf("%s  %lu ", strings[i], maxlenth);

//            }

//            //求最短的字符串 并输出其长度

//            if (minlenth == strlen(strings[i])) {

//                printf("%s  %lu ", strings[i], minlenth);

//            }

//        }

//        for (int i = 0; i < size-1; i++) {

//            for (int j = 0; j < size - i - 1; j++) {

//                //比较字符串的大小 如果前面的字符串大 则交换位置

//                if (strcmp(strings[j], strings[j+1]) > 0) {

//                    char temp[20] = {0};

//                    strcpy(temp, strings[j]);

//                    strcpy(strings[j], strings[j+1]);

//                    strcpy(strings[j+1], temp);

//                }

//            }

//        }

//        

//        for (int i = 0; i < size; i++){

//            printf("%s ", strings[i]);

//        }

   //  4、(**)随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组中(相当于一个模仿从上面看)。

    

  //  float arr[3][4][5] = {0};

    //    float sum = 0;

    //    for (int i = 0; i < 3; i++) {

    //        for (int j = 0; j < 4; j++) {

    //            sum = 0;

    //            for (int k = 0; k < 5; k++) {

    //                arr[i][j][k] = arc4random()%99 + 1;

    //                printf("%6.2f ", arr[i][j][k]);

    //                //把深度的值累加

    //                sum += arr[i][j][k];

    //            }

    //            //保存深度平均值

    //            //arr[i][j][0] = sum/5;

    //            printf(" = %6.2f", sum/5);

    //            printf(" ");

    //        }

    //        printf(" ");

    //    }

    //    printf("深度平均值: ");

    //    for (int i = 0; i < 3; i++) {

    //        for (int j = 0; j < 4; j++) {

    //            printf("%6.2f", arr[i][j][0]);

    //        }

    //        printf(" ");

    //    }


     // 3、(****)找出一个二维数组中的鞍点,即该位置上的元素在该行中最大,在该列中最小(也可能没有鞍点”),打印有关信息。(提示:注意特殊情况:没鞍点或多个鞍点)

    

    

    //    int arr[N][M] = {0};

    //    for (int i = 0; i < N; i++) {

    //        for (int j = 0; j < M; j++) {

    //            arr[i][j] = arc4random()%99 + 1;

    //            printf("%-2d ", arr[i][j]);

    //        }

    //        printf(" ");

    //    }

    //    BOOL flag = 1;

    //    int count = 0;

    //    for (int i = 0; i < N; i++) {

    //        for (int j = 0; j < M; j++) {

    //            //把数组当前的数和整行比较,如果不是最大值跳出当前循环,并把标记置为0

    //            for (int k = 0; k < M; k++) {

    //                if (arr[i][j] < arr[i][k]){

    //                    flag = 0;

    //                    break;

    //                }

    //            }

    //

    //            if (flag) {

    //                //把数组当前的数和整列进行比较,如果不是最小的跳出当前循环,并把标记置为0

    //                for (int x = 0; x < N; x++) {

    //                    if (arr[i][j] > arr[x][j]) {

    //                        flag = 0;

    //                        break;

    //                    }

    //                }

    //            }

    //

    //            //如果标记不为零,说明数组当前数据为行最大值,列最小值.是鞍点 打印出来

    //             

    //            flag = 1;

    //        }

    //    }

    //    if (count == 0) {

    //        printf("没有鞍点!!");

    //    }

//    

//    int a[3][5] = {0};

//    for (int i = 0; i < 3 ; i++) {

//        for (int j = 0; j < 5; j++) {

//            a[i][j] = arc4random() % (99 - 1 + 1) + 1;

//            printf("%-2d ",a[i][j]);

//        }

//        printf(" ");

//    }

//    BOOL flag = 1;

//    int count = 0;

//    for (int i = 0; i < 3; i++) {

//        for (int j = 0; j < 5; j++) {

//            //将数组当前值和整行数做比较,如果不是最大值就跳出循环,并把标记置为0

//            for (int k = 1 ; k < 5; k++) {

//                if (a[i][j] < a[i][k]) {

//                    flag = 0;

//                    break;

//                }

//            }

//            if (flag) {

//                //把数组当前的值和整列作比较,如果不是最小值就跳出循环,并把标记置为0

//                for(int x = 1; x < 3; x++){

//                    if (a[i][j] > a[x][j]) {

//                        flag = 0;

//                        break;

//                    }

//                }

//            }

//            //如果标记不为0 表明当前值为行最大值,列最小值,是鞍点,打印出来

//            if (flag) {

//                printf("a[%d][%d] = %d是鞍点  ",i,j,a[i][j]);

//                count++;

//            }

//            flag = 1;

//        }

//        

//    }

//    

//    if (count == 0) {

//        printf("没有鞍点");

//    }

//    

//

//    int a[4][5][6] = {0};

//    int sum =0;

//    int b = 0;

//    int c[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() % (90 - 20 + 1) +20;

//                printf("%d",a[i][j][k]);

//                sum += a[i][j][k];

//                

//            }

//             b = sum / 6;

//            c[i][j] =b;

//        }

//    }

//    for (int i =0; i < 4; i++) {

//        for (int j = 0; j < 5; j++) {

//            printf("%d ", c[i][j]);

//        }

//        printf(" ");

//    }

//  

    

    


//    自己实现strcpy的功能.

  /*  1、(**)有一个34列的二维数组,要求编程找出最大的元素,并输出所在的行和列。

   

   int  a[3][4] = {0};

   int max = 0;

   for (int i = 0; i < 3; i++) {

   for(int j = 0; j < 4 ; j++){

   a[i][j] = arc4random() % (50 - 20 + 1) + 20;

   printf("%d ",a[i][j]);

   

   if(a[i][j] > max){

   max = a[i][j];

   }

   

   }

   printf(" ");

   }

   for (int i = 0 ; i < 3 ; i++) {

   for (int  j = 0; j < 4; j++) {

   if (a[i][j] == max) {

   int b = i + 1;

   int c = j + 1;

   printf("最大值:%d所在行:%d所在列:%d ",max,b,c);

   }

   }

   }

   

    2、(**)输入6个字符串,并对它们按从小到大的顺序排序后输出。

    3、(****)找出一个二维数组中的鞍点,即该位置上的元素在该行中最大,在该列中最小(也可能没有鞍点”),打印有关信息。(提示:注意特殊情况:没鞍点或多个鞍点)

    4、(**)随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组中(相当于一个模仿从上面看)。

   float arr[3][4][5] = {0};

   //    float sum = 0;

   //    for (int i = 0; i < 3; i++) {

   //        for (int j = 0; j < 4; j++) {

   //            sum = 0;

   //            for (int k = 0; k < 5; k++) {

   //                arr[i][j][k] = arc4random()%99 + 1;

   //                printf("%6.2f ", arr[i][j][k]);

   //                //把深度的值累加

   //                sum += arr[i][j][k];

   //            }

   //            //保存深度平均值

   //            //arr[i][j][0] = sum/5;

   //            printf(" = %6.2f", sum/5);

   //            printf(" ");

   //        }

   //        printf(" ");

   //    }

   //    printf("深度平均值: ");

   //    for (int i = 0; i < 3; i++) {

   //        for (int j = 0; j < 4; j++) {

   //            printf("%6.2f", arr[i][j][0]);

   //        }

   //        printf(" ");

   //    }

   //

    

    */

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    


原文地址:https://www.cnblogs.com/yuhaojishuboke/p/5043138.html