搜档网
当前位置:搜档网 › 二维数组定义以及动态分配空间(精)

二维数组定义以及动态分配空间(精)

二维数组定义以及动态分配空间(精)
二维数组定义以及动态分配空间(精)

二维数组定义以及动态分配空间(转)

下面三种定义形式怎么理解?怎么动态分配空间?

(1)、int **Ptr;

(2)、int *Ptr[ 5 ]; 我更喜欢写成int* Prt[5];

(3)、int ( *Ptr )[ 5 ];

此文引自网上,出处不详,但是觉得非常好。略改了一点。

多维数组一向很难,一般都采用一维数组,但是一旦要用到还真是头疼。

闲话少说,这里我就以三个二维数组的比较来展开讨论:

(1)、int **Ptr;

(2)、int *Ptr[ 5 ]; 我更喜欢写成int* Prt[5];

(3)、int ( *Ptr )[ 5 ];

以上三例都是整数的二维数组,都可以用形如Ptr[ 1 ][ 1 ] 的

方式访问其内容;但它们的差别却是很大的。下面我从四个方面对它们

进行讨论:

一、内容:

它们本身都是指针,它们的最终内容都是整数。注意我这里说

的是最终内容,而不是中间内容,比如你写Ptr[ 0 ],对于三者来说,

其内容都是一个整数指针,即int *;Ptr[ 1 ][ 1 ] 这样的形式才

是其最终内容。

二、意义:

(1)、int **Ptr 表示指向"一群"指向整数的指针的指针。

(2)、int *Ptr[ 5 ] 表示指向5 个指向整数的指针的指针,或者说Ptr有5个指向"一群"整数的指针,Ptr是这5个指针构成的数组的地址

(3)、int ( *Ptr )[ 5 ] 表示指向"一群"指向5 个整数数组的指针的指针。

三、所占空间:

(1)、int **Ptr 和(3)、int ( *Ptr )[ 5 ] 一样,在32位平台里,都是4字节,即一个指针。

但(2)、int *Ptr[ 5 ] 不同,它是5 个指针,它占5 * 4 = 20 个字节的内存空间。

四、用法:

(1)、int **Ptr

因为是指针的指针,需要两次内存分配才能使用其最终内容。首

先,Ptr = ( int ** )new int *[ 5 ];这样分配好了以后,它和(2)的

意义相同了;然后要分别对 5 个指针进行内存分配,例如:

Ptr[ 0 ] = new int[ 20 ];

它表示为第0 个指针分配20 个整数,分配好以后,Ptr[ 0 ] 为指

向20 个整数的数组。这时可以使用下标用法Ptr[ 0 ][ 0 ] 到

Ptr[ 0 ][ 19 ] 了。

如果没有第一次内存分配,该Ptr 是个"野"指针,是不能使用

的,如果没有第二次内存分配,则Ptr[ 0 ] 等也是个"野"指针,也

是不能用的。当然,用它指向某个已经定义的地址则是允许的,那是另外

的用法(类似于"借鸡生蛋"的做法),这里不作讨论(下同)。

例子:

C语言:

//动态分配二维数组空间

