文档库 最新最全的文档下载
当前位置:文档库 › 第7章 数组习题解答

第7章 数组习题解答

第7章 数组习题解答
第7章 数组习题解答

第7章数组习题解答

1.以下各题中,选择一个正确的翻案。

⑴能正确对一维数组a中所有元素进行初始化的是(D)。

A. int a[5]={ }

B. int a[]={0}

C.int a[5]=0,0,0,0,0

D.int a[5]={0} #include

void main()

{

int i;

int a[5]={0};

for(i=0;i<5;i++)

printf("%d ",a[i]);

}

⑵有说明int k=3,a[10];

则下列可以正确引用数组元素的表达式是( A )。

A. a[k]

B. a[10]

C.a[1.3]

D.a[3*5]

⑶有定义int d[][3]={1,2,3,4,5,6};

执行语句printf("%c ",d[1][0]+'A');

结果是(D)。

A. A

B. B

C. D

D. E

#include

void main()

{

int d[][3]={1,2,3,4,5,6};

printf("%c ",d[1][0]+'A');

}

⑷有定义char c='A',ch[20]={'a','b','c','\0','d','\0'};

若执行:printf("%s ",ch);

结果为(B)。

A. ‘abc’

B. abc

C. abcd

D. abc\0d

#include

void main()

{

char c='A',ch[20]={'a','b','c','\0','d','\0'};

printf("%s ",ch);

}

⑸对数组进行初始化char carr[]={'s','t','u','d','e','n','t'},barr[]="student"; 则正确的是(D)。

A. carr与barr长度相同

B. carr比barr

C. carr与barr相同

D. carr比barr短

#include

void main()

{

char carr[]={'s','t','u','d','e','n','t'},barr[]="student"; }

2.阅读下列程序,写出运行结果。

#include

void main()

