参考答案 - 作业第 4 章(1)数组字符数组

参考答案 - 作业第 4 章(1)数组、字符数组

参考答案────数组、字符数组

【学习要点】

1.掌握一维数组的逻辑结构和物理结构。 2.掌握一维数组的定义、初始化及其使用。

3.掌握函数参数为数组时,函数参数的正确传递。

4.掌握数组应用的常用算法━━选择排序、冒泡排序、顺序查找、折半查找 5.掌握二维数组的逻辑结构和物理结构。 6.掌握二维数组的定义、初始化及其使用。

7.掌握字符数组的特点、定义、初始化及其使用,掌握字符数组的整体输入/输出。8.掌握字符串处理的基本函数。

------------------------------------------------------------------------------------------------------------------------------------------------- 【例题分析】

1.关于数组,下面描述中正确的是______。

A.与普通变量没什么区别

B.其元素的数据类型可相同,也可不同 C.可用数组名标识其元素

D.数组元素的数据类型是相同的【答案】D

【解析】数组是一组具有线性关系且类型相同变量的集合体,用一个统一的数组名来命名,组成数组的变量称为数组元素,用数组名、方括号和下标来共同标识数组中的一个元素,下标代表该元素在数组中的位置(从0开始),数组元素也称为下标变量。

2.下面合法的数组定义是______。

A.int a[ ] = { 'A', 'B', 'C' } ;

B.int a[ 5 ] = { 0, 1, 2, 3, 4, 5 } ; C.int a = { 'A', 'B',

'C' } ;

D.int a[ ] = { 0, 1, 2, 3, 4, 5 } ; 【答案】D

【解析】根据数组定义和初始化情况,数组类型与所赋初始数据的类型应一致。指定的数组长度应大于或等于花括号中的初始数据个数。定义数组时,可以不直接指定数组的

长度,编译器会根据初值表中数据的个数来自动确定数组元素的个数。3.若有定义 int a[ 2 ][ 4 ],则下面描述中不正确的是______。

A.数组a可以看成是由a[ 0 ]、a[ 1 ]两个元素组成的一维数组 B.a[ 0 ]代表一个地址常量

C.元素a[ 0 ]是由4个整型元素组成的一维数组 D.可用a[ 0 ]=5的形式给数组元素赋值【答案】D

【解析】C++对二维数组的处理是将其看作一个特殊的一维数组,即这个数组中每个元素又是一个一维数组。所以二维数组a可认为是由两个元素a[ 0 ]、a[ 1 ]组成的一维数组,而数组元素a[ 0 ]和a[ 1 ]又是由4个int型元素组成的一维数组。C++规定了数组名代表地址常量,但数组名的值是不可改变的,故赋值语句 a[ 0 ]=5 是非法的。

4.若有定义 int a[ 3 ][ 4 ],则对数组a 的元素非法引用是______。

A.a[ 0 ][ 2*1 ] B.a[ 0 ][ 4 ] C.a[ 4-2 ][ 0 ] D.a[ 1 ][ 3 ] 【答案】B

【解析】引用二维数组元素的格式为:数组名[ 下标表达式1 ][ 下标表达式2 ],而下标表达式可以是常量、变量,但其值必须是确定的整数且在该数组的定义范围之内,在程序执行过程中,C++对下标表达式的取值范围不作合法性检查,非法引用可能产生不可预知的运行时错误。

5.下面程序的运行结果是______。

#include

