下列说法正确的是()A、 在C#中,编译时对数组下标越界将作检查B、 在C#中,程序运行时,数组下标越界也不会产生异常C、 在C#中,程序运行时,数组下标越界是否产生异常由用户确定D、 在C#中,程序运行时,数组下标越界一定会产生异常

题目

下列说法正确的是()

  • A、 在C#中,编译时对数组下标越界将作检查
  • B、 在C#中,程序运行时,数组下标越界也不会产生异常
  • C、 在C#中,程序运行时,数组下标越界是否产生异常由用户确定
  • D、 在C#中,程序运行时,数组下标越界一定会产生异常
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

●对高级语言源程序进行编译时,可发现源程序中的(8)错误。

(8)A.堆栈溢出

B.变量未定义

C.指针异常

D.数组元素下标越界


正确答案:B

第2题:

以下叙述中错误的是( )。A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界的出错信息”D)可以通过赋初值的方式确定数组元素的个数


正确答案:C
在C语言中,当程序执行中,数组元素的下标超出所定义的下标范围时,系统不会有提示。

第3题:

下列常见的系统定义的异常中,() 是数组下标越界异常。

A.ArithmeticException

B.IOException

C.ArrayIndexOutOfBoundsException

D.NullPointerException


参考答案:C

第4题:

以下叙述中错误的是( )。

A.对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B.数组名代表的是数组所占存储区的首地址,其值不可改变

C.当程序执行过程中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

D.可以通过赋初值的方式确定数组元素的个数


正确答案:C
解析:在c语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出“下标越界”的错误提示。

第5题:

试题(21)

对高级语言源程序进行编译时,可发现源程序中的 (21) 错误。

(21)

A. 堆栈溢出

B. 变量未定义

C. 指针异常

D. 数组元素下标越界


正确答案:B

试题(21)分析
本题考查编译过程基本知识。
高级语言源程序中的错误分为两类:语法错误和语义错误,其中语义错误又可分为静态语义错误和动态语义错误。语法错误指语言结构上的错误,静态语义错误指编译时就能发现的程序含义上的错误,动态语义错误只有在程序运行时才能表现出来。堆栈溢出、指针异常和数组元素下标越界都是程序运行中才能出现的问题,而遵循先声明后引用原则的程序语言必须先定义变量,然后才能使用,否则编译器会在语法分析阶段指出变量未定义错误。
参考答案
(21)B

第6题:

●对于高级语言源程序,若(19),则可断定程序中出现语法错误。

(19)A.编译时发现表达式中操作数的类型不匹配

B.编译时发现表达式中的括号不匹配

C.运行时出现数组下标越界的情况

D.运行时出现除数为0的情况


正确答案:B

第7题:

对高级语言源程序进行编译时,可发现源程序中的(21)错误。

A.堆栈溢出

B.变量未定义

C.指针异常

D.数组元素下标越界


正确答案:B
解析:本题考查编译过程基本知识。高级语言源程序中的错误分为两类:语法错误和语义错误,其中语义错误又可分为静态语义错误和动态语义错误。语法错误指语言结构上的错误,静态语义错误指编译时就能发现的程序含义上的错误,动态语义错误只有在程序运行时才能表现出来。堆栈溢出、指针异常和数组元素下标越界都是程序运行中才能出现的问题,而遵循先声明后引用原则的程序语言必须先定义变量,然后才能使用,否则编译器会在语法分析阶段指出变量未定义错误。

第8题:

在Java语言中,在程序运行时会自动检查数组的下标是否越界,如果越界,会抛掷下面的()异常。

A.NullpointerException

B.ArithmeticExceptioin

C.ArrayIndexOutOfBoundsException

D.SecurityManager


参考答案:C

第9题:

阅读以下程序说明和C++程序,将程序段中(1)~(5)空缺处的语句填写完整。

[说明]

C++语言本身不提供对数组下标越界的判断。为了解决这一问题,在以下[C++程序]中定义了相应的类模板,使得对于任意类型的二维数组,可以在访问数组元素的同时,对行下标和列下标进行越界判断,并给出相应的提示信息。

[C++程序]

include <iostream.h>

template <class T> class Array;

