C语言第六章数组习题

C语言第六章数组习题
C语言第六章数组习题

第六章数组

6.1 选择题

[题6.1]在C语言中,引用数组元素时,其数组下标的数据类型允许是_____.

A)整型常量 B)整型表达式

C)整型常量或整型表达式 D)任何类型的表达式

[题6.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];

[题6.3]若有说明:int a[l0];则对a数组元素的正确引用是_____。

A) a[10] B)a[3.5] C)a(5) D)a[10-10]

[题6.4]在C语言中,一维数组的定义方式为:

类型说明符数组名_____。

A)[常量表达式] B)[整型表达式]

C)[整型常量]或[整型表达式] D)[整型常量]

[题6.5]以下能对一维数组a进行正确初始化的语句是_____。

A)int a[l0]=(0,0,0,0,0); B)int a[l0]={};

C)int a[]={0}; D)int a[10]={10*1};

[题6.6]以下对二维数组a的正确说明是_____。

A)int a[3][]; B)float a(3,4);

C)double a[1][4]; D)float a(3)(4);

[题6.7]若有说明:int a[3][4];则对a数组元素的正确引用是_____。

A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1)

[题6.8]若有说明:int a[3][4];则对a数组元素的非法引用是_____。

A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4]

[题 6.10]以下不能对二维数组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};

[题 6.11]若有说明:int a[3][4]={0};则下面正确的叙述是_____。

A)只有元素a[0][0]可得到初值0

B)此说明语句不正确

C)数组a中各元素都可得到初值,但其值不一定为0

D)数组a中每个元素均可得到初值0

[题6.13]若有说明:int a[3][4];则数组a中各元素_____。

A)可在程序的运行阶段得到初值0

B)可在程序的编译阶段得到初值0

C)不能得到确定的初值

D)可在程序的编译或运行阶段得到初值0

[题6.14]以下各组选项中,均能正确定义二维实型数组a的选项是_____。

A)float a[3][4];

float a[][4];

float a[3][]={{l},{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]

[题6.16]下面程序____(每行程序前面的数字表示行号)。

1 main()

2 {

3 float a[10]={0.0};

4 int i;

5 for(i=0;i<3;i++) scanf(”%d”,&a[i]);

6 for(i=1;i<10;i++) a[0]=a[0]+a[i];

7 printf(”%f\n”,a[0]);

8 }

A)没有错误 B)第3行有错误

C)第5行有错误 D)第7行有错误

[题6.17]下面程序中有错误的行是___(每行程序前面的数字表示行号)

1 main()

2 {

3 int a[3];

4 int i;

5 scanf(”%d”,&a);

6 for(i=1;i<10;i++) a[0]=a[0]+a[i];

7 printf(”a[0]=%d\n”,a[0]);

8 }

A)3 B)6 C)7 D)5

[题6.20]对以下说明语句的正确理解是___。

int a[10]={6,7,8,9,10};

A)将5个初值依次赋给a[1]至a[5]

B)将5个初值依次赋给a[0]至a[4]

C)将5个初值依次赋给a[6]至a[l0]

D)因为数组长度与初值的个数不相同,所以此语句不正确

[题6.21]以下不正确的定义语句是___。

A)double x[5]={2.0,4.0,6.0,8.0,10.0};

B)int y[5]={0,1,3,5,7,9};

C)char c1[]={‘1’,’2’,’3’,’4’,’5’}

D)char c2[]={‘\x10’,’\xa’,’\x8’};

[题6.22] 若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是___。

A) 2 B)3 C)4 D)无确定值

[题6.23]若二维数组a有m列,则在a[i][j]前的元素个数为____。

A)j*m+i B)i*m+j C)i*m+j-1 D)i*m+j+1

[题6.24]定义如下变量和数组:

int k;

int a[3][3]={1,2,3,4,5,6,7,8,9};

则下面语句的输出结果是__。

for(k=0;k<3;k++) printf(”%d”,a[k][2-k]);

A)3 5 7 B)3 6 9 C)1 5 9 D)l 4 7

[题6.27]下面程序的运行结果是___.

main()

{ int a[6][6],i,j;

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

for(j=1;j<6;j++)

a[i][j]=(i/j)*( j/i);

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

{for(j=1;j<6;j++)

printf(”%2d”,a[i][j]);

printf(“\n”);}

}

[题6.29]下面是对s的初始化,其中不正确的是___。

A)char s[5]={”abc"};

B)char s[5]={‘a’,’b’,’c’};

C)char s[5]=””;

D)char s[5]=”abcdef”;

[题6.30] 下面程序段的运行结果是___.

char c[5]={‘a’,’b’,’\0’,’c’, ’\0’}

printf(”%s”,c);

A)’a’’b’ B)ab C)ab_c D)a_b

(其中_表示空格)

[题6.31]对两个数组a和b进行如下初始化

