精华内容
下载资源
问答
  • ,则数组a可引用元素有( )。更多相关问题单选(3分) 以下哪个不是创业的战略性资源的特点?单选(1分) Excel中,让某单元格里数值保留二位小数,下列( )不可实现。单选(1分) 通常把分布一座办公大楼或某一大院中的...

    问题:单选(2分) 已定义float a[5];,则数组a可引用的元素有( )。

    更多相关问题

    单选(3分) 以下哪个不是创业的战略性资源的特点?

    单选(1分) Excel中,让某单元格里数值保留二位小数,下列( )不可实现。

    单选(1分) 通常把分布一座办公大楼或某一大院中的计算机网络称为().

    多选(2分) 切换到\\\"幻灯片放映\\\"视图的方法是( ).

    多选(2分) Excel中,选取大范围区域,先单击区域左上角的单元格,然后( )

    单选(2分) 以下对ETFE膜材料描述不正确的是( )。

    单选(1分) PowerPoint2010文档的默认扩展名是().

    单选(2分) In the family reunion dinner, why is fish indispensable?

    单选(1分) Excel图表是动态的,当图表中修改了数据系列的值时,与图表相关的工作表中的数据( )

    多选(2分) Excel的状态栏具有( )作用。

    多选(2分) 在Word中能调整页面效果的命令是()

    多选(2分) 在PowerPoint中,对大纲视图中选择文本的方法可以利用键盘().

    多选(2分) 在Word操作中,下面对\\\"项目符号和编号\\\"操作叙述正确的是().

    多选(2分) 在Excel工作表中,可以使用的数据格式有( )

    多选(2分) 在幻灯片中可以插入声音和影片,下面说法正确的是().

    判断(1分) 不管使用何种方法放映幻灯片,都要从第一张开始放映.

    判断(1分) 防火墙完全可以防止来自网络外部的入侵行为.

    判断(1分) 在备注与讲义里可使用的页眉和页脚选项包括日期和时间和幻灯片编号等.

    判断(1分) 磁盘大量的文件删除和保存操作,使现有的磁盘上的文件不能保持在一个连续的磁盘空间上,这些零散的文件被称作磁盘碎片

    多选(2分) 在Excel中,公式SUM(B1:B4)等价于( )

    判断(1分) 同一张磁盘上的文件不能有相同的文件名.

    多选(2分) Word中,文本框().

    单选(1分) VLOOKUP函数从表格的( )中查找含有特定值的字段,再返回同一列中某一指定单元格中的值。

    单选(1分) 十进制数\\\"-3\\\"用8位二进制数补码表示为().

    判断(1分) Windows系统中的文件具有系统、隐藏、只读等属性,每个文件可以同时具有多个属性.

    单选(1分) PowerPoint中,()以最小化的形式显示演示文稿中的所有幻灯片,用于组织和调整幻灯片的顺序.

    判断(1分) 在具有多任务处理功能的操作系统中,一个任务通常与一个应用程序相对应.

    判断(1分) 计算机安装操怍系统后,操作系统即驻留在内存储器中,加电启动计算机工作时,CPU就开始执行其中的程序.

    单选(2分) 使用市场价值来衡量经济体中产生的商品和服务数量的一个缺点是

    判断(1分) Excel中,可以同时打开多个文件名相同但处于不同位置的Excel文件

    判断(1分) 在幻灯片中,超链接的颜色设置时不能改变的.

    判断(1分) 局域网常用传输媒体有双绞线、同轴电缆、光纤三种,其中传输速率最快的是光纤.

    判断(1分) 在计算机中,不同字体的相同汉字其内码是不同的.

    多选(2分) 在Word中,关于页码的操作的正确叙述是().

    判断(1分) 在Word中,页面视图适合于用户编辑页眉、页脚、调整页边距,以及对分栏,图形和边框进行操作.

    判断(1分) 在Excel中,图表中可以没有“图例”。

    判断(1分) COUNT函数用于计算区域中单元格个数

    判断(1分) 利用格式刷复制的仅仅是单元格的格式,不包括内容。

    单选(1分) 某PC机的CPUCache存储器容量是640KB,这里的1KB为().

    判断(1分) Excel中,直接处理的对象为工作表,若干工作表的集合称为工作簿。

    判断(1分) 在Word中,一个段落通常是以句号为终止符的.

    判断(1分) 在Excel中,符号“&”是文本运算符。

    判断(1分) 要将幻灯片的标题文本颜色一律改为红色,只需在幻灯片母版上做一次修改即可.并且以后的幻灯片上的标题文本也为红色.

    判断(1分) 打印时,在word2010中插入的批注将与文档内容一起被打印出来,无法隐藏.

    多选(2分) 能退出整个Word应用程序的方法有().

    单选(2分) The most common tip given in a restaurant in the United States is __________.

    判断(1分) 在word2010中的页面视图中可看到文档的分栏并排显示效果

    多选(3分) 关于全面依法治国,下列说法正确的有 。

    单选(2分) 假设AD曲线向右移动,相比起初始值短期的均衡产出和通货膨胀的变化是

    判断(1分) 在计算机网络中,通常把提供并管理共享资源的计算机称为网关.

    单选(2分) 下面有关析构函数特征的描述中,正确的是( )

    单选(2分) 圆的周长c=2*PI*r中,PI为圆周率,r为半径,那么常量为:

    单选(2分) 若执行如下程序段int a=2;a++那么a的值是( )

    单选(2分) 外国需求增加会导致

    判断(2分) 在使用变量之前必须先定义变量。

    单选(2分) 若a=4,那么表达式x=5,a,a+6的值为( )

    判断(2分) 选择结构程序中中,最多执行一个分支。

    单选(2分) 若有定义:int x=1,y=2,z=4;则以下程序段运行后z的值为( )。if(x>y) z=x+y;else z=x-y;

    单选(1分) 若计算机中连续2个字节内容的十六进制形式为34和51,则它们不可能是()

    判断(2分) do......while循环语句至少要执行一次循环体。

    判断(2分) 函数可以嵌套调用和递归调用。

    单选(2分) 下面程序段的运行结果是( )for(i=2;i<=5;){i++;}printf(“%d”,i);

    判断(2分) 在基本的凯恩斯主义模型中,如果边际消费倾向是正的,那么财政开支乘数大于1

    判断(1分) 无线局域网采用协议主要是802.11,俗称Wi-Fi.

    判断(2分) 数组中所有元素的数据类型相同。

    判断(2分) C语言在判断一个量是否为真时,以非0值代表“真”,以0值代表“假”。

    单选(2分) 若定义了int a[3][2]; ,那么a的维数是( )

    单选(2分) 一个函数的返回值由( )确定。

    判断(2分) 二维数组b[4][5]最多可以有20个数据元素。

    单选(2分) 若定义了数组float a[8],那么数组中最后一个元素的下标是( )。

    单选(2分) 若执行如下程序段,则b的值为( )int a=3,b;if (a==3) {b=a+2}

    判断(2分) 如果指针P指向数组a,即指针p为数组a的首地址。

    判断(2分) 库函数是系统自带的函数,在使用之前需要用#include将库函数所在的头文件包含进来。

    单选(2分) 若有如下 语句( ),那么stu1.name的值是( )。struct { char num[10];char name[20];char sex; int age;}stu1={“102”,“Zhang ping”,“男”,18};

    单选(2分) 下列关于结构体的说法错误的是:( )

    判断(2分) 对同一类型的两个指针变量而言,一个变量向另外一个变量赋值的结果是使得两个指针指向同一个对象。

    单选(2分) 在进行文件操作时,写文件的含义是( )

    判断(2分) puts(str)函数是将str中存放的字符串输出到显示器,自动将字符吕结束标志“\\\\0”转换为回车换行符。

    单选(2分) fopen函数的作用是:( )

    判断(2分) C语言中,eof表示文件结束。

    判断(2分) 结构体中的成员也可以是一个结构体变量。

    判断(1分) 中苏领导人在布加勒斯特会议上发生激烈辩论。

    判断(2分) 一个字符型占用一个字节。

    单选(3分) 下面可以成为一个向量的方向余弦的三个数是______.

    判断(2分) C语言中,文件存取是以字节为单位的。

    单选(2分) 在C语言中,引用数组元素时,其数组下标的数据类型允许是:( )

    单选(2分) 下面有关for循环的正确描述是:( )

    单选(2分) 若i为整型变量,则以下循环执行次数是( )次。for (i=2;2==0;){printf(\\\"%d\\\",i--);}

    单选(2分) C语言诞生于什么年代( )

    单选(2分) 对语句int *p;理解正确的是

    单选(2分) 若执行如下程序段int b=3;float c;c=(float)(b);那么c的值为( )

    单选(1分) 下列可选项,都是硬件的是().

    单选(2分) 已定义float a[5];,则数组a可引用的元素有( )。

    展开全文
  • 数组知识

    2019-05-31 00:02:22
    数组什么是数组: 什么是数组: 相同数据类型连续的集合 数组下标: 数组中元素的位置的索引或指示.从0开始 ...注意:数组大小 = 数组元素类型大小 * 数组元素个数 数组初始化方式: 1 全部初始化 int a...

    什么是数组:

    相同数据类型连续的集合
    数组下标: 数组中元素的位置的索引或指示.从0开始
    数组元素:构成数组的数据.每个数组元素可以用数组名称
    和下标去操作,可以理解成一个独立的变量

    优点:
    1.存储内存大
    2.能存储大量数据
    3.快速查询(直接通过下标达到想要的值)

    缺点:
    1.数组只能存储一种数据类型
    2.增加,删除元素较慢
    3.数组大小确定之后不能改变

    一维数组:
    格式: 数据类型 数组名[数组元素个数]={数组初始化值}
    int arr[10];
    注意:数组大小 = 数组元素类型大小 * 数组元素个数
    数组初始化方式:
    1 全部初始化
    int arr[5] = {10,1,3,2,6};
    注意:错误int arr[5]; arr[5] = { 1, 2, 3, 4, 5 };
    2.部分初始
    int arr[5] = {10,1};
    注意:部分初始化中如果没有初始化的默认是0
    3.特殊部分初始化
    int arr[5] = {0}
    4.缺少数组大小的初始化方式
    int arr[] = {1,2,3,6};
    注意:数组小标 = 是数组元素个数-1

    数组元素个数获取方式:
    个数 = sizeof(数组名)/sizeof(第一个元素);
    案例:sizeof(arr1)/sizeof(arr1[0])

    	int arr[] = {1,2,3};
    	int x = 10;
    	char arr1[5] = { x, 2, 13, 4 };
    	//char str[10] = { 'a', 'b', 'a' };
    	char str[10] = "aba";
    	printf("sizeof(arr) = %d\n", sizeof(arr));
    	for (int i = 0; i < sizeof(arr1)/sizeof(arr1[0]); i++)
    	{
    		printf("arr[%d] = %d\t",i ,arr1[i]);
    	}
    

    二维数组:数组中的元素是数组.
    格式: 类型 数组名[行数][列数] = {初始化元素};
    int arr[3][2] = { 0 };
    初始化方式:
    1.全部分组初始化
    int arr[3][2] = { { 1, 4 }, { 2, 5 }, {35,1} };

    2.部分分组初始化
    int arr[3][2] = { {0 }, { 2, 5 }, { 35, 1 } };
    注意:没有初始化的默认0

    3.部分系统初始化
    int arr[3][2] = { 1,2,3,4};
    int arr[3][2] = { 1,2,{3},{4}};//arr[3][2]

    4.缺省行标初始化
    int arr[][2] = { 1, 2, 3, 4, 5, 6 };
    注意:行下标= 行数-1 ; 列下标= 列数-1

    int main()
    {
    	srand(time(NULL));
    	//int arr[3][2] = { { 1, 4 }, { 2, 5 }, {35,1} };
    	//int arr[3][2] = { {0 }, { 2, 5 }, { 35, 1 } };
    	//int arr[3][2] = { 1,2,3,4,5,6 };
    	//int arr[3][2] = { (1, 2),( 3, 4), (5, 6) }; 错误
    	
    	int arr[][2] = { 1, 2, 3, 4, 5, 6 };
    	printf("arr[0][1] = %d\n", arr[2][1]);
    	printf("sizeof(arr) = %d\n", sizeof(arr));
    	//对二维数组赋值-通过循环嵌套
    	for (int x = 0; x < 3;++x) //行数
    	{
    		for (int y = 0;y < 2;++y)//列数
    		{
    			arr[x][y] = rand() % 100 + 1;
    		}
    	}
    
    	return 0;
    }
    

    指针数组和数组指针

    指针数组

    定义 int *p[n];
    []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
    如要将二维数组赋给一指针数组:
    int *p[3];
    int a[3][4];
    p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
    for(i=0;i<3;i++)
    p[i]=a[i]
    这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
    所以要分别赋值。
    

    数组指针(也称行指针)

    定义 int (*p)[n];
    ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。
    如要将二维数组赋给一指针,应这样赋值:
    int a[3][4];
    int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
    p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
    p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
    

    所以数组指针也称指向一维数组的指针,亦称行指针。

    这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
    还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。
    比如要表示数组中i行j列一个元素:

    *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]
    

    优先级:()>[]>*

    下面到底哪个是数组指针,哪个是指针数组呢:
    A)
    int *p1[10];
    B)
    int (*p2)[10];
    每次上课问这个问题,总有弄不清楚的。这里需要明白一个符号之间的优先级问题。

    “[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,
    即数组的每个元素。那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组。
    至于p2 就更好理解了,在这里“()”的优先级比“[]”高,“*”号和p2 构成一个指针的定义,
    指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。
    数组在这里并没有名字,是个匿名数组。
    那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针。
    我们可以借助下面的图加深理解:
    

    在这里插入图片描述

    1.int (*)[10] p2-----也许应该这么定义数组指针
    这里有个有意思的话题值得探讨一下:平时我们定义指针不都是在数据类型后面加上指针变量名么?这个指针p2 的定义怎么不是按照这个语法来定义的呢?也许我们应该这样来定义p2:

     int (*)[10] p2;
    

    int (*)[10]是指针类型,p2 是指针变量。这样看起来的确不错,不过就是样子有些别扭。其实数组指针的原型确实就是这样子的,只不过为了方便与好看把指针变量p2 前移了而已。你私下完全可以这么理解这点。虽然编译器不这么想。_
    2. 再论a 和&a 之间的区别
    既然这样,那问题就来了。前面我们讲过a 和&a 之间的区别,现在再来看看下面的代码:

    int main()
    {
       char a[5]={'A','B','C','D'};
       char (*p3)[5] = &a;
       char (*p4)[5] = a;
       return 0;
    }
    

    上面对p3 和p4 的使用,哪个正确呢?p3+1 的值会是什么?p4+1 的值又会是什么?毫无疑问,p3 和p4 都是数组指针,指向的是整个数组。&a 是整个数组的首地址,a是数组首元素的首地址,其值相同但意义不同。在C 语言里,赋值符号“=”号两边的数据类型必须是相同的,如果不同需要显示或隐式的类型转换。p3 这个定义的“=”号两边的数据类型完全一致,而p4 这个定义的“=”号两边的数据类型就不一致了。左边的类型是指向整个数组的指针,右边的数据类型是指向单个字符的指针。在Visual C++6.0 上给出如下警告:
    warning C4047: ‘initializing’ : ‘char (*)[5]’ differs in levels of indirection from ‘char *’。
    还好,这里虽然给出了警告,但由于&a 和a 的值一样,而变量作为右值时编译器只是取变量的值,所以运行并没有什么问题。不过我仍然警告你别这么用。

    既然现在清楚了p3 和p4 都是指向整个数组的,那p3+1 和p4+1 的值就很好理解了。

    但是如果修改一下代码,把数组大小改小点,会有什么问题?p3+1 和p4+1 的值又是多少呢?

    int main()
    {
       char a[5]={'A','B','C','D'};
       char (*p3)[3] = &a;
       char (*p4)[3] = a;
       return 0;
    }
    

    测试结果:

    (1).char (*p2)[5]=a;必须使用强制转换,如:char (*p2)[5]=(char (*)[5])a;
    (2).把数组大小改变,都会编译不通过,提示:
    error C2440: 'initializing' : cannot convert from 'char (*)[5]' to 'char (*)[3]'
    error C2440: 'initializing' : cannot convert from 'char (*)[5]' to 'char (*)[10]'
    

    把以上程序测试代码如下:

    int main()
    {
      	char a[5]={'a','b','c','d'};
      	char (*p1)[5]= &a;
      	char (*p2)[5]=(char (*)[5])a;
    
      	printf("a=%d\n",a);
      	printf("a=%c\n",a[0]);
      	printf("p1=%c\n",**p1);
      	printf("p2=%c\n",**p2);
      	printf("p1+1=%c\n",**(p1+1));
      	printf("p2+1=%c\n",**(p2+1));
    
      	return 0;
    }
    
    输出:
    a=1638208
    a=a
    p1=a
    p2=a
    p1+1=?
    p2+1=?
    Press any key to continue
    

    结论:

    根据指针类型及所指对象,表示指针大小,每次加1,表示增加指针类型大小的字节.----后面还会有解释说明.

    展开全文
  • 数组

    2019-12-24 23:51:30
    一,一维数组的定义 数组就是一组相同类型的变量,它们往往都是为了表示同一批对象的统一属性,如一个班级所有同学的身高、全球所有国家的人口数等。数组可以是一维的,也可以是二维或多维的。在数学中,以用h(1≤i≤50)...

    一,一维数组的定义
    数组就是一组相同类型的变量,它们往往都是为了表示同一批对象的统一属性,如一个班级所有同学的身高、全球所有国家的人口数等。数组可以是一维的,也可以是二维或多维的。在数学中,以用h(1≤i≤50)表第i个同学的身高,i为编号、在C++中,使用一维数组时,一般是从0开始编号,h[i]就表示第i+1个同学的身高,i称为“下标变量”。读入50个同学的身高,语句就可以这样书写:
    for(i=0;i<=49;i++) cin>>h[i];
    1,一维数组的定义
    定义一维数组的格式如下:
    类型标识符 数组名[常量表达式];
    其中,类型标识符可以是任何基本数据类型也可以是结构体等构造类型,相同类型的数组可以一起定义。数组名必须是合法的标识符常量表达式的值即为数组元素的个数。
    例如,“inth[50];”就表示定义一个一维数组h,共有50个元素,它们的编号从0开始到49,每个元素都是int类型。
    假设要存储10000个人的中考成绩和性别,可以定义两个数组:
    int score[10000]😕/或者float score[10000];
    bool xb[10000]//或者char xb[10000];
    2,一维数组的元素引用
    数组定义好后,就可以“引用”数组中的任意一个元素。引用格式为“数组名[下标]”,如h[5],h[i2+1]等。其中,下标只能为整型常量或整型表达式,值必须在数组定义的下标范围内,否则会出现"下标越界错误"。
    需要注意的是,不能一次引用整个数组,只能逐个引用数组的单个元素。例如,对于一个数组a来说,语句“cout<<a;”是不合法的。
    3.一维数组的存储结构
    数组在计算机内存单元中是连续存储的。程序一旦执行到数组的定义语句,就会开辟出若干字节的内存单元。例如,对于已定义的数组“inth[50];”,假设系统给它分配的内存单元地址从1000开始,则“1000”就称为该数组。
    二,一维数组的输入与输出
    对数组的操作只能逐个引用单个元素所以,维数组的输入输出等操作都是采用循环语句结合下标变化逐个元素进行。
    例如,输出一个数组可以写成
    inth[100];
    for(i=0;i<100;i++) cout<<h[i];
    那么,批量数据如何一次性输入到一维数组呢?一般有以下两种方法
    (1)键盘读人
    例如:
    int h[100];
    for(i=0;i<100;i++) cin>>h[i];
    (2)直接赋值
    例如:
    inth[100],a[20];
    for(i=0;i<100;i++) h[i]=0;
    for(i=0;i<20;i++) a[i]=i
    2+1;
    C++里还提供了两个函数给数组“整体”赋值。(1)memset函数
    memset函数是给数组“按字节”进行赋值,一般用在char型数组中,如果是int类型的数组,一般赋值为0和-1。使用前需要包含头文件:
    #include。
    例如,“memset(h,0,sizeof(h));”就是将h数组所有元素均赋值为0
    (2)fill函数
    fill函数是给数组“按元素”进行赋值,可以是整个数组,也可以是部分连续元素,可以赋任何值。使用前需要包含头文件#include。例如,
    “fill(a,a+10,5);”就是将a数组的前10个元素赋值为5
    另外,C++还支持在定义数组的同时,给所有或者部分元素赋值。例如:
    inta[10]={0,1,2,34,5,6,7,8,9};
    inta[10]={0,1,2,3,4};//部分赋初值,后面的元素自动初始化为0
    inta[10]={1,2,3,4,5}//不定义数组长度,直接根据赋值个数定
    例题:走楼梯
    【问题描述】一个楼梯有n级,小苏同学从下往上走,一步可以跨一级,也可以跨两级。问:他走到第级楼梯有多少种走法?
    【输入格式】一行一个整数n,0<n≤30。
    【输出格式]一行n个整数,之间用一个空格隔开,表示走到第1、第2级、…第n级分别有多少种走法。
    【输入样例】2
    【输出样例】1 2
    【问题分析】假设f(i)表示走到第i级楼梯的走法,则走到第i(i>2)级楼梯有两种可能:一种是从第i-1级楼梯走过来;另一种是从第i-2级楼梯走过来。根据加法原理,f(i)=f(i-1)+f(i-2),边界条件为:f(1)=1,f(2)=2。具体实现时,定义一维数组f,用赋值语句从前往后对数组的每一个元素逐个赋值。本质上,f(i)构成了斐波那契数列。
    #include
    using namespace std;
    intmain(){
    int n,i,f[31];
    scanf("%d",&n);
    f[1]=1;f[2]=2;
    for(i=3;i<=n;i++)
    f[i]=f[i-1]+f[i-2];
    for(i=1;i<n;i++) printf("%d",f[i]);
    printf("%d\n",f[n]);
    return 0;
    }
    三,一维数组的插入与删除
    在实际应用中,经常需要在数组中插入一个元素,或者删除数组中的某一个元素,称为数组的“插入“操作或者“删除”操作,插入一个元素,需要先找到插入的位置(假设下标为x),将这个元素及其之后的所有元素依次往后移一位(注意要从后往前进行操作),再将给定的元素插入
    (覆盖)到位置x。删除某一个元素,也需要先找到删除的位置(假设下标为x)将下标为x+1及其之后的所有元素依次向前移一位,覆盖原来位置上的元素。
    插入或者删除一个区间(连续若个数),只要重复以上单个元素的操作即可。另外,插入操作需要注意把数组下标定义的足够大。

    例题:
    [问题描述】有n个人(每个人有一个唯一的编号,用1~n之间的整数表示)在一个水龙头前排队准备接水,现在第n个人有特殊情况,经过协商,大家允许他插队到第x个位置。输出第n个人插队后的排队情况。
    [输入格式】第一行1个正整数n,表示有n个人,2<n≤100。
    第二行包含n个正整数,之间用一个空格隔开,表示排在队伍中的第1~第n个人的编号
    第三行包含1个正整数x,表示第n个人插队的位置,1<=x<n。
    【输出格式]一行包含个正整数,之间用一个空格隔开,表示第n个人插队后的排队情况
    【输入样例】
    7
    7 2 3 4 5 6 1
    3
    [输出样例]
    7 2 1 3 4 5 6
    [问题分析]
    N个人的排队情况可以用数组q表示,q[i]表示排在第i个位置上的人。定义数组时多定义一个位置,然后重复执行:q[i+1]=q[i],其中,i从n-x。最后再执行q[x]输出q[1]~q[n]。
    #include
    using namespace std ;
    int main (){
    int n,i,x,q[102];
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    scanf("%d",&q[i]);
    scanf("%d",&x);
    for(i=n;i>=x;i–) q[i+1]=q[i];
    q[x]=q[n+1]
    for(i=1;i<n;i++)
    printf("%d",q[i]);
    printf("%d\n",q[n]);
    return 0;
    }
    四,一维数组的查找统计
    一维数组的查找操作,就是在一维数组中查找有没有某个元素,它的值等于指定的值x查找操作的结果可能是一个没找到、找到一个或者找到很多个。常见的查找算法有“顺序”查找和“二分”查找。顺序查找就是按照从前往后的顺序,将数组中的元素依次与要查找的数x进行比较。如果数组中的元素是有序的(递增或者递减),也可以采用二分查找。二分查找又称“折半”查找,其优点是比较次数少、查找速度快。假设数组a[n]是严格递增的,每个元素都是int型,现在要查找x这个元素,则二分查找的算法框架可以这样写:
    int left=0,right=n-1;int find=n;//find标记找到的位置,初始化为n,表示没找到while(left<=right){
    int mid=(left+right)/2;
    if(a[mid]==x){//找到了,就标记位置,并退出循环
    find=mid;break;}
    if(x<a[mid])right=mid-1;//x只能在左半部分if(a[mid]<x)left=mid+1;//x只能在右半部分if(find!=n) printf("%d/n",find);
    else print(“not find\n”);
    }
    例题:[问题描述]
    公司举办年会,为了活跃气氛,设置了摇奖环节。参加聚会的每位员工都有一张带有号码的抽奖券。现在,主持人依次公布n个不同的获奖号码,小谢看着自己抽奖券上的号码num,无比紧张。请编写一个程序,如果小谢获奖了,请输出他中的是第几个号码;如果没有中奖,请输出0。
    【输入格式]
    第一行一个正整数n,表示有n个获奖号码,2<n≤100。
    第二行包含n个正整数,之间用一个空格隔开,表示依次公布的n个获奖号码。
    第三行一个正整数num,表示小谢抽奖券上的号码。
    1≤获奖号码,num<10000。
    [输出格式]
    一行一个整数,如果小谢中奖了,表示中奖的是第几个号码;如果没有中奖,则为0。
    【输入样例】
    7
    17 2 3 4 9555 6 1
    3
    [输出样例]
    3
    #include
    using namespace std ;
    int main (){
    int n,i,num,f,g[101];
    scanf("%d",&n)
    for(i=1;i<=n;i++)
    scanf("%d",&[i]);
    scanf("%d",&num);
    f=0;
    for(i=1;i<=n;i++)
    if(g[i]==num){f=i;break;} printf("%d\n",f):
    return 0;
    }
    五,一维数组的排序
    “排序”就是按照某个关键字的大小,将若干对象从小到大或者从大到小进行重新排列。关键字是对象的某一个属性,它可以是任何基本数据类型,甚至结构体等。例如,体育课上会按照身高从矮到高站队,这就是“升序”排序,身高是每个人的一个属性,也就是排序的关键字。再如,将所有单词按照“字典序”倒过来排序,如zoo、yes、most、key、computer、book、bad、apple等,就是“降序”排序,关键字的类型就是字符串。
    排序算法非常多,本课学习其中最基本的三种:选择排序冒泡排序和插入排序它们本质上都是通过数组中的元素比较和交换来实现的,所以键是数组下标的分析。
    例题:【问题描述】给出n个同学的身高,请根据他们的身高升序排列并输出排序结果
    【输入格式】第一行1个正整数n,表示有n个同学的身高2<n≤100。第二行包含n个正整数,之间用一个空格隔开,表示n个同学的身高。每个同学的身高都在150-200厘米之间。
    [输出格式]一行n个正整数,之间用一个空格隔开,表示n个同学根据身高升序排列的结果
    【输入样例】
    7
    180 170 176 160 155 150 160
    [输出样例]
    150 155 160 160 170 176 180
    [问题分析]
    算法1-原则排序
    选择排序的基本思想是:每一趟从待排序的数据中,通过“打台”比较选出最小元素,放在这些数据的最前面。这样,第一趟把n个数中(第1个到第n个)最小的放在第一个位置,第二趟把剩余的n-1个数中(第2个到第n个)最小的放在第二个位置,第三趟把剩余的n-2个数中(第3个到第n个)最小的放在第三个位置,……第n-1趟把剩下的2个数中(第n-1个到第n个)最小的放在第n-1个位置,剩下的最后一个数(第n个)一定最大,自然落在了第n个位置。
    #include
    using namespace std ;
    int main (){
    intn,i,j,k,temp,h[101];
    cin>>n;
    for(i=1;i<=n;i++) cin>>h[i];
    for(i=1;i<=n;i++){
    k=1;
    for(j=i+1;j<=n;j++)
    if(h[j]<h[k] )k=j;//在i-n之间的最小元素
    temp=h[i];
    h[i] =h[k];
    h[k]=temp;//将i-n之间的最小元素放到第i个位置
    }
    for(i=1;i<n;i++)cout<<h[i]<<" “;
    cout<h[n]<endl;
    return 0;}
    算法2-冒泡排序
    冒泡排序的基本思想是:从第一个数开始,依次不断比较相邻的两个元素,如果“逆序”就序交换。这样,一趟排序结束后,最大的元素就放在了第n个位置了。然后用同样的方法,第二趟把剩余的前n-1个数中最大的交换到第n-1个位置,第三趟把剩余的前n-2个数中最大的交换到第n-2个位置,…经过n-1趟,排序结束。
    #include
    using namespace std ;
    int main (){
    int n ,i, j , temp , h [101];
    cin<<n;
    for(i=1;i<=n;i++)cin>>h[i];
    for(i=1;i<n;i++)
    for(j=1;j<=n-i;j++)
    if(h[j]>h[j+1]){
    temp=h[j];
    h[j]=h[j+1];
    h[j+1]=temp;
    }
    for(i=1;i<n;i++)
    cout<<h[i]<<” “;
    return 0;
    }
    算法3-插入排序
    插入排序的基本思想是:把所有待排序元素分成前后两段,前一段是已经排好序的,后一段插入排序的。每一趟都是把后一段的第一个数“插入”到前一段的某一个位置,保证前一段仍然是有序的。开始时,第1个数作为前一段肯定是有序的;第一趟,把第2个数插入进去,保证前2个数有序;第二趟,把第3个数插入进去,保证前个数有序;…第n-1趟,把第n个数插入进去,保证第n个有序。
    #include
    using namespace std ;
    int main (){
    int n ,i, j , temp , h [101];
    cin<<n;
    for(i=1;i<=n;i++)cin>>h[i];
    for(i=2;i<n;i++){
    temp=h[i];
    k=1;
    while(h[k]<=temp&&k<i) k++;
    for(j=i-1;j>=k;j--)h[j+1]=h[j];
    h[k]=temp;
    }
    for(i=1;i<n;i++)
    cout<<h[i]<<” “;
    return 0;
    }
    六,二维数组的定义和操作
    1/二维数组的定义和初始化
    定义二维数组的一般格式为
    类型标识符 数组名[常量表达式1][常量表达式2];
    常量表达式1的值表示第一维大小,常量表达式2的值表示第二维大小,常量表达式1和常量表达式2的乘积就是二维数组的元素个数。例如:inth[4][5]表示数组h有4×5=20个元素,每个元素都是int型。
    2/二维数组的储存元素引用
    因为二维数组本质上是一维数组的每一个元素又是一个一维数组,而计算机内部存储一维数组采用的是连续存储单元。所以,二维数组的存储方式是“行优先”的连续存储,先逐个第0行上的所有元素,再逐个存储第1行上的所有元素,依此类推。
    引用二维数组的某一个元素,格式为:
    数组名[下标1][下标2]
    例如:
    cin>>h[3][1];h[3][1]=h[3][1]*2;
    cout<<h[3][1];
    二维数组的输入输出
    [问题描述]
    输入一个整数n,输出n×n的回形方阵
    [输入格式]
    一行一个整数n,2<=n<=9
    [输出格式]
    共n行,每行包含n个正整数,之间用一个空格隔开
    [输入样例]5
    [输出样例]
    1 1 1 1 1
    1 2 2 2 1
    1 2 3 2 1
    1 2 2 2 1
    1 1 1 1 1
    #include
    using namespace std ;
    int main (){
    int n,i,j,k,a[10][10];
    cin>>n;
    for(k=1;k<=(n+1)/2;k++)
    for(i=k;i<=n+1-k;i++)
    for(j=k;j<=n+1-k;j++)
    a[i][j]=k;
    for(i=1;i<=n;i++){
    for(j=1;j<=n;j++)
    cout<<a[i][j]<<” “;
    cout<<a[i][n]<<endl;
    }
    return 0;
    }
    七,字符数组
    如果数组中的每个元素都是一个字符,这样的数组称为“字符数组”。有时,把一维字符组又称为“字符串”。定义字符数组的方法与定义其他类型数组的方法类似。例如,“charletler与“char matrix[20][20];两个语句分别定义了一个一维字符数组letter和一个二维字符数组matrix。
    给字符数组赋值的方法很多,例如:
    用字符常量逐个初始化:charletter[5]={‘a’,‘e’,‘i’,‘o’,‘u’}
    用赋值语句逐个元素赋值letter[]=‘a’;…
    用scanf读入整个数组:scanf(”%s",letter)
    用scanf逐个元素读入:scanf("%c",&letter[0]);…
    用cin输入整个数组:cin>>letter;
    用cin逐个元素输入:cin>>letter[O];…
    用gets读入整个数组:ges(letter)
    用getchar逐个读入:letter[o]=getchar();…
    字符数组的输出方法也很多,例如:
    用cout输出整个数组:cout>>letter;
    用cout逐个元素输出:cout>>letter[0]…
    用printf输出整个数组printf("%s"letter);
    用printf逐个元素输出printf("%c",lete[0]);…
    用puts输出整个数组:puts(letter);
    用putchar逐个元素输出:putchar(letter[0]);…
    需要注意的是,在用scanf的%s格式或gets读入字符串时,会在字符串末尾自动添加一个空字符’\0’。而使用getchar等方法读入字符串时,则要在字符串后手工加’\0’。
    注:scanf 和cin读不入空格,gets能读入空格。
    学习感悟
    学习完数组,觉得难度更上一层楼,有些知识,比如二维数组,不好理解,利用数组写程序要注意数组下标是从零计数,不能越界,利用数组可以提高程序运行的效率,避免超时。
    学习收获
    做过了数组专项的习题,对程序又有了更深的认识,更加明白了理解题目的重要性,数组这部分题,重要的是找规律,思路要清晰,要沉着冷静的面对难题,要多看书上的程序,及课后练习,形成好的解题思维,相信这样会让我节约更多的解题时间。

    展开全文
  • 数组知识总结

    2018-12-24 19:57:56
    在我们面对一大批具有相同性质的数据时,一个一个处理就很麻烦,这时候就可以引入数组,将数据共同处理。 一维数组的定义: 类型标识符 数组名[常量表达式] ...注意:只能逐个引用数组元素,而不能一次引用整个数...

    在我们面对一大批具有相同性质的数据时,一个一个处理就很麻烦,这时候就可以引入数组,将数据共同处理。

    一维数组的定义:

    类型标识符 数组名[常量表达式]

    常量表达式表示数组元素的个数,不能是变量。

    数组元素从0开始,不是1。如a[5]中有5个元素,依次为a[0],a[1],a[2],a[3],a[4]。

    一维数组的引用:

    数组名[下标]

    注意:只能逐个引用数组元素,而不能一次引用整个数组。

    一维数组的初始化:

    类型标识符 数组名[常量表达式]={1,2,3,4,5}

    可以赋值部分,则剩余元素自动赋值为零,也可以全赋值。

    如果没赋值,则随机赋值给元素随机大数。

    数组越界!

    非常容易犯的错误,即要访问的元素不在数组的储存空间中,大多数情况是因为数组开的过小,如果想开大数组,尽量让数组在主函数外边定义。也称为全局变量,内部叫局部变量,数组开不太大。

    一维数组的应用

    数组逆序重放

    #include <iostream>

    using namespace std;

    int main(){

        int n,a[1000],i;

        cin>>n;

        for(i=1;i<=n;i++)

        cin>>a[i];

        for(i=n;i>=1;i--)

        cout<<a[i]<<" ";

        return 0;

    }

    二维数组

    定义:若一维数组的元素也是一维数组时,就构成了数组的数组,即二维数组

    数据类型 数组名[常量表达式1][常量表达式2]

    与一维数组类似,二维数组从a[0][0]开始,引用,赋值也与一维类似。

    可以把元素想象成矩阵,解题时重点考虑元素变换的关系问题。

    应用:

    矩阵变换行

    #include<iostream>

    using namespace std;

    int main()

    {

        int a[6][6],i,j,m,n;

        for(i=1;i<=5;i++)

          for(j=1;j<=5;j++)

            cin>>a[i][j];

            cin>>n>>m;

        for(i=1;i<=5;i++)

          swap(a[m][i],a[n][i]);

        for(i=1;i<=5;i++)

            {

                for(j=1;j<=5;j++)

                cout<<a[i][j]<<" ";

                cout<<endl;

            }

    }

    总结:数组的引入,让我们可以从整体上操作数据,本质上还是三大基本结构的综合应用,掌握数组,会让我们的解题更方便。

    展开全文
  • C#数组

    千次阅读 2010-01-04 15:07:00
    接下来我们分析下数组元素,其中的元素无外乎是引用类型和值类型。当数组中的元素是值类型时,,不同于int i;这样的代码。数组会根据数组的大小自动把元素的值初始化为他的默认值。例如:static void Main(string...
  • 数组指针和指针数组的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的... //该语句是定义一个数组指针,指向含4个元素的一维数组。 ...
  • 数组指针和指针数组

    2017-02-14 19:17:43
    数组指针(也称行指针) (指向数组的指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以... //该语句是定义一个数组指针,指向含4个元素的一维数组
  • 【转】数组、指针、引用

    千次阅读 2007-09-11 21:35:00
    数组名和数组第一个元素的地址都是这块内存空间的首地址,要访问数组中的元素可以使用”数组名[索引]”的形式,也可以使用”*(数组名+索引)”的形式。索引从0开始。比如: int a[10] = {1, 2, 3, 4}; int c = (int...
  • 数组指针 指针数组

    2017-05-14 20:42:25
    数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的... //该语句是定义一个数组指针,指向含4个元素的一维数组。  p=a; 
  • 数组指针与指针数组

    万次阅读 多人点赞 2018-12-04 18:10:27
    数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也... //该语句是定义一个数组指针,指向含4个元素的一维数组。  p=a; //将该二...
  • 数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度... //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址...
  • c语言习题集合(数组

    千次阅读 2020-03-31 21:50:21
    数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组...
  • 指针数组数组指针

    2016-09-11 15:22:00
    数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的... //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;...
  • 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以... //该语句是定义一个数组指针,指向含4个元素的一维数组。  p=a; //...
  • 数组与指针

    2018-10-13 18:17:13
    经过几天的学习,记录在过程中对数组以及指针的理解。 一、数组 首先要明白什么是数组,什么是指针,什么是地址? 此处摘自博客: ...数组是指针的基础,多数人就是从数组的学习开始指针的旅程的。...
  • 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长... //该语句是定义一个数组指针,指向含4个元素的一维数组。  p=a;
  • 数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度... //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋
  • 数组指针/指针数组

    2015-10-21 14:03:00
    数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以... //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a; //将该二维...
  • pgsql 数组

    千次阅读 2014-06-05 15:19:20
    PostgreSQL 8.1 中文文档 Prev Fast Backward Chapter 8....8.10. 数组 ...PostgreSQL 允许记录的字段定义成定长或不定长的多维数组数组类型可以是任何基本类型或用户定义类型。...8.10.1. 数组类型的
  • 数组指针和指针数组的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也... //该语句是定义一个数组指针,指向含4个元素
  • 指针数组数组指针的差别: 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组... //该语句是定义一个数组指针,指向含4个元素的一维数组。  p=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,931
精华内容 5,572
关键字:

下面对数组元素的引用错误的是