{

int i,j,d[4][4]={{1,2,3,4},{5,6,7,8},{4,3,2,1},{1,2,3,4}};

for(i=0;i<4;i++)

for(j=0;j

if(d[i][j]>d[j][i])

d[j][i]=d[i][j];

for(i=0;i<4;i++)

{

printf("\n");

for(j=0;j<4;j++)

if(j>=i)

printf("%6d",d[i][j]);//显示主对角线以上的元素else

printf("%6c",' ');

}

putchar('\n');

}

运行结果:

1 5 4 4

6 7 8

2 3

4

⑵若输入十进制数3291时,下列程序输出为:

6333

#include

void main()

{

int i,d,m,n;

char s[8];

scanf("%d",&n);

i=0; //存储字符数组下标

do

{

m=n/8;

d=n%8;

s[i]='0'+d;//余数转换为数字字符

i++;

n=m; //商作为下一轮行循环操作的被除数

}while(n!=0); //商不为0,继续循环

for(i--;i>=0;i--)

putchar(s[i]);

}

3.程序填空。

⑴从键盘输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。#include

void main()

{

int data,temp,k;

static int a[9]={-10,2,4,8,10,15,25,50};

printf("\nEnter adata:");

scanf("%d",&data);

for(k=8;k>=0;k--)

{

if(a[k]

{

a[k]=a[k-1];

a[k-1]=data;

}

else

}

for(k=0;k<=8;k++)

printf("%7d",a[k]);

putchar('\n');

}

注:原程序的代码有误,其核心部分有元素交换操作,这对已按升序排列各元素的数组,在插入一个元素时是没有必要的。完整的代码如下:

#include

void main()

{

int data,k;

static int a[9]={-10,2,4,8,10,15,25,50};

printf("\nEnter adata:");

scanf("%d",&data);

for(k=8;k>=0;k--)

{

if(data>a[k-1]||k==0)

{

break;

}

else

{

}

}

printf("%7d",a[k]);

putchar('\n');

}

运行该程序:

Enter adata:9

-10 2 4 8 9 10 15 25 50

⑵从键盘输入一串英文字符(不含空格与其他字符),统计每个字符的个数,并输出字母及相应的个数。

#include

void main()

{

int i=0,c[52]={0},m=0;

char str[80];

printf("Input a string:");

while(str[i])

{

c[str[i]-'A']++;

if(str[i]>='a' && str[i]<='z')

i++;

}

for(i=0;i<26;i++)

if(c[i])

{

if(m%8==0)

putchar('\n');

m++;

printf("%c:%-d ",i+'A',c[i]);

}

for(i=0;i<26;i++)

if(c[i+26])

{

if(m%8==0)

putchar('\n');

m++;

}

putchar('\n');

}

4.求一组成绩的平均分数以及高于平均分的成绩,设给定的成绩为90,85,92,77,80,62。

注:省略数据输入,用随机函数产生10个数,求其平均值。

#include

#include

#include

void main()

{

int a[10],i,sum=0;

double average;

srand((unsigned)time(NULL));

for(i=0;i<10;i++)

{

a[i]=rand()%100;

printf("%d ",a[i]);

}

putchar('\n');

for(i=0;i<10;i++)

sum+=a[i];

average=sum/10;

printf("average=%lf\n",average);

}

运行:

95 26 88 83 57 31 33 55 82 30

average=58.000000

5.编写程序,输入一组整数,将它们排序后由小到大输出。[起泡法]

思路:两个数比较,小者前移,大者后移。

#include

#include

#include

int main()

{

int a[10],i,j,t;

srand((unsigned)time( NULL));//初始化rand()函数

for(i=0;i<10;i++)

a[i]=rand()%100; //用随机数为数组元素赋值printf("Before sorted:\n");

for(i=0;i<10;i++)

printf("%d ",a[i]);

putchar('\n');

for(j=0;j<9;j++)

for(i=0;i<10-j;i++)

if(a[i]>a[i+1])

{

t=a[i];a[i]=a[i+1];a[i+1]=t;

}

printf("After sorted:\n");

for(i=0;i<10;i++)

printf("%d ",a[i]);

putchar('\n');

return 0;

}

程序运行后输出:

Before sorted:

21 14 78 57 3 61 82 8 52 45

After sorted:

3 8 1

4 21 4

5 52 57 61 78 82

[选择法]

思路:用一个变量k保存当前最小元素的下标,不进行交换,直到完成一次内循环的比较后,把a(k)交换到希望的位置a(i):

①令k=0,a(k)与a(1)比较,若a(k)>a(1),令k=1,小者的下标存放在k中;

② a(k)又与a(2),a(3),……,直到a(10),重复①的工作,结束后,实现10个数中的最小者存放在a(k)中。

③a(1)与a(k)交换,把最小者存放在a(1)中。

④分别令k=1,2,3,….,9重复①②③的操作。

#include

#include

#include

int main()

{

int a[10],i,j,t,k;

srand((unsigned)time( NULL));//初始化rand()函数

for(i=0;i<10;i++)

a[i]=rand()%100; //用随机数为数组元素赋值

printf("Before sorted:\n");

for(i=0;i<10;i++)

printf("%d ",a[i]);

putchar('\n');

for(i=0;i<9;i++)

{

k=i;

for(j=i+1;j<10;j++)

if(a[k]>a[j])k=j;

t=a[i];a[i]=a[k];a[k]=t;

}

printf("After sorted:\n");

for(i=0;i<10;i++)

printf("%d ",a[i]);

putchar('\n');

return 0;

}

6.从键盘输入一个4×4整数矩阵,以主对角线为对称轴,将左下角元素中较大元素代替右上角对应元素,并将右上角元素(含对角线元素)输出。

注:本题与2题的操作相同。

#include

#include

#include

int main()

{

int d[4][4],i,j;

srand((unsigned)time( NULL));//初始化rand()函数

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{

d[i][j]=rand()%100; //用随机数为数组元素赋值

printf("%6d",d[i][j]);

}

putchar('\n');

}

for(i=0;i<4;i++)

for(j=0;j

if(d[i][j]>d[j][i])

d[j][i]=d[i][j];

for(i=0;i<4;i++)

{

printf("\n");

for(j=0;j<4;j++)

if(j>=i)

printf("%6d",d[i][j]);//显示主对角线以上的元素

else

printf("%6c",' ');

}

putchar('\n');

return 0;

}

7.通过键盘给3×4的二维数组输入数据,然后分别按行和列输出数组元素。#include

#include

#include

int main()

{

int d[3][4],i,j;

srand((unsigned)time( NULL));//初始化rand()函数

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

{

d[i][j]=rand()%100; //用随机数为数组元素赋值

printf("%6d",d[i][j]);

}

putchar('\n');

}

return 0;

}

8.编写程序,将两个字符串连接起来,不要用strcat函数。

#include

int main()

{

char a[80],b[40];

int i,j;

printf("Input a string:");

scanf("%s",a);

printf("Input a string:");

scanf("%s",b);

i=0;

while(a[i])i++; //搜索串尾元素下标

for(j=0;b[j];j++,i++)

a[i]=b[j];

a[i]='\0';

puts(a);

return 0;

}

9.输入一行字符串,统计该字符串中字符对ab的个数。

#include

int main()

{

char a[80];

int i,n=0;

printf("Input a string:");

scanf("%s",a);

for(i=0;a[i];i++)

{

if(a[i]=='a' && a[i+1]=='b')

n++;

}

printf("ab_number=%d\n",n);

return 0;

}

10.从键盘输入10个字符串,找出一最长的字符串。

#include

int main()

{

char a[5][80];

int i,j,n,max=0;

for(i=0;i<5;i++)

{

printf("Input a string:");

scanf("%s",a[i]);

}

for(i=0,j=0;i<5;i++,j=0)

{

while(a[i][j])j++;

if(j>max)

{

max=j;

n=i;

}

}

printf("Max_string:%s\n",a[n]);

return 0;

}

11.已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,编程将a

与b中的所有元素按降序存入数组c中。

#include

#include

#include

void risesort(int a[],int n)//升序排序

{

int i,j,k,t;

for(i=0;i

{

k=i;

for(j=i+1;j<10;j++)

if(a[k]>a[j])k=j;

t=a[i];a[i]=a[k];a[k]=t;

}

}

void dropsort(int a[],int n)//降序排序

{

int i,j,k,t;

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[k]

t=a[i];a[i]=a[k];a[k]=t;

}

}

void disp(int a[],int n) //显示数组中的各元素

{

int i;

for(i=0;i

printf("%d ",a[i]);

putchar('\n');

}

void f(int a[],int n)

{

int i;

for(i=0;i

a[i]=rand()%100; //用随机数为数组元素赋值}

int main()

{

int a[10],b[10],c[20],i,j,k;

srand((unsigned)time( NULL));//初始化rand()函数

f(a,10);

risesort(a,10);

disp(a,10);

f(b,10);

dropsort(b,10);

disp(b,10);

for(i=9,j=0,k=0;k<20;)//i,j,k分别为数组a,b,c的下标{

if(a[i]>b[j] && i!=-1 && j!=10)

c[k++]=a[i--];

else if(a[i]==b[i])

{

c[k++]=a[i--];

c[k++]=b[j++];

}

else if(j!=10)

c[k++]=b[j++];

else if(i!=-1)

c[k++]=a[i--];

}

disp(c,20);

return 0;

}

实验七数组

2.填空

⑴以下程序分别在a数组和b数组中放入an+1和bn+1个由小到大的有序数,程序把两个数组中的数按由小到大的顺序归并在c数组中。

#include

int main()

{

int a[10]={1,2,5,8,9,10},an=5;

int b[10]={1,3,4,8,12,18},bn=5;

int i,j,k,c[20],max=9999;

a[an+1]=b[bn+1]=max;

i=j=k=0;

while((a[i]!=max) || (b[j]!=max))

if(a[i]

{

}

else

{

}

for(i=0;i

printf("\n");

return 0;

}

⑵以下程序以每行输出8个数据的形式输出a数组。

#include

#include

#include

int main()

{

int a[50],i;

for(i=0;i<50;i++)a[i]=rand()%100;

for(i=0;i<50;i++)

{

}

printf("\n");

return 0;

}

⑶以下程序将数组中的数据按逆序存放。

#include

#include

#include

#define SIZE 12

int main()

{

int a[SIZE],i,j,t;

srand((unsigned)time( NULL));

for(i=0;i

{

}

for(i=0;i

printf("\n");

return 0;

}

⑷假设a数组中的数按由小到大的顺序存放,以下程序把a数组中相同的数删得只剩下一个,然后以每行5个数的形式输出a数组中的数,请填空。

#include

#include

#include

#define MAX 30

int main()

{

int a[MAX],i,j,k,t,n;

//for(i=0;i

srand((unsigned)time( NULL));

for(i=0;i

{

t=rand()%100;

a[i++]=t;a[i++]=t;a[i]=t;

printf("%3d%3d%3d",a[i-1],a[i-1],a[i]);

}

putchar('\n');

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[k]>a[j])k=j;

if(k!=i)

{t=a[i];a[i]=a[k];a[k]=t;}

}

for(i=0;i

putchar('\n');

{

if(a[i]==a[i-1]) //删除相同元素

{

1

}

for(i=0;i<=n;i++)

{

}

printf("\n");

return 0;

}

3. 编程题。

⑴用筛法求2-100以内的素数。

#include

void main()

{

int i,j,k=0;

int a[100]; //用数组作筛

for(i=0;i<100;i++)a[i]=i; //为数组各元素赋值,下标与元素值相等

for(i=2;i<100;i++) //2是最小的素数

{

if(a[i]!=0) //当前不为0的元素即为素数(不能被较小的数整除) {

for(j=i+1;j<100;j++)

{

if(j%i==0)//下标为素数倍数的元素赋值0

a[j]=0;

}

}

}

for(i=2;i<100;i++)

{

if(a[i]!=0) //元素不为零的元素均为素数

{

printf("%3d ",a[i]);//也可以输出i

k++;

if(k%10==0)putchar('\n');

}

}

putchar('\n');

}

⑵某数列前两项为2、3,其后每项为其前两项之积,求此数列的第10个数。#include

void main()

{

int i;

int a[8];

a[0]=2;

a[1]=3;

for(i=2;i<8;i++)a[i]=a[i-1]*a[i-2];

for(i=0;i<8;i++)printf("%d ",a[i]);

putchar('\n');

}

注:在VC下第9个数开始溢出(int和long均占用4个字节)。

⑶读入20个整数,统计非负数和个数及其和,且按从小到大的次序输出。

#include

#include

#include

#define MAX 20

void sort(int a[],int n)

{

int i,k,j,t;

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[k]>a[j])k=j;

if(k!=i)

{t=a[i];a[i]=a[k];a[k]=t;}

}

}

int main()

{

int a[MAX],i,j,t,n,s=0;

srand((unsigned)time( NULL));

for(i=0;i

{

t=rand()%10;

if(t%3==0)

a[i]=-rand()%100;

else

a[i]=rand()%100;

printf("%4d",a[i]);

if(i%10==0 && i!=0)putchar('\n');

}

putchar('\n');

n=MAX;

for(i=n-1;i>=0;i--) //删除数组中的负值元素

{

if(a[i]<0)

{

for(j=i;j

n--; //数组元素个数减1

}

}

sort(a,n); //调用排序函数

for(i=0;i

{

s+=a[i];

printf("%d ",a[i]);

}

putchar('\n');

printf("No_negative_element_number=%d\n",n);

printf("Sum=%d\n",s);

return 0;

}

⑷求数列1,3,3,3,5,5,5,5,5,7,7,7,7,7,7,7,……的第40项。

注:下面程序输出该数列的前40项。

解法一(不用数组):

#include

void main()

{

int i,k,n,j=0;

for(k=1,n=0;n<=40;k+=2)

{

for(i=1;i<=k;i++)

{

printf("%3d",k);

n++;j++;

if(j%10==0 && j!=0)putchar('\n');

if(n==40)break;

}

}

putchar('\n');

}

解法二(使用数组):

#include

void main()

{

int i,k,n,j=0;

int a[40];

for(k=1,n=0;n<40;k+=2)

{

for(i=1;i<=k;i++)

{

a[n]=k;

printf("%3d",a[n]);

n++;j++;

if(j%10==0 && j!=0)putchar('\n');

if(n==40)break;

}

}

putchar('\n');

}

⑸一个素数依次从低位划去一位、二位、……,若所得的各数仍都是素数,则称为超级素数。例如239、23、2均为素数。求[100,9999]间的超级素数。

#include

int prime(int n) //判断素数的函数

{

int p=1,i;

for(i=2;i

if(n%i==0){p=0;break;}

return p;

}

void main()

{

int i,k,n,j=0;

for(i=100;i<9999;i++)

{

if(prime(i))

{

for(k=10,n=11;n>10;k*=10) //n为1位时终止循环

{

n=i/k;

if(prime(n))

continue;

break;

}

if(prime(n)&&n!=1)

{

printf("%6d",i);

j++;

if(j%8==0 && j!=0)putchar('\n');

}

}

}

putchar('\n');

}

数组练习题及答案

第五章数组练习题及答案 一、选择题 1、判断字符串a和b是否相等,应当使用() A、if(a==b) B、if(a=b) C、if(strcpy(a,b)) D、if(strcmp(a,b)) 2、以下正确的定义语句是() A、int a[1][4]={1,2,3,4,5}; B、float x[3][]={{1},{2},{3}}; C、long b[2][3]={{1},{1,2},{1,2,3}}; D、double y[][3]={0}; 3、以下各组选项中,均能正确定义二维实型数组a的选项是() A、float a[3][4]; float a[ ][4]; float a[3][ ]={{1},{0}}; B、float a(3,4); float a[3][4]; float a[ ][ ]={{0},{0}}; C、float a[3][4]; static float a[ ][4]={{0},{0}}; auto float a[ ][4]={{0},{0},{0}}; D、float a[3][4]; float a[3][ ]; float a[ ][4]; 4、下面程序的运行结果是() 1—5 DDCBA 6—10 BDABB 11—15 CCCBC 16—20 DDCBB 21—25 BBAAA 26—30 DBDDB #include "stdio.h" main() { char str[]="SSSWLIA",c; int k; for(k=2;(c=str[k]!='\0');k++) { switch(c) {case 'I':++k;break; case 'L':continue; default:putchar(c);continue; } putchar('*'); } } A、SSW* B、SW* C、SW*A D、SW 5、下面程序段是输出两个字符串中对应相等的字符。横线处应填入() char x[]="programming"; char y[]="Fortran"; int i=0;

第六章数组习题答案

第六章数组习题答案 一、单项选择题 1. C语言中,一维数组下标的最小值是(B )。 A)1 B) 0 C) 视说明语句而定D) 无固定下限 2. 若有定义语句:int a[3][6];,按在内存中的存放顺序,a数组的第10个元素是( B )。A)a[0][4] B) a[1][3] C) a[0][3] D) a[1][4] 3. 设有数组定义:char str[ ]=”China0”,则数组str所占的空间为( D )字节。 A)4个B) 5个C) 6个D) 7个 4. 若有定义语句:char str[ ]=”ab\n\012\\\n”; 则执行语句:printf(“%d”,strlen(str));后,输出结果是( A )。 A)3 B) 4 C) 6 D) 12 5. 下列描述中不正确的是( C )。 A)字符型数组中可以存放字符串 B)可以对字符型数组进行整体输入、输出 C)可以对整型数组进行整体输入、输出 D)不能在赋值语句中通过赋值运算符”=”对字符型数组进行整体赋值 6. 当用户要求输入的字符串中含有空格时,应使用的输入函数是( C )。 A)scanf( ) B)getchar( ) C) gets( ) D) getc( ) 7. 有以下程序 #include main( ) { int i,x[3][2]={0}; for(i=0;i<3;i++) scanf(“%d”,x[i]); printf(“%3d%3d%3d\n”,x[0][0], x[0][1], x[1][0]); } 程序运行后的输出结果是()。 A)2 0 0 B) 2 0 4 C) 2 4 0 D) 2 4 6 8. 有以下程序 #include #include main( ) { char p[20]={‘a’,’b’,’c’,’d’},q[ ]=”abc”,r[ ]=”abcde”; strcpy(p+strlen(q),r); strcat(p,q); printf(“%d %d\n”,sizeof(p),strlen(p)); } 程序运行后的输出结果是( C )。 A)20 9 B) 9 9 C) 20 11 D) 11 11 9. 有以下程序 #include #include main( )