char a[]=”ABCDEF”:

char b[]={‘A’,’B’,‘C’,’D’,’E’}

则以下叙述正确的是

A)a与b数组完全相同

B)a与b长度相同

C)a和b中都存放字符串

D)a数组比b数组长度长

[题6.32] 有两个字符数组a、b,则以下正确的输入格式是__ A)gets(a,b); B)scanf(”%s%s”,a,b);

C)scanf(”%s%s”,&a,&b);

D)gets(“a”),gets(“b”);

[题6.33] 有字符数组a[80]和b[80],则正确的输出形式是___ A)puts(a,b); B)printf(”%s,%s”,a[],b[]);

C)putchar(a,b); D)puts(a);puts(b);

[题6.34] 下面程序段的运行结果是

char a[7]=”abcdef”;

char b[4]="ABC";

strcpy(a,b);

printf(”%c”,a[5]);

A) _ B)\0 C)e D)f (其中_表示空格)

[题6.35]有下面的程序段

char a[3],b[]="China”;

a=b;

printf(”%s”,a);

则___。

A)运行后将输出China

B)运行后将输出Ch

C)运行后将输出Chi

D)编译出错

[题6.37]判断字符串a和b是否相等,应当使用___。

A)if(a==b) B)if(a=b)

C)if(strcpy(a,b)) D)if(strcmp(a,b))

[题6.38]判断字符串s1是否大于字符串s2,应当使用___

A)if(sl>s2) B)if(strcmp(s1,s2))

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

[题6.39]下面程序段是输出两个字符串中对应字符相等的字符。请选择填空。

char x[]=”programmmg”;

char y[]="Fortran";

int i=0;

while(x[i]!=’\0’&&y[i]!= ’\0’)

{ if (x[i]==y[i]) printf(“%c”,【1】);

else i++;

}

A)x[i++] B)y[++i] C)x[i] D)y[i]

[题6.41]下述对C语言字符数组的描述中错误的是___。

A)字符数组可以存放字符串

B)字符数组的字符串可以整体输入、输出

C)可以在赋值语句中通过赋值运算符”=”对字符数组整体赋值

D)不可以用关系运算符对字符数组中的字符串进行比较

[题6.44]下面程序的功能是将字符串s中所有的字符c删除。请选择填空。

#include

main()

{char s[80];

int i,j;

gets(s);

for(i=j=0;s[i]!=’\0’;i++)

if(s[i]!=’c’) 【1】;

s[j]=’\0’;

puts(s);

}

【1】A) s[j++]=s[i] B) s[++j]=s[i]

C) s[j]=s[i];j++ D) s[j]=s[i]

[题6.45] 下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。请选择填空。

#include

main()

{char s[80],c1,c2=’’;

int i=0,num=0;

gets(s);

while(s[i]!=’\0’)

{c1=s[i];

if(i==0) c2=’’;

else c2=s[i-1];

if(【1】)num++;

i++;

}

printf(“There are %d words.\n”,num);

}

【1】A)c1==’’&&c2==’’ B) c1!=’’&&c2==’’

C) c1==’’&&c2!=’’ D) c1!=’’&&c2!=’’

[题6.46] 下面程序的运行结果是

#include

main()

{char ch[7]={“12ab56”};

int i,s=0;

for(i=0;ch[i]>=’0’&&ch[i]<=’9’;i+=2)

s=10*s+ch[i]-‘0’;

printf(”%d\n”,s);

}

A)1 B)1256 C)12ab56 D)1

2

5

6

[题6.47]当运行以下程序时,从键盘输入:aa_bb

cc_dd (_表示空格,表示回车),则下面程序的运行结果是____.

#include

main()

{char a1[5],a2[5],a3[5],a4[5];

scanf(“%s%s”,a1,a2);

gets(a3);gets(a4);

puts(a1);puts(a2);

puts(a3);puts(a4);

}

A)aa

bb

cc_dd

B)aa

bb

cc

dd

C)aa

bb

cc_dd

ee

D)aa_bb

cc

dd

[题6.50] 下面程序的运行结果是___. #include

#include

main()

{char a[80]=”AB”,b[80]=”LMNP”;

int i=0;

strcat(a,b);

while(a[i++]!=’\0’) b[i]=a[i];

puts(b);

}

A)LB B) ABLMNP C) AB D) LBLMNP

[题6.52]下面程序的运行结果是

#include

main()

{char a[]=”morming”,t;

int i,j=0;

for(i=1;i<7;i++) if(a[j]

t=a[j]; a[j]=a[7];

a[7]=a[j]; puts(a);

}

A)mogninr B)mo C)morning D)mornin

6.2 填空题

[题6.53]在C语言中,二维数组的定义方式为:类型说明符数组名[【1】][【2】];

答:【1】常量表达式【2】常量表达式

[题6.54]在C语言中,二维数组元素在内存中的存放顺序是【】。按行主序存放

