第四章 数组作业
数据结构课后习题(第4-5章)
![数据结构课后习题(第4-5章)](https://img.taocdn.com/s3/m/c1bed24c336c1eb91a375dde.png)
【课后习题】第4章 串 第5章 数组和广义表网络工程2010级( )班 学号: 姓名:一、填空题(每空1分,共30分)1. 串有三种机内表示方法: 、 和 ,其中前两种属于顺序存储结构,第三种属于 。
2. 若n 为主串长度,m 为子串长度,则串的BF (朴素)匹配算法最坏的情况下需要比较字符的总次数为 ,T(n)= 。
3. 是任意串的子串;任意串S 都是S 本身的子串,除S 本身外,S 的其他子串称为S 的 。
4. 设数组a[1…50, 1…60]的基地址为1000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[32,58]的存储地址为 。
5. 对于数组,比较适于采用 结构够进行存储。
6. 广义表的深度是指_______。
7. 将一个100100 A 的三对角矩阵,按行优先存入一维数组B[297]中,A 中元素66,66A 在B 数组中的位置k 为 。
注意:a i,j 的k 为 2(i-1)+j-1,(i=1时j=1,2;1<i<=n 时,j=i-1,i,i+1) 。
8. 称为空串; 称为空白串。
9. 求串T 在主串S 中首次出现的位置的操作是 ,其中 称为目标串, 称为模式。
10. 对称矩阵的下三角元素a[i,j],存放在一维数组V 的元素V[k]中(下标都是从0开始),k 与i ,j 的关系是:k= 。
11. 在n 维数组中每个元素都受到 个条件的约束。
12. 同一数组中的各元素的长度 。
13. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 、 和 。
14. 稀疏矩阵中有n 个非零元素,则其三元组有 行。
15.求下列广义表操作的结果:(1)GetHead【((a,b),(c,d))】=== ;(2)GetHead【GetTail【((a,b),(c,d))】】=== ;(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== ;(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== ;16.广义表E=(a,(b,E)),则E的长度= ,深度= ;二、判断题(如果正确,在下表对应位置打“√”,否则打“⨯”。
程序设计基础-c语言-第四章数组-教材答案-科学出版社
![程序设计基础-c语言-第四章数组-教材答案-科学出版社](https://img.taocdn.com/s3/m/ef0cb637b84ae45c3b358c76.png)
程序设计基础-c语言-第四章数组-教材习题及其答案1.0编程将一个一维数组的值按逆序重新存放#include<stdio.h>void main(){int i_data[10];int m,i_temp;printf("给定10个数,用空格分隔:");scanf("%d %d %d %d %d %d %d %d %d %d",&i_da ta[0],&i_data[1],&i_data[2],&i_data[3],&i_data[4],&i_d ata[5],&i_data[6],&i_data[7],&i_data[8],&i_data[9]);for(m=1;m<=10/2;m++) //有意写成10/2 已解决任意一维数组的逆序问题,为什么此处用m=1;m<=10/2,而不能m=0;m<10/2{ i_temp=i_data[m-1]; //下面三条语句是典型的两数交换的方法i_data[m-1]=i_data[10-m];i_data[10-m]=i_temp;}for(m=0;m<10;m++){ printf("%d ",i_data[m]);}printf("\n");}2.0 编程求Fibonacci数列的前二十项。
FIBONACCI数列的定义F0=0,F1=1,Fn=Fn-1+Fn-2#include<stdio.h>void main(){int F[20];int m,n,i_blanknum;for(m=0;m<20;m++){ switch(m){ case 0:F[0]=0;break;case 1:F[1]=1;break;default: F[m]=F[m-1]+F[m-2];}}printf("Fibonacci数列的前20项是:\n"); for(m=0;m<20;m++){ printf("%d ",F[m]);}printf("\n");//下面输出项,这是我加的效果for(m=0;m<20;m++){ printf("%d",m+1); //输出项的编号//计算该项数据占几位i_blanknum=1;//每个数据间占一个空格n=F[m];do{ i_blanknum=i_blanknum+1;n=n/10;}while(n!=0);//减去该项编号数据占的位数n=m+1;do{ i_blanknum=i_blanknum-1;n=n/10;}while(n!=0);//输出空格while(i_blanknum>0){ printf(" ");i_blanknum--;}}printf("\n");}2.0在一个从小到大排列的数组中查找X,若x存在就将其测出,若不存在将其添加。
第4章数组上机作业
![第4章数组上机作业](https://img.taocdn.com/s3/m/3d5cabcfa1c7aa00b52acb21.png)
第4章构造数据类型第一部分数组通过本节实验作业应达目标1.学习并掌握一维数组与二维数组的定义、使用及初始化方法。
2.熟练掌握字符数组和字符串的使用方法。
3.掌握数组的一种排序算法。
4.学会用数组保存多个相关的同类数据,并对这一组数据进行各类操作。
本章必须上交作业第一部分数组作业要求:程序4_3.c、4_4_2.c、4_5.c、4_7.c、4_8.c上传至http://121.251.227.27:8080/c。
源程序可以.cpp命名。
实验一一维数组的定义和简单应用【实验目的】学会定义一维数组,掌握一维数组的遍历操作,掌握在一组数组中求最大值、最小值的方法。
【实验内容】从键盘读入5个成绩到一个数组中,求其中的最大值,最小值和平均成绩。
在屏幕上显示输入成绩的提示信息,用键盘输入一个成绩,接着提示输入下一个,直到结束。
以4_1.c命名本程序。
程序运行界面【实验提示】求最大(小)值通常用“打擂台”的方法。
首先设计两个变量,如max和min分别用来存放最大值和最小值,并将数组的首元素赋给这两个变量,这就是到目前为止的最大(小)值,然后利用循环依次比较其他的元素,总是将当前最大(小)值赋给max和min,直至比较到最后,max和min中的数据就是最大值和最小值。
求平均值还要设置一个变量sum,用来累加各元素的值。
实验二一维数组的排序【实验目的】熟练掌握一维数组三种基本排序方法:选择法,冒泡法,比较法。
【实验内容】从键盘上接收10个成绩,存放到一个一维数组score中,分别利用三种排序方法,将数组从小到大排序并在屏幕上显示排序结果。
分别以4_2_1.c、4_2_2.c和4_2_3.c命名三个程序。
【实验提示】所谓排序是指把一组杂乱无章的数据按照大小顺序排列。
将被排序的n个数据存放在一个数组中, 假如按升序排列。
我们将数组定义为a[n],数据存放在a[0] 到 a[n-1] 中。
1.比较排序法将a[0]与a[1]比较,若a[1]<a[0],则a[0]与a[1]交换,否则不变,再将a[0]与a[2]比较,同样小者交换到a[0],……如此比较下去至到a[0]与a[n-1]比较,小者放到a[0]中,第一轮比较n-1次,a[0]中的值就是n个数中最小者。
第4章 java课后作业_数组
![第4章 java课后作业_数组](https://img.taocdn.com/s3/m/c7c77be9700abb68a982fbde.png)
第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[]=newint[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]; //布尔值自动初始化为falseSystem.out.println(a[1]);System.out.println(b[2]);}}A.运行结果为0 falseB.运行结果为1 trueC.程序无法编译D.可以通过编译但结果不确定二、编程题:1.定义一个整数定义的数组,求奇数个数和偶数个数。
2.用20个整数初始化数组,只是输出前10个数。
用break控制3.计算10~20的整数的平方值,将结果保存在一个数组中。
第四章 数组作业
![第四章 数组作业](https://img.taocdn.com/s3/m/3f34015cbe23482fb4da4cf6.png)
第四章数组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 10scanf("%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]+1B. &bb[1]C. &bb[0]++D. bb+16. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是( )。
A. 3B. 6C. 10D. 207. 若有以下说明: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<stdio.h>main(){int a[10],i=0;while(i<10) scanf("%d",________ );┇}A. a+(i++)B. &a[i+1]C. a+iD. &a[++i]9. 执行下面的程序段后,变量k中的值为( )。
C 课后习题答案第四章
![C 课后习题答案第四章](https://img.taocdn.com/s3/m/07e718c29b89680203d825a6.png)
case 'c' : cout << '*' ; break ;
case 'd' : continue ;
}
cout << '#' << endl ;
}
}
答案:
$#
*#
*#
%
7.#include <iostream.h>
void main()
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int isPrime(int);
void createAry(int[], int);
void outAry(const int[], int);
void main()
cout << f( a, 3, 3 ) << endl ;
}
int f( int a[][3], int row, int col )
{int i, j, t=1 ;
for( i=0; i<row; i ++ )
for( j=0; j<col; j++ )
{a[i][j] ++ ;
if( i == j ) t*= a[i][j] ;
}
void createAry(int a[], int n)
{ srand( time(0) );
C语言第四章编程练习题
![C语言第四章编程练习题](https://img.taocdn.com/s3/m/b221a12faf45b307e871975d.png)
第四章课后编程练习题(一)数组一维数组:1、一个由10个元素组成的一维数组,求该数组的最大值、最小值、总和和平均值并输出。
2、一个由10个元素组成的一维数组,编程将逆序数组输出。
Cpp5——4023、已有一个已排好序的数组,现在输入一个数,要求按原来排序的规律将它插入到数组中。
输入输出示例:输入n:5按照由大到小的顺序输入n个数:9 7 5 3 1输入要插入的数:6插入完以后数组变成:9 7 6 5 3 1 cpp5——4034、输入若干个正整数,以0结束,将其中大于平均值且个位为5的数排序后输出(按由大到小的顺序排序)。
测试数据:输入:35 15 3 10 5 25 1 0输出:35 25 15 cpp5——4045、用数组输出Fibonacci数列的前40项二维数组1、读入一个正整数n(1<=n<=6),再读入n阶矩阵,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和(副对角线为从矩阵的右上角至左下角的连线)。
2、输入一个正整数n,输入n个数,生成一个n*n的矩阵,矩阵中第1行是输入的n个数,以后每一行都是上一行循环左移一个元素。
输入输出示例Input n: 3Input numbers: 2 5 8 4 9The matrix is:2 5 8 4 95 8 4 9 28 4 9 2 54 9 25 89 2 5 8 4 cpp5——4053、输出可大可小的正方形图案,最外层是第一层,要求每层上用的数字与层数相同。
输入输出示例Input n: 3The matrix is:1 1 1 1 11 2 2 2 11 2 3 2 11 2 2 2 11 1 1 1 14、将一个二维数组(3行4列)的行和列互换(转置),存到另一个二维数组(4行3列)中并输出。
Cpp5——4065、编程输出杨辉三角(要求输出10行)111 2 11 3 3 11 4 6 4 1。
字符数组1、输入一串字符,将其中ASCII码值为奇数的字符排序后输出(按由小到大的顺序)。
第四章习题答案
![第四章习题答案](https://img.taocdn.com/s3/m/378d9243866fb84ae55c8d49.png)
第4章数组选择题1.以下对一维数组 a 的定义正确的是( C )。
(A)int n = 5, a[n]; (B)int a(5);(C)const int N = 5; int a[N]; (D)int n; cin>>n; int a[n];2.下列数组定义语句中,不合法的是( A )。
(A)int a[3] = { 0, 1, 2, 3 }; (B)int a[] = { 0, 1, 2 };(C)int a[3] = { 0, 1, 2 }; (D)int a[3] = { 0 };3.已知 int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, p = a;,不能..表示数组 a 中元素的式子是( C )。
(A) a (B)p (C)a (D)a[ p a ] 4.已知 int a[] = { 0,2,4,6,8,10 }, p = a+1; 其值等于0的表达式是( D )。
(A) (p++) (B)(++p) (C)(p) (D)(p) 5.以下不能对二维数组a进行正确初始化的语句是( C )。
(A)int a[2][3] = { 0 };(B)int a[][3] = { { 0,1 }, { 0 } };(C)int a[2][3] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };(D)int a[][3] = { 0, 1, 2, 3, 4, 5 };6.已知int a[][3] = { { 0, 1 }, { 2, 3, 4 }, { 5, 6 }, { 7 } }; 则 a[2][1]的值是( C )。
(A)0 (B)2 (C)6 (D)77.已知int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 不能表示数组元素a[2][1]的地址是( B )。
(A)&a[2][1] (B)(a[2]+1) (C)a[2]+1 (D)(a+2)+1 8.已知char a[]={ "fortran", " basic", "pascal", "java", "c++" };,则 cout<<a[3];的显示结果是( C )。
数据结构第4章作业参考答案
![数据结构第4章作业参考答案](https://img.taocdn.com/s3/m/4c3ff5db8ad63186bceb19e8b8f67c1cfbd6ee48.png)
第4章(数组和广义表)作业参考答案一、单项选择题1.将一个A[1..100,1..100]的三对角矩阵,按行优先压缩存储到一维数组B[1‥298]中,A 中元素A[66][65]在B数组中的位置K为(C )。
A. 198B. 197C. 195D. 1962.广义表(a,(b,c),d,e)的表头为( A )。
A. aB. a,(b,c)C. (a,(b,c))D. (a)3.在三对角矩阵中,非零元素的行标i和列标j的关系是( A )。
A. |i-j|≤1B. i>jC. i==jD. i<j4.广义表L=(a,(b,c)),进行Tail(L)操作后的结果为( D )。
A. cB. b,cC.(b,c)D.((b,c))5.设二维数组A[1..m,1..n](即m行n列)按行存储在数组B[1..m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( D )。
A. j*m+i-1B. (i-1)*n+j-1C. i*(j-1)D. (i-1)*n+j6.广义表(( ),( ),( ))的深度为( C )。
A. 0B. 1C. 2D. 37.假设以行序为主序存储二维数组A[0..99,0..99],设每个数据元素占2个存储单元,基地址为10,则LOC(A[4][4])=( C )。
A. 1020B. 1010C. 818D. 8088.已知广义表A=((a,b),(c,d)),则head(A)等于( A )。
A. (a,b)B. ((a,b))C. a,bD. a9.已知一个稀疏矩阵的三元组表如下:(1,2,3),(1,6,1),(3,1,5),(3,2,-1),(4,5,4),(5,1,-3)则其转置矩阵的三元组表中第3个三元组为( C )。
A. (2,3,-1)B. (3,1,5)C. (2,1,3)D. (3,2,-1)10.广义表((b,c),d,e)的表尾为( C )。
数组练习题
![数组练习题](https://img.taocdn.com/s3/m/e636d27176232f60ddccda38376baf1ffc4fe3d1.png)
数组练习题1.下面数组声明语句,_________正确。
A)Dim a[2,4] As Integer B)Dim a(2,4)As IntegerC)Dim a(n,n)As Integer D)Dim a(2 4)As Integer2.假定建立了一个名为Command1的命令按钮数组,则以下说法中错误的是________。
A)数组中每个命令按钮的名称(名称属性)均为Command1B)数组中每个命令按钮的标题(Caption属性)都一样C)数组中所有命令按钮可以使用同一个事件过程D)用名称Command1(下标)可以访问数组中的每个命令按钮3.数组声明语句Dim a(-2 to2,5)中,数组包含元素个数为________。
A)120 B)30 C )60 D)204.下面程序的输出结果是________。
Dim aa = Array(1,2,3,4,5,6,7)For i = Lbound(a)to Ubound(a)a(i)= a(i)* a(i)Next iPrint a(i)A)36 B)程序出错C)49 D)不确定5.下面程序的输出结果是________。
Option Base 1Private Sub Command1_Click()Dim a%(3, 3)For i = 1 To 3For j = 1To 3If j > 1 And i > 1 Thena(i, j)= a(a(i - 1, j - 1), a(i, j - 1))+ 1Elsea(i, j)= i * jEnd IfPrint a(i, j); "";Next jPrintNext iEnd SubA)1 2 3 B)1 2 3 C )1 2 3 D)1 2 32 3 1 1 2 3 2 4 6 2 2 23 2 3 1 2 3 3 6 9 3 3 36.在设定Option Base 0后,经Dim arr(3,4)As Integer 定义的数组arr含有的元素个数为________。
11《C语言程序设计》教案第四章数组(1)—一维数组
![11《C语言程序设计》教案第四章数组(1)—一维数组](https://img.taocdn.com/s3/m/00664de3760bf78a6529647d27284b73f242360b.png)
min_p=j;} printf(“the min is%d,position %d”,min,min_p);
} (5)数组在内存中的存放 例如 int data[3];则在内存中的状态如下:
1000 1002
1004
data[0] data[1] data[2]
讨论、思考题、作业: 实验指导书习题
f[0]=1;f[1]=1;f[2]=f[0]+f[1];f[3]=f[2]+f[1];依次类推找出 公式为: f[i]=f[i-1]+f[i-2]; 循环语句为:for(i=2;i<20;i++) 程序代码: main()
{ int i;
static int f[20]={1,1};
/*定义 20 个元素的数组
参考资料(含参考书、文献等):
叶斌 陈世强. C 语言程序设计. 北京:科学出版社 授课类型:理论课 讨论课□ 实验课□ 练习课□ 其他□ 教学方式:传统授课 双语□ 讨论□ 示教□ 指导□ 其他□ 教学资源:多媒体 模型□ 实物□ 挂图□ 音像□ 其他□
定义了一个二维数组 b,该数组由 9 个元素构成,其中每一个数组元素都属于浮点(实
数)数据类型。
数组
b
的各 个数据元 素依次
是:b[0][0],b[0][1],b[0][2],b[1][0],b[1][1],b[1][2],b[2][0],b[2][1],b[2][2](注意:下标从 0-2)。
每个数组元素也都可以作为单个变量使用。
例如:int a[10]={0,0,0,0,0,0,0,0,0,0}; 或 int a[10];系统会对所有数
组元素自动赋 0 值。
4)在对全部数组元素赋初值时,可以不指定数组长度。
数组作业
![数组作业](https://img.taocdn.com/s3/m/657d27c98bd63186bcebbcc1.png)
数组作业1.读入10个数,输出偶数项及它们的和,输出奇数项及它们的平均数。
2.读入n个数,打印其中的最大数及其位置号。
3.有一组数(设有n个),其排列顺序如下:3,6,11,45,23,70,67,34,26,89,90,15,56,50,20,10。
编译程序交换者组数中任意指定的两段不重合数据。
4.给定一串整数列,求出所有的递增和递减子序列数目。
如数列7,2,6,9,3,5,2,1可分为(7,2)(2,6,9)(9,8,3)(3,5)(5,2,1)5各子序列我们称2,9,3,5为转折元素。
6.数组a是一个由n个元素的数组,从中找出最大和的子序列。
7.已知数组a中含有n个整型元素,求a中有多少个最大数?多少个次大数?……,多少个互不相同的数?编程实现之。
8.试编一个程序,打印出1000以内以二进制和十进制正读和反读都一样的整数清单。
4.30 求2-100中,每个数的质因子,输出如下形式:2=23=34=2×2...100=2×2×5×531.2---1000中的完数(因子和等于它本身的数为完数。
例如28的因子是1,2,4,7,14,且1+2+4+7+14=28,则28是完数)。
32.找2-1000中的亲密数对(如果a的因子和等于b,b的因子和等于a,a≠b,则称a,b为亲密数对)。
16.输入20个单词,将它们按字母次序排序后输出。
用紧缩字符数组作。
17.输入矩阵a,b,d,e,计算矩阵的乘法。
c5*4=a5*3·b3*4f4*3=d4*5·e5*3矩阵右下角的数字代表行与列数。
输出矩阵a,b,,c,d,e,f.用保形数组参数作,参数a,b,c应分别说明。
18.八皇后问题。
这是由高斯首先提出来的问题。
要求在8×8格的国际象棋上放置8个皇后,使其不能互相攻击。
即任意两个皇后不能处于棋盘上的同一行、同一列和同一条斜线,试求出所有符合要求的皇后布局。
数据机构第四章——java语言描述第4章串与数组习题参考答案
![数据机构第四章——java语言描述第4章串与数组习题参考答案](https://img.taocdn.com/s3/m/a0451f6759fafab069dc5022aaea998fcc224035.png)
数据机构第四章——java语言描述第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.13B.33C.18D.407.有一个二维数组A[1..6,0..7],每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组占用的存储空间大小是(D)个字节。
A.48B.96C.252D.2888.设有数组A[1..8,1..10],数组的每个元素占3字节,数组从内存首地址BA开始以列序为主序顺序存放,则数组元素A[5,8]的存储首地址为(B)。
A.BA+141B.BA+180C.BA+222D.BA+2259.稀疏矩阵的三元组存储表示方法(B)A.实现转置操作很简单,只需将每个三元组中行下标和列下标交换即可B.矩阵的非零元素个数和位置在操作过程中变化不大时较有效C.是一种链式存储方法D.比十字链表更高效10.用十字链表表示一个稀疏矩阵,每个非零元素一般用一个含有(A)域的结点表示。
A.5B.4C.3D.2二、填空题1.2.串长度为03.4.5.模式串t="ababaab"的ne某t[]ne某tval[]数组值为。
数据结构-C语言-第四章作业
![数据结构-C语言-第四章作业](https://img.taocdn.com/s3/m/226b0604783e0912a2162aa7.png)
数据结构
练习
数据结构
设有一个二维数组A[m][n]按行优先顺序存储,假设A[0][0] 存放位置在644(10),A[2][2]存放位置在676(10),每个元素 占一个空间,问A[3][3](10)存放在什么位置?脚注(10)表示 用10进制表示。
答:设数组元素A[i][j]存放在起始地址为Loc ( i, j ) 的存储单 元中
Байду номын сангаас
练习
数据结构
设有二维数组A[10,20],其每个元素占两个字节, A[0][0]存储地址为100,若按行优先顺序存储,则 元素A[6,6]的存储地址为 352 ,按列优先顺序存储 ,元素A[6,6]的存储地址为 232 。
答:(6*20+6)*2+100=352 (6*10+6)*2+100=232
练习
数据结构
1、 设有二维数组a[6][8],每个元素占相邻的4个字节,存储 器按字节编址,已知a的起始地址是1000,试计算:
数组a的最后一个元素a[5][7]起始地址; 按行序优先时,元素a[4][6]起始地址; 按列序优先时,元素a[4][6]起始地址。
课本作业
4.5 4.8 4.10
∵ Loc ( 2, 2 ) = Loc ( 0, 0 ) + 2 * n + 2 = 644 + 2 * n + 2 = 676.
∴ n = ( 676 - 2 - 644 ) / 2 = 15
∴ Loc ( 3, 3 ) = Loc ( 0, 0 ) + 3 * 15 + 3 = 644 + 45 + 3 = 692.
第4章数组上机作业汇总
![第4章数组上机作业汇总](https://img.taocdn.com/s3/m/bc1d0701c281e53a5802ff6c.png)
第4章构造数据类型第一部分数组通过本节实验作业应达目标1.学习并掌握一维数组与二维数组的定义、使用及初始化方法。
2.熟练掌握字符数组和字符串的使用方法。
3.掌握数组的一种排序算法。
4.学会用数组保存多个相关的同类数据,并对这一组数据进行各类操作。
本章必须上交作业第一部分数组作业要求:程序4_3.c、4_4_2.c、4_5.c、4_7.c、4_8.c上传至http://121.251.227.27:8080/c。
源程序可以.cpp命名。
第二部分结构体作业要求程序4_11.c、4_12.c上传至http://121.251.227.27:8080/c。
源程序可以.cpp命名。
实验一一维数组的定义和简单应用【实验目的】学会定义一维数组,掌握一维数组的遍历操作,掌握在一组数组中求最大值、最小值的方法。
【实验内容】从键盘读入5个成绩到一个数组中,求其中的最大值,最小值和平均成绩。
在屏幕上显示输入成绩的提示信息,用键盘输入一个成绩,接着提示输入下一个,直到结束。
以4_1.c命名本程序。
程序运行界面【实验提示】求最大(小)值通常用“打擂台”的方法。
首先设计两个变量,如max和min分别用来存放最大值和最小值,并将数组的首元素赋给这两个变量,这就是到目前为止的最大(小)值,然后利用循环依次比较其他的元素,总是将当前最大(小)值赋给max和min,直至比较到最后,max和min中的数据就是最大值和最小值。
求平均值还要设置一个变量sum,用来累加各元素的值。
实验二一维数组的排序【实验目的】熟练掌握一维数组三种基本排序方法:选择法,冒泡法,比较法。
【实验内容】从键盘上接收10个成绩,存放到一个一维数组score中,分别利用三种排序方法,将数组从小到大排序并在屏幕上显示排序结果。
分别以4_2_1.c、4_2_2.c和4_2_3.c命名三个程序。
【实验提示】所谓排序是指把一组杂乱无章的数据按照大小顺序排列。
将被排序的n个数据存放在一个数组中, 假如按升序排列。
C++程序设计语言习题及实验指导4章_数组习题参考答案
![C++程序设计语言习题及实验指导4章_数组习题参考答案](https://img.taocdn.com/s3/m/ef334dccce2f0066f5332240.png)
C++程序设计语言习题及实验指导第4章数组4.3 习题4.3.1 选择题4.3.2 填空题1.(1) 3 (2) 242.首地址3.(1) i (2) i+j (3) i/7 (4) i%7 (5) i*7+j4.(1) 7 (2) 8 (3) 7 (4) 505.(1) 字符(2) cin.getline(str,80);6.1234567.(1) a:5 d:1 e:4 f:1 g:1(2) i:1 l:1 m:1 o:3 r:3(3) s:2 u:1 y:38.(1) It is 4:30 pm. (2) I (3) 4309.(1) <100: 3 (2) <200: 2 (3) <300: 5 (4) <400: 2 (5) <500: 3 10.D8011.(1) 500 (2) 800 (3) 90012.(1) 26 (2) 2013.(1) s2+31 (2) n (3) t%2+'0' (4) !strcmp(s1,p2) 14.(1) num[i++] (2) s=0 (3) flag=1 (4) j<=k 15.(1) i<len1 (2) j>=len2 (3) b[k]=b[k-1] (4) ++i%5==0 16.(1) pa>=a&&pb>=b (2) j+k+carry (3) ps++ (4) p<ps 17.(1) t[n++] (2) continue (3) t[k+1]=t[k] (4) n++ 18.(1) *p1 (2) *p1++ (3) p1++,p2++ (4) *p1='\0' 19.(1) n/10%10 (2) i==j||j==k||i==k (3) i*i==n (4) (i+1)%5==0 20.(1) char *p3 (2) *p1>='A'&&*p1<='Z'||*p1>='a'&&*p1<='z'(3) p2++ (4) char (*p4)[20]4.3.3 编程题1.交换一维数组中的最大元素与最小元素的位置#include<iostream.h>void main(void ){int a[6]={18,16,19,15,11,8};int i,max,min,j,k,t;cout<<"原数组为:\n";for(i=0;i<6;i++)cout<<a[i]<<'\t';cout<<endl;for(j=k=0,max=min=a[0],i=1;i<6;i++){if(max<a[i])max=a[i],j=i;if(min>a[i])min=a[i],k=i;}t=a[j],a[j]=a[k],a[k]=t;cout<<"交换后的数组为:\n";for(i=0;i<6;i++)cout<<a[i]<<'\t';cout<<endl;}2.二维数组右移一列#include<iostream.h>#define ROW 3#define COL 4void main(void){int a[ROW][COL]={1,2,3,4,5,6,7,8,9,10,11,12},i,j,t;cout<<"移动前的数组为:\n";for(i=0;i<ROW;i++){for(j=0;j<COL;j++)cout<<a[i][j]<<'\t';cout<<'\n';}for(i=0;i<ROW;i++){t=a[i][COL-1];for(j=COL-1;j>0;j--)a[i][j]=a[i][j-1];a[i][j]=t; // a[i][0]=t;}cout<<"移动后的数组为:\n";for(i=0;i<ROW;i++){for(j=0;j<COL;j++)cout<<a[i][j]<<'\t';cout<<'\n';}}3.统计字符串中种类字符的个数#include<iostream.h>void main(){char str[50],*p=str;int con=0,num=0,eng=0,oth=0;cout<<"请输入一个字符串:";cin.getline(str,50);while(*p){if(*p<32)con++;else if(*p>='0'&&*p<='9')num++;else if(*p>='A'&&*p<='Z'||*p>='a'&&*p<='z')eng++;else oth++;p++;}cout<<str<<"中有控制字符"<<con<<"个,数字字符"<<num<<"个,英文字母"<<eng<<"个,其它字符"<<oth<<"个。
自考教材《JAVA语言程序设计(一)》第四章习题解答
![自考教材《JAVA语言程序设计(一)》第四章习题解答](https://img.taocdn.com/s3/m/81cbe748804d2b160b4ec0fe.png)
4.2 举例说明如何声明、创建和初始化多维数组。
声明二维数组:类型 数组名[ ][ ] 类型[ ][ ]数组名 类型[ ]数组名[ ] 例如: 声明 Sting subStr[ ][ ]; String [ ] [ ] subStr; String[ ] subStr[ ]; 创建 (1)String subStr[ ][ ]=new String[3][5];(直接分配,平衡数组) (2)String subStr[ ][ ]=new String[3][ ];(从最高维开始对每一维分配不等长空间,非 平衡数组) subStr[0]=new String[4];//第 1 个子数组有 4 个元素 subStr[1]=new String[5];//第 2 个子数组有 5 个元素 subStr[2]=new String[2];//第 3 个子数组有 2 个元素 (3)int[ ][ ] x={{5,6,7},{8,9,10,11},{18,19,10,10},{2,98}};//直接赋值创建 初始化:数组创建后,如果没有初始化,则根据类型 java 会自动赋予默认值。一般用循环 语句对其动态初始化,例如,以下循环给三维整型数组 aa 初始化为三角数组。 int a[]=new int[5]; int aaa[][][]=new int [4][3][3]; for (int i=0;i<a.length;i++) { a[i]=i+1; } for (int i=0;i<aaa.length;i++) { for (int j=0;j<aaa[i].length;j++) { for (int k=0;k<aaa[i][j].length;k++) { aaa[i][j][k]=(i+j+1)*(k+1);} } }
数据结构第4、5章作业 串、数组和广义表答案
![数据结构第4、5章作业 串、数组和广义表答案](https://img.taocdn.com/s3/m/d6e67122ad02de80d5d8401a.png)
第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=89507. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。
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’;subs(s, i, j)返回串s 的从序号i 开始的j 个字符组成的子串,则subs(s1, 2, len(s2))=subs(s1, 2, 5)=’ BCDEF’; subs(s1, len(s2), 2)=subs(s1, 5, 2)=’ EF’;所以con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2))=con(’ BCDEF’, ’ EF’)之连接,即BCDEFEF( A )4. 假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。
第4章 数组的应用(课后练习题答案)-2018(1)
![第4章 数组的应用(课后练习题答案)-2018(1)](https://img.taocdn.com/s3/m/69e45541daef5ef7ba0d3cec.png)
12. 以下那种说法错误?( B )。 (A)数组中的元素在某些方面彼此相关;
(B)数组中的所有元素具有相同的下标;
(C)数组中的所有元素具有相同的数据类型; (D)数组中的所有元素具有相同的名字;
13. 语句 int a[]={0,1,2}执行后,数组的元素个数是( B )。
(A)2
(B)3
(C)4
for(j=0;j<N-1;j++)
for(k=0;
k<N-j-1
; k++)
if(
a[k]<a[k+1]
)
{ a[k]+=a[k+1]; a[k+1]=a[k]-a[k+1] ; a[k]=a[k]-a[k+1] ; }
for(j=0;
j<N
;j++) cout<<a[j]<<" ";
cout<<endl;
多允许有 50 个字符。 ( F )11. C++中各种数据类型的变量在定义后会被自动初始化为 0 值。 ( F )12. 定义数组时可以用变量来定义数组的大小,但不能用表达式。 ( F )13. 定义一个有 50 个元素的一维字符数组,用该数组表示一个字符串数据最多允
许有 50 个字符。 ( T )14. 定义一个数组后该数组的最小下标取值是 0。 ( T )15. 静态数组被定义时,数组的所有元素自动获取初始值 0。 ( F )16. 数组是 C++的基本数据类型。 ( F )17. 数组不能用来存放字符串。 ( T )18. 同一数组的所有数组元素在内存中是连续存放的。 ( T )19. 在 C++中数组是具有一定顺序关系的若干相同类型变量的集合体。 ( F )20. 在给全部数组元素赋初值时,可以不指定二维数组中的常量表达式,
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章数组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 10scanf("%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]+1B. &bb[1]C. &bb[0]++D. bb+16. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是( )。
A. 3B. 6C. 10D. 207. 若有以下说明: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<stdio.h>main(){int a[10],i=0;while(i<10) scanf("%d",________ );┇}A. a+(i++)B. &a[i+1]C. a+iD. &a[++i]9. 执行下面的程序段后,变量k中的值为( )。
int k=3, s[2];s[0]=k; k=s[1]*10;A. 不定值B. 33C. 30D. 1010. 以下程序的输出结果是( )main(){int i, a[10];for(i=9;i>=0;i--) a[i]=10-i;printf("%d%d%d",a[2],a[5],a[8]);}A. 258B. 741C. 852D. 36911. 以下程序运行后,输出结果是( )。
main(){int n[5]={0,0,0},i,k=2;for(i=0;i<k;i++) n[i]=n[i]+1;printf("%d\n",n[k]);}A. 不确定的值B. 2C. 1D. 012. 以下程序运行后,输出结果是( )。
main(){int y=18,i=0,j,a[8];do{ a[i]=y%2; i++;y=y/2;} while(y>=1);for(j=i-1;j>=0;j--) printf("%d",a[j]);printf("\n");}A. 10000B. 10010C. 00110D. 1010013. 以下程序运行后,输出结果是( )。
main(){int a[10], a1[ ]={1,3,6,9,10}, a2[ ]={2,4,7,8,15},i=0,j=0,k;for(k=0;k<4;k++)if(a1[i]<a2[j]) a[k]=a1[i++];else a[k]=a2[j++];for(k=0;k<4;k++) printf("%d",a[k]);}A. 1234B. 1324C. 2413D. 432114. 以下程序运行后,输出结果是( )。
main(){int i,k,a[10],p[3];k=5;for (i=0;i<10;i++) a[i]=i;for (i=0;i<3;i++) p[i]=a[i*(i+1)];for (i=0;i<3;i++) k+=p[i]*2;printf("%d\n",k);}A. 20B. 21C. 22D. 2315. 以下程序运行后输出结果是( )。
main( ){int n[3],i,j,k;for(i=0;i<3;i++)n[i]=0;k=2;for (i=0;i<k;i++)for (j=0;j<k;j++)n[j]=n[i]+1;printf("%d\n",n[1]); }A. 2B. 1C. 0D. 316. 下列程序的主要功能是输入10个整数存入数组a,再输入一个整数x,在数组a中查找x。
找到则输出x在10个整数中的序号(从1开始);找不到则输出0。
程序缺少的是 ( )。
main(){int i,a[10],x,flag=0;for(i=0;i<10;i++)scanf("%d",&a[i]);scanf("%d",&x);for(i=0;i<10;i++) if _______ {flag=i+1; break;}printf("%d\n", flag);}A. x!=a[i]B. !(x-a[i])C. x-a[i]D. !x-a[i]17. 若说明:int a[2][3]; 则对a数组元素的正确引用是( ) 。
A. a(1,2)B. a[1,3]C. a[1>2][!1]D. a[2][0]18. 若有定义:int b[3][4]={0};则下述正确的是( ) 。
A. 此定义语句不正确B. 没有元素可得初值0C. 数组b中各元素均为0D. 数组b中各元素可得初值但值不一定为019. 若有以下数组定义,其中不正确的是( ) 。
A. int a[2][3];B int b[][3]={0,1,2,3};C. int c[100][100]={0};D. int d[3][]={{1,2},{1,2,3},{1,2,3,4}};20. 若有以下的定义:int t[5][4];能正确引用t数组的表达式是( )。
A. t[2][4]B. t[5][0]C. t[0][0]D. t[0,0]21. 在定义int m[ ][3]={1,2,3,4,5,6};后,m[1][0]的值是( )。
A. 4B. 1C. 2D. 522. 在定义int n[5][6]后第10个元素是( )。
A. n[2][5]B. n[2][4]C. n[1][3]D. n[1][4]23. 若二维数组c有m列,则计算任一元素c[i][j]在数组中的位置的公式为( )。
(假设c[0][0]位于数组的第一个位置)A. i*m+jB. j*m+iC. i*m+j-1D. i*m+j+124. 若有以下定义语句,则表达式“x[1][1]*x[2][2]”的值是( )。
float x[3][3]={{1.0,2.0,3.0},{4.0,5.0,6.0}};A. 0.0B. 4.0C. 5.0D. 6.025. 以下程序运行后,输出结果是 ( )。
main(){int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);}A. 0650B. 1470C. 5430D. 输出值不定26. 以下程序运行后,输出结果是( )。
main(){int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};int i,s=0;for(i=0;i<4;i++) s+=aa[i][1];printf(“%d\n”,s);}A. 11B. 19C. 13D. 2027. 有以下程序main( ){int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;j<=i;j++) s+=a[i][j];printf("%d\n",s);}该程序的输出结果是( )。
A. 18B. 19C. 20D. 2128. 若定义如下变量和数组:int i;int x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是( )。
for(i=0;i<3;i++) printf("%d",x[i][2-i]);A. 1 5 9B. 1 4 7C. 3 5 7D. 3 6 929. 下述对C语言字符数组的描述中错误的是( )。
A. 字符数组可以存放字符串B. 字符数组中的字符串可以整体输入、输出C. 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值D. 不可以用关系运算符对字符数组中的字符串进行比较30. 下述对C语言字符数组的描述中正确的是 ( )。
A. 任何一维数组的名称都是该数组存储单元的开始地址,且其每个元素按照顺序连续占存储空间B. 一维数组的元素在引用时其下标大小没有限制C. 任何一个一维数组的元素,可以根据内存的情况按照其先后顺序以连续或非连续的方式占用存储空间D. 一维数组的第一个元素是其下标为1的元素31. 不能把字符串:Hello!赋给数组b的语句是( )。
A. char str[10]= {'H', 'e', 'l', 'l', 'o', '! '};B. char str[10];str="Hello!";C. char str[10];strcpy(str,"Hello!");D. char str[10]="Hello!";32. 合法的数组定义是( )。
A. int a[]="string";B. int a[5]={0,1,2,3,4,5};C. int s="string";D. char a[]={0,1,2,3,4,5};33. 下列语句中,不正确的是( )。