数据结构-第六章-图-练习题及答案详细解析(精华版)

图 1. 填空题 ⑴ 设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵ 任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶ 图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷ 已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹ 有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度

⑺ 图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻ 对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼ 如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽ 在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk 【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。 2. 选择题 ⑴ 在一个无向图中,所有顶点的度数之和等于所有边数的()倍。 A 1/2 B 1 C 2 D 4 【解答】C 【分析】设无向图中含有n个顶点e条边,则。

vb控件数组的习题及答案

vb控件数组的习题及答案

电子教室学生注册时姓名文本框部分请输入:如:1411111111李四学号+姓名,中间不加空格) 实验准备: 请同学们删除d:\ex21 文件夹里面的内容 如果没有ex21文件夹,请在d:\ 下新建 ex21 文件夹 1、打开D:\下的工程文件PROJECTA4.vbp和窗体文件FORMA4.frm,按以 下要求完成程序:在窗体上创建2个列表框、2个标签、2个命令按钮。 List1用于显示可选课程、List2用于显示已选课程。单击“选课”按钮, 将List1中选定的课程名称加入到List2中显示,单击“清空”按钮,将 删除List2中的所有课程。程序运行的参考输出格式如图A-4所示,可选 课程至少包含图A-4所示的6门。最后将工程文件、窗体文件按原文件 名保存在D:\EX21文件夹下。 图A-4