template <Class T> class ArrayBody {

friend (1);

T* tpBody;

int iRows,iColumns, iCurrentRow;

ArrayBody(int IRsz, int iCsz) {

tpBody =(2);

iRows = iRsz;

iColumns = iCsz;

iCurrentRow = -1;

}

Public:

T& operator[] (int j) {

bool row_error, column_error;

row_error = column_error =false;

try {

if (iCurrentRow < 0 || iCurrentRow >= iRows)

row_error = true;

if (j<0 || j>= iColumns)

column_error = true;

if (row_error == true || column_error == true)

(3);

}

catch(char){

if (row_error == true)

cerr << "行下标越界[" << iCurrentRow << "]";

if (column_error = true)

cerr << "列下标越界[" << j << "]";

cout << "\n";

}

return tpBody[iCurrentRow * iColumns + j];

}

~Arraygody(){delete[]tpBody;}

};

template <class T> class Array {

ArrayBody<T> tBody;

Public;

ArrayBody<T> & operator[] (int i) {

(4);

return tBody;

}

Array(int iRsz, int iCsz) :(5) { }

};

void main()

{

Array<int> a1(10,20);

Array<double> a2(3,5);

int b1;

double b2;

b1 = a1[-5][10]; //有越界提示:行下标越界[-5]

b1 = a1[10][15]; //有越界提示:行下标越界[10]

b1 = a1[1][4]; //没有越界提示

b2 = a2[2][6]; //有越界提示:列下标越界[6]

b2 = a2[10][20]; //有越界提示:行下标越界[10]列下标越界[20]

b2 = a2[1][4]; //没有越界提示

}