{

m_iHight=10;//二维数组的高度

m_i;//二维数组的宽度

//动态分配一个二维数组m_ppTable内存空间

//其类型为int

//m_ppTable指向该数组

int **m_ppTable;

m_ppTable=new int *[m_iHight];

//动态分配m_iHight个类型为int *的内存空间

//分配的是行地址空间

for(int i=0;i

m_ppTable[i]= new int[m_iWidth];

//动态分配m_iWidth个类型为int的内存空间

//分配的是某行的数值空间

}

//由此分配的二维数组空间并非是连续的

//可以使用m_ppTable[row][col]来给该二维数组赋值

//其中0<=row

//释放所分配的内存空间

{

for(int i=0;i

delete[m_iWidth]m_ppTable[i]; //以行为单位释放数值空间

delete [m_iHight]m_ppTable; //释放行地址空间

}

int **a;

a=(int **)calloc(sizeof(int *),n);

for (i=0;i a[i]=(int *)calloc(sizeof(int),n);

这样就可以了

使用的时候就和普通的二维数组一样

最后用

for(i=0;i cfree(a[i]);

cfree(a);释放内存

就可以了

(2)、int *Ptr[ 5 ]

这样定义的话,编译器已经为它分配了5 个指针的空间,这相当于(1)中的第一次内存分配。根据对(1)的讨论可知,显然要对其进行一次内存分配的。否则就是"野"指针。

(3)、int ( *Ptr )[ 5 ]

这种定义我觉得很费解,不是不懂,而是觉得理解起来特别吃力,

也许是我不太习惯这样的定义吧。怎么描述它呢?它的意义是"一群"

指针,每个指针都是指向一个 5 个整数的数组。如果想分配k 个指针,这样写:Ptr = ( int ( * )[ 5 ] ) new int[ 5 * k ]。

这是一次性的内存分配。分配好以后,Ptr 指向一片连续的地址空间,

其中Ptr[ 0 ] 指向第0 个 5 个整数数组的首地址,Ptr[ 1 ] 指向第

1 个5 个整数数组的首地址。

综上所述,我觉得可以这样理解它们:

int ** Ptr <==> int Ptr[ x ][ y ];

int *Ptr[ 5 ] <==> int Ptr[ 5 ][ x ];

int ( *Ptr )[ 5 ] <==> int Ptr[ x ][ 5 ];

这里x 和y 是表示若干的意思。

二维数组定义以及动态分配空间(精)

二维数组定义以及动态分配空间(转) 下面三种定义形式怎么理解?怎么动态分配空间? (1)、int **Ptr; (2)、int *Ptr[ 5 ]; 我更喜欢写成int* Prt[5]; (3)、int ( *Ptr )[ 5 ]; 此文引自网上,出处不详,但是觉得非常好。略改了一点。 多维数组一向很难,一般都采用一维数组,但是一旦要用到还真是头疼。 闲话少说,这里我就以三个二维数组的比较来展开讨论: (1)、int **Ptr; (2)、int *Ptr[ 5 ]; 我更喜欢写成int* Prt[5]; (3)、int ( *Ptr )[ 5 ]; 以上三例都是整数的二维数组,都可以用形如Ptr[ 1 ][ 1 ] 的 方式访问其内容;但它们的差别却是很大的。下面我从四个方面对它们 进行讨论: 一、内容: 它们本身都是指针,它们的最终内容都是整数。注意我这里说 的是最终内容,而不是中间内容,比如你写Ptr[ 0 ],对于三者来说, 其内容都是一个整数指针,即int *;Ptr[ 1 ][ 1 ] 这样的形式才 是其最终内容。 二、意义: (1)、int **Ptr 表示指向"一群"指向整数的指针的指针。 (2)、int *Ptr[ 5 ] 表示指向5 个指向整数的指针的指针,或者说Ptr有5个指向"一群"整数的指针,Ptr是这5个指针构成的数组的地址 (3)、int ( *Ptr )[ 5 ] 表示指向"一群"指向5 个整数数组的指针的指针。 三、所占空间: (1)、int **Ptr 和(3)、int ( *Ptr )[ 5 ] 一样,在32位平台里,都是4字节,即一个指针。 但(2)、int *Ptr[ 5 ] 不同,它是5 个指针,它占5 * 4 = 20 个字节的内存空间。 四、用法: (1)、int **Ptr 因为是指针的指针,需要两次内存分配才能使用其最终内容。首 先,Ptr = ( int ** )new int *[ 5 ];这样分配好了以后,它和(2)的 意义相同了;然后要分别对 5 个指针进行内存分配,例如: Ptr[ 0 ] = new int[ 20 ]; 它表示为第0 个指针分配20 个整数,分配好以后,Ptr[ 0 ] 为指 向20 个整数的数组。这时可以使用下标用法Ptr[ 0 ][ 0 ] 到 Ptr[ 0 ][ 19 ] 了。 如果没有第一次内存分配,该Ptr 是个"野"指针,是不能使用 的,如果没有第二次内存分配,则Ptr[ 0 ] 等也是个"野"指针,也 是不能用的。当然,用它指向某个已经定义的地址则是允许的,那是另外 的用法(类似于"借鸡生蛋"的做法),这里不作讨论(下同)。 例子:

二维数组的定义和引用

二维数组的定义和引用 1.1二维数组的定义 前面介绍的数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量。本节只介绍二维数组,多维数组可由二维数组类推而得到。 二维数组定义的一般形式是: 类型说明符数组名[常量表达式1][常量表达式2] 其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。 例如: int a[3][4]; 说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即: a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列,即放完一行之后顺次放入第二行。另一种是按列排列,即放完一列之后再顺次放入第二列。在C语言中,二维数组是按行排列的。 即: 先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占四个字节的内存空间,所以每个元素均占有四个字节)。

1.2二维数组元素的引用 二维数组的元素也称为双下标变量,其表示的形式为:数组名[下标][下标] 其中下标应为整型常量或整型表达式。 例如: a[3][4] 表示a数组三行四列的元素。 下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量,变量或表达式。【例1】一个学习小组有5个人,每个人有三门课的考试成绩。 再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下: void main() { int i,j,s=0,average,v[3],a[5][3]; printf("input score\n"); for(i=0;i<3;i++) { for(j=0;j<5;j++) { scanf("%d",&a[j][i]); s=s+a[j][i];} v[i]=s/5; s=0;

C语言程序设计复习题 (2)

C\C++程序设计复习题 一、选择题 1、一个C语言程序总是从( C )开始执行 A) 书写顺序的第一个函数 B) 书写顺序的第一条执行语句 C) 主函数main() D) 不确定 2、以下能正确定义二维数组的是( C ) A.int a[][3]; B.int a[][3]=2{2*3}; C.int a[][3]={}; D.int a[2][3]={{1},{2},{3,4}}; 3、设int x=3,y=4,z=5,则下列表达式中的值为0的是( D ) A) …x?&&?y?B) x||y+z&&y-z C) x<=y D) !((x

A)5 B) 6 D) 7 D 9 9、若有定义,char *p=”computer”; 则语句printf(“%c”,*(p+2))运行结果是( B ) A) 随机值B) m C)o D) omputer 10、有以下程序( D ) main() { int i=0,x=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i++; s+=i; }; printf("%d\n",s); } 程序运行后的输出结果是 A.10 B.13 C.21 D.程序进入死循环 11、以下定义语句中正确的是( C ) A.char a='A'b='B'; B.float a=b=10.0; C.int a=10,*b=&a; D.float *a,b=&a; 12、设有int x=11;则表达式(x++*l/3)的值为( B )。 (A)3 (B)4 (C)11 (D)12 13、在说明一个结构体变量时系统分配给它的存储空间是( D ) A)该结构体中第一个成员变量所需存储空间B) 该结构体中最后一个成员变量所需存储空间 C)该结构体中占用最大存储空间的成员变量所需存储空间D) 该结构体中所有成员变量所需存储空间的总和