2、打开D:\下的工程文件PROJECTB4.vbp和窗体文件FORMB4.frm,按以下要求完成程序:在窗体上创建1个列表框、1个图片框、2个标签、2个命令按钮。List1用于显示可选课程、Picture1用于显示已选课程。单击“选课”按钮,将List1中选定的课程名称加入到Picture1中显示,单击“清空”按钮,将删除Picture1中的所有课程。程序运行的参考输出格式如图B-4所示,可选课程至少包含图B-4所示的6门。最后将工程文件、窗体文件按原文件名保存在D:\EX21文件夹下。 图B-4

3、打开D:\下的工程文件PROJECTA41.vbp和窗体文件FORMA41.frm,按以下要求完成程序:单击窗体,能产生10个两位的随机整数并存放在一维数组中,并能在窗体中输出该10个随机整数、最大数及其在10个数中的位置,要求使用语句强制显式声明模块中的所有变量,程序运行的参考输出格式如图A-41所示。最后将工程文件、窗体文件按原文件名保存在D:\EX21文件夹下。 图A-41

C语言练习3(数组)=参考答案

C语言(数组) 一、选择题 1. 设有程序: main() { int i,a[11]; printf("给数组赋值:\n"); for (i=0;i<=10;i++) scanf("%d",( )); ... ... printf("输出数组:\n"); for(i=0;i<=10;i++) printf("%d,",( )); } 则在程序中的两个园括号中分别应填入:C A) &a[i]和&a[i] B) a[i]和&a[i] C) &a[i]和a[i] D) a[i]和a[i] 2. 设已定义:int a[15]; 则数组a占用的内存单元数是( C ). A) 15 B) 16 C) 30 D) 32 3. 阅读程序: main() { int a[2]={0},i,j,k=2; for(i=0;i

return r; } main() { int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3); printf("%d\n",x); } 以上程序的输出结果是( D ). A) 720 B) 6 C)24 D) 120 5. 以下定义语句中,错误的是( B ). A) int a[ ] = {6,7,8}; B) int n=5, a[n]; C) char a[ ]= "string"; D) char a[5 ]={'0','1','2','3','4'}; 6. 以下描述中正确的是( D ). A) 数组名后面的常量表达式用一对圆括弧括起来 B) 数组下标从1开始 C) 数组下标的数据类型可以是整型或实型 D) 数组名的规定与变量名相同 7. 若定义数组并初始化char a[10]={'0','1 ','2','3','4','5','6','7','8','9'};指出以下错误语句( AB ). A) scanf("%c",a[0]); B) scanf("%s",&a); C) printf("%c",a[3]); D) printf("%s",a); 8.若定义数组int a[10] ,其最后一个数组元素为( C ). A) a[0] B) a[1] C) a[9] D) a[10] 9. 若定义数组并初始化int a[10]={ 1,2,3,4},以下语句哪一个不成立( B )? A) a[8] 的值为0 B) a[1] 的值为1 C) a[3] 的值为4 D) a[9] 的值为0 10. 指出以下错误语句( A ).