[题6.55]若有定义:double x[3][5];则x数组中行下标的下限为【1】,列下标的上限为【2】。

答:【1】0 【2】 4

[题6.57]若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是【1】。答: 0

[题6.59]下面程序以每行4个数据的形式输出a数组,请填空。#define N 20

main()

{ int a[N],i;

for(i=0;i

for(i=0;i

{if(【2】)【3】

printf(”%3d”,a[i]);

}

printf(“\n”);

}

答:【1】 &a[i]【2】 i%4==0【3】printf(“\n”)

[题6.60] 下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中。请填空。

main()

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

int b[3][2],i,j;

prinf(“array a:\n”);

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

{for(j=0;【1】;i++)

{printf(”%5d”,a[i][j]);

【2】;

}

printf(“\n”);

}

prinf(“array b:\n”);

for(i=0;【3】;i++)

{for(j=0;j<=1;j++)

printf(”%5d”,b[i][j]);

print(“\n”);}

}

答:【1】j<3【2】b[j][i]=a[i][j]【3】i<3

[题6.62] 下面程序可求出矩阵a的两条对角线上的元素之和,请填空。

main()

{int a[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j; for(i=0;i<3;i++)

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

if(i==j) sum1= sum1+a[i][j];

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

for(【1】;【2】;j--)

if((i+j)==2) sum2= sum2+a[i][j];

printf(“sum1=%d, sum2=%d\n”, sum1,sum2);}

答:【1】j=2 【2】j>=0

[题6.63] 下面程序的运行结果是___.

main()

{int a[5][5],i,j,n=1;

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

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

a[i][j]=n++;

printf(“The result is:\n”);

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

{for(j=0;j<=i;j++)

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

printf(“\n”);

}

}

答:1

67

11 12 13

16 17 18 19

21 22 23 24 25

[题6.64] 下面程序可求出矩阵a的主对角线上的元素之和。请填空。

main()

{int a[3][3]={1,3,5,7,9,1l,13,15,17},sum=0,i,j;for(i=0;i<3;i++)

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

if(【1】)sum=sum+【2】;

printf("sum=%d\n”,sum);

} 答【1】 i==j 【2】a[i][j]

[题6.66]下面程序的功能是生成并打印某数列的前20项,该数列第1,2项分别为0和l,以后每个奇数编号的项是前两项之和,偶数编号的项是前两项差的绝对值。生成的20个数存在一维数组x中,并按每行4项的形式输出。请填空。

main()

{int x[21],i,j;

x[1]=0;x[2]=1;

i=3;

do{

x[i]=【1】;

x[i+1]=【2】;

i=【3】;

}while(i<=20);

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

{ printf(”%5d”,x[i]);

if(i%4==0) printf(“\n”);

}

}

答【1】x[i-1]+x[i-2]

【2】fabs((double)(x[i-1]-x[i]))

[题6.67] 若有以下输入(_代表空格,代表回车换行符),则下面程序的运行结果是。

1_4_2_3_3_4_1_2_3_3_2_2_2_3_3_1_1_1_4_1_1_1_-1

#define M 50

main()

{ int a[M],c[5],i,n=0,x;

printf(“Enter 0 or 1 or 2 or 3 or 4,to end with -1\n”); scanf(“%d”,&x);

while(x!=-1)

{if(x>=0&&x<=4)

{a[n]=x;n++;}

scanf(”%d”,&x);

}

for(i=1;i<5;i++) c[i]=0;

fOr(i=0;i

printf(“The result is:\n”);

for(i=1;i<=4;i++) printf(“%d:%d\n”,i,c[i]);printf(“\n”);

}

The result is:

1: 8

2: 5

3: 6

4: 3

[题6.69]设数组a包括10个整型元素。下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。请填空。

main()

{int a[10],b[10],i;

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

scanf(”%d”,&a[i]);

for(【1】;i<10;i++)

【2】

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

{printf("%3d",b[i]);

if(【3】==0)printf(“\n”);

}答【1】 i=1【2】 b[i]=a[i-1]+a[i]【3】(i%3)

[题6.71] 下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。请填空。

main()

{int a[5],max,min,i,j,k;

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

scanf(“%d”,&a[i]);

min=a[0];

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

if(a[i]

max=a[0];

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

if(a[i]>=max){max=a[i];【2】;}

【3】

printf(“\nThe position of min is:%3d\n”,k);

printf(“The position of max is:%3d\n”,j);

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

printf(”%5d”,a[i]);

}

C语言程序设计第四版第六章答案-谭浩强

1、用筛选法求100之内的素数。解: #include #include int main() {int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0; for (i=2;i int main() {int i,j,min,temp,a[11]; printf("enter data:\n"); for (i=1;i<=10;i++)

{printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); for (i=1;i<=9;i++) {min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } 3、求一个3×3的整型矩阵对角线元素之和。解: #include int main() { int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0;i<3;i++) for (j=0;j<3;j++) scanf("%3d",&a[i][j]); for (i=0;i<3;i++) sum=sum+a[i][i]; printf("sum=%6d\n",sum);

C语言第六章习题带答案

练习6-1答案 一、选择题 1.已知函数abc的定义为: void abc() {……} 则函数定义中void的含义是( A )。 A.执行函数abc后,函数没有返回值B.执行函数abc后,函数不再返回C.执行函数abc后,可以返回任意类型 D.以上三个答案全是错误的 2.已知:int p();,p是( C )。 A.int型变量 B.函数p的调用 C.一个函数声明,该函数的返回值是int型的值 D.强制类型转换表达式中的变量 3.以下正确的函数形式是( D )。 A.double fun(int x, int y) B.fun(int x, y) { z=x+y; return z; } { int z; return z; } C.fun(x, y) D.double fun(int x, int y) { int x, y; double z; z=x+y; return z; } { double z; z=x+y; return z; } 4.以下说法正确的是( C )。 A.定义函数时,形参的类型说明可以放在函数体内 B.return后边的值不能为表达式 C.如果函数值的类型与返回值表达式的类型不一致,以函数值类型为准 D.如果形参与实参的类型不一致,以实参类型为准 5.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( B )。 A.float 型B.int型C.long型D.double型6.下面函数调用语句含有实参的个数为( B )。 func((exp1, exp2), (exp3, exp4, exp5)); A.1 B.2 C.4 D.5 7.以下程序的功能是计算函数F(x, y, z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。 #include #include float f(float, float); main() {float x, y, z, sum; scanf("%f%f%f", &x, &y, &z); sum=f( ①B )+f( ②C ); (注:或者选择sum=f( ①C )+f( ②B )) printf("sum=%f\n", sum); } float f(float a, float b) {float value; value=a/b;

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语言 第6章作业

书面作业8 专业理科学号3120101717 姓名马凌浩 习题6 一、选择题 1.设float x=2.5, y=4.7; int a=7;,printf(“%.1f”, x+a%3*(int)(x+y)%2/4)的结果为 A 。 A.2.5 B.2.8 C.3.5 D.3.8 2.执行下列程序段的输出结果是 C 。 int a = 2; a += a *= a -= a *= 3; printf("%d", a); A.-6 B.12 C.0 D.2 3.设字符型变量x 的值是064,表达式“~ x ^ x << 2 & x”的值是 A 。 A.0333 B.333 C.0x333 D.020 4.设a 为整型变量,不能正确表达数学关系:1010 && a<15 D.!(a<=10) && !(a>=15) 5.设以下变量均为int 类型,表达式的值不为9 的是 C 。 A.(x=y=8,x+y,x+1) B.(x=y=8,x+y,y+1) C.(x=8,x+1,y=8,x+y) D.(y=8,y+1,x=y,x+1) 二.填空题 1 .-127 的原码为11111111 、反码为10000000 、补码为10000001 。 2.逻辑表达式x && 1 等价于关系表达式if(x==0) 表达式的值为0;else 表达式的值为1;。3.设int a=5, b=6; 则表达式(++a==b--)? ++a : --b 的值是7 。 4.设c = 'w', a = 1, b = 2, d = -5, 则表达式'x'+1>c, 'y'!=c+2, -a-5*b<=d+1, b==(a=2)的值 分别为 1 、0 、 1 、 1 。 5.运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为c1=2,c2=5 。 #include int main(void) { int c1 = 0, c2 = 0; char ch; while((ch = getchar()) !=?#?) switch(ch){ case …a?: case …h?: c1++; default: c2++; } printf(“c1=%d,c2=%d\n”, c1, c2); return 0; }

C语言第六章数组习题答案

第六章 数组 习题答案 2、0 4 3、0 6 4、&a[i] i%4==0 printf("\n"); 5、i+j==3_ a[i][j] 6、12 7、a[i][j]+b[i][j] printf(“\n ”) 8、按行存放 9、( a[i]>a[j]) 10、将串str2复制到串str1中后再将串str3连接到串str1之后 三、阅读题 1、如右图所示 2、AQM 3、AzyD 4、9198 5、如右图所示 6、92 7、1,2,5,7, 8、2 9、v1=5,v2=8,v3=6,v4=1 10、a*b*c*d* 四、编程题 1(1)选择法排序 #include void main( ) {int i,j,n=10,p,a[10];int temp; for(i=0;i

for(j=i+1;j void main( ) {int i,j,n=10,p,a[10];int temp; for(i=0;ia[j]) {temp=a[i];a[i]=a[j];a[j]=temp;} printf("\n排序后的一维数组:\n"); for(i=0;i void main( ) {int a[11],i,n=10,k; int point; printf("\n 请输入原始数据:\n"); for(i=0;ik) {point=i; break;} if(i!=n) {for(i=n;i>point;i--) a[i]=a[i-1]; a[point]=k;} /*从后向前方式*/ else a[n]=k; printf("插入后的数是:\n"); for(i=0;i int main() {int i,j,upp,low,dig,spa,oth; char text[3][80];

c语言程序设计(第3版)的习题答案

1.5请参照本章例题,编写一个C程序,输出以下信息: ************ Very Goodj! ************ 解: main() { printf(" ************ \n"); printf("\n"); printf(" Very Good! \n"); printf("\n"); printf(" ************\n"); } 1.6编写一个程序,输入a b c三个值,输出其中最大者。 解:main() {int a,b,c,max; printf("请输入三个数a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if(max

数据结构(C语言版)第6章习题答案

第6章树和二叉树自测卷解答 一、下面是有关二叉树的叙述,请判断正误(每小题1分,共10分) (√)1. 若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。(×)2.二叉树中每个结点的两棵子树的高度差等于1。 (√)3.二叉树中每个结点的两棵子树是有序的。 (×)4.二叉树中每个结点有两棵非空子树或有两棵空子树。 (×)5.二叉树中每个结点的关键字值大于其左非空子树(若存在的话)所有结点的关键字值,且小于其右非空子树(若存在的话)所有结点的关键字值。(应当是二叉排序树的特点) (×)6.二叉树中所有结点个数是2k-1-1,其中k是树的深度。(应2i-1) (×)7.二叉树中所有结点,如果不存在非空左子树,则不存在非空右子树。 (×)8.对于一棵非空二叉树,它的根结点作为第一层,则它的第i层上最多能有2i—1个结点。(应2i-1)(√)9.用二叉链表法(link-rlink)存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。 (正确。用二叉链表存储包含n个结点的二叉树,结点共有2n个链域。由于二叉树中,除根结点外,每一个结点有且仅有一个双亲,所以只有n-1个结点的链域存放指向非空子女结点的指针,还有n+1个空指针。)即有后继链接的指针仅n-1个。 (√)10. 〖01年计算机系研题〗具有12个结点的完全二叉树有5个度为2的结点。 最快方法:用叶子数=[n/2]=6,再求n2=n0-1=5 二、填空(每空1分,共15分) 1.由3个结点所构成的二叉树有5种形态。 2. 【计算机研2000】一棵深度为6的满二叉树有n1+n2=0+ n2= n0-1=31 个分支结点和26-1 =32个叶子。 注:满二叉树没有度为1的结点,所以分支结点数就是二度结点数。 3.一棵具有257个结点的完全二叉树,它的深度为9。 (注:用? log2(n) ?+1= ? 8.xx ?+1=9 4.【全国专升本统考题】设一棵完全二叉树有700个结点,则共有350个叶子结点。 答:最快方法:用叶子数=[n/2]=350 5. 设一棵完全二叉树具有1000个结点,则此完全二叉树有500个叶子结点,有499个度为2的结点,有1个结点只有非空左子树,有0个结点只有非空右子树。 答:最快方法:用叶子数=[n/2]=500 ,n2=n0-1=499。另外,最后一结点为2i属于左叶子,右叶子是空的,所以有1个非空左子树。完全二叉树的特点决定不可能有左空右不空的情况,所以非空右子树数=0. 6.【严题集6.7③】一棵含有n个结点的k叉树,可能达到的最大深度为n,最小深度为2。 答:当k=1(单叉树)时应该最深,深度=n(层);当k=n-1(n-1叉树)时应该最浅,深度=2(层),但不包括n=0或1时的特例情况。教材答案是“完全k叉树”,未定量。) 7. 【试题1】二叉树的基本组成部分是:根(N)、左子树(L)和右 子树(R)。因而二叉树的遍历次序有六种。最常用的是三种:前序法(即 按N L R次序),后序法(即按L R N次序)和中序法(也称

C语言程序设计教程 第六章 课后习题参考答案

P158 1求三个实数最大值 #include float max(float,float,float); int main() { float a,b,c,m; printf("请输入三个实数:"); scanf("%f %f %f",&a,&b,&c); printf("最大数为%f\n",max(a,b,c)); return 0; } float max(float a,float b,float c) { float t; if(a>b&&a>c) t=a; else if(b>a&&b>c) t=b; else t=c; return t; } P158 2求最大公约数最小公倍数 #include int fun1(int a,int b); int fun2(int a,int b); int main() { int a,b; printf("请输入两个整数:"); scanf("%d %d",&a,&b); printf("最大公约数为:%d\n",fun1(a,b)); printf("最小公倍数为:%d\n",fun2(a,b)); } int fun1(int a,int b) { int t,r; if(a

} while((r=(a%b))!=0) { a=b; b=r; } return b; } int fun2(int a,int b) { int n; n=(a*b)/fun1(a,b); return n; } P158 3求完全数 #include void wan(int n); void main() { int n; for(n=1;n<1000;n++) wan(n); printf("\n"); } void wan(int n) { int i,s=0; for(i=1;i<=n/2;i++) { if(n%i==0) s=s+i; } if(n==s) printf("%d\t",n); } P158 4无暇素数 #include #include

谭浩强c语言第四版第六章课后答案

//第四版第六章习题 //6.1 # if 0 # include # include # define N 101 int main() { int a[N]; int i,j,k,m=0; for(i=1;ik) { printf("%-3d,",a[i]); m++; if(m%5==0) { puts("\b "); } } } puts("\b "); return 0; } # endif //6.2 # if 0 # include # define N 10 int main() { int a[N]; int i,j,t; printf("请输入十个整数:"); printf("\n"); for(i=0;i

for(i=0;ia[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } printf("从小到大输出为:\n"); for(i=0;i int main() { int a[3][3]; int i,j,sum=0; printf("请输入这个整型矩阵:\n"); for(i=0;i<3;++i) { for(j=0;j<3;++j) { scanf("%d",&a[i][j]); } } for(i=0;i<3;++i) { for(j=0;j<3;++j) { if(i==j||(i+j)==2) { sum+=a[i][j]; } } } printf("sum=%d\n",sum); return 0; } # endif //6.4 # if 0 # include

C语言课后习题答案

第四章选择结构 4.22 #include main() { int y0,m0,d0,y1,m1,d1,age; printf("please input your birthday(yyyy-mm-dd):\n"); scanf("%d-%d-%d",&y0,&m0,&d0); printf("please inpur current day(yyyy-mm-dd):\n"); scanf("%d-%d-%d",&y1,&m1,&d1); age=y1-y0; if(m1 main() { int i; printf("input a integer:\n"); scanf("%d",&i); if(i%2==0)printf("%d is a even\n",i); else printf("%d is a odd\n",i); } 4.24 #include main() { int a,b,c,max=0; printf("input 3 numbers:\n"); scanf("%d%d%d",&a,&b,&c); max=a; if(a main() { float x,y; scanf("%f",&x); if(x>-5&&x<0)printf("y=%f",x); if(x==0)printf("y=%f",x-1); if(x>0&&x<10)printf("y=%f",x+1); if(x<=-5||x>=10)printf("error"); }

C语言第六章课后答案

xt6-1 #include #include int main() {int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0; for (i=2;i int main() {int i,j,min,temp,a[11]; printf("enter data:\n"); for (i=1;i<=10;i++) {printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for (i=1;i<=10;i++)

printf("%5d",a[i]); printf("\n"); for (i=1;i<=9;i++) {min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } xt6-3 #include int main() { int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0;i<3;i++) for (j=0;j<3;j++) scanf("%3d",&a[i][j]); for (i=0;i<3;i++) sum=sum+a[i][i]; printf("sum=%6d\n",sum); return 0; }

C语言 第六章 函数期末测试习题与答案

C语言第六章函数期末测试习题与答案 1、以下叙述正确的是 A. C语言中除了main函数,其他函数不可作为单独文件形式存在 B.C语言程序是由过程和函数组成的 C.C语言函数可以嵌套调用 D.C语言函数不可以单独编译 参考答案:C 2、以下关于C语言程序中函数的说法正确的是 A.函数的定义和调用均不可以嵌套; B.函数的定义可以嵌套,但函数的调用不可以嵌套; C.函数的定义和点用都可以嵌套。 D.函数的定义不可以嵌套,但函数的调用可以嵌套; 参考答案:D 3、若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是 A.调用可以出现在表达式中 B.调用可以作为独立的语句存在 C.调用可以作为一个函数的形参 D.调用可以作为一个函数的实参 参考答案:C 4、以下关于return语句的叙述中正确的是 A.没有return语句的自定义函数在执行结束时不能返同到调用处 B.一个自定义函数中可以根据不同情况设置多条return语句 C.定义成void类型的函数中可以有带返回值的return语句 D.一个自定义函数中必须有一条return语句

参考答案:B 5、C语言规定:函数返回值类型是由 A.return语句中的表达式类型决定 B.调用该函数时系统临时决定 C. 定义该函数时所指定的函数类型决定 D.调用该函数时的主调函数类型决定 参考答案:C 6、以下错误的描述是() 函数调用可以_____ A.出现在执行语句中 B.出现在一个表达式中 C.做为一个函数的形参 D.做为一个函数的实参 参考答案:C 7、以下说法不正确的是() C语言规定: A.实参可以是任意类型 B.实参可以是常量、变量或表达式 C.形参应与其对应的实参类型一致 D.形参可以是常量、变量或表达式 参考答案:D 8、C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是() A.由用户指定传递方式 B.单向值传递

《C语言程序设计》第6章习题答案

1、选择题 (1)A(2)C(3)A(4)B(5)B(6)D(7)D(8)B(9)D(10)B 2、填空题 (1)a=10,b=20 a=20,b=10 (2)**pp=60 3、程序设计题 (1) #include char *month_name(int n); void main() { int n; printf("\nPlease enter 1 integer:"); scanf("%d",&n); printf("%d month :%s\n",n,month_name(n)); } char *month_name(int n) { static char*name[]={"illegal month", "Jan","Feb","Mar","Apr","May","Jun", "July","Aug","Sept","Oct","Nov","Dec"}; return ((n<1||n>12)?name[0]:name[n]); } (2) #include #define N 10 sort(int data[]) { int i,j,min_a,temp;

for(i=0;i void reverse(char *c); void main()

《C语言程序设计》课后习题答案第6章

6.1 输入两个正整数m,n,求其最大公约数和最小公倍数。 int m,n,temp,b,y; printf("请输入两个正整数m,n:\n"); scanf("%d,%d",&m,&n); if(m='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c==' ') space++; else if(c>='0'&&c<='9') digit++; else other++; } printf("共有字母%d个,共有空格%d个,共有数字%d个,共有其他字符%d个",letters,space,digit,other); 6.3 求s=a+aa+aaa+...+aa...a的值,其中a是一个数字,例如:2+22+222+2222+22222(此时n=5),n有键盘输入 int i=1,a,n,sum=0,temp=0; printf("请输入a、n的值:\n"); scanf("%d,%d",&a,&n);/*一定不要忘记加&&*/ while(i<=n) { temp=temp+a; sum=sum+temp; a=a*10; ++i; } printf("s=a+aa+aaa+...+aa...a的值为%d\n",sum);

华中科技大学标准C语言程序设计及应用习题答案

第二章 一.选择题 1.C 2.B D 3.A 4.A 5. D 6.C 7.D 8.C 9.A 10.D 11.B 12.D 13.C 14.D 15.A 16.B 17.A 18.B 100011 001111 二.判断题 1.错 2.错 3.错 4.错 三.填空题 1. B 66 2. n1=%d\nn2=%d\n 3. 0 四.计算 1 (1)x|y = 0x002f (2)x^y = 0x0026 (3)x&y = 0x0009; (4)~x+~y = 0xffc6 (5)x<<=3 0x0068 (6)y>>=4 0x0002 2 (1) 6 (2)50 (3) 1 (4)–16 (5) 1 (6)20 3 (1)0 (2) 1 (3) 1 (4) 4 (5)8 (6) 1 4 (1)12 (2)0 (3) 1 (4)27

(6) 6 (7)24 (8)27 (9)–29 5 (1)0 (2) 1 (3) 1 (4)–3 (5) 2 五.程序分析题 程序1 b=20 a=3600 程序2 第三章 一.填空题 1.s=6 2.96 3.(1) scanf("%c",&c); (2) c-32 更好的答案:c-('a'-'A') 2.1 main() { int a,b; printf("please input a & b:"); scanf("%d%d",&a,&b); printf("\nmax is %d\n",(a>b)?a:b); } 2.2 int max(int x,int y); main() { int a,b,c,max; printf("please input a & b & c:"); scanf("%d%d%d",&a,&b,&c); max=a>b?a:b; max=c>max?c:max; printf("\nmax is %d\n",max); } 2.3

C语言苏小红版第六章习题答案

第六章习题1. (1)#include main() { int i,j,k; char space=' '; for(i=1;i<=4;i++) { for(j=1;j<=i;j++) { printf("%c",space); } for(k=1;k<=6;k++) { printf("*"); } printf("\n"); } } (2)#include main() { int k = 4, n; for (n = 0; n < k; n++) { if (n % 2 == 0) continue; k--; } printf("k = %d,n = %d\n",k,n); } (3)#include main() { int k = 4, n;

for (n = 0; n < k; n++) { if (n % 2 ==0) break; k--; } printf("k = %d, n = %d\n", k, n); } 2. (1)计算1+3+5+……99+101= #include main( ) { int i,sum=0; for(i=1;i<=101;i=i+2) { sum=sum+i; } printf("sum=%d\n",sum); } (2)计算1*2*3+3*4*5+...+99*100*101= #include main( ) { long i; long term,sum=0; for(i=1;i<=99;i=i+2) { term=i*(i+1)*(i+2); sum=sum+term; } printf("sum=%ld",sum); }

(完整版)c语言第六章循环结构程序设计(习题册答案)

第六章循环结构程序设计 基础练习(A) 一、选择题 1、C语言中while和do-while循环的主要区别是(A)。 A) do-while的循环体至少无条件执行一次 B) while的循环控制条件比do-while的循环控制条件严格 C) C)do-while允许从外部转到循环体内 D) do-while的循环体不能是复合语句 2、以下描述中正确的是(C)。 A) 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用 复合语句 B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C) 在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操 作 D)do-while循环中,根据情况可以省略while 3、设有程序段 int k=10; while(k) k=k-1; 则下面描述中正确的是(A)。 A)while循环执行10次B)循环是无限循环 C)循环体语句一次也不执行D)循环体语句执行一次 4、下列循环语句中有语法错误的是( D )。 A) while(x=y) 5;B) while(0) ; C) do 2;while(x==b);D) do x++ while(x==10); 5、已知int i=1;执行语句while (i++<4) ;后,变量i的值为(C)。 A) 3 B) 4 C) 5 D) 6 6、语句while(!E);中的表达式!E等价于(A)。 A)E==0 B)E!=1 C)E!=0 D)E==1 7、下面程序段的运行结果是(A)。 a=1; b=2; c=2; while(a main() { int num=0; while(num<=2) { num++; printf(“%d\n”,nu m); } } A)1 B)1 C)1 D)1 2 2 2 3 3 9、以下能正确计算1×2×3×…×10的程序段是(C)。