java数组之二维数组

数组的元素也可以是数组,每个数组的一个元素都是由一个一维数组构成,被称为二维数组。同样,多维数组可以看作是数组的数组,即N维数组的每一个元素就是一个N-1维数组。如:三维数组中的每一个元素都是一个二维数组。多维数组的定义即初始化与二维数组的基本类似,因此本节主要讲述二维数组。 1 、二维数组的声明 二维数组声明的一般格式如下: 数据类型数组名[][]; 或者格式如下: 数据类型[][] 数组名; 其中数据类型与一维数组的相同,它既可以是基本数据类型,也可以是复合数据类型,数组名可以是任意合法的变量名。下面是数组声明举例。 char ch[][]; double[][] d; String[][] str; 与一维数组的声明相同,二维数组也不需要规定其中任意一维的长度,下面的声明都是不合法的。 char ch[4][]; double[][5] d; String[6][7] str; 2、二维数组的初始化 二维数组的初始化也分为直接初始化和动态初始化两种方式。直接初始化必须在声明时开始,如下 ··124面的例子所示。 int array[][] = {{1,2},{2,4},{4,8}}; 二维数组的动态初始化又可分为两种方式:一种是直接规定每一维的长度,并分配所需的内存空间,另一种是从高维开始,分别为每一维规定长度并分配内存空间。

直接为每一维分配内存的格式如下: 变量名= new 数据类型[二维长度][一维长度]; 其中二维长度和一维长度都是大于0的整数,如下所示。 int array[][]; array = new int[3][5]; array是一个二维数组,二维长度为3,array[0]、array[1]、array[2]都是一维数组,长度都是5。分别分配内存格式如下: 变量名= new 数据类型[二维长度][]; 变量名[0] = new 数据类型[一维长度0]; 变量名[1] = new 数据类型[一维长度1]; 变量名[2] = new 数据类型[一维长度2]; ... 变量名[二维长度-1] = new 数据类型[一维长度n]; 下面是一个二维数组初始化的实例。 Int array[][]; //声明int类型二维数组array A = new int[3][]; //为二维分配内存空间 A[0] = new int[5]; //为A[0]的一维分配内存空间 A[1] = new int[5]; //为A[1]的一维分配内存空间 A[2] = new int[5]; //为A[2]的一维分配内存空间 3、二维数组的空间模型

二维数组的动态分配与释放

二维数组的动态分配与释放 1. C语言动态分配二维数组 (1)已知第二维 Code-1 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(char) * M*N); //注意M为数组的行,N为数组的列printf("%d\n", sizeof(a));//4,指针 printf("%d\n", sizeof(a[0]));//N*sizeof(char),一维数组 free(a); (2)已知第一维 Code-2 char* a[M];//指针的数组 int i; for(i=0; i

JAVA一维数组二维数组运用的例子