C++程序设计习题答案第六章

第六章模板与数据结构习题 一、.基本概念与基础知识自测题 6.1 填充题 6.1.1 模板是为了实现代码的(1),它把数据类型改为一个(2),称为(3)程 序设计。模板包括(4)和(5)。 答案:(1)重用 (2)设计参数 (3)参数化(parameterize) (4)函数模板(function template) (5)类模板(class template) 6.1.2 调用函数模板时,可以显式指定模板参数类型,也可以隐式进行,称为(1),这是 根据(2)来决定的。 答案:(1)模板实参推演(template argument deduction) (2)一组实际类型或(和)值 6.1.3 顺序查找可以用于(1)线性表,而对半查找可以用于(2)线性表。 答案:(1)无序的(所有) (2)有序的 6.1.4 最常见的排序方式有(1)、(2)和(3)。如果现有一个已排好序的线 性表,在表尾添加了一个元素,采用(4)排序法使它重新成为有序的所需工作量最小。 答案:(1)选择 (2)插入 (3)交换 (4)交换(可利用原来的有序性) 6.1.5 给出以下指针的说明方式:指向一个4元素整型数组的指针为(1);指向一个返 回整型数,参数为两个整型数的函数的指针(2);指向一个数组的指针,而该数组元素都是指向一个返回整型指针的无参函数(3)。 答案:(1)int(*p)[4] (2)int(*p)(int,int) (3)以指向6元素数组为例:int*(*)() (*p)[6] 6.2简答题 6.2.1需要编写一个对多维数组通用的算法(即各维的大小未定),怎样才能把实参多维数 组的信息全部传递到函数中去? 答:最佳方法是用函数模板,多维数组用模板类型参数传递,各维的大小作为参数传递。也可以用一维数组加各维的大小都作为参数传递。 6.2.2什么叫函数模板?什么叫模板函数?什么叫类模板?什么叫模板类? 答:不受数据类型限制的通用型的函数使代码的可重用性大大提高。把数据类型改为

习题答案(6数组)《C语言程序设计》课后习题解答

一、单项选择题 1. D 2. D 3.A 4. B 二、程序设计题 1、 #include void main() { int math_score[10],max,min,sum=0,count=0,m,i; float average; for(i=0;i<10;i++) { printf("请输入第%d个同学的数学分数:\n",i+1); scanf("%d",&math_score[i]); } max=min=math_score[0]; for(i=0;i<10;i++) { sum+=math_score[i]; if(math_score[i]>max) max=math_score[i]; if(math_score[i]average) count++; printf("十名同学的数学成绩为:\n"); for(i=0;i<10;i++) printf("%d ",math_score[i]); printf("\n最高分为:%d",max); printf("\n最低分为:%d",min); printf("\n高于平均分的人数为:%d\n",count); } 2、 #include void main() { int a[11]={-1,3,5,6,12,34,55,67,76,88}; int number,i,j,m; printf("输入需要参入的数据:\n"); scanf("%d",&number); printf("原数组序列为:\n");

数组习题及参考答案