c语言习题集合预处理命令)

第六章预处理命令 6.1 选择题 1.下面叙述中正确的是()。 A. 带参数的宏定义中参数是没有类型的 B. 宏展开将占用程序的运行时间 C. 宏定义命令是C语言中的一种特殊语句 D. 使用#include命令包含的头文件必须以“.h”为后缀 2.下面叙述中正确的是()。 A. 宏定义是C语句,所以要在行末加分号 B. 可以使用#undef命令来终止宏定义的作用域 C. 在进行宏定义时,宏定义不能层层嵌套 D. 对程序中用双引号括起来的字符串内的字符,与宏名相同的要进行置换 3.在“文件包含”预处理语句中,当#include后面的文件名用双引号括起时,寻找被包含文件的方式为()。 A. 直接按系统设定的标准方式搜索目录 B.先在源程序所在目录搜索,若找不到,再按系统设定的标准方式搜索 C. 仅仅搜索源程序所在目录 D. 仅仅搜索当前目录 4.下面叙述中不正确的是()。 A. 函数调用时,先求出实参表达式,然后带入形参。而使用带参的宏只是进行简单的字符替换 B. 函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则是在编译时进行的,在 展开时也要分配内存单元,进行值传递 C. 对于函数中的实参和形参都要定义类型,二者的类型要求一致,而宏不存在类型问题,宏没 有类型 D. 调用函数只可得到一个返回值,而用宏可以设法得到几个结果 5.下面叙述中不正确的是()。 A. 使用宏的次数较多时,宏展开后源程序长度增长。而函数调用不会使源程序变长 B. 函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则是在编译时进行的,在 展开时不分配内存单元,不进行值传递 C. 宏替换占用编译时间 D.函数调用占用编译时间 6.下面叙述中正确的是( )。 A. 可以把define和if定义为用户标识符 B.可以把define定义为用户标识符,但不能把if定义为用户标识符 C. 可以把if定义为用户标识符,但不能把define定义为用户标识符 D. define和if都不能定义为用户标识符 7.下面叙述中正确的是()。 A.#define和printf都是C语句 B.#define是C语句,而printf不是 C.printf是C语句,但#define不是 D.#define和printf都不是C语句 8.以下叙述中正确的是()。 A. 用#include包含的头文件的后缀不可以是“.a”