题目:定义一个一维数组存储10个学生名字;定义一个二维数组存储这10个学生的6门课(C程序设计、物理、英语、高数、体育、政治)的成绩; 程序应具有下列功能: (1)按名字查询某位同学成绩 (2)查询某个科目不及格的人数,及学生名单 代码如下: import java.util.*; public class Test{ public static void main(String[]args){ Scanner input=new Scanner(System.in); String[]name={"a","b","c","d","e","f","g","h","i","l"};//存储学生的名字 int[][] grade={{50,60,70,80,90,10},{40,90,80,60,40,70},{60,80,70,60,40,90},{50,60,70,80,90,10}, {60,80,70,60,40,90},{60,70,80,90,70,70},{60,80,70,60,40,90},{60,80,70,60,40,90},{70, 80,90,70,70,70},{60,80,70,60,40,90}};//存储学生各科成绩 System.out.println("输入要查询成绩的学生名字:"); String chioce=input.nextLine(); for(int i=0;i<10;i++) { if(name[i].equals(chioce)) {System.out.println("学生:"+name[i]+"的成绩如下:"); System.out.println("C程序设计:"+grade[i][0]+"物理:"+grade[i][1]+"英 语:"+grade[i][2]+"高数:"+grade[i][3]+"体育:"+grade[i][4]+"政治:"+grade[i][5]+"\n"); break;} } System.out.println("******************************************************");

C++定义动态数组

C++定义动态数组 首先:为什么需要动态定义数组呢? 这是因为,很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出 但是问题是,c++要求定义数组时,必须明确给定数组的大小,要不然编译通不过 如:int Array[5];正确 int i=5; int Array[i]; 错误因为在编译阶段,编译器并不知道i 的值是多少 那么,我们该如何解决定义长度未知的数组呢? 答案是:new 动态定义数组 因为new 就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间 这样,下面的语句: int size=50; int *p=new int[size]; 是正确的 但是二维动态数组能不能也这样定义呢 int size=50,Column=50; int (*p)[Column]=new int [size][Column] 这样的语句,编译器通不过,为什么呢? 首先new int[size][Column] 就是动态生成时确定的,所以它没有错 那么就是int(*p)[Column],这句有问题了,这句为什么不对呢,那是因为,这是一个定义语句,而定义语句先经过编译器进行编译,当编译器运行到此处时,发现Column 不是常数,因此不能通过编译。而之所以编译器认为Column 不是常数,是因为编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句(只是对这个语句检查错误,和分配空间),因此编译阶段,它将认为column 是个变量。所以上面的二维数组定义是错误的,它不能通过编译。 改成这样: int size=50 int (*p)[50]=new int [size][50] 便正确了。 由此可见,这种动态分配数组,仅对一维数组空间是真正动态分配的。 但是如何真正的动态分配二维数组呢,即如果Column 也不能预先知道的话,该如何处理呢? 上面的动态分配已经不能满足我们的要求,因为上面动态分配只对一维数组是真正动态的,对二维

给定一个二维数组a[6][6],分别定义函数求出该数组最大元素和其下标,最小元素和其下标,每行元素之和以及主

#include int main (void) { int hang,lie,i,j,a[6][6]; double sum; printf("enter 36 integers:"); for(i=0;i<6;i++) for(j=0;j<6;j++) scanf("%d",&a[i][j]); for(i=0;i<6;i++) for(j=0;j<6;j++) printf("%4d",a[i][j]); printf("\n"); hang=lie=0; sum=0; for(i=0;i<6;i++) for(j=0;j<6;j++) if(a[i][j]>a[hang][lie]){ hang=i; lie=j; } printf("max=a[%d][%d]=%d\n",hang,lie,a[hang][lie]); for(i=0;i<6;i++) for(j=0;j<6;j++) if(a[i][j]

printf("这行元素之和为%lf\n",sum); for(i=0;i<6;i++) for(j=0;j<6;j++) if(i=j){ sum=sum+a[i][j]; } printf("对角线元素之和为%lf\n",sum); for(i=0;i<6;i++) for(j=0;j<6;j++) if(i+j==5){ sum=sum+a[i][j]; } printf("副对角线之和为%lf\n",sum); return 0; } }

数组c习题答案解析

习题 4 一、单项选择题 1. 若有说明int a[3][4];则a数组元素的非法引用是【】 A. a[0][2*1] B. a[1][3] C. a[4-2][0] D. a[0][4] 【答案】D 【解析】数组下标从0开始,a[0][4]的列下标越界。 2. 在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 【答案】C 3. 以下不正确的定义语句是【】 A. double x[5]={2.0,4.0,6.0,8.0,10.0}; B. int y[5]={0,1,3,5,7,9}; C. char c1[]={′1′,′2′,′3′,′4′,′5′}; D. char c2[]={′\x10′,′\xa′,′\x8′}; 【答案】B 【解析】初始值的个数大于数组的大小,系统会出现编译错误。 4. 对以下说明语句的正确理解是【】 int a[10]={6,7,8,9,10}; A. 将5个初值依次赋给a[1]至a[5] B. 将5个初值依次赋给a[0]至a[4] C. 将5个初值依次赋给a[6]至a[10] D. 因为数组长度与初值的个数不相同,所以此语句不正确 【答案】B 5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【】 A. 数组a的每个元素都可得到初值0 B. 二维数组a的第一维大小为1 C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小 D. 只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值 【答案】D 【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。元素a[0][0]和a[0][1]赋初值为0 ,其余元素初值系统默认为0。 6. 以下能对二维数组c进行正确的初始化的语句是【】 A. int c[3][]={{3},{3},{4}}; B. int c[][3]={{3},{3},{4}}; C. int c[3][2]={{3},{3},{4},{5}};

关于java用二维数组编杨辉三角(具体到步骤)