正确答案:这是一道要求读者掌握类模板和友元的使用方法的程序设计题。本题的解答思路如下。 模板可以实现逻辑相同、数据类型不同的程序代码的复制模板机制可以减轻编程和维护的工作量和难度。模板可以分为函数模板和类模板。类模板的一般定义形式为: template类型形参表>class类名{类声明体} 在所有出现类模板的地方不能直接用类名表示需要加上类型形参表>。 友元是一种定义在类外部的普通函数或类但它需要在类体内进行说明。为了与该类的成员函数加以区别说明时在前面加上关键字friend。友元不是成员函数但是它可以访问类中的私有成员。友元的作用在于提高程序的运行效率但是它破坏了类的封装性和隐藏性使得非成员函数可以访问类的私有成员。 友元可以是一个函数该函数被称为友元函数。友元也可以是一个类该类被称为友元类。 本试题中(1)空缺处的前面是友元关键字friend但程序中没有独立的函数所以只能是另一个模板类Array即(1)空缺处所填写的内容是“class ArrayT>”。 在类模板ArrayBody的定义中声明了成员变量“T tpBody”且在析构函数中有“delete[]tpBody;”。由于在C++中delete总是和new成对出现的因此(2)空缺处应该使用new对tpBody进行初始化。通过程序中“return tpBody[iCurrentRow*iColumns+i];”语句可知该题中采用的是以一维数组来模拟二维数组的创建。在构造函数有两个参数分别为行数和列数。因此(2)空缺处所填写的内容是“new T[iRsz*iCsz]”。 (3)空缺处所在的语句前后有try{...}和catch{...}语句序列这是C++中典型的异常处理搭配语句。因为(3)空缺处所在的语句前面已进行了如下处理当有行下标越界时置row_error=true;当有列下标越界时置column_error=true。(3)空缺处前面的判断是“row_error==true||column_error==tree”即只要有行下标越界或是列下标越界就执行(3)空缺处的语句。而错误处理语句已放在catch中予以处理。catch是当正常程序段发生异常时才执行的并且程序中指明了是catch(char)所以只要在(3)空缺处抛出一个catch异常即可进行错误处理。故(3)空缺处所填写的语句是“throw'e'”其中throw之后可以填写任意的字符常数。 对于Array类中的(4)、(5)空缺处所填写的内容。首先看(5)空缺处该空缺处显然是进行变量赋初值等相关的初始化工作。而Array类只有一个成员变量tBody且tBody是ArrayBody类型的ArrayBody的构造函数需要传递两个参数分别代表数组的行和列因此(5)空缺处应填入“tBody(iRsziCsz)”。 通过main函数中对a1和a2的实例化就可大致了解整个程序。在main函数中实例化Array而在类 Array的构造函数对tBody这个变量进行实例化。此时就以一维数组的形式创建了二维数组。在类Array中[]运算符重载函数中返回了一个ArrayBody类而在ArrayBody也存在着[]运算符重载函数并且在ArrayBody的重载函数中对行下标和列下标同时进行了检查且返回了一个T类型。对Arrayint>来说就是返回了int即数组的一个元素。通过对类ArrayBody的观察发现在整个ArrayBody中并没有任何地方对iCurrentRow进行赋值而在ArrayBody的[]运算符重载中却利用其对数组行下标进行判断而数组的行下标只在Array的[]运算符重载中出现那(4)空缺处就应该是对类ArrayBody 的成员变量iCurrentRow进行赋值本题的该空缺处所填入的内容是“tBody.iCurrentRow=i”。
这是一道要求读者掌握类模板和友元的使用方法的程序设计题。本题的解答思路如下。 模板可以实现逻辑相同、数据类型不同的程序代码的复制,模板机制可以减轻编程和维护的工作量和难度。模板可以分为函数模板和类模板。类模板的一般定义形式为: template类型形参表>class类名{类声明体} 在所有出现类模板的地方不能直接用类名表示,需要加上类型形参表>。 友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明。为了与该类的成员函数加以区别,说明时在前面加上关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但是它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。 友元可以是一个函数,该函数被称为友元函数。友元也可以是一个类,该类被称为友元类。 本试题中,(1)空缺处的前面是友元关键字friend,但程序中没有独立的函数,所以只能是另一个模板类Array,即(1)空缺处所填写的内容是“class ArrayT>”。 在类模板ArrayBody的定义中,声明了成员变量“T tpBody”,且在析构函数中有“delete[]tpBody;”。由于在C++中,delete总是和new成对出现的,因此(2)空缺处应该使用new对tpBody进行初始化。通过程序中“return tpBody[iCurrentRow*iColumns+i];”语句可知,该题中采用的是以一维数组来模拟二维数组的创建。在构造函数有两个参数,分别为行数和列数。因此(2)空缺处所填写的内容是“new T[iRsz*iCsz]”。 (3)空缺处所在的语句前后有try{...}和catch{...}语句序列,这是C++中典型的异常处理搭配语句。因为(3)空缺处所在的语句前面已进行了如下处理,当有行下标越界时,置row_error=true;当有列下标越界时,置column_error=true。(3)空缺处前面的判断是“row_error==true||column_error==tree”,即只要有行下标越界或是列下标越界就执行(3)空缺处的语句。而错误处理语句已放在catch中予以处理。catch是当正常程序段发生异常时才执行的,并且程序中指明了是catch(char),所以只要在(3)空缺处抛出一个catch异常,即可进行错误处理。故(3)空缺处所填写的语句是“throw,'e'”,其中throw之后可以填写任意的字符常数。 对于Array类中的(4)、(5)空缺处所填写的内容。首先看(5)空缺处,该空缺处显然是进行变量赋初值等相关的初始化工作。而Array类只有一个成员变量tBody,且tBody是ArrayBody类型的ArrayBody的构造函数需要传递两个参数,分别代表数组的行和列,因此(5)空缺处应填入“tBody(iRsz,iCsz)”。 通过main函数中对a1和a2的实例化,就可大致了解整个程序。在main函数中实例化Array,而在类 Array的构造函数对tBody这个变量进行实例化。此时就以一维数组的形式创建了二维数组。在类Array中[]运算符重载函数中返回了一个ArrayBody类,而在ArrayBody也存在着[]运算符重载函数,并且在ArrayBody的重载函数中对行下标和列下标同时进行了检查,且返回了一个T类型。对Arrayint>来说,就是返回了int,即数组的一个元素。通过对类ArrayBody的观察发现,在整个ArrayBody中并没有任何地方对iCurrentRow进行赋值,而在ArrayBody的[]运算符重载中却利用其对数组行下标进行判断,而数组的行下标只在Array的[]运算符重载中出现,那(4)空缺处就应该是对类ArrayBody 的成员变量iCurrentRow进行赋值,本题的该空缺处所填入的内容是“tBody.iCurrentRow=i”。

第10题:

以下程序执行的结果是什么?()int[]myArray=newint[3];try{for(inti=0;i<=myArray.length;i++){myArray[i]=i*3;System.out.println("myArray数组的第"+i+"个元素的值是:"+myArray[i]);}}catch(ArrayIndexOurOfBoubsExceptione){System.out.println("数组下标越界");}

A.程序执行,屏幕上显示“数组下标越界”

B.程序出现异常,屏幕上提示出现数组下标越界异常

C.程序正常执行结束,屏幕上显示数组中每个元素的值

D.程序编译出错


参考答案:A

更多相关问题