2015.08.17多维数组和字符串的访问

简介: 1、多维数组:每多一个维度,就会出现一个更大的容器去装裹之前的维度注意:有几维就由几个for进行嵌套循环,通常使用一维和二维较多定义二维数组的步骤:类型修饰符 数组名[常量表达式1][常量表达式2] ={初始值};2、 不管是几维数组,数组都是不能直接拿来运算,访问二维数组元...
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 ++) {
//        for (int j = 0; j < 5; j ++) {         
//            //随机赋值
//            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);
//        //打印每一行的累加结果和每一行的平均值
//       
//        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]);
//            //根据条件找出最大值
//            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);
//            }
//        }
//    }
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;
//            //打印结果
//            printf("%d\t",a[i][j]);            
//        }
//        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;
//        }

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;
//            //打印结果
//            printf("%d\t",a[i][j]);             
//        }
//        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;
//        }

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[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");
//    }
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);
//            }         
//        }
//    }
//    //输出打印查看结果
//    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]);
//        }
//    }
     //升序排列。。。。。
//    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]);
//    }

目录
相关文章
|
机器学习/深度学习 算法 BI
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
869 150
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1613 8
|
6天前
|
人工智能 前端开发 文件存储
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择
星哥带你玩转飞牛NAS,部署开源笔记TriliumNext!支持树状知识库、多端同步、AI摘要与代码高亮,数据自主可控,打造个人“第二大脑”。高效玩家的新选择,轻松搭建专属知识管理体系。
361 152
|
7天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
576 152
|
9天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
541 13
|
2天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话