import javax.swing.JOptionPane; // import是引入的意思,javax.swing是sun为我们提 供的一个包,包中有一个类叫JoptionPane。 JOptionPane 是有助于方便地弹出要求用户提供值或向 其发出通知的标准对话框。它是用来编写图形用户界 面的一个类。 合起来讲就是:导入包javax.swing中JOptionPane这个 类,这样在你的这个文件中就能使用这个类了。 public class YH //public 是公开访问接口class是指这个java程序建立的类 YH是该程序的自定义命名。 { public static void main(String args[]) //公开访问的,static静态的,void无返回值的,main ()是方法执行入口,()里面为方法名。 { String row; // String 类型的传递是引用传递。也即是地址传递。 传的是row的地址。 int row1; //定义整型变量row1 row=JOptionPane.showInputDialog("输入行数:"); //将图形界面显示的“输入行数”获取 到的值,赋值给row row1=Integer.parseInt(row); // Integer.parseint(row)就是把整形对象Integer转换成 基本数据类型int(整数)。即把row转换为int型,方便接 下来为二维数组赋值。 int ss[][]=new int[row1][row1]; //用row1的赋值构建二维数组。 int i,j; //定义整型的i和j。其中i代表行,j代表列。 ss[0][0]=1; //为二维数组附上初值 ss[1][0]=1; ss[1][1]=1; //同上 for(i=2;i

C语言习题九数组的定义和使用

习题九数组的定义和使用 1. 有以下程序 void f (int b[]) { int i; for(i=2;i<6;i++) b[i]* =2;} main() { int a[10]={1,2,3,4,5,6,7,8,9,10},i; f(a); for(i=0;i<10;i++) printf("%d,",a[i]);} 程序运行后的输出结果是______。 A、1,2,3,4,5,6,7,8,9,10, B、1,2,6,8,10,12,7,8,9,10, C、1,2,3,4,10,12,14,16,9,10, D、1,2,6,8,10,12,14,16,9,10, 解析:本题在调用函数时,实参是&a[0]的地址,即把a[0]的地址传给形参,由条件i=2且i<6得出函数将对a[2]开始的4个元素(3,4,5,6)进行乘以2操作,结果分别为:a[2]=6,a[3]=8,a[4]=10,a[5]=12。a[0]、a[1]、a[6]、a[7]、a[8]、a[9]的值并没有发生变化,所以最后的输出结果为:1,2,6,8,10,12,7,8,9,10,。故本题答案选B。 2. 有以下程序 main() { int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t; for(i=0;i<4;i++) for(j=0;j<3;j++) for(k=j+1;k<4;k++) if(a[j][i]>a[k][i]) {t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;} /*按列排序*/ for(i=0;i<4;i++) printf("%d,",a[i][i]); } 程序运行后的输出结果是______。 A、1,6,5,7, B、8,7,3,1, C、4,7,5,2, D、1,6,2,1, 解析:本题首先定义了一个4行4列的二维数组a,并用了三层循环来进行按列由小到大排序操作。外层循环变量i表示数组的列,第二层循环变量j表示数组的行,第三层循环用于求第i列第j行的最小值,其中通过if语句对相关数值进行比较和交换。然后再通过for语句对排序数组对角线上的值进行输出,即输出a[0][0]、a[1][1]、a[2][2]、a[3][3]。故本题答案选A。 3. 有以下程序 main() { int i,t[][3]={9,8,7,6,5,4,3,2,1}; for(i=0;i<3;i++) printf("%d ",t[2-i][i]); } 程序执行后的输出结果是______。 A、7 5 3 B、3 5 7 C、3 6 9 D、7 5 1 解析:本题考查的是二维数组的应用。将初始值放在一对大括号内,按数组元素排列的顺序对各元素赋值,二维数组中行下标可以省略,但列下标必须要指定,由此题可以看出数组t是一个三行三列的二维数组,执行for循环语句t[2-i][i]分别为t[2][0],t[1][1],t[0][2],得出输出结果为3 5 7。故本题答案为B。

全国计算机2级 C语言 试题

第2套全真模拟试卷 一、选择题 (1)下列选项中不属于算法的特性的是 A)确定性B)可行性C)有输出D)无穷性 (2)下列叙述中正确的是 A)线性表是线性结构B)栈与队列是非线性结构 C)线性链表是非线性结构D)二叉树是线性结构 (3)设有下列二叉树: 对此二叉树中序遍历的结果为 A)ABCDEF B)DAECF C)BDAECF D)DBEFCA (4)结构化程序设计主要强调的是 A)程序的规模B)程序的易读性 C)程序的执行效率D)程序的可移植性 (5)在面向对象设计中,对象有很多基本特点,其中“从外面看只能看到对象的外部特性,而对象的内部对外是不可见的”这一性质指的是对象的 A)分类性B)标识唯一性C)多态性D)封装性 (6)用黑盒技术测试用例的方法之一为 A)因果图B)逻辑覆盖C)循环覆盖D)基本路径测试 (7)在进行单元测试时,常用的方法是 A)采用白盒测试,辅之以黑盒测试B)采用黑盒测试,辅之以白盒测试 C)只使用白盒测试D)只使用黑盒测试 (8)下面四个选项中,不属于数据库管理系统提供的数据语言的是 A)数据定义语言B)数据查询语言 C)数据操纵语言D)数据控制语言 (9)在关系数据库模型中,通常可以把()称为属性,其值称为属性值。 A)记录B)基本表C)模式D)字段 (10)实体联系模型中实体与实体之间的联系不可能是 A)一对一B)多对多C)一对多D)一对零 (11)用C语言编写的代码程序 A)可立即执行B)是一个源程序