第七章数组 一、单项选择题 1.若有说明“int a[3][4]={0};”,则下面正确的是_____。 A.只有元素a[0][0]可得到初值0 B. 此说明语句不正确 C. 数组a各元素都可得到初值,但其值不一定是0 D. 数组a中每个元素均可得到初值0 2.以下不能正确定义二维数组的选项是_____。 A. int a[2][2]={{1},{2}} B. int a[2][2]={{1},2,3} C. int a[2][]={{1,2},{3,4}} D. int a[][2]={1,2,3,4} 3.在下列对字符数组进行初始化中正确的是_____。 A.char s1[]=”abcd” B.char s2[3]=”xyz” C.char s3[][]={…a?,?x?,?y?} D.char s4[2][3]={“xyz”,”mnp”} 二、写出下列程序的运行结果 有以下程序: 1. #include int main () {

int a[]={4,0,2,3,1},i,j,t; for(i=1;i<5;i++) { t=a[i];j=i-1; while(j>=0&&t>a[j]) { a[j+1]=a[j]; a[j]=t; j--; } } for(i=0;i<5;i++) { cout<

数据结构第六章树和二叉树习题及答案

习题六树和二叉树 一、单项选择题 1.以下说法错误的是() A. 树形结构的特点是一个结点可以有多个直接前趋 B. 线性结构中的一个结点至多只有一个直接后继 C. 树形结构可以表达(组织)更复杂的数据 D. 树(及一切树形结构)是一种”分支层次”结构 E. 任何只含一个结点的集合是一棵树 2. 下列说法中正确的是() A. 任何一棵二叉树中至少有一个结点的度为2 B. 任何一棵二叉树中每个结点的度都为2 C. 任何一棵二叉树中的度肯定等于2 D. 任何一棵二叉树中的度可以小于2 3. 讨论树、森林和二叉树的关系,目的是为了() A. 借助二叉树上的运算方法去实现对树的一些运算 B. 将树、森林按二叉树的存储方式进行存储 C. 将树、森林转换成二叉树 D. 体现一种技巧,没有什么实际意义4.树最适合用来表示() A. 有序数据元素 B .无序数据元素 C.元素之间具有分支层次关系的数据 D .元素之间无联系的数据 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B .11 C .15 D .不确定 6. 设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1, M2和M3与森林F 对应的二叉树根结点的右子树上的结点个数是()。 A.M1 B .M1+M2 C .M3 D .M2+M3 7.一棵完全二叉树上有1001个结点,其中叶子结点的个数是() A.250 B .500 C .254 D .505 E .以上答案都不对 8. 设给定权值总数有n 个,其哈夫曼树的结点总数为() A. 不确定 B . 2n C . 2n+1 D . 2n-1 9.二叉树的第I 层上最多含有结点数为() I I-1 I-1 I A.2I B .2 I-1 -1 C .2 I-1 D .2 I -1 10.一棵二叉树高度为h, 所有结点的度或为0,或为2,则这棵二叉树最少有()结点A.2h B .2h-1 C .2h+1 D .h+1 11. 利用二叉链表存储树,则根结点的右指针是()。 A.指向最左孩子 B .指向最右孩子 C .空D .非空 12.已知一棵二叉树的前序遍历结果为为()。 A.CBEFDA B .FEDCBA 13.已知某二叉树的后序遍历序列是()。 ABCDEF中序遍历结果 为 C .CBEDFA D dabec, 中序遍历序列是 CBAEDF则后序遍历的结 果 .不定 debac , 它的前序遍历是

数组典型例题及参考答案

第7章数组 7-1输入一个正整数n(1≤n≤10),再输入n个整数 (1)输出最大数和最小数,并输出平均值。 (2)将最小数与第一个数交换,最大数与最后一个数交换,然后输出交换后的结果。 (3)输出所有比平均值大的数。 (4)找到最接近平均值的数。(提示:考虑差的绝对值)

/* 将最小数与第一个数交换,最大数与最后一个数交换*/ t=a[0]; a[0]=a[q]; a[q]=t; t=a[N-1]; a[N-1]=a[p]; a[p]=t; printf("After exchange: "); for(i=0; iave) printf("%d ", a[i]); /* 找到最接近平均值的数*/ printf("\nThe number closest to the average is: "); sub = a[0]>ave? a[0]-ave: ave-a[0]; p=0; for(i=1; iave? a[i]-ave: ave-a[i]) < sub ) { sub = a[i]>ave? a[i]-ave: ave-a[i]; p=i; } } printf("%d.", a[p]); } Output Please input 10 integers: 17 34 -11 2 5 10 7 -9 0 25 /* input */ The maximum is: 34, the minimum is: -11, the average is 8.00 After exchange: -11 25 17 2 5 10 7 -9 0 34 Larger than the average: 25 17 10 34 The number closest to the average is: 7 7-2输入一个日期(按照year-month-day格式),计算该日期为当年的第几天。 (提示:注意闰年)

习题6(第七章)数组

