练习题-第六章_数组(有答案)
- 格式:doc
- 大小:65.50 KB
- 文档页数:4
计算机基础与程序设计自考02275课后题答案第六章数组一、改错题正确答案:1、int a[5];2、赋值越界,正确应:ss[3]=5.2;3、定义时不能用变量4、在scanf函数中,用%s格式符时,输入项直接写数组名,无需用&,正确:scanf(“%s”,str);5、赋初值时,一维数组长度可省略,二维数组第一维长度可省略,第二维长度不能省略。
6、在scanf函数中,用%c格式符时,输入项不能直接写数组名,需要加上取地址符号&,正确:scanf(“%c”,&c[k]);二、简答题(1)定义了一个数据类型为整型的二维数组t(2)2行(3)5列(4)10个(5)t[1][0]、t[1][1]、t[1][2]、t[1][3]、t[1][4](6)t[0][2]、t[1][2](7)t[0][1]=0;(8)int t[2][5]={0};(9)for(i=0;i<2;i++)for(j=0;j<5;j++)t[i][j]=0;(10)scanf(“%d”,&t[0][0]);(11)he=t[0][3]+t[1][3];ave=he/2;三、填空题1、02、23、地址4、连续、行5、越界四、补充程序1、①N-1 ②N ③a[i]=a[j] ④a[j]=t2、①D ②A ③D ④D五、编写程序1、任意输入20个整数,计算(1)正数的个数和正数的和;(2)负数的个数和负数的和;(3)零的个数;main(){int a[20],i,m=0,n=0,p=0,max=0,min=0;for(i=0;i<20;i++)scanf("%d",&a[i]);for(i=0;i<20;i++)if(a[i]>0){ m=m+1;max=max+a[i];}else if(a[i]==0)n=n+1;else{ p=p+1; min=min+a[i];}printf("zhong:%d,he:%d,fu:%d,he:%d,ling:%d\n",m,max,p,min,n);}2、对一个任意的4行4列的二维整型数组,编辑实现(1)每一列的最大值;(2)每一行的最小值;(3)所有元素的最大值、最小值及其他们的行下标和列下标main(){int i,j,max,min,a[4][4],m=0,n=0,l=0,h=0;for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);max=a[0][0];min=a[0][0];for(i=0;i<4;i++)for(j=0;j<4;j++){ if(a[i][j]>max){max=a[i][j];m=i;n=j;}if(a[i][j]<min){min=a[i][j];l=i;h=j;}}printf("max:%d,hang:%d,lie:%d\n",max,m,n);printf("min:%d,hang:%d,lie:%d\n",min,l,h);}3、把字符数组str2中的全部字符拷贝到字符数组str1中(不要使用strcpy函数)main(){char str1[10],str2[10]={"I am boy"};int i;for(i=0;i<10;i++)str1[i]=str2[i];printf("%s\n",str1);}。
第六章作业一、选择题1.若不考虑结点的数据信息的组合情况,具有3个结点的树共有种()形态,而二叉树共有( )种形态。
A.2 B。
3C。
4 D。
52.对任何一棵二叉树,若n0,n1,n2分别是度为0,1,2的结点的个数,则n0= ()A.n1+1B.n1+n2C.n2+1 D。
2n1+13。
已知某非空二叉树采用顺序存储结构,树中结点的数据信息依次存放在一个一维数组中,即ABC□DFE□□G□□H□□,该二叉树的中序遍历序列为()A。
G,D,B,A,F,H,C,E B。
G,B,D,A,F,H,C,EC。
B,D,G,A,F,H,C,E D.B,G,D,A,F,H,C,E4、具有65个结点的完全二叉树的高度为()。
(根的层次号为1)A.8 B.7 C.6 D.55、在有N个叶子结点的哈夫曼树中,其结点总数为()。
A 不确定B 2NC 2N+1D 2N—16、以二叉链表作为二叉树存储结构,在有N个结点的二叉链表中,值为非空的链域的个数为().A N-1B 2N-1C N+1D 2N+17、树的后根遍历序列等同于该树对应的二叉树的( )。
A. 先序序列B。
中序序列 C. 后序序列8、已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则完全二叉树的结点个数最多是()A.39 B.52 C.111 D。
1199、在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶节点个数是()A.41 B.82 C。
113 D.122二、填空题。
1、对于一个具有N个结点的二叉树,当它为一颗_____ 二叉树时,具有最小高度。
2、对于一颗具有N个结点的二叉树,当进行链接存储时,其二叉链表中的指针域的总数为_____ 个,其中_____个用于链接孩子结点,_____ 个空闲着。
3、一颗深度为K的满二叉树的结点总数为_____ ,一颗深度为K的完全二叉树的结点总数的最小值为_____ ,最大值为_____ 。
1.以下对一维整型数组a的定义,正确的是_。
(2分)A.int a(10) ;B.int n = 10 , a[n] ;C.int n ;scanf( "%d" , &n ) ;int a[n] ;D.int a[10] ;2.若有定义:int a[10] ;,则对a数组元素的正确引用是_。
(2分)A.a[10]B.a[3.5]C.a(5)D.a[10-10]3.对定义int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_。
(2分)A.将5个初值依次赋给a[1]--a[5]B.将5个初值依次赋给a[0]--a[4]C.将5个初值依次赋给a[6]--a[10]D.因为数组长度与初值个数不相同,所以此语句不正确4..若有定义:int a[3][4]; , 则对a数组元素的正确引用是_。
(2分)A.a[3][4]B.a[1,3]C.a[1+1][0]D.a(2)(1)5.以下对二维数组a初始化正确的语句是_。
(2分)A.int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}};B.int a[ ][3]={{0, 1, 2}, {3, 4, 5}};C.int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}};D.int a[ ][3]={{0, 1, 2}, { }, {3, 4}};6.对二维数组a进行如下初始化:int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5};则a[1][1]的值是_。
(2分)A.0B.3C.4D.17.下面程序段的运行结果是_。
(2分)#include<stdio.h>int main( ){int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ;for( i = 0 ; i < 3 ; i++ )printf( "%2d" , x[i][2-i] ) ;return 0 ;}A.1 5 9B.1 4 7C.3 5 7D.3 6 98.以下对数组s的初始化,错误的是_。
1、R n 中分量满足下列条件的全体向量1(,,)n x x 的集合,是否构成R n的子空间?①10n x x ++=;②120n x x x ⋅⋅⋅=;③2211n x x ++=。
解:①是,设(){}111,,|0n n V x x x x =++=,显然V 1≠∅,1,,,a b F V ξη∀∈∀∈,设1212(,,),(,,)x x y y ξη==,则()()()1111,,,,,,n n n n a b a x x b y y ax by ax by ξη+=+=++,而1111()()()()000n n n n ax by ax by a x x b y y a b ++++=+++++=+=所以1a b V ξη+∈,所以V 1是R n 的子空间; ②不是,取(1,0,,0),(0,1,,1)αβ==,则(){}11,,,|0n n V x x x x αβ∈=⋅⋅=,但(1,1,,1)V αβ+=∉,所以V 不是R n 的子空间;③不是,取(1,0,,0),(0,1,0,,0)αβ==,则(){}2211,,,|1n n V x x x x αβ∈=++=,但(1,1,0,,0)V αβ+=∉,所以V 不是R n 的子空间。
2、子集{}1|,,V X AX XB A B n ==为已知的阶矩阵是否是()n M F 的子集?解:是()n M F 的子集;证:显然1V ≠∅,1,,,X Y V a b F ∀∈∈,有()()A aX bY aAX bAY aXB bYB aX bY B +=+=+=+,所以1aX bY V +∈,所以1V 是()n M F 的子集。
3、设12(1,0,1,0),(1,1,2,0)αα==-,求含12,αα的R 4的一组基。
解:因为101010101010112001100010⎛⎫⎛⎫⎛⎫→→⎪ ⎪ ⎪---⎝⎭⎝⎭⎝⎭,取34(0,0,1,0),(0,0,0,1)αα==,所以{}1234,,,αααα为R 4的一组基。
一、填空题1.在C语言中,二维数组元素在内存中的存放顺序是。
2.定义了二维数组:int array[4][5],该数组所占的内存空间为______字节。
3.假设有整型数组array[100][100],其中第66行,第66列元素array[66][66]在数组中排列的位置(位置从1开始算起)为6566 。
4.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[2][1]得到的初值是________。
5.下面的程序段的运行结果是____he_____。
char x[ ]=“the teacher”;int i =0;while(x[++i] != ’\0’)if(x[i-1] = = ‘t’) printf(“%c”,x[i]);二、单项选择题1.下面程序( B )(每行程序前面的数字表示行号)。
1 main( )2 { float a[10]={0.0};3 int i;4 for(i=0;i<3;i++) scanf(“%d”,&a[i]);5 for(i=1;i<10;i++) a[0]=a[0]+a[i];6 printf(“%f\n”,a[0]);7 }A)没有错误B)第2行有错误C)第4行有错误D)第6行有错误2.下面程序中有错误的行是(D)(每行程序前面的数字表示行号)。
1main( )2{3int a[3]={1};4int i;5scanf(“%d”,&a);6for(i=1;i<3;i++) a[0]=a[0]+a[i];7printf(“a[0]=%d\n”,a[0]);}A. 3B. 6C. 7D. 53.以下不能对二维数组a进行正确初始化的语句是( C )。
A. int a[2][3] = {0};B. int a[ ][3] = {{1,2},{0}};C. int a[2][3] = {{1,2},{3,4},{5,6}};D. int a[ ][3] = {1,2,3,4,5,6};4.对两个数组a和b进行初始化char a[ ] =“ABCDEF”;char b[ ] = {‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};则以下叙述正确的是(D )。
1、(1)数据结构中,与所使用的计算机无关的是数据的_C_______。
A)存储结构B)物理结构C)逻辑结构D)物理和存储结构评析:数据结构概念一般包括3个方面的内容,数据的逻辑结构、存储结构及数据上的运算集合。
数据的逻辑结构只抽象的反映数据元素之间的逻辑关系,而不管它在计算机中的存储表示形式。
2、栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是____D____。
A)ABCED B)DBCEA C)CDABE D)DCBEA评析:栈操作原则上“后进先出”,栈底至栈顶依次存放元素A、B、c、D,则表明这4个元素中D是最后进栈,B、c处于中间,A最早进栈。
所以出栈时一定是先出D,再出c,最后出A。
3、线性表的顺序存储结构和线性表的链式存储结构分别是____B____。
A)顺序存取的存储结构、随机存取的存储结构B)随机存取的存储结构、顺序存取的存储结构C)随机存取的存储结构、随机存取的存储结构D)任意存取的存储结构、任意存取的存储结构评析:顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai)。
LOC(a1)+(i-1)L计算得到,从而实现了随机存取。
对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。
4、在单链表中,增加头结点的目的是____A__。
A)方便运算的实现B)使单链表至少有一个结点C)标识表结点中首结点的位置D)说明单链表是线性表的链式存储实现评析:头结点不仅标识了表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。
5、数据处理的最小单位是___C_____。
A)数据B)数据元素C)数据项D)数据结构评析:数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。
中国大学慕课spoc第六章C++数组答案1最大值(100分)问题描述先输入一个正整数n(1到20之间),再输入n个整数,计算其中的最大值和相应下标。
输入描述先输入要处理的整数的个数n(1<=n<=20),再输入n个整数,并用空格分开。
输出描述依次输出n个整数中的最大值和相应下标(若多个整数与最大值相同,则从小到大输出相应下标),之间用空格分隔。
输入样例154 6 7 2 5输出样例17 2输入样例254 6 7 2 7输出样例27 2 4#include <bits/stdc++.h>using namespace std;int main(){int n,i,j,a[20],max;cin>>n;for(i=0;i<n;i++){cin>>a[i];}max=a[0];for(i=0;i<n;i++){if(max<a[i])max=a[i];}cout<<max;for(i=0;i<n;i++){if(a[i]==max){cout<<" "<<i;}}}2峰值个数(100分)问题描述先输入一个正整数n(3到20之间),再输入n个整数,计算其中的峰值个数。
峰值是满足大于或小于左右两个元素的元素,例如12,45,32,0,14,25,62,48,51序列中,峰值有45,0,62,48,峰值个数为4。
输入描述先输入要处理的整数的个数n(3<=n<=20),再输入n个整数,并用空格分开。
输出描述一个整数,表示n个整数中有多少个峰值。
输入样例54 6 7 2 5输出样例2#include <bits/stdc++.h>using namespace std;int main(){int n,i,a[20],j=0;cin>>n;for(i=0;i<n;i++){cin>>a[i];}for(i=1;i<n-1;i++){if((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i-1]&&a[i]<a[i+1]))j++;}cout<<j;}3互为相反数(100分)问题描述先输入一个正整数n(2到20之间),再输入n个数(可重复,可为浮点数),计算其中有多少对互为相反数(仅有符号不同的两数互为相反数)。
一、填空题
1.在C语言中,二维数组元素在内存中的存放顺序是。
2.定义了二维数组:int array[4][5],该数组所占的内存空间为______字节。
3.假设有整型数组array[100][100],其中第66行,第66列元素array[66][66]在数
组中排列的位置(位置从1开始算起)为6566 。
4.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[2][1]得到的初值是
________。
5.下面的程序段的运行结果是____he_____。
char x[ ]=“the teacher”;
int i =0;
while(x[++i] != ’\0’)
if(x[i-1] = = ‘t’) printf(“%c”,x[i]);
二、单项选择题
1.下面程序( B )(每行程序前面的数字表示行号)。
1 main( )
2 { float a[10]={0.0};
3 int i;
4 for(i=0;i<3;i++) scanf(“%d”,&a[i]);
5 for(i=1;i<10;i++) a[0]=a[0]+a[i];
6 printf(“%f\n”,a[0]);
7 }
A)没有错误B)第2行有错误
C)第4行有错误D)第6行有错误
2.下面程序中有错误的行是(D)(每行程序前面的数字表示行号)。
1main( )
2{
3int a[3]={1};
4int i;
5scanf(“%d”,&a);
6for(i=1;i<3;i++) a[0]=a[0]+a[i];
7printf(“a[0]=%d\n”,a[0]);
}
A. 3
B. 6
C. 7
D. 5
3.以下不能对二维数组a进行正确初始化的语句是( C )。
A. int a[2][3] = {0};
B. int a[ ][3] = {{1,2},{0}};
C. int a[2][3] = {{1,2},{3,4},{5,6}};
D. int a[ ][3] = {1,2,3,4,5,6};
4.对两个数组a和b进行初始化
char a[ ] =“ABCDEF”;
char b[ ] = {‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};
则以下叙述正确的是(D )。
A. a与b数组完全相同
B. a与b长度相同
C. a和b中都存放字符串
D. a数组比b数组长度长
5.判断字符串s1是否大于字符串s2,应当使用( D )。
A. if ( s1 > s2 )
B. if (strcmp (s1 , s2 ))
C. if ( strcmp (s2 , s1 ) > 0 )
D. if (strcmp (s1 , s2 ) > 0 )
6.当运行以下程序时,从键盘输入:AhaMA□Aha ↙(□代表空格,↙代表回车),
则下面程序的运行结果是( )。
#include “stdio.h”
main( )
{ char s[80], c = ‟a‟;
int i = 0;
scanf(“%s”,s);
while(s[i] != ‟\0‟)
{ if(s[i] = = c ) s[i] = s[i] - 32;
else if (s[i] = = c-32) s[i] = s[i] + 32;
i++;
}
puts(s);
}
A. ahAMa
B. AhAMa
C. AhAMa□ahA
D. ahAMa□ahA
7.下面程序段是输出两个字符串中对应相等的字符。
请选择填空。
char x[]=“programming”;
char y[]=“Fortran”;
int i=0;
while(x[i]!= …\0‟&&y[i]!= …\0‟)
if(x[i]==y[i]) printf(“%c”, ( A ) );
else i++;
A. x[i++]
B. y[++i]
C. x[i]
D. y[i]
三、判断题
1.有二维数组int a[100][100],数组元素a[100][100]的存储位置为10001。
( F )
2.为了增加程序的通用性,定义数组时,最好用变量说明其长度。
如:int n; int arr[n];
( F )
3.字符个数多的字符串一定比字符个数少的字符串大。
(F)
4.下面程序运行的结果为“OK!”。
( F )
char s1[100] = {“abcde”}; char s2[100] = { “abcde” };
if(s1= = s2) printf( “ OK! ”) else printf(“No! ”);
四、填程序
1.设数组a包括10个整型元素。
下面程序的功能是求出a中各相邻两个元素的和,并将
这些和存在数组b中,按每行3个元素的形式输出。
请填空。
main( )
{ int a[10],b[10],i;
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
for( i=1 ;i<10;i++)
a[i]=a[i-1]+a[i];
for(i=1;i<10;i++)
{ printf(“%3d”,b[i]);
if(i%3 == 0) printf(“\n”);
}
}
2.下面程序的功能是求出矩阵x的右上三角元素之积。
其中矩阵x的行、列数和元素值均
由键盘输入。
请填空。
#define M 10
main( )
{ int x[M][M];
int n,i,j;
long s=1;
printf(“Enter a integer(<=10):\n”);
scanf(“%d”,&n);
printf(“Enter %d data on each line for the array x\n”,n);
for( i=0;i<n;i++ )
for(j=0;j<n;j++)
scanf(“%d”,&x[i][j]);
for(i=0;i<n;i++)
for( j=i ;j<n;j++)
s*=x[i][j];
printf(“\n%ld\n”,s);
}
五、编程题:
1.利用顺序查找法从数组a的10个元素中对关键字m进行查找。
要求从键盘输入数组元
素以及要查找的数据值。
(顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字比较,直到找到此元素或查找到数组尾部时结束。
若找到,则查找成功;若直至最后一个元素都不相等,则查找失败。
)
2.从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接到串a
中;如果b的长度小于5,则把b的所有元素都连接到a中。
试编程。