C)经过编译即可执行D)经过编译解释即可执行 (12)以下叙述中正确的是 A)C语言的源程序不必通过编译就可以直接执行 B)C语言中的每条可执行语句最终都将被转换成二进制的机器指令 C)C源程序经编译形成的二进制代码可以直接运行 D)C语言中的函数不可以单独进行编译 (13)以下定义语句中正确的是 A)char a=′A′b′B′; B)float a=b=10.0; C)int a=10,*b=&a; D)float *a,b=&a; (14)有以下程序: main() { int a; char c=10; float f=100.0; double x; a=f/=c*=(x=6.5); printf(*%d %d %3 %3.1f %3.1f\n",a c, f, x); } 程序运行后的输出结果是 A)1 65 1 6.5 B)1 65 1.5 6.5 C)1 65 1.0 6.5 D)2 65 1.5 6.5 (15)数据库设计的根本目标是要解决 A)数据共享问题B)数据安全问题 C)大量数据存储问题D)简化数据维护 (16)设有定义:float a=2,b=4,h=3;,以下C语言表达式中与代数式1(a+b)h计算结果不相 2 符的是 A)(a+b)*h/2 B)(1/2)*(a+b)*h C)(a+b)*h*1/2 D)h/2*(a+b) (17)有以下程序 main() { int m=0256,n=256; printf("%o %o\n",m,n); } 程序运行后的输出结果是 A)0256 0400 B)0256 256 C)256 400D)400 400 (18)数据库系统的核心是 A)数据模型B)数据库管理系统C)数据库D)数据库管理员 (19)以下叙述中错误的是 A)用户所定义的标识符允许使用关键字 B)用户所定义的标识符应尽量做到“见名知意” C)用户所定义的标识符必须以字母或下划线开头 D)用户定义的标识符中,大、小写字母代表不同标识 (20)有以下程序: main() {

Java_数组练习题目

一填空题 1)数组的元素通过数组下标来访问,数组Array的长度为元素的个数 (Array.length)。 2)Java中数组的下标的数据类型是整形。 3)不用下标变量就可以访问数组的方法是数组名。 4)数组最小的下标是0 。 5)arraycopy()的最后一个参数指明复制元素的个数。 6)向方法传递数组参数时,传递的是数组的引用。 7)数组初始化包括数组的声明,创建,初始化。 8)数组下标访问超出索引范围时抛出数组越界异常 9)浮点型数组的默认值是0.0f 。 10)对象型数组的默认值是null 。 二选择题 1.下面错误的初始化语句是_A B D__ A. char str[]="hello"; B. char str[100]="hello"; C. char str[]={'h','e','l','l','o'}; D. char str[]={'hello'}; 2.定义了一维int型数组a[10]后,下面错误的引用是_B_ A. a[0]=1; B. a[10]=2; C. a[0]=5*2; D. a[1]=a[2]*a[0]; 3.下面的二维数组初始化语句中,正确的是__B__ A. float b[2][2]={0.1,0.2,0.3,0.4}; B. int a[][]={{1,2},{3,4}}; C. int a[2][]= {{1,2},{3,4}}; D. float a[2][2]={0}; 4.引用数组元素时,数组下标可以是__D__ A. 整型常量 B. 整型变量 C. 整型表达式 D. 以上均可 5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为__C__ A. 24 B. 25 C. 18 D. 17 6.下列初始化字符数组的语句中,正确的是_B___ A. char str[5]="hello"; B. char str[]={'h','e','l','l','o','\0'}; C. char str[5]={"hi"}; D. char str[100]=""; 7.数组在Java中储存在 C 中 A. 栈 B. 队列 C. 堆 D. 链表

第五章二维数组的定义和引用