C语言第六章循环结构复习题

循环结构程序设计复习题 一.选择题 1.以下while循环中,循环体执行的次数是:() k=1; while (--k) k=10; a) 10次b) 无限次c) 一次也不执行d) 1次 2.有以下程序段,其中x为整型变量,以下选项中叙述正确的是:() x=0; while (!x!=0) x++; a) 退出while循环后,x的值为0 b) 退出while循环后,x的值为1 c) while的控制表达式是非法的 d) while循环执行无限次 3. 有以下程序段,其中n为整型变量,执行后输出结果是:() n=20 ; while(n--) ; printf(“%d”,n) ; a) 2 b) 10 c) -1 d) 0 4. 有以下程序段,其中t为整型变量,以下选项中叙述正确的是:() t=1; while (-1)

{ t--; if(t) break;} a) 循环一次也不执行 b) 循环执行一次 c) 循环控制表达式(-1)不合法 d) 循环执行2次 5. 有以下程序段,其中x为整型变量,以下选项中叙述正确的是:() x=-1; do {;} while (x++); printf(“x=%d”,x); a) 该循环没有循环体,程序错误 b) 输出x=1 c) 输出x=0 d) 输出x=-1 6. 有以下程序段,其中x,y为整型变量,程序输出结果是:() for(x=0,y=0;(x<=1)&&(y=1);x++,y--) ; printf(“x=%d,y=%d”,x,y); a) x=2,y=0 b) x=1,y=0 c) x=1,y=1 d) x=0,y=0

相关文档
最新文档