第七章数组 7.1 选择题 【题7.1】在C语言中,引用数组元素时,其数组下标的数据类型允许是 c 。 A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 【题7.2】以下对一维整型数组a的正确说明是 D 。 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]; 【题7.3】若有说明:int a[10];则对a数组元素的正确引用是 D 。 A)a[10] B)a[3.5] C)a(5) D)a[10-10] 【题7.4】在C语言中,一维数组的定义方式为:类型说明符数组名 A ; A)[常量表达式] B)[整型表达式] C)[整型常量] 或[整型表达式] D)[整型常量] 【题7.5】以下能对一维数组a进行正确初始化的语句是 C 。 A)int a[10]=(0,0,0,0,0); B)int a[10]={}; C)int a[]={0}; D)int a[10]={10*1}; 【题7.6】以下对二维数组a的正确说明是 C 。 A)int a[3][]; B)float a(3,4); C)double a[1][4]; D)float a(3)(4); 【题7.7】若有说明:int a[3][4];则对a数组元素的正确引用是 C 。 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) 【题7.8】若有说明:int a[3][4];则对a数组元素的非法引用是 D 。 A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4] 【题7.9】以下能对二维数组a进行正确初始化的语句是 B 。 A)int a[2][]={{1,0,1},{5,2,3}}; B)int a[][3]={{1,2,3},{4,5,6}}; C)int a[2][4]={{1,2,3},{4,5},{6}}; D)int a[][3]={{1,0,1},{},{1,1}}; 【题7.10】以下不能对二维数组a进行正确初始化的语句是 C 。

数据结构练习题第三章栈、队列和数组习题及答案

第三章栈、队列和数组 一、名词解释: 1.栈、栈顶、栈底、栈顶元素、空栈 2.顺序栈 3.链栈 4.递归 5.队列、队尾、队头 6.顺序队 7.循环队 8.队满 9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵 二、填空题: 1.栈修改的原则是_________或称________,因此,栈又称为________线性表。在栈顶 进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________ 或________。 2.栈的基本运算至少应包括________、________、________、________、________五 种。 3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。 4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。 5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。 6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1 表示________,此时作进栈运算,则产生“________”。 7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。 int InitStack(SqStackTp *sq) { ________; return(1);} 8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。 Int Push(SqStackTp *sq,DataType x) { if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);} else{________________: ________________=x; return(1);} } 9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。 Int Pop(SqStackTp *sq,DataType *x) {if(sp->top==0){error(“下溢”);return(0);} else{*x=________________; ________________; return(1);} } 10. 以下运算实现在顺序栈上判栈空,请在________________处用适当句子予以填充。 Int EmptyStack(SqStackTp *sq) {if(________________) return(1); else return(0); } 11.以下运算实现在顺序栈上取栈顶元素,请在________________处用适当句子予以填充。 Int GetTop(SqStackTp *sq,DataType *x) {if(________________) return(0);

数据结构 第六章 图 练习题及答案详细解析

图 1. 填空题 ⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度 ⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk

《C++数组》习题参考答案

《C++数组》习题 学号姓名 一、选择题 1、下列对字符数组进行初始化的语句正确的是 A A.char a[]= "Hello"; B.char a[][]= {'H','e','l','l','o'}; C.char a[5]="Hello"; D.char a[2][5]= {"Hello","World"}; 2、以下一维数组a的正确定义是 D A.int a(10) ; B.int n=10,a[n]; C.int n; D.#define size 10 cin>>n; int a[size]; int a[n]; 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、执行以下程序后,s的值为 A int a[]={5,3,7,2,1,5,4,lO); int s=0,k; for(k=0;k<8;k+=2) s+=*(a+k); A.17 B.27 C.13 D.无定值 5、为了判断两个字符串sl和s2是否相等,应当使用 D A.if (s1==s2)

B.if (s1=s2) C.if(strcpy(S1,s2)) D.if(strcmp(s1,s2)==O) 6、有定义int a[2][5];,若a[0][1]的地址为x,则a[0][O]、a[1][3]地址分别为(假设一个整型数据占用两个字节的内存空间): A A.x-2,x+14 B.x-1,x+7 C.x+1,x+7 D.x-1,x+14 7、若有定义float a[m][n];,且a[1][1]的地址为x,每个float元素占用4个字节,则a[il[j]的地址为 A A.x+4*(i-1)*n+4*(j-1) B.x+(i-1)*n+(j-1) C.x+4*(i-1)*j+(j-1) D.x+4*i*j+4*j 二、填空题 1、char st[20] = "SEU\0\t\\"; cout<

C语言第六章数组习题

C语言第六章数组习题 第六章数组 6.1 选择题 [题]在C语言中,引用数组元素时,其数组下标的数据类型允许是_____. A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 [题]以下对一维整型数组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]; [题]若有说明:int a[l0];则对a数组元素的正确引用是_____。 A) a[10] B)a[3.5] C)a(5) D)a[10-10] [题]在C 语言中,一维数组的定义方式为:类型说明符数组名_____。 A)[常量表达式] B)[整型表达式] C)[整型常量]或[整型表达式] D)[整型常量] [题]以下能对一维数组a进行正确初始化的语句是_____。 A)int a[l0]=(0,0,0,0,0); B)int a[l0]={}; C)int a={0};D)int a[10]={10*1}; [题]以下对二维数组a的正确说明是_____。

1 A)int a[3]; B)float a(3,4); C)double a[1][4]; D)float a(3)(4); [题]若有说明:int a[3][4];则对a数组元素的正确引用是_____。 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) [题]若有说明:int a[3][4];则对a数组元素的非法引用是_____。 A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4] [题]以下不能对二维数组a进行正确初始化的语句是_____。 A)int a[2][3]={0}; B)int a[3]={{1,2},{0}}; C)int a[2][3]={{l,2},{3,4},{5,6}}; D)int a[3]={1,2,3,4,5,6}; [题]若有说明:int a[3][4]={0};则下面正确的叙述是_____。 A)只有元素a[0][0]可得到初值0 B)此说明语句不正确 C)数组a中各元素都可得到初值,但其值不一定为0 D)数组a中每个元素均可得到初值0 [题]若有说明:int a[3][4];则数组a中各元素_____。 2

C语言数组练习及答案