void main() { char s[ 10 ] ; s=\ cout<

B.不确定的值 C.数组s的首地址 D.编译出错【答案】D

【解析】字符数组的赋值,不能通过赋值语句实现,可通过初始化或strcpy()函数来实现,即:可在程序前面加上 #include ,并将 s=\改为strcpy( s , “abcd” ); 后程序的运行结果是abcd。 6.若有定义 char s1[ 10 ], s2[ 10 ],能判断字符串s1是否大于字符串s2的是______。

A.if ( s1>s2 )

B.if ( strcmp( s1, s2 ) ) C.if ( strcmp( s1, s2 ) > 0 ) D.if

( (s1-s2)> 0 ) 【答案】C

【解析】两个字符串比较必须使用字符串比较函数 strcmp( 字符串1,字符串2 ),比较的结果:相等时返回0;大于时返回正整数;小于时返回负整数。

7.若int a[3][4]={{1,2},{0},{4,6,8,10}}; 则a[1][2]、a[2][1]得到的初值分别是______。【答案】0、6

【解析】在定义数组时,可对所有元素赋初值,也可只对前面部分的元素赋初值,而后面部分未给初值的元素,系统自动赋初值为0。二维数组中元素排列的顺序是以行为单位进行存放,按初值表中的{ }作为行元素进行赋初值。

感谢您的阅读,祝您生活愉快。

第四章 数组作业

第四章数组 4.1 选择题 1. 以下关于数组的描述正确的是( )。 A. 数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组元素 2. 以下对一维整型数组a的正确说明是( )。 A.int a(10); B. int n=10,a[n]; C.int n; D. #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是( )。 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 4. 以下对一维数组m进行正确初始化的是( )。 A. int m[10]=(0,0,0,0) ; B. int m[10]={ }; C. int m[ ]={0}; D. int m[10]={10*2}; 5. 若有定义:int bb[ 8];。则以下表达式中不能代表数组元bb[1]的地址的是( )。 A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1 6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存 中所占字节数是( )。 A. 3 B. 6 C. 10 D. 20 7. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g; 则数值为4的表达式是( ) A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] 8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入( )。 #include main() { int a[10],i=0; while(i<10) scanf("%d",________ ); ┇ } A. a+(i++) B. &a[i+1] C. a+i D. &a[++i]

第410章作业部分参考答案

第4-5章作业答案: 1. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。 2、设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950 。 答:不考虑0行0列,利用列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L 得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=8950 第6章作业答案: 1.画出和下列二叉树相应的森林。 答:注意根右边的子树肯定是森林, 而孩子结点的右子树均为兄弟。 2.编写递归算法,计算二叉树中叶子结点的数目。 思路:输出叶子结点比较简单,用任何一种遍历算法,凡是左右指针均空者,则为叶子,将其统计并打印出来。 Int count_leaf(Bitree root,int &sum) //采用先序遍历的递归算法 { if ( root!=NULL ) //非空二叉树条件,还可写成if(root) {if(!root->lchild&&!root->rchild) //是叶子结点则统计并打印 {sum++; printf("%d\n",root->data);} count_leaf(root->lchild); //递归遍历左子树,直到叶子处; count_leaf(root->rchild); } //递归遍历右子树,直到叶子处; } return(0); } 3.编写递归算法,求二叉树中以元素值为a的结点为根的子树的深度。 int Get_Sub_Depth(Bitree T,int a)//求二叉树中以值为x的结点为根的子树深度 { if(T->data==x) { printf("%d\n",Get_Depth(T)); //找到了值为x的结点,求其深度 exit 1; } }

第4章 java课后作业_数组

第4张课后作业_数组 知识点:一维数组、二维数组 一、填空及选择: 1.数组元素的小标总是从___0___开始。 2.对于数组int[][]={{1,2,3},{4,5,6}}来说,t.length等于__2____,t[0].length等于___3__。 3.已知数组a的定义为“int a[]={1,2,3,4,5};”,则a[2]=__3__,数组b的定义为“int b[]=new int[5];”,则b[2]=__ 0___,数组c的定义为“Object [] c=new Object[5];”,则c[2]=_____。 4.调用数组元素时,用__数组名__和__元素下标___来唯一确定数组中的元素。 5.下列___C__语句有错误 A.int [] a; B.int [] b=new int[10]; C. int []c=new int[]; D.int d[]=null; 6.下列___D__语句有错误 A.int a[][]=new int[5][5]; B.int [][] b=new int[5][5]; C.int []c[]=new int[5][5]; D.int [][]d=new int[5,5]; 7.关于下面的程序,正确的结论是___A__ public class Demo1{ public static void main(String [] args){ int a[]=new int[5]; boolean b[]=new boolean[5]; //布尔值自动初始化为false System.out.println(a[1]); System.out.println(b[2]); } } A.运行结果为0 false B.运行结果为1 true C.程序无法编译 D.可以通过编译但结果不确定 二、编程题: 1.定义一个整数定义的数组,求奇数个数和偶数个数。 2.用20个整数初始化数组,只是输出前10个数。用break控制 3.计算10~20的整数的平方值,将结果保存在一个数组中。 4.编写一个程序使之从键盘读入10个整数存入整型数组a中,然后逆序输出这10个数。 5.某人有5张3分和4张5分的邮票,请编写一个程序,计算由这些邮票中的1张或若 干张可以得到多少不同的邮资。 6.用冒泡法对10个不同的数进行排序(有小到大) 7.设计一程序: a)使其建立一个二维字符串数组名为javadays,其中每一维分别代表2008年 [月][日],其值为星期几,例如:2008年7月22日星期几可以下列方式取得 javadays[6][21]→星期二,程序最后以随机数方式随机抽今年的10个日子,并显 示星期几。P.S.注意每月的天数不同。

参考答案 - 作业第 4 章(1)数组字符数组

参考答案 - 作业第 4 章(1)数组、字符数组 参考答案────数组、字符数组 【学习要点】 1.掌握一维数组的逻辑结构和物理结构。 2.掌握一维数组的定义、初始化及其使用。 3.掌握函数参数为数组时,函数参数的正确传递。 4.掌握数组应用的常用算法━━选择排序、冒泡排序、顺序查找、折半查找 5.掌握二维数组的逻辑结构和物理结构。 6.掌握二维数组的定义、初始化及其使用。 7.掌握字符数组的特点、定义、初始化及其使用,掌握字符数组的整体输入/输出。8.掌握字符串处理的基本函数。 ------------------------------------------------------------------------------------------------------------------------------------------------- 【例题分析】 1.关于数组,下面描述中正确的是______。 A.与普通变量没什么区别 B.其元素的数据类型可相同,也可不同 C.可用数组名标识其元素 D.数组元素的数据类型是相同的【答案】D 【解析】数组是一组具有线性关系且类型相同变量的集合体,用一个统一的数组名来命名,组成数组的变量称为数组元素,用数组名、方括号和下标来共同标识数组中的一个元素,下标代表该元素在数组中的位置(从0开始),数组元素也称为下标变量。 2.下面合法的数组定义是______。 A.int a[ ] = { 'A', 'B', 'C' } ; B.int a[ 5 ] = { 0, 1, 2, 3, 4, 5 } ; C.int a = { 'A', 'B', 'C' } ; D.int a[ ] = { 0, 1, 2, 3, 4, 5 } ; 【答案】D 【解析】根据数组定义和初始化情况,数组类型与所赋初始数据的类型应一致。指定的数组长度应大于或等于花括号中的初始数据个数。定义数组时,可以不直接指定数组的

第4章 字符串 习题参考答案

第4章串习题参考答案 一、基础知识题 4.1 简述下列每对术语的区别: 空串和空格串;串常量与串变量;主串和子串;串变量的名字和串变量的值;静态分配的顺序串与动态分配的顺序串。 【解答】不含任何字符的串称为空串,其长度为0。仅含有空格字符的串称为空格串,其长度为串中空格字符的个数。空格符可用来分割一般的字符,便于人们识别和阅读,但计算串长时应包括这些空格符。空串在串处理中可作为任意串的子串。 用引号(数据结构教学中通常用单引号,而C语言中用双引号)括起来的字符序列称为串常量,串值可以变化的量称为串变量。 串中任意个连续的字符组成的子序列被称为该串的子串。包含子串的串又被称为该子串的主串。子串在主串中第一次出现的第一个字符的位置称子串在主串中的位置。 串变量的与其它变量一样,要用名字引用其值,串变量的名字也是标识符,串变量的值可以修改。 串的存储也有静态存储和动态存储两种。静态存储指用一维数组,通常一个字符占用一个字节,需要静态定义串的长度,具有顺序存储结构的优缺点。若需要在程序执行过程中,动态地改变串的长度,则可以利用标准函数malloc()和free()动态地分配或释放存储单元,提高存储资源的利用率。在C语言中,动态分配和回收的存储单元都来自于一个被称之为“堆”的自由存储区,故该方法可称为堆分配存储。类型定义如下所示: typedef struct { char *str; int length; }HString; 4.2设有串S=’good’,T=’I︼am︼a︼student’,R=’!’,求: (1)StringConcat(T,R) (2)SubString(T,8,7) (3)StringLength(T) (4)Index(T,’a’) (5)StringInsert(T,8,S) (6)Replace(T,SubString(T,8,7),’teacher’) 【解答】 (1) StringConcat(T,R)=’I︼am︼a︼student!’ (2) SubString(T,8,7)=’student’ (3) StringLength(T)=14 (4) Index(T,’a’)=3 (5) StringInsert(T,8,S)=’I︼am︼a︼goodstudent’ (6) Replace(T,SubString(T,8,7),’teacher’)= ’I︼am︼a︼teacher’ 4.3若串S1=‘ABCDEFG’,S2=‘9898’,S3=‘###’,S4=‘012345’,执行 concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2))) 操作的结果是什么? 【解答】 concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2))) = concat(replace(S1,substr(S1,4,3),S3),substr(S4,2,4)) = concat(replace(S1,’DEF’,S3),’1234’)

数据结构第4、5章作业 串、数组和广义表答案

第4~5章串和数组答案 一、填空题 1. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。 2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为3。 3. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。 4. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m。 5. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288 B ;末尾元素A57的第一个字节地址为1282 ;若按行存储时,元素A14的第一个字节地址为(8+4)×6+1000=1072 ;若按列存储时,元素A47的第一个字节地址为(6×7+4)×6+1000)=1276 。 (注:数组是从0行0列还是从1行1列计算起呢?由末单元为A57可知,是从0行0列开始!) 6. 设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950 。 答:不考虑0行0列,利用列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L 得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=8950 7. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的行下标、列下标和元素值。 8..求下列广义表操作的结果: (1)GetHead【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号 (2)GetHead【GetTail【((a,b),(c,d))】】=== (c,d) ; (3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== b ; (4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== (d); 二、单选题 ( B )1. 串是一种特殊的线性表,其特殊性体现在: A.可以顺序存储B.数据元素是一个字符 C.可以链式存储D.数据元素可以是多个字符 ( B )2. 设有两个串p和q,求q在p中首次出现的位置的运算称作: A.连接B.模式匹配C.求子串D.求串长 (D )3. 设串s1=’ABCDEFG’,s2=’PQRST’,函数con(x,y)返回x和y串的连接串,subs(s, i, j)返回串s的从序号i开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2))的结果串是: A.BCDEF B.BCDEFG C.BCPQRST D.BCDEFEF 解:con(x,y)返回x和y串的连接串,即con(x,y)=‘ABCDEFGPQRST’;

数组习题及答案

构造数据对象——数组 一、填空题 1.数组是一组相同的集合。 2.数组名代表数组的。 3.数组元素在数组中的位置序号称为它是从开始整数。 4.有int a[ ]={4,6,2,12,435,-9,76,0,0};该数组元素值最大的下标为。 5.定义数组tw,其能存储23个长整形数的语句为。 6.有说明语句int a[10]={1,2,3,4,5,6};则元素a[9]的值为。 7.数组char c[ ]=”abcd”中有个元素,最后一个元素是。 8.”a”在内存中占个存储单元。 9.定义一个能存放下字符串Vocation的字符数组enm的语句为。 10.定义一个可保存100个整型数的数组pn,并把每个元素初值设为0的语句是。 11.与puts(ss)等价的printf函数调用是。 二、选择题 1.下面关于数组的说法,不正确的是() A.数组总为一个整体,可以参加算术运算 B.数组中的数组元素相当于一个简单变量 C.数组可以用来保存字符串 D.数组是一组连续的,类型相同的数据集合 2.下列说法不是数组特性的是() A.数组元素类型相同 B.数组长度固定

C.数组占用连续的内存空间 D.数组可作为一个整体参与运算 3.定义一个具有8个元素的整形数组,应使用语句() A.int a[8]; B.int a[2,4]; C.int a[ ]; D.int *a[8]; 4. 以下能正确定义一维数组的选项是() A.int num[ ]; B.#define N 100 int num[N]; C.int num[0..100]; D.int N=100; 5.下面对s的初始化,不正确的是() A.char s[5]={“abcd”}; B.char s[5]={‘a’,’b’,’c’}; C.char s[5]=””; D.char s[5]=”abcd”; 6.对以下说明语句正确的理解是() int a[10]={6,7,8,9,10,12}; A.将6个初值依次赋值给a[1]至a[5]; B.将6个初值依次赋值给a[0]至a[5]; C.将6个初值依次赋值给a[5]至a[10]; D.因数组长度和初值的个数不同,所以此语句不正确 7.用scanf语句为数组a中的第二个数组元素输入数据,格式正确的是()

数组_参考答案

一、【必做题】 1.编写一个简单程序,要求数组长度为5,分别赋值10,20,30,40,50,在控制台输出该数组的值。 /*例5-1 *数组使用范例 */ public class ArrayDemo { public static void main(String[] args) { int[] buffer=new int[5]; buffer[0]=10; buffer[1]=20; buffer[2]=30; buffer[3]=40; buffer[4]=50; for(int i=0;i<5;i++) { System.out.println(buffer[i]); } } } 2.输出一个double型二维数组(长度分别为5、4,值自己设定)的值。 /*例5-3 *多维数组范例 */ public class ArrayTwoDimension { public static void main(String[] args) { double[][] buffer=new double[5][4]; for(int i=0;i

} 3.将一个字符数组的值(neusofteducation)考贝到另一个字符数组中。 public class ArrayCopyDemo { public static void main(String[ ] args) { //定义源字符数组 char[ ] copyFrom = {'n', 'e', 'u', 's', 'o', 'f', 't', 'e', 'd', 'u', 'c', 'a', 't', 'i', 'o', 'n'}; char[ ] copyTo = new char[7]; System.arraycopy(copyFrom, 2, copyTo, 0, 7); System.out.println(new String(copyTo)); } } 4.给定一个有9个整数(1,6,2,3,9,4,5,7,8})的数组,先排序,然后输出排序后的数组的值。public class ArraySortDemo { /** *@param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] point = {1,6,2,3,9,4,5,7,8}; java.util.Arrays.sort( point ); for(int i=0;i

《数据结构》各章课后作业答案

《数据结构》各章课后作业答案 第一章 绪论课后作业答案 1. 简述线性结构与非线性结构的不同点。 答:线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是多对多的。 2.分析下面各程序段的时间复杂度(每小题5分,共20分) 解:1.第一个for 循环执行n+1次,第二个for 循环执行n(m+1)次,A[i][j]=0;语句执行n*m 次,此程序段总的执行次数为n+1+n*(m+1)+n*m=2nm+2n+1次。故时间复杂度为O(n*m)。 2.算法的时间复杂度是由嵌套最深层语句的执行次数决定的,本程序段嵌套最深层语句为: s+=B[i][j]; 它的执行次数为n 2,所以本程序段的时间复杂度是O(n 2 )。 3. 该算法的基本操作是语句x++, 其语句频度为: 111 1n n i i j --==∑∑=10 ()n i n i -=-∑= (1) 2 n n - 所以本程序段的时间复杂度是O(n 2 )。 4.设语句执行m 次,则有 3m ≤n ⇒m ≤log 3n 所以本程序段的时间复杂度为O(log 3n)。 第二章 线性表课后作业答案 1. 填空题。 (1)在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。 (2)线性表中结点的集合是 有限 的,结点间的关系是 一对一的。 (2)s=0; for (i=0; i

2023年C语言考试数组知识习题库及答案(精品)

2023年C语言考试数组知识习题库及答案 (精品) 1. 单项选择题 (1) int a[4]={5,3,8,9};其中a[3]的值为( )。D A. 5 B. 3 C. 8 D. 9 (2) 以下4 个字符串函数中,( )所在的头文件与其他3 个不同。A A. gets B. strcpy C. strlen D. strcmp (3) 以下4 个数组定义中,( )是错误的。D A. int a[7]; B. #define N 5 long b[N]; C. char c[5]; D. int n,d[n]; (4) 对字符数组进行初始化,( )形式是错误。B A. char c1[ ]={'1', '2', '3'}; B. char c2[ ]=123; C. char c3[ ]={ '1', '2', '3', '\0'}; D. char c4[ ]="123"; (5) 在数组中,数组名表示( )。A A. 数组第1 个元素的首地址 B.数组第2 个元素的首地址 C. 数组所有元素的首地址 D.数组最后1 个元素的首地址 (6) 若有以下数组说明,则数值最小的和最大的元素下标分别是( )。B int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; A. 1,12 B. 0,11 C. 1,11 D. 0,12 (7) 若有以下说明,则数值为4 的表达式是( )。D int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; char c=’a’, d, g ;

A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] (8) 设有定义:char s[12] = "string" ; 则printf( "%d\n",strlen(s)); 的输出是( )。A A. 6 B. 7 C. 11 D. 12 (9) 设有定义:char s[12] = "string"; 则printf("%d\n ", sizeof(s)); 的输出是( )。D A. 6 B. 7 C. 11 D. 12 (10) 合法的数组定义是( )。A A. char a[ ]= "string " ; B. int a[5] ={0,1,2,3,4,5}; C. char a= "string " ; D. char a[ ]={0,1,2,3,4,5} (11) 合法的数组定义是( )。D A. int a[3][ ]={0,1,2,3,4,5}; B. int a[ ][3] ={0,1,2,3,4}; C. int a[2][3]={0,1,2,3,4,5,6}; D. int a[2][3]={0,1,2,3,4,5,}; (12) 下列语句中,正确的是( )。D A. char a[3][ ]={'abc', '1'}; B. char a[ ][3] ={'abc', '1'}; C. char a[3][ ]={'a', "1"}; D. char a[ ][3] ={ "a", "1"}; (13) 下列定义的字符数组中,输出printf("%s\n", str[2]) ;的输出是( )。C static str[3][20] ={ "basic", "foxpro", "windows"}; A. basic B. foxpro C. windows D. 输出语句出错 (14) 下列各语句定义了数组,其中哪一个是不正确的( )。C A. char a[3][10]={"China","American","Asia"}; B. int x[2][2]={1,2,3,4};

第4章串与数组习题参考答案

习题四参考答案 一、选择题 1.下面关于串的表达中,哪一个是不正确的?〔B 〕 A.串是字符的有限序列 B.空串是由空格构成的串 C.形式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 2.串的长度是指( A ) A. 串中包含的字符个数 B. 串中包含的不同字符个数 C. 串中除空格以外的字符个数 D. 串中包含的不同字母个数 3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为〔 C 〕A.求子串B.联接C.形式匹配D.求串长 4.设主串的长度为n,形式串的长度为m,那么串匹配的KMP算法时间复杂度是( C )。 A. O(m) B. O(n) C. O(n + m) D. O(n×m) 5. 串也是一种线性表,只不过( A )。 A. 数据元素均为字符 B. 数据元素是子串 C. 数据元素数据类型不受限制 D. 表长受到限制 6.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主进展存储,a11为第一元素, 其存储地址为1,每个元素占一个地址空间,那么a85的地址为〔 B 〕。 A. 13 B. 33 C. 18 D. 40 7. 有一个二维数组A[1..6, 0..7] ,每个数组元素用相邻的6个字节存储,存储器按字节编址, 那么这个数组占用的存储空间大小是〔D 〕个字节。 A. 48 B. 96 C. 252 D. 288 8.设有数组A[1..8,1..10],数组的每个元素占3字节,数组从内存首地址BA开场以列序 为主序顺序存放,那么数组元素 A[5,8]的存储首地址为( B )。 A. BA+141 B. BA+180 C. BA+222 D. BA+225 9. 稀疏矩阵的三元组存储表示方法( B ) A. 实现转置操作很简单,只需将每个三元组中行下标和列下标交换即可 B. 矩阵的非零元素个数和位置在操作过程中变化不大时较有效 C. 是一种链式存储方法 D. 比十字链表更高效 10. 用十字链表表示一个稀疏矩阵,每个非零元素一般用一个含有( A )域的结点表示。 A.5 B.4 C. 3 D. 2 二、填空题 1. 一个串的任意连续字符组成的子序列称为串的子串,该串称为主串。2.串长度为0的串称为空串,只包含空格的串称为空格串。 3. 假设两个串的长度相等且对应位置上的字符也相等,那么称两个串相等。 4. 寻找子串在主串中的位置,称为形式匹配。其中,子串又称为形式串。 5. 形式串t="ababaab"的next[]数组值为-1001231,nextval[]数组值为-10-10-130。 6. 设数组A[1..5,1..6]的基地址为1000,每个元素占5个存储单元,假设以行序为主序顺 序存储,那么元素A[5,5]的存储地址为1140。

数组作业(1)

数组作业 一、选择题 1. 在Java中,以下程序段能正确为数组赋值的是(ab )。(选择二项) A int a[]={1,2,3,4}; B. int b[4]={1,2,3,4}; C. int c[];c={1,2,3,4}; D. int d[];d=new int[]{1,2,3,4}; 2. 数组元素的索引可以是(a )。(选择一项) A 整型常量 B. 整型变量 C. 整型表达式 D. 以上都可以 3. 已知表达式int [] m={0,1,2,3,4,5,6};下面( b )表达式的值与数组最大下标数相 等。(选择一项) A m.length() B. m.length-1 C. m.length()+1 D. m.length+1 4. 在Java中,以下定义数组的语句正确的是(ad )。(选择二项) A int t[10]=new int[ ]; B. char [ ]a=”hello”; C. String [ ] s=new String [10]; D. double[ ] d [ ]=new double [4][ ]; 5. 在Java中,下面代码的输出结果为( a )。(选择一项) publicstaticvoid main(String[] args) { int[] arrA = { 12, 22, 8, 49, 3 }; int k = 0; int len = arrA.length; for (int i = 0; i < len; i++) { for (int j = i + 1; j < len; j++) { if (arrA[i] > arrA[j]) { k = arrA[i]; arrA[i] = arrA[j]; arrA[j] = k; } } } for (int i = 0; i < arrA.length; i++) { System.out.print(arrA[i]); 1

数组作业答案

1、编写程序,产生50个互不相同的10~99的随机整数,统计各数值段(10~19,20~29,….80~89,90~99)有多少个数并输出。 提示:可另用数组b来存各分数段的人数,并用b(1)存10~19分的人数, b(2)存20~29分的人数,… b(9)存90~99分的人数。 关键代码:k = Int(a(i) / 10) b(k) = b(k) + 1 Private Sub Form_Click() Dim a(1 To 50) As Integer, i As Integer Dim b(1 To 9) As Integer, k As Integer For i = 1 To 50 a(i) = Int(Rnd * 90 + 10) Print a(i); If i Mod 10 = 0 Then Print k = Int(a(i) / 10) b(k) = b(k) + 1 Next i Print For i = 1 To 9 Print (i * 10) & "~" & (i * 10 + 9) & "的学生人数:" & b(i) Next i End Sub 2、设有如下两组数据。编写一个程序,把两组数据分别读入两个数

组中,然后把两个数组中对应下标的元素相加,即2+79,8+27,…,25+80,并把相应的结果放入第三个数组中,最后输出第三个数组的值。 A 2 8 7 6 4 28 70 25 B 79 27 32 41 57 66 78 80 关键代码:c(i) = a(i) + b(i) Private Sub Form_Click() Dim a, b, c(7) a = Array(2, 8, 7, 6, 4, 28, 70, 25) b = Array(79, 27, 32, 41, 57, 66, 78, 80) For i = 0 To 7 c(i) = a(i) + b(i) Next i For i = 0 To 7 Print c(i); Next i End Sub 3、产生10个互不相同的10~99的随机整数,将这10个值交换并输出,交换规则如下: 第1个与第10个交换 第2个与第9 个交换 第3个与第8 个交换

数据结构(C++版)课后作业1-6章带答案

第1 章绪论 课后习题讲解 1. 填空 (1) 从逻辑关系上讲,数据结构主要分为()、()、()和()。 (2) 数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。 (3)算法在发生非法操作时可以作出处理的特性称为()。 2. 选择题 ⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。A 线性结构B 非线性结构C 存储位置D 指针 ⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。则表示该遗产继承关系的最合适的数据结构应该是()。A 树B 图C 线性表D 集合3. 判断题 (1) 每种数据结构都具备三个基本操作:插入、删除和查找。 第2 章线性表 课后习题讲解 1. 填空 ⑵顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的存储地址是()。第5个元素的存储地址=第1个元素的存储地址+(5-1)×2=108 ⑶设单链表中指针p 指向结点A,若要删除A的后继结点(假设A存在后继结点),则需修改指针的操作为()。【解答】p->next=(p->next)->next ⑸非空的单循环链表由头指针head指示,则其尾结点(由指针p所指)满足()。p->next=head ⑹在由尾指针rear指示的单循环链表中,在表尾插入一个结点s的操作序列是();删除开始结点的操作序列为()。。【解答】s->next =rear->next; rear->next =s; rear =s; q=rear->next->next; rear->next->next=q->next; delete q; 2. 选择题 ⑴线性表的顺序存储结构是一种()的存储结构,线性表的链接存储结构是一种()的存储结构。A 随机存取B 顺序存取C 索引存取D 散列存取【解答】A,B 【分析】参见2.2.1。 ⑵线性表采用链接存储时,其地址()。A 必须是连续的B 部分地址必须是连续的C 一定是不连续的D 连续与否均可以【解答】D 【分析】线性表的链接存储是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以连续,也可以不连续,甚至可以零散分布在内存中任意位置。 ⑶单循环链表的主要优点是()。A 不再需要头指针了B 从表中任一结点出发都能扫描到整个链表; C 已知某个结点的位置后,能够容易找到它的直接前趋; D 在进行插入、删除操作时,能更好地保证链

微机原理 第4章作业答案

第3章指令系统 3.9 设段寄存器DS=1000H,SS=2000H,ES=3000H,通用寄存器BX=4000H,BP=5000H,SI=6000H,DI=7000H。在下列各指令中指出存储器操作数的寻址方式,求出有效地址EA、物理地址PA,并分别用物理地址和逻辑地址说明指令执行结果。(1)MOV CX, [2300H] 直接寻址 EA=2300H PA=DS*16+EA=1000H*16+2300H=12300H 执行结果:(12300H)→CL,(12301H)→CH (2)MOV BYTE PTR [BX], 8FH 寄存器间接寻址 EA=BX=4000H PA=DS*16+EA=1000H*16+4000H=14000H 执行结果:8FH→(14000H) (3)MOV DH, [BP+3000H] 基址寻址 EA=BP+3000H=8000H PA=SS*16+EA=2000H*16+8000H=28000H 执行结果:(28000H)→DH (4)MOV ES: [SI+1210H], AX 变址寻址 EA=SI+1210H=7210H PA=ES*16+EA=3000H*16+7210H=37210H 执行结果:AL→(37210H),AH→(37211H) (5)MOV [BX+DI+50H], AL 基址变址位移寻址 EA=BX+DI+50H=0B050H PA=DS*16+EA=1000H*16+0B050H=1B050 H 执行结果:AL→(1B050H) (6)INC WORD PTR [BX+SI] 基址变址寻址 EA=BX+SI=0A000H PA=DS*16+EA=1000H*16+0A000H=1A000 H 执行结果:(1A000H)中存放的字的值加1 3.11 指出下列指令中源操作数的寻址方式。(1)MOV BL, 0F9H 立即寻址(2)ADD [BX], SI 寄存器寻址(3)SUB CL, [4000H] 直接寻址(4)CMP DX, [SI] 寄存器间接寻址 (5)AND SL, [BX+1] 基址寻址(6)OR BP, [DI+2100H] 变址寻址(7)XOR AX, [BP+SI] 基址变址寻址 (8)MOV CX, 300 立即寻址 3.12 下列指令都是非法的,指出各指令错在哪里? (1)MOV SI, AH 两个操作数字长不一致 (2)MOV 70H, BL 立即数不能做目的操作数 (3)MOV CX, F123H 十六进制的数以字母打头必须在前面补0 (4)MOV [BX], 6AH 两个操作数的字长不确定 (5)MOV ES, 5000H 立即数不能直接送段寄存器 (6)MOV [DI], [3000H] 两个操作数不能同为内存操作数 (7)MOV DS, SS 两个操作数不能同为段寄存器 (8)MOV CS, AX 不能对CS赋值 (9)MOV AL, [CX] 寄存器间接寻址中不能使用CX (10)MOV [BX+BP], DX 存储器寻址方式中表示有效地址不能同为两个基址寄存器 (11)MOV BH, [SI+DI+2] 存储器寻址方式中表示有效地址不能同为两个变址寄存器 (12)PUSH AL 入栈出栈操作必须以字为单位 (13)LEA AX, BX LEA指令中源操作数必须为存储器寻址方式 (14)LDS BL, [5100H] LDS指令中目的操作数必须为16位的通用寄存器 (15)IN AH, DX

matlab字符串单元数组与结构体作业答案

1.编制一个脚本,查找给定字符串中指定字符出现的次数和位置; str=['hopes,dreams,hold up,hold up']; >> findstr(str,'o') %位置 ans = 2 15 23 >> a=findstr(str,'o'); n=length(a) %次数 n = 3 2.编写一个脚本,判断输入字符串中每个单词的首字母是否为大写,若不是则将其修改为大写,其他字母为小写。 >> str='i have a dream come true'; nlength=length(str); for k=1:nlength if (k==1 || isspace(str(k-1)))&&(str(k)<='z'&&str(k)>='a') str(k)=char(double(str(k))-32); end end disp(str); I Have A Dream Come True 3.创建2×2 单元数组,第1、2 个元素为字符串,第三个元素为整型变量,第四个元素为双精度(double)类型,并将其用图形表示。 >> A=cell(2,2) A(1,1)={'beijing'}; A(2,1)={'BEIJING'}; A(1,2)={uint8(5)}; A(2,2)={[1,2;4,7]} cellplot(A) A = [] [] [] [] A = 'beijing' [ 5] 'BEIJING' [2x2 double] 4.创建一个结构体,用于统计学生的情况,包括学生的姓名、学号、各科成绩等。然后使用该结构体对一个班级的学生成绩进行管理,如计算总分、平均分、排列名次等。 >> student=struct('name',{'bam','mark','jimin'},'number',{1,2,3},'scores',{[75,89,82],[93,78,90],[85,6 2,77]} ,'subject',{'english,math,chinese','english,math,chinese','english,math,chinese'}) student =

相关文档
最新文档