二维数组的定义和引用 注:教案尾页有小结和作业 第5章数组 本书前几章介绍了C语言中几种简单数据类型。在本章中将介绍一种新的构造类型:数组。数组是一种最简单的构造类型,它包含着一组具有同一类型的变量,这些变量在内存中的存储位置是连续的。在解决实际问题时数组有着广泛的应用。本章介绍了C语言中一维数组、二维数组及字符数组的定义、初始化及使用方法等。 5.1 一维数组的定义和引用 一、一维数组的定义 C语言规定:数组必须先定义,后使用。一维数组的格式为: 类型说明符数组名[常量表达式]; 例如:float score[10]; 它表示定义了一个名为score的数组,该数组有10个元素,其存放的数据类型应为实型。 说明:(1)类型说明符用来说明数组元素的类型:int , char , float 或double。 (2)数组名的命名应遵守标识符的命名规则。 (3)数组名后是用方括号括起来的常量表达式。常量表达式表示的是组元素的个数,即数组的长度。在上例中定义了数组score[10],该数组有 10个元素,其下标从0开始。 注意:不要使用score[10], 因为它不是该数组的元素。 (4)常量表达式中可以包括常量和符号常量,不能包含变量,因为C 语言规定数组不能动态定义。 二、一维数组的初始化 数组的初始化是指在定义数组时给数组元素赋初值。一维数组初始化的格式为: 类型说明符数组名[常量表达式]={常量列表}; 例如int a[5]={2,4,6,8,10}; 其作用是在定义数组的同时将常量2、4、6、8、10分别置于数组元素a[0]、a[1]、a[2]、a[3]、a[4]中。 说明:(1)常量列表可以是数值型、字符常量或字符串。 (2)数组元素的初值必须依次放在一对大括号内,各值之间用逗号隔开。 (3)可以只给部分数组元素赋初值。例如: int a[10]={1,2,3,4,5}; (4)在进行数组的初始化时,{ }中值的个数不能超过数组元素的个数。 例如:int a[5]={1,2,3,4,5,6,7,8}; 是一种错误的数组初始化方式。 (5)在给数组所有元素赋初值时,可以不指定数组长度。例如: int a[ ]={1,2,3,4,5}; 则系统会自动定义数组a的长度为5。 (6)定义数组时不进行初始化,则该数组元素的值是不确定的。如果欲将数组所有元素的初值置为0,可以采用如下方式: static int a[10]; 三、一维数组元素的引用 C语言规定数组不能以整体形式参与数据处理,只能逐个引用数组元素。一维数组的引用方式为:

RACI责任分配矩阵

RACI 什么是RACI模型?释义 RACI是一个相对直观的模型,用以明确组织变革过程中的各个角色及其相关责任。我们知道,变革过程是不可能自发或者自动进行的,必须有人对其进行作用,促使进程发生变化。因而,就很有必要对谁做什么,以及促发什么样的变革进行定义和描述。 除了RACI以外,还有RASCI或RASIC都是用来描述变革过程中的角色、任务的。 RACI的具体含义英文缩写 · 谁负责(R = Responsible),即负责执行任务的角色,他/她具体负责操控项目、解决问题。 · 谁批准(A = Accountable),即对任务负全责的角色,只有经他/她同意或签署之后,项目才能得以进行。 · 谁支持(S = Supportive),即提供信息资源,辅助执行任务的人员。 · 咨询谁(C = Consulted),拥有完成项目所需的信息或能力的人员。 · 通知谁(I =Informed), 即拥有特权、应及时被通知结果的人员,却不必向他/她咨询、征求意见。 RACI模型通常利用RACI表来帮助讨论、交流各个角色及相关责任。(参见右图) RACI的步骤 1. 辨识整个流程、找出各项活动,将它们记录在RACI表的左侧。 2. 辨识流程、活动中的所有角色,将它们记录在RACI表的上方。 3. 完成RACI表的方格单元:辨识每一个流程、活动的角色(R、A、S、C、I)。 4. 每一个流程最好只有一个“R”角色,这是RACI的一般原则。当一个流程找不到“R”角色时,则出现缺口。当一个流程有多个“R”角色时,则出现交叠。 5. 解决交叠问题。每个流程只能有一个“R”角色,以便明确流程的具体拥有者和责任。如果不止一个“R”存在,那么就要对该流程进行再分解,然而再对“R”进行分配。

大连理工大学c语言题库2

1. C语言中运算对象必须是整型的运算符是()。 A、= B、%= C、〈= D、/ 2.下列字符序列中,不可用作C语言标识符的是()。 A、b70 B、a_1 C、#ab D、symbol 3.下列程序的输出结果是()。 main() {int a=011; printf("%d\n",++a); } A、11 B、9 C、12 D、10 4.逻辑表达式5>3&&2||8<4-!0的值为:( ) A、3 B、2 C、1 D、0 5.下列选项中,合法的C语言关键字是()。 A、integer B、default C、VAR D、cher 6.下列程序的输出为()。 main() { int y=10; while(y--); printf("y=%d\n",y); } A、y=-1 B、y=0 C、y=1

D、while构成无限循环 7.以下表述中正确的是( ). A、在do-while循环中,while表达式的值不能为"假" B、do-while循环中,while语句不能省略 C、do-while循环中,while(表达式)后面不能加分号 D、除了for循环,其他循环中都不能使用复合语句 8.以下不能正确定义二维数组的选项是()。 A、int a[2][]={{1,2},{3,4}}; B、int a[2][2]={{1},2,3}; C、int a[2][2]={{1},{2}}; D、int a[][2]={1,2,3,4}; 9. int a[10]; 给数组a的所有元素分别赋值为1、2、3、……的语句是()。 A、for(i=1;i<11;i++)a[i]=i; B、for(i=1;i<11;i++)a[0]=1; C、for(i=1;i<11;i++)a[i+1]=i; D、for(i=1;i<11;i++)a[i-1]=i; 10.若有说明: int a[3][4]={0};则下面正确的叙述是()。 A、数组a中每个元素均可得到初值0 B、只有元素a[0][0]可得到初值0 C、数组a中各元素都可得到初值,但其值不一定为0 D、此说明语句不正确 11.以下叙述错误的是(). A、函数调用可以出现在一个表达式中 B、函数调用可以作为一个函数的形参 C、函数调用可以作为一个函数的实参 D、函数允许递归调用 12.以下叙述不正确的是(). A、全局变量可以由系统自动初始化 B、在程序运行期间,全局变量所占存储单元的值永久保留 C、当局部变量与全局变量重名时,全局变量起作用 D、全局变量存放在静态存储区 13.函数的形式参数系统默认存储类型说明是()。 A、static B、extern C、register D、auto 14.设有宏定义#define MAX(x,y) (x)>(y)?(x):(y),则F=4*MAX(2,3)的值为( ). A、3

