第四章 数组作业
数据结构课后习题(第4-5章)

【课后习题】第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语言-第四章数组-教材习题及其答案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章构造数据类型第一部分数组通过本节实验作业应达目标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张课后作业_数组知识点:一维数组、二维数组一、填空及选择: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的整数的平方值,将结果保存在一个数组中。
第四章 数组作业

第四章数组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 课后习题答案第四章

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语言第四章编程练习题

第四章课后编程练习题(一)数组一维数组: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码值为奇数的字符排序后输出(按由小到大的顺序)。
第四章习题答案

第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 )。
- 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. 下列语句中,不正确的是( )。