C语言数组练习及答案集团文件版本号:(M928-T898-M248-WU2669-I2896-

第四部分数组 4.1 选择题 1. 以下关于数组的描述正确的是(c )。 A. 数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组元素 2. 以下对一维整型数组a的正确说明是(d )。 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语言中,引用数组元素时,其数组下标的数据类型允许是(c )。 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 4. 以下对一维数组m进行正确初始化的是(c )。 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]的地址的是(c )。 A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1 6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是(d )。 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;

练习题-第六章_数组(有答案)

一、填空题 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};

Java数组练习题(带答案)

一填空题 1)数组的元素通过下标来访问,数组Array的长度为Array.length 。 2)数组复制时,"="将一个数组的引用传递给另一个数组。 3)JVM将数组存储在栈(堆或栈)中。 4)数组的二分查找法运用的前提条件是数组已经排序。 5)Java中数组的下标的数据类型是整型。 6)数组最小的下标是0 。 7)arraycopy()的最后一个参数指明复制元素的个数。 8)向方法传递数组参数时,传递的是数组的引用。 9)数组初始化包括数组的申明,创建和初始化。 10)数组下标访问超出索引范围时抛出数组越界异常 11)浮点型数组的默认值是0.0f 。 12)数组创建后其大小不能改变。 二选择题 1.下面错误的初始化语句是_ABD__ A. char str[]="hello"; B. char str[100]="hello"; C. char str[]={'h','e','l','l','o'}; D. char str[]={'hello'}; 2.定义了一维int型数组a[10]后,下面错误的引用是_B__ A. a[0]=1; B. a[10]=2; C. a[0]=5*2; D. a[1]=a[2]*a[0]; 3.下面的二维数组初始化语句中,正确的是____ A. float b[2][2]={0.1,0.2,0.3,0.4}; B. int a[][]={{1,2},{3,4}}; C. int a[2][]= {{1,2},{3,4}}; D. float a[2][2]={0}; 4.引用数组元素时,数组下标可以是_D___ A. 整型常量 B. 整型变量 C. 整型表达式 D. 以上均可 5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为____ A. 24 B. 25 C. 18 D. 17 6.下列初始化字符数组的语句中,正确的是__B__ A. char str[5]="hello"; B. char str[]={'h','e','l','l','o','\0'}; C. char str[5]={"hi"}; D. char str[100]=""; 7.数组在Java中储存在 C 中 A. 栈 B. 队列 C. 堆 D. 链表 8.下面程序的运行结果是____ main() { int a[][]={{1,2,3},{4,5,6}}; System.out.printf("%d", a[1][1]); } A. 3 B. 4 C. 5 D. 6 9.下面程序的运行结果是_C___ main() {

数据结构课后习题答案第六章

第六章树和二叉树(下载后用阅读版式视图或web版式可以看清) 习题 一、选择题 1.有一“遗传”关系:设x是y的父亲,则x可以把它的属性遗传给y。表示该遗传关系最适合的数据结构为( )。 A.向量 B.树C图 D.二叉树 2.树最合适用来表示( )。 A.有序数据元素 B元素之间具有分支层次关系的数据 C无序数据元素 D.元素之间无联系的数据 3.树B的层号表示为la,2b,3d,3e,2c,对应于下面选择的( )。 A. la (2b (3d,3e),2c) B. a(b(D,e),c) C. a(b(d,e),c) D. a(b,d(e),c) 4.高度为h的完全二叉树至少有( )个结点,至多有( )个结点。 A. 2h_l B.h C.2h-1 D. 2h 5.在一棵完全二叉树中,若编号为f的结点存在右孩子,则右子结点的编号为( )。 A. 2i B. 2i-l C. 2i+l D. 2i+2 6.一棵二叉树的广义表表示为a(b(c),d(e(,g(h)),f)),则该二叉树的高度为( )。 A.3 B.4 C.5 D.6 7.深度为5的二叉树至多有( )个结点。 A. 31 B. 32 C. 16 D. 10 8.假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为( )个。 A. 15 B. 16 C. 17 D. 47 9.题图6-1中,( )是完全二叉树,( )是满二叉树。 10.在题图6-2所示的二叉树中:

(1)A结点是 A.叶结点 B根结点但不是分支结点 C根结点也是分支结点 D.分支结点但不是根结点 (2)J结点是 A.叶结点 B.根结点但不是分支结点 C根结点也是分支结点 D.分支结点但不是根结点 (3)F结点的兄弟结点是 A.E B.D C.空 D.I (4)F结点的双亲结点是 A.A B.B C.C D.D (5)树的深度为 A.1 B.2 C.3 D.4 (6)B结点的深度为 A.1 B.2 C.3 D.4 (7)A结点所在的层是 A.1 B.2 C.3 D.4 11.在一棵具有35个结点的完全二叉树中,该树的深度为( )。 A.5 B.6 C.7 D.8 12. 一棵有124个叶结点的完全二叉树,最多有( )个结点。 A.247 B.248 C.249 D.250 13.用顺序存储的方法将完全二叉树中所有结点逐层存放在数组R[1…n]中,结点R[i]若 有左子树,则左子树是结点( )。 A. R[2i+l] B. R[2i] C.R[i/2] D. R[2i-1] 14.在一非空二叉树的中序遍历序列中,根结点的右边( )。 A.只有右子树上的所有结点 B.只有右子树上的部分结点 C.只有左子树上的部分结点 D.只有左子树上的所有结点 15.一棵度为m的树中,有n i个度为1的结点,有n2个度为2的结点……,有n m个度为m的结点,则该树的叶结点数为( )。 A. n1+n2+...+n m B. (m-l) n m+...+n2+1

相关文档
相关文档 最新文档