RACI责任分配矩阵

R A C I责任分配矩阵 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

RACI 什么是RACI模型?释义 RACI是一个相对直观的模型,用以明确组织变革过程中的各个角色及其相关责任。我们知道,变革过程是不可能自发或者自动进行的,必须有人对其进行作用,促使进程发生变化。因而,就很有必要对谁做什么,以及促发什么样的变革进行定义和描述。 除了RACI以外,还有RASCI或RASIC都是用来描述变革过程中的角色、任务的。RACI的具体含义英文缩写 ·谁负责(R=Responsible),即负责执行任务的角色,他/她具体负责操控项目、解决问题。 ·谁批准(A=Accountable),即对任务负全责的角色,只有经他/她同意或签署之后,项目才能得以进行。 ·谁支持(S=Supportive),即提供信息资源,辅助执行任务的人员。 ·咨询谁(C=Consulted),拥有完成项目所需的信息或能力的人员。 ·通知谁(I=Informed),即拥有特权、应及时被通知结果的人员,却不必向他/她咨询、征求意见。 RACI模型通常利用RACI表来帮助讨论、交流各个角色及相关责任。(参见右图)RACI的步骤 1.辨识整个流程、找出各项活动,将它们记录在RACI表的左侧。 2.辨识流程、活动中的所有角色,将它们记录在RACI表的上方。 3.完成RACI表的方格单元:辨识每一个流程、活动的角色(R、A、S、C、I)。 4.每一个流程最好只有一个“R”角色,这是RACI的一般原则。当一个流程找不到“R”角色时,则出现缺口。当一个流程有多个“R”角色时,则出现交叠。 5.解决交叠问题。每个流程只能有一个“R”角色,以便明确流程的具体拥有者和责任。如果不止一个“R”存在,那么就要对该流程进行再分解,然而再对“R”进行分配。 6.解决缺口问题。如果某个流程找不到“R”角色,这时对流程或项目负全责的权威人士则应该在现有角色中(或者发现新人选)挑选、任命一人担任“R”。更新RASCI表,对各个角色及其相关责任进行阐述

java数组的概念和作用

1 数组的概念 和其他语言一样,Java也提供数组支持,数组是属于引用类型,即数组是一个 对象。 强调数组的类型是引用类型。 数组的基本概念及作用 数组是相同数据类型元素的集合 数组本身是引用数据类型,即对象。但是数组可以存储基本数据类型,也可以存储引用数据类型。 数组的举例 int [] a = new int []{1,2,3,4,5}; String [] s = new String []{"小熊","小小熊","小小小熊"}; Employee [] e=new Employee[10];(Employee是自定义类) 2 数组的声明 数组的声明的两种方式: 数据类型 [] 数组名字例如:int [] a; 数据类型数组的名字 [] 例如: int a []; 注意: 在Java语言中两种声明方法没有任何区别,但是建议大家用第一种,避免混淆a的数据类型。 数组在声明后还只是一个空指针,不能使用,要想使用必须创建。 数组创建的三种方式:

?//声明数组的同时,根据指定的长度分配内存,但数组中元素值都为默认的初始化值 char[] chAry = new char[10]; ?//声明数组并分配内存,同时将其初始化 ?int[] ary1 = new int[]{1, 2, 3, 4, 5}; ?//与前一种方式相同,仅仅只是语法相对简略 ?int[] ary2 = {1, 2, 3, 4, 5}; 从另一个角度,数组创建可以分为动态和静态两种 动态创建数组(没有为元素赋值,可以结合for循环进行赋值) char[] chAry = new char[10]; 静态创建数组,在创建的时候,即为每个元素赋初值 int[] ary1 = new int[]{1, 2, 3, 4, 5}; 数组的长度 数组的长度:length属性 int [] b1 = new int []{1,2,3,4,5,6,7}; System.out.println(b1.length); 注意:数组的长度是属性,String的长度是length(); 创建数组的时候必须指定数组的长度,而且一经定义则不允许改变。 数组的长度虽然是7,但是在内存中实际给8个位置,另外一个存储7. 数组之间赋值 在C语言中,不可以将数组直接赋值给另一个数组;

相关主题