精华内容
下载资源
问答
  • 目录基本知识框架课堂笔记 基本知识框架 课堂笔记 在创建数组时,数组的方括号[ ]中不能填入变量,只能使用常量...二位数组可以看作是多个一维数组的连续存储,这个一维数组的数组名为二维数组名+行数,例如arr[1][ ]

    基本知识框架

    在这里插入图片描述

    课堂笔记

    • 关于数组
      • 在创建数组时,数组的方括号[ ]中不能填入变量,只能使用常量或者省略不填
      • 注意在创建字符数组时,下面两种不同的定义方式得到的结果不同,arr2多出一个/0在字符串的末尾
        • char arr1[ ] = {‘a’,‘b’,‘c’};
        • char arr2[ ] = “abc”;
      • 数组的下标从零开始,数组的大小可以通过计算得到
      • 二位数组的行数可以省略
      • 二位数组可以看作是多个一维数组的连续存储,这个一维数组的数组名为二维数组名+行数,例如arr[1][ ]
      • 数组名不作为数组第一个元素首地址的两种特例情况
        • sizeof(数组名):此时的数组名实际上是指整个数组的大小
        • &数组名:表示整个数组的地址,他和数组元素首地址在数值上一样,但是含义不同

    课后练习

    冒泡算法

    题目要求:通过冒泡算法,将一个无序数组变成有序数组(由小到大)

    #include <stdio.h>
    
    void bubble_sort(int arr[], int size)
    {
    	int i = 0;
    	int j = 0;
    	int tmp = 0;
    	
    	for(i=size-1; i>0; i--)//确定要进行冒泡排序的次数,9次
    	{
    		int flag = 1;//优化标志,判断冒泡排序是否完成
    		for(j=0; j<i; j++)//冒泡排序算法
    		{
    			if(arr[j] > arr[j+1])
    			{
    				tmp = arr[j+1];
    				arr[j+1] = arr[j];
    				arr[j] = tmp;
    				flag =0;
    			}
    		}
    		if(flag == 1)//flag标志是1,说明不需要进行冒泡排序
    			break;
    	}
    }
    
    int main()
    {
    	int arr[10] = {10,9,8,7,6,5,4,3,2,1};//定义需要处理的数组
    	int size = sizeof(arr)/sizeof(int);//数组元素个数
    	int i = 0;
    
    	bubble_sort(arr,size);//冒泡排序函数
    	for(i=0; i<10; i++)
    	{
    		printf("arr[%d] = %d\n",i,arr[i]);
    	}
    	
    	return 0;
    }
    

    基本知识框架Xmind资源下载

    链接: 资源下载

    展开全文
  • 二维数组

    2017-08-13 12:04:18
    一、二维数组 1、行优先:把每一行看作一个一维数组,而不是每一列 2、可以省略一维 3、[ ]:使用时表示下标,定义时表示长度 4、二维数组不是二级指针,一维数组是一级指针 5、数组名是数组首元素的地址,前提:必须...

    一、二维数组

    1、行优先:把每一行看作一个一维数组,而不是每一列

    2、可以省略一维

    3、[ ]:使用时表示下标,定义时表示长度

    4、二维数组不是二级指针,一维数组是一级指针

    5、数组名是数组首元素的地址,前提:必须有首元素(只适用于一维数组)

    6、将多维数组看作一维数组,第一行就是首元素

           
           
           

    (1)对于第一行:int(*p)[4]:指向数组的指针,即数组指针

    (2)int *p[4]:保存指针的数组,即指针数组

    (3)int (*arr)[4]:一级指针指向一个4列的一维数组的指针

    7、只要是数组名作形参,sizeof(arr) = 4Bytes

    (如果是64bits的平台,就是8Bytes)

    二、代码

    //void Show(int arr[10],int len);Show(int *arr,int len)
    //void Show(int **arr,int row,int col)//error 
    //void Show(int arr[3][4],int row,int col)//ok
    void Show(int (*arr)[4],int row,int col)
    {
    	for(int i=0;i<row;i++)
    	{
    		for(int j=0;j<col;j++)
    		{
    			printf("%d ",arr[i][j]);
    		}
    		printf("\n");
    	}
    }
    
    //数组作为形参,一定退化成指针,大小为4字节(如果是64位平台8字节)
    //void Fun(int arr[10])//4
    //void Fun(int arr[3][4])//4
    void Fun(int arr[2][3][4])
    {
    	printf("%d\n",sizeof(arr));
    
    }
    
    int main()
    {
    	int a = 10;
    	int arr[10] = {1,2,3,4,5,6,7,8,9};
    	int brr[3][4];
    	int crr[3][4] = {{1,2,3,4},{5,6,7},{9,10}};
    	int drr[3][4] = {1,2,3,4,5,6,7,8,9};
    	int err[][4] = {1,2,3,4,5,6,7,8,9,10};//ok
    	//int frr[3][] = {1,2,3,4,5,6,7,8,9,10};//error
    	//打印err的值
    	Show(err,3,4);
    	//for(int i=0;i<3;i++)//
    	//{
    	//	for(int j=0;j<4;j++)
    	//	{
    	//		printf("%d ",err[i][j]);
    	//	}
    	//	printf("\n");
    	//}
    
    	//Fun(err);
    	int hrr[2][3][4];
    	Fun(hrr);
    
    	return 0;
    }

    展开全文
  • 大家好,上节介绍了在使用数组之前如何...以常用的二维数组为例,声明一个3*4的二维数组arr1,数据类型为字符串型。dim arr1(2,3) as string声明数组时省略下标,默认从0开始,所以第一维是0至2,第二维是0至3。数...

    d619f48d54a9cd30e2135086aa88e1e3.gif

    大家好,上节介绍了在使用数组之前如何声明数组,本节就来介绍静态数组如何赋值。(动态数组会单独一节讲解)

    e991012f509e3783a0bedd035a79f3fd.png 上 节 复 习 fcf59bec09f18504d21bc532055db804.png

    在介绍数组赋值之前,首先简单复习下上节介绍的声明数组和数组中元素的表示方法。

    以常用的二维数组为例,声明一个3*4的二维数组arr1,数据类型为字符串型。

    dim arr1(2,3) as string

    声明数组时省略下标,默认从0开始,所以第一维是0至2,第二维是0至3。

    数组中每个元素的的表示方法为数组名(第一维索引号,第二维索引号),例如arr1(0,0)、arr1(0,)、arr1(2,3)等,每个元素的坐标可以如下图所示。b9ff5226162fa30d09002e82ae8b253e.pnge08a5e72e7243ef4b238457211bc9caa.png

    还可以将数组该数组声明为dim arr1(1 to 3,1 to 4) as string。

    其中第一维索引号为从1至3,第二维维从1至4。数组中每个元素也是数组名(第一维索引号,第二维索引号),例如arr1(1,1)、arr1(3,4)等,其他坐标如下图所示。b9ff5226162fa30d09002e82ae8b253e.png918bc8e748c4b0c3890609bdc59eea84.png

    两种表示方法,第二种方法即下界从1开始更实用。因为这样数组中元素的坐标,与单元格对象的cells属性坐标一致。数组元素位置就可以和工作表中对应起来。

    e991012f509e3783a0bedd035a79f3fd.png数 组 赋 值 fcf59bec09f18504d21bc532055db804.png

    在前面的编写sub程序过程中,在声明变量之后都要给变量赋值。

    同样在声明数组后,对数组赋值,VBA程序才能通过数组访问数据。在给数组赋值时,和变量赋值一样,要分别给数组里的每个元素进行赋值。

    下面以静态数组为例,声明了数组的维度,以及每个维度的下界和上界,数组容纳固定量的元素,给数组赋值主要有下面几种方式。

    1、每个元素进行赋值

    数组赋值时,需要给数组中每个元素进行赋值。这种方式比较简单

    下面通过举例演示,如声明一个5个元素的integer类型的数组,将1到5的自然数保存到数组中。具体演示如下:

    b55bff8d04404103cc5cc0b54b25b5ef.gif

    示例中声明了Arr(4) 的5个元素的大小的integer类型数组。赋值时将它每一个元素,从Arr(0)=1开始一直到Arr(4)=5,运行就完成了赋值。

    再举个简单的例子,声明一个4个元素的integer类型的数组,将A1:A4单元格区域中的数值赋值给数组。

    b9ff5226162fa30d09002e82ae8b253e.pngd397c758453ac9330c840e62d3d61ff9.gif

    A列的单元格填入整数,声明了Arr(1 to 4)为4个元素的integer数组,然后依次将每个单元格的值赋值给数组中的元素从Arr(1) 到Arr(4)。最后再立即窗口中显示Arr(3)的值为3。

    这种方法主要是帮助理解数组元素如何赋值,在VBA程序中通常涉及大量数据的赋值。就需要用其他更方便的方法代替。

    2、通过循环结构赋值

    对于批量处理数据时,通常都会借助于循环结构。同样在数组的批量赋值时,同样也可以借助于循环结构。比如上面两个小示例,都可以用循环结构改造。以第二个为例。

    b9ff5226162fa30d09002e82ae8b253e.pngcca2e1ac87945cc4a74886446460a8fe.png

    通过for循环结构变量i从1到4进行循环,将数组中的每个元素进行赋值。对于大量数据更加实用。

    下面用二维数据举例,前面提到如果数组维度的下界均为从1开始,那么数组中元素的坐标,与单元格对象的cells属性相对应。

    如表格中A1:D4区域共3行4列的有多种类型的数据,将它们赋值到数组中。需要先声明一个3*4的二维数组变体型数组(由于有不同类型的值,所以默认的变体型Variant类型)。将元素单独赋值是很大的工作量,下面就通过循环嵌套来将表格中的值赋值给数组。

    b9ff5226162fa30d09002e82ae8b253e.pngf94597521df571d5f1df2d0dc2446087.gif

    代码中首先声明了3*4大小的二维数组,为默认的变体型数据类型。维度的下界均从1开始。

    下面就是两个for循环嵌套。整形变量i从1循环至3,变量j从1循环至4,两个循环嵌套中,执行 Arr(i, j) = Cells(i, j)语句将cells(i,j)元素的值赋值给数组中的元素Arr(i,j)。

    执行代码后在立即窗口中显示数组Arr(2,3)的值为“姓名” Arr(3,1)的值为“小白”。

    这种通过循环语句给数组赋值的方法很经典,掌握后对数组和循环结构都会有很好的理解。而二维数组下界从1开始时与单元格cells属性是对应关系。

    3、通过Range对象创建数组

    上面介绍了通过循环结构给数组赋值后,上面提到二维数组下界从1开始时与单元格cells属性是对应关系。实际不通过循环嵌套结构也可以直接赋值。

    如果想把一个单元格区域的值,直接存储到数组里,可以直接把单元格区域的值赋值给变量名。如下图所示:

    b9ff5226162fa30d09002e82ae8b253e.png5111ba5a1c094a568b066f10174ab26f.gif

    代码中首先不是声明数组,而是声明了一个默认的变体型变量。

    而Arr = Range("a1:d4").Value该语句就讲A1:D4单元格的值赋值给了Arr这个数组中.(由变体型变量变成数组。)

    通过这种方式得到的数组,维度的下届都是1。即得到的这个数组其实就是Arr(1 to 3,1 to 4)

    所以执行代码后在立即窗口中显示仍是数组Arr(2,3)的值为“姓名” Arr(3,1)的值为“小白”。

    这种方法实际是直接创建数组的方法,这里归到数组赋值一并介绍。注意两个关键点。

    1、声明的默认的变体型变量。

    2、通过这种方式得到的数组,维度的下届都是1。


    41ea45a9e18de2deaf82905071d86091.gif

    今天下雨

    本节主要是介绍了数组的赋值的内容,特别是循环结构赋值、二维数组和单元格对象cells属性的对应、单元格range对象创建新数组等内容。后续在介绍动态数组、数组相关函数时都会再涉及和复习。

    希望本文对你有帮助,有问题可以给在下方留言,祝大家学快乐。

    展开全文
  • 二维数组,字符串数组

    千次阅读 2014-08-14 14:43:47
    二维数组定义时,第一维下标可以省略(行数可以省略),但是第二维下标必须制定,(列数必须要给,列数时换行的一个标准) int a[][3] = {1,2,3,4,5,6, 7}; 并且,第一维下标和第二位下标都必须是常量或常量表达式...
    二维数组:
    二维数组定义时,第一维下标可以省略(行数可以省略),但是第二维下标必须制定,(列数必须要给,列数时换行的一个标准)
        int a[][3] = {1,2,3,4,5,6, 7};
        并且,第一维下标和第二位下标都必须是常量或常量表达式
    //外层循环用来控制行数,内层循环用来控制列数
    //    for (int i = 0; i < 4; i ++) {
    //        for (int j = 0; j < 5; j ++) {
    //            a[i][j] = j + 1 +5 * i;
    //            printf("%-2d ", a[i][j]);//  -2表示左对齐,如果是三位数的话,把-2改为-3,右对齐用2
    //        }
    //        printf("\n");
    
    字符串数组
    char str1[10] = "frank";//  10表示字符串所占的空间,而不是字符串的长度,字符串的最长长度为9,后边还有一个  \0
    
    每个字符串长度不可超过第二维列数减1
      char str[3][10] = {"Frank", "iPhone", "Duck"};
        printf("%s", str[1]);// 取出来第二个字符串
    
        printf("%s", str1); scanf("%s%s%s", str[0], str[1], str[1]);//    在字符串数组中不需要对一个字符串取地址
    
      printf("%lu", maxLength);//%lu是表示字符串对有效长度,在对字符串取长度的时候,用%lu,而不是用%d和%c
    
     //  输入10个人的名字,按姓名从小到大排序
        //  排序采用冒泡排序,从小到大,升序
    
       char tempStr[12] = {0};//存储临时字符串
      // 数组名代表数组的首地址,是一个常量地址,不可修改
       char str[10][12] = {"cuichengjie","sunxiaomeng", "yezhen","qukunfeng", "ljbjbjk.l", "hucgjd", "vsbhj", "rquavdhb", "dvgfhnfg", "staybdgdg"};
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9 - i; j ++) {
                if (strcmp(str[j], str[j + 1]) > 0) {//strcmp 表示字符串比较,  在比较到时候先比较第一个字母,如果相同才比较第二个,不然不往后边进行,只比较第一个字母
                  //  对字符串进行交换操作时,要使用strcpy函数,
                    strcpy(tempStr, str[j]);//将str[j]字符串中的内容拷贝到临时字符数组tempstr中。
                    strcpy(str[j], str[j + 1]);
                    strcpy(str[j + 1], tempStr);
                }
            }
        }
        printf("\n");
        for (int i = 0; i < 10; i ++) {
            printf("%s  ", str[i]);
        }

    展开全文
  • C语言基础:二维数组

    2015-06-10 21:42:24
    二维数组位数组类似. 定义: 数据类型 数组名[行][列]={{ },{ }....}; 定义时,维(行)的长度可以省略,但是二维(列)的长度不可以省略.但是访问时,一定使用双下标. 二维数组的元素数=行数*列数 主要...
  • 数组 array 当我们需要处理一组数据时,一定性定义...【注】前两种方式,若传入参数只有一个,且为number时,这个数字表示声明的数组的长度,而不是存放的数据。 数组的长度(长度从1开始数) arr.length 数组下标
  • 二维数组的初始化

    2020-07-08 17:19:06
    1.不分行的初始化,所有数组元素放在一对 ...(3)省略一维长度下标时的初始化(行下标) a[][3] = {1, 2, 3, 4, 5, 6}; // 数组元素数除以列数,正好除尽,所得的商就是行数。 a[][3] = {1, 2, 3, 4}; // 数组元素
  • 大家好,上节介绍了在使用数组之前如何...以常用的二维数组为例,声明一个3*4的二维数组arr1,数据类型为字符串型。dim arr1(2,3) as string声明数组时省略下标,默认从0开始,所以第一维是0至2,第二维是0至3。数...
  • 二维数组 本质:数组中的数组,数组嵌套。 二维数组:行列形式 m行n列:m个一位数组,位数组中的元素为n 定义:类型修饰符 变量名[下标1][下标2] = {值…}; 方式1:下标 = 元素数 - 1;int a[3][3] = {{...
  • C语言数组学习(2)

    2021-01-26 23:13:41
    维数组和多维数组 维数组和多维数组的区别:下标不同,维数组只有1个下标,多维数组有2个或者2个以上的下标 ...二维数组的内存是连续的,按行存储,行地存 举个例子: int a[3][4] 3行4列数组 a[0]
  • C++数组

    2019-01-31 19:29:16
    一、一维数组的初始化 1、列出全部元素的初始值...1、将所有初值写在一个{}内,按顺序初始化(第一维下标个数可以省略) static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 2、分行列出二维数组元素的初值 st...
  • 第三次 数组

    2018-12-22 23:01:04
    一、知识点 1.数组类型 数组名 数组下标 ...二维数组即有两个维度 第一个维度是几列,第二个维度是几行 初始化时第一维长度可省略,第二维长度永远不可省。 向函数传递一维数组 形参 int score[...
  • C语言数组总结与反思

    千次阅读 2018-12-20 10:50:56
    二维数组等,要注意数组的下标都是从0开始的,在做题时还要注意定义数组的大小,数组过小,在程序中会造成越界导致崩溃(多次崩溃深有体触),二维数组注意第二维度的长度绝对不能省略,若要把一个数组传递给一个函数...
  • Java稀疏数组

    2021-02-16 17:08:15
    个二维数组中,记录了大量的无效数组元素,占用了大量内存空间,那么怎么解决这问题呢?就需要稀疏数组。 稀疏数组建减少了大量无用数据,记录了原本数组的行列,有效值数,每数组元素的下标和值。 稀疏...
  • 数组基本知识

    2014-01-08 20:43:28
    二维数组的初始化 1、按行连续赋值,即将所有数据写在一个大括号内,按照数组元素排列顺序对元素赋值。 2、再为所有元素赋初值时,可以省略下标,但是不可以省略下标。 3、按行分段赋值,可以分行给数组元素...
  • 1、对于多维数组的理解,多维数组就是数组的数组,数组元素还是数组称之为二维数组。 2、《C++Primer fifth》中提到,要想更好地理解多维数组,应该从内向外阅读定义。 3、多维数组初始化时,每一行用一个花括号括...
  • 字符串数组/指针总结

    2021-01-03 14:55:02
    数组 数组名为首地址,是地址常量,不可以修改,比如a=a+1是错的 方括号内引用时和定义时表达...2)二维数组 分行赋值法——每一个小中括号表示一行,小中括号内的元素个数表示列数 int a[5][2]={{1,2}{1,2}{1,2}{1,2}
  • 多维数组的传递

    2019-10-01 14:31:35
    接收多维数组的函数,...以下是接收维、二维、三维数组的参数的声明示例: void func1(int v[], int n); //元素类型为int、元素数随意(n)。 void func2(int v[][3], int n); //元素类型为int[3]、元素...
  • 1-1 在对数组全部元素赋初值时,不可以省略行数,但能省略列数。 (1分) F 作者 王从银 单位 ...引用二维数组的元素要指定两个下标,即行下标和列下标,一般形式如下。 数组名[列下标][行下标] (1分) F
  • 1、在对数组全部元素赋初值时,可以省略行数,但不能省略列数。(T) 2、在C语言中能逐个地使用下标变量,也能一次引用整个数组。...5、以下定义了一个二维数组tab,该数组可以存放7个整型数据。(F) int tab[3][4];
  • 3return语句 return语句的格式 return 表达式 return语句的作用是使程序从方法调用中返回表达式的值就是调用方法的返回值若没有返回值则表达式可省略 2.5 数组 2.5.1维数组 2.5.2二维数组 2.5.3数组应用 2.5.1 ...
  • 第五章作业-数组

    千次阅读 2018-10-25 16:21:52
    可以省略行,但不能省略列,因为总的元素数已知,如果只知道行数,并无法确定第二维中每维有多少元素.但如果知道列数,即已知第二维维有多少元素,则,可以计算出第维的维数. 换句话说,开数组是从低维向高维进行...
  • ·数组二维或多维时第一个可为空。 初始化 ·数组未初始化时元素的值为随机值。 ·部分赋值时,未赋值的元素自动赋值为0。 int a[]={1,2};//合法,只有这时初始化时可以整体赋值 int a[];//不合法 字符数组 char ...
  • 第八次作业

    2019-06-10 20:27:00
    对于这道题的算法不是很清楚,所以借助了网上的资料才做完,第三题用到了用二维数组求三角形矩阵,注意的问题有:将二维数组的行下标和列下标都作为循环变量,还有就是在二维数组中行下标可省,列下标不能省略。...

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

二维数组省略一个下标