当前位置:文档之家› C++第六章习题解答

C++第六章习题解答

C++第六章习题解答
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什么叫函数模板?什么叫模板函数?什么叫类模板?什么叫模板类?

答:不受数据类型限制的通用型的函数使代码的可重用性大大提高。把数据类型改为

一个设计参数是一个可行的方案。这种程序设计类型称为参数化(Parameterize) 程序设计。这样的软件模块由模板(Template) 构造。包括函数模板和类模板。

函数模板定义如下:

template<模板参数表> 返回类型函数名(形式参数表){

……;//函数体

}

模板参数主要是模板类型参数。模板类型参数代表一种潜在的内置或用户定义的类型,由关键字typename或class后加一个标识符构成。函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,简化重载函数的设计。

由调用函数模板(functron template) 而生成的函数,称为模板函数(template function)。

类模板定义如下:

template<模板参数表> class类名{

……;//类声明体

};

模板参数有两种:模板类型参数和模板非类型参数。模板类型参数(template type parameter),它代表一种类型,由关键字typename或class后加一个标识符。模板非类型参数由一个普通的参数声明构成。模板非类型参数表示该参数名代表了一个潜在的常量。如数组类模板,可以有一个数组长度的非类型参数。

为通用的类模板定义中的模板类型参数指定了具体类型而生成的类称为模板类。

6.2.3什么叫线性表?其基本操作包括哪些?其中插入一个元素的关键在哪儿?

答:线性表是数据结构中的概念:每两个相邻元素之间都有直接前驱和直接后继的关系。这里除第一个元素外,其他元素有且仅有一个直接前驱,第一个元素没有前驱;除最后一个元素外,其他元素有且仅有一个直接后继,最后一个元素无后继。这样的特性称为线性关系。

基本操作包括:计算表长度,寻找变量或对象x(其类型与表元素相同)在表中的位置(下标值),判断x是否在表中,删除x,将x插入列表中第i个位置,寻找x的后继,寻找x的前驱,判断表是否空,判断表是否满,取第i个元素的值等。

当需要在顺序表的指定位置i插入一个数据x时,必须为它腾出这个位置,把从该位置开始向后的所有元素数据,后移一个位置,最后才插入。关键是后移时从最后一个元素开始。否则先移的数据会冲掉未移的数据。

6.2.4采用索引查找有哪些优点?它需要被查找数据有序吗?

答:索引,就象一本书的目录,找到标题,再看一下页号,立即可以翻到。索引查找不要求被查找数据有序,只要求索引有序。

6.2.5简单叙述阅读理解复杂指针的方法。设Node为类,下面两个标识符fa和pa分别代

表什么?Node* (*fa(int))(); Node* (*(*pa)[])();

答:理解和构造对象说明的方法是:先撇开标识符,按从右到左的顺序逐个解释每个说明符,如果有括号则改变解释的先后,先解释括号内再解释括号外。

fa是有一个整型参数的函数,其返回值是指针,该指针是指向无参函数的指针,而该无参函数的返回值是指向Node类的指针。pa是指向数组的指针,该数组的元素均为函数指针,所指向的函数无参、返回值是指向Node类的指针。

二、.编程与综合练习题

6.3 使用自定义字符串类,编写求数组元素中最大值的函数模板。

解:函数模板有三种应用方式:

1.类模板的成员函数,在模板类型参数中重载函数和运算符,直接访问私有数据成员,实现通用算法。这是标准的面向对象的方法。

2.函数模板处理模板类,以类模版为参数,用模板类型参数中重载的函数或运算符,实现通用算法。但调用类模板的接口函数间接访问私有数据成员,也是常见的。

3.函数模板处理普通数据,往往要用函数作为参数,实现通用算法。这是面向过程的方法。解:使用独立的函数模板,相对简单。

#include

using namespace std;

const int n=256;

class mystring{//为简单只保留用到的函数

char str[n]; //存放字符串的数组容器

int maxsize; //最大可用元素数,可防止数组出界,提高健壮性

int last; //已用元素数

public:

mystring(){

last=-1;

maxsize=n;

str[0]='\0';

cout<<"缺省构造函数"<

}

mystring(char *s){//当C字符串过长,初始化时采用截尾处理

last=-1;

maxsize=n;

do{

last++;

str[last]=s[last];

}while(s[last]!='\0'&&last

str[last] ='\0'; //截尾处理时,必须加串结束符

cout<<"构造函数"<

}

mystring(mystring & ms){

last=-1;

maxsize=n;

do{

last++;

str[last]=ms.str[last];

}while(last

cout<<"拷贝构造函数"<

}

~mystring(){

cout<<"析构函数"<

}

void show(){//如需重载<<,则请参见9.3节,暂时未学到,替代方法是改用show()函数cout<

}

mystring & operator=(char * ms);//这里重载的=是把C风格字符串赋给mystring

mystring& operator=(mystring &);

bool operator<(mystring &);

};

mystring & mystring::operator=(char* ms){ //用C字符串赋值自定义字符串

last=-1;

do{

last++;

str[last]=ms[last];

}while(ms[last]!='\0'&&last

str[last] ='\0'; //截尾处理时,必须加串结束符

return *this;

}//这里返回值为引用,不调用拷贝构造函数

mystring& mystring::operator=(mystring & ms){

last=-1;

do{

last++;

str[last]=ms.str[last];

}while(last

cout<<"赋值函数"<

return *this;

}

bool mystring::operator<(mystring & ms){

int i=0,k;

do{

k=str[i]-ms.str[i];

i++;

}while(k==0&&i

if(k<0) return true;

if(i==last&&i!=https://www.doczj.com/doc/7016650830.html,st) return true;

return false;

}

template Groap max(Groap *r_array,int size){//这里是一个独立的函数模板Groap max_val=r_array[0];

for (int i=1;i

return max_val;

}

int main(){

int i;

char sp[6][10]=

{"南京大学","东南大学","交通大学","清华大学","天津大学","复旦大学"};

mystring ms[6];// 对象数组

for(i=0;i<6;i++) ms[i]=sp[i];

cout<<"打印学校名称:"<

for(i=0;i<6;i++) ms[i].show();

cout<<"按字典序查找校名:"<

(max(ms,6)).show();

return 0;

}

6.4 将自定义字符串类用于对半查找的函数模板。

解1:为简化,使用独立的函数模板

#include

using namespace std;

const int n=256;

//class mystring定义略

template int BinarySearch(T *array,T & x,int size){//独立的函数模板int high=size-1 ,low=0,mid; // size 当前有序表元素数量

while(low<=high){

mid=(low+high)/2;

if(x

else if(array[mid]

else return mid;

}

return mid;

}

int main(){//此例为了简化未用对象数组类模板

int i;

char sp[6][10]=

{"东南大学","复旦大学","交通大学","南京大学","清华大学","天津大学"};

mystring ms[6],x="交通大学",y="南京大学";

for(i=0;i<6;i++) ms[i]=sp[i];

for(i=0;i<6;i++) ms[i].show();

i=BinarySearch(ms,x,6);

cout<

i=BinarySearch(ms,y,6);

cout<

return 0;

}

解2:函数模板使用成员函数(ep6_4_0.cpp)

#include

using namespace std;

const int n=256;

//class mystring定义略

template class Orderedlist{

int maxsize;

int last;

T slist[size];

public:

int getlast(){return last;}

T getslist(int k){return slist[k];}

void putslist(T t,int k){slist[k]=t;}

Orderedlist(){last=-1;maxsize=size;}

bool Insert(T & elem,int i);

void print();

int BinarySearch(T);

// 无关成员函数省略,缺省的=等不必定义

};//再次指出分号不可少

template bool Orderedlist::Insert(T & elem ,int i){ if (i<0||i>last+1||last==maxsize-1) return false;

else{

last++;

for (int j=last;j>i;j--) slist[j]=slist[j-1];

slist[i]=elem;

return true;

}

}

template void Orderedlist::print(){

int i;

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

slist[i].show();

if(i%5==4) cout<

else cout<<'\t';

}

cout<

}

template int Orderedlist::BinarySearch(T x){//成员函数模板int high=last,low=0,mid; //size当前有序表元素数量

while(low<=high){

mid=(low+high)/2;

if(x

else if(slist[mid]

else return mid;

}

return mid;

}

int main(){

const int h=8;

int i;

Orderedlist ordlist;

mystring n[h];

char sp[h][10]={"东南大学","复旦大学","交通大学","南京大学","清华大学", "天津大学","同济大学","浙江大学"};

for(i=0;i

for(i=0;i

cout<<"排序表:"<

ordlist.print();

mystring x("交通大学"),y("东南大学");

i=ordlist.BinarySearch(x);

cout<

i=ordlist.BinarySearch(y);

cout<

return 0;

}

6.5 编一个冒泡排序的成员函数模板实现降序排序。可用小于比较,冒泡采用从上往下;

也可用大于比较,冒泡采用从下往上。

解:用小于比较,冒泡采用从上往下。使用字符串类string。

#include

#include

using namespace std;

template class Orderedlist{

int maxsize;

int last;

T slist[size];

public:

Orderedlist(){last=-1;maxsize=size;}

void BubbleSort();

bool Insert(T & elem,int i);

void print();

// 无关成员函数省略,缺省的=等不必定义

};//再次指出分号不可少

//Insert(T & elem ,int i)和print()不再重复定义

template void Orderedlist::BubbleSort(){//降序bool noswap;

int i,j;

T temp;

for (i=last;i>0;i--){//从上往下冒泡,对比例6.8有何不同?

noswap=true; //未交换标志为真

for(j=0;j

if(slist[j]

temp=slist[j];

slist[j]=slist[j+1];

slist[j+1]=temp;

noswap=false;

}

}

if(noswap) break; //本趟无交换,则终止算法。

}

}

int main(){

const int h=8;

int i;

Orderedlist ordlist;

string n[h];

string sp[h]={"南京大学","东南大学","交通大学","清华大学",

"天津大学","复旦大学","浙江大学","同济大学"};

for(i=0;i

for(i=0;i

cout<<"未排序表:"<

ordlist.print();

ordlist.BubbleSort();

cout<<"已排序表:"<

ordlist.print();

return 0;

}

6.6 现有两个已升序排好的数组,将它们合并为一个升序排序的数组(归并),请用函数模板实现。该方法可以演变成归并排序。

算法:两数组合并时,可为每个数组各安排一个指针,从第一个元素开始比较两数组对应元素,小的取下来,顺序放入新的数组;取下所指元素的指针后移,再比较,依此类推;直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。

解:此处是面向对象的方法

#include

#include

using namespace std;

template class Orderedlist{

int maxsize;

int last;

T slist[size];

public:

Orderedlist(){last=-1;maxsize=size;}

void BubbleSort();

bool Insert(T & elem,int i);

void print();

void Merge(Orderedlist &,Orderedlist &);

// 无关成员函数省略,缺省的=等不必定义

};//再次指出分号不可少

//Insert(T & elem ,int i)和print()不再重复定义

template void Orderedlist::BubbleSort(){//升序bool noswap;

int i,j;

T temp;

for (i=last;i>0;i--){//从上往下冒泡,对比例6.8有何不同?

noswap=true; //未交换标志为真

for(j=0;j

if(slist[j+1]

temp=slist[j];

slist[j]=slist[j+1];

slist[j+1]=temp;

noswap=false;

}

}

if(noswap) break; //本趟无交换,则终止算法。

}

}

template void Orderedlist::Merge(Orderedlist & ls1,Orderedlist & ls2){

int i=0,j=0,k=0;

while((i<=https://www.doczj.com/doc/7016650830.html,st)&&(j<=https://www.doczj.com/doc/7016650830.html,st)){

if(ls1.slist[i]

else {slist[k]=ls2.slist[j];j++;}

k++;last++;

}

while(i<=https://www.doczj.com/doc/7016650830.html,st) {//复制第一个表的剩余元素

slist[k]=ls1.slist[i];i++;

k++;last++;

}

while(j<=https://www.doczj.com/doc/7016650830.html,st) {//复制第二个表的剩余元素

slist[k]=ls2.slist[j];j++;

k++;last++;

}

}

int main(){

const int h=15;

int i,h1=8,h2=5;

Orderedlist ordlist,ordlist1,ordlist2;

string n[h],m[h];

char sp1[h][10]={"南京大学","东南大学","交通大学","清华大学",

"天津大学","复旦大学","浙江大学","同济大学"};

for(i=0;i

for(i=0;i

cout<<"未排序表:"<

ordlist1.print();

ordlist1.BubbleSort();

cout<<"已排序表:"<

ordlist1.print();

char sp2[h][10]={"南开大学","吉林大学","中山大学","武汉大学","科技大学"};

for(i=0;i

for(i=0;i

cout<<"未排序表:"<

ordlist2.print();

ordlist2.BubbleSort();

cout<<"已排序表:"<

ordlist2.print();

ordlist.Merge(ordlist1,ordlist2);

cout<<"归并已排序表:"<

ordlist.print();

return 0;

}

6.7 希尔排序(shell sort),又称缩小增量排序(diminishing increment sort)。其思想如下:设线性表L长度为n,取增量gap=n/2,即以L[0]和L[gap]为一组,L[1]和L[gap+1]为一组,L[2]和L[gap+2]为一组,……,L[n-gap]和L[n]为一组,分别进行插入排序。再取gap=gap/2,则分组成为L[0],L[gap],L[2gap],……为一组,L[1],L[gap+1],L[2gap+1],……为一组,等等,分别进行插入排序。直到gap=1,这时分组成为整个表,并只有一个组,再插入排序,完成全部任务。参见下图:

全部采用函数模板,包括希尔插入子程序。分组直接用增量控制在原线性表中进行插入排序。解:本解希尔排序是成员函数,是C++的标准用法,标准模板库(STL)就是如此用的。是纯面向对象的方法

#include

#include

using namespace std;

template class Orderedlist{

int maxsize;

int last;

T slist[size];

void Shellinsert(const int);

public:

int getlast(){return last;}

T getslist(int k){return slist[k];}

void putslist(T t,int k){slist[k]=t;}

Orderedlist(){last=-1;maxsize=size;}

bool Insert(T & elem,int i);

void print();

void Shellsort();

// 无关成员函数省略,缺省的=等不必定义

};//再次指出分号不可少

template bool Orderedlist::Insert(T & elem ,int i){ if (i<0||i>last+1||last==maxsize-1) return false;

else{

for (int j=last;j>i;j--) slist[j]=slist[j-1];

slist[i]=elem;

last++;

return true;

}

}

template void Orderedlist::print(){

int i;

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

cout<

if(i%5==4) cout<

else cout<<'\t';

}

cout<

}

template void Orderedlist::Shellsort(){//成员函数int gap=(last+1)/2;

while(gap){

Shellinsert(gap);//一趟排序

gap/=2;

}

}

template void Orderedlist::Shellinsert(const int gap){

int i,j;

T temp;

//注意每一趟排序包含若干子序列,其中第一个子序列第一个元素是0号,第二个元素是gap号,//插入排序认为单个元素是排好序的,所以从每个子序列的第二个元素开始插入排序。

for(i=gap;i<=last;i++){//从第一个子序列开始直接插入排序,但不是完成一个子序列,//再做下一个子系列,而是先做每个子序列的第一步,再做每个子序列的第二步,等等,

//穿插完成。直接插入排序总是从后逐个向前,找到第一个比待插元素大的,则插在前面。

temp=slist[i];//待插元素放temp中

j=i;

while(j>=gap&&temp

slist[j]=slist[j-gap];//找的元素,只要比temp大,就后移,空出位置

j-=gap;

}

slist[j]=temp;//将temp插入正确的空位

}

}

int main(){

const int h=8;

int i;

Orderedlist ordlist;

string n[h];

char sp[h][10]={"南京大学","东南大学","交通大学","清华大学","天津大学","复旦大学", "浙江大学","同济大学"};

for(i=0;i

for(i=0;i

cout<<"未排序表:"<

ordlist.print();

ordlist.Shellsort();

cout<<"已排序表:"<

ordlist.print();

return 0;

}

解2:这里希尔排序是独立的函数,而线性类模板作为形参,也是一种常见的用法。

#include

#include

using namespace std;

template class Orderedlist{

int maxsize;

int last;

T slist[size];

public:

int getlast(){return last;}

T getslist(int k){return slist[k];}

void putslist(T t,int k){slist[k]=t;}

Orderedlist(){last=-1;maxsize=size;}

bool Insert(T & elem,int i);

void print();

// 无关成员函数省略,缺省的=等不必定义

};//再次指出分号不可少

template bool Orderedlist::Insert(T & elem ,int i){ if (i<0||i>last+1||last==maxsize-1) return false;

else{

for (int j=last;j>i;j--) slist[j]=slist[j-1];

slist[i]=elem;

last++;

return true;

}

}

template void Orderedlist::print(){

int i;

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

cout<

if(i%5==4) cout<

else cout<<'\t';

}

cout<

}

template void Shellsort(Orderedlist & list){//非成员函数,仅以表模板类为参数

int gap=(list.getlast()+1)/2;

while(gap){

Shellinsert(list,gap);//一趟排序

gap/=2;

}

}//int size必须保留

template void Shellinsert(Orderedlist & list,const int gap){ int i,j;

T temp;

//注意每一趟排序包含若干子序列,其中第一个子序列第一个元素是0号,第二个元素是gap号,//插入排序认为单个元素是排好序的,所以从每个子序列的第二个元素开始插入排序。

for(i=gap;i<=list.getlast();i++){//从第一个子序列开始直接插入排序,但不是完成一个

//子序列,再做下一个子系列,而是先做每个子序列的第一步,再做每个子序列的第二步,//等等,穿插完成。直接插入排序总是从后逐个向前,找到第一个比待插元素大的,则插在前面。

temp=list.getslist(i);//待插元素放temp中

j=i;

while(j>=gap&&temp

list.putslist(list.getslist(j-gap),j);//找的元素,只要比temp大,就后移,空出位置

j-=gap;

}

list.putslist(temp,j);//将temp插入正确的空位

}

}

int main(){

const int h=8;

int i;

Orderedlist ordlist;

string n[h];

char sp[h][10]={"南京大学","东南大学","交通大学","清华大学","天津大学","复旦大学", "浙江大学","同济大学"};

for(i=0;i

for(i=0;i

cout<<"未排序表:"<

ordlist.print();

Shellsort(ordlist);

cout<<"已排序表:"<

ordlist.print();

return 0;

}

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经典习题答案

1.在类作用域中能够通过直接使用该类的()成员名进行访问。 A. 私有 B. 公用 C. 保护 D. 任何 答案:D 2.小数类型和浮点类型都可以表示小数,正确说法:( ) A. 两者没有任何区别 B. 小数类型比浮点类型取值范围大 C.小数类型比浮点类型精度高 D. 小数类型比浮点类型精度低 答案:C 3.能作为C#程序的基本单位是( )。 A. 字符 B. 语句 C. 函数 D. 源程序文件 答案:B 4. 可用作C#程序用户标识符的一组标识符是( )。 A. void define +WORD B. a3_b3 _123 YN C. for -abc Case D. 2a DO sizeof 答案:B 5.引用类型主要有4种:类类型、数组类型、接口类型和()。 A.对象类型 B.字符串类型 C.委托类型 D.整数类型 答案:C 6.使用Dirctory类的下列方法,可以获取指定文件夹中的文件的是(). A.Exists() B.GetFiles() C.GetDirectories() D.CreateDirectory() 答案:B 7.加载窗体时触发的事件是( )。 A. Click B.Load C.GotFoucs D.DoubleClick

答案:B 8.改变窗体的标题,需修改的窗体属性是( )。 A. Text B. Name C.Title D. Index 答案:A 9.在接口的成员中,不能包含( ). A.属性 B.方法 C.事件 D.常量 答案:D 10.在C#中定义接口时,使用的关键字是( )。 A.interface B.: C.class D.overrides 答案:A 1.当在程序中执行到语句时,将结束所在循环语句中循环体的一次执行。 答案:continue 2.元素类型为double的2行5列的二维数组共占用字节的存储空间。 答案:80 3.C#数组类型是一种引用类型,所有的数组都是从System命名空间的类继承而来的引用对象。 答案:object 4.枚举是从System. 类继承而来的类型。 答案:Enum 5.一般将类的构造方法声明为访问权限。如果声明为private,就不能创建该类的对象。 答案:public或公有 6.类中声明的属性往往具有get()和两个函数。 答案:set() 7.对于方法,参数传递分为值传递和两种。

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语言经典例题和答案

一、求一个任意边长的矩形面积。 #include void main() {int w,h,sum; scanf("%d%d",&w,&h); sum=w*h; printf("area=%d\n",sum); } 二、求一个任意半径的圆的面积及周长。 #define PI 3.14159 #include void main() {float r,area,c; scanf("%f",&r); area=PI*r*r; c=2*PI*r; printf("area=%f\ncircle=%f\n",area,c); } 三、已知:w=5, y=4, z=2, 求表达式:w*y/z的值,并输出。 ##include void main() { int w,y,z,r; w=5; y=4; z=2; r=w*y/z; printf("%5d",r); } 一、从键盘上输入三个数,求出其中的最大值,并输出。 #include void main() {int a,b,c,max; scanf("%d%d%d",&a,&b,&c); max=a; if(max

#include #define PI 3.14159 #include void main() {float a,b,sum; a=30*PI/180; b=60*PI/180; sum=sin(a)+sin(b)+cos(a)+cos(60); printf("total=%f\n",sum); } 三、比较两个数的大小。如果x大于y,则输出:x>y,否则输出:x void main() {int x,y; scanf("%d,%d",&x,&y); if(x>y) printf("x>y\n"); else printf("x void main() {int a,b,c,t; scanf("%d%d%d",&a,&b,&c); if(a>b) { t=b; b=a; a=t; } if(a>c) {t=a; a=c; c=t; } if(b>c) {t=b;b=c;c=t;} printf("%3d%3d%3d\n",a,b,c); }. 二、求自然数1~10之和。。 #include void main()

c和c++经典笔试题及答案

C++/C经典笔试题及答案 C++/C试题 本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。 笔试时间90分钟。请考生认真答题,切勿轻视。 一、请填写BOOL , float, 指针变量与“零值”比较的 if 语句。(10分)提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 请写出BOOL flag 与“零值”比较的if 语句: 请写出float x 与“零值”比较的if 语句: 请写出char *p 与“零值”比较的if 语句: char str[] = “Hello” ; char *p = str ; int n = 10; 请计算 sizeof (str ) = sizeof ( p ) = sizeof ( n ) =void Func ( char str[100]) { 请计算 sizeof( str ) = } void *p = malloc( 100 );请计算 sizeof ( p ) = 1、头文件中的 ifndef/define/endif 干什么用? 2、#include 和#include “filename.h” 有什么区别? 3、const 有什么用途?(请至少说明两种) 4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加extern “C”声明? 5 // 第一个 for (i=0; i

C语言练习题(带答案)-绝对经典题目不看后悔

1单选题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从C开始执行。 A) 程序中第一条可执行语句B) 程序中第一个函数 C) 程序中的main函数D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B)。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 5~8题为相同类型题 考点:标识符的命名规则 (1)只能由字母、数字、下划线构成 (2)数字不能作为标识符的开头 (3)关键字不能作为标识符 选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3) 6.下列C语言用户标识符中合法的是(B)。 A)3ax B)x C)case D)-e2 E)union 选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1); 7.下列四组选项中,正确的C语言标识符是(C)。 A)%x B)a+b C)a123 D)123 选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2) 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 选项B中的“\”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键

最新版c语言经典习题100例(最全面)

C 语言习题100 例(最新整理版) 习题目录:(按住Ctrl 点击可以快速跳转到对应页面) 【程序1】 (5) 题目:有1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? (5) 【程序2】 (6) 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元 时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? (6) 【程序3】 (7) 题目:一个整数,它加上100 后是一个完全平方数,再加上168 又是一个完全平方数,请问该数是多少? (7) 【程序4】 (7) 题目:输入某年某月某日,判断这一天是这一年的第几天? (7) 【程序5】 (8) 题目输入三个整数x,y,z请把这三个数由小到大输出。 (8) 【程序6】 (9) 题目用*号输出字母C的图案。 (9) 【程序7】 (9) 题目:输出特殊图案,请在C环境中运行,看一看,VeryBeautifuI! (9) 【程序8】 (9) 题目:输出9*9 口诀。 (9) 【程序9】 (10) 题目:要求输出国际象棋棋盘。 (10) 【程序10】 (10) 题目:打印楼梯,同时在楼梯上方打印两个笑脸。 (10) 【程序11】 (11) 题目:古典问题:有一对兔子,从出生后第3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? (11) 【程序12】 (11) 题目:判断101-200 之间有多少个素数,并输出所有素数。 (11) 【程序13】 (12) 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1 的三次方+5的三次方+3的三次方。 (12) 【程序14】 (12) 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5 。 (12) 【程序15】 (13) 题目利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用 C 表示。 (13) 【程序16】 (13) 题目:输入两个正整数m和n ,求其最大公约数和最小公倍数。 (13) 【程序17】 (14) 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。14【程序18】 (14)

数据结构(C语言)【经典题库】含参考答案

《数据结构与算法》复习题 选择题 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构 B.数据结构 C 3 A 。 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1)A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 C.分析算法的易读性和文档性 (2)A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是 O(n2) 。 s =0;

for( I =0; inext ==NULL C.head->next ==head D head!=NULL

15.带头结点的单链表head为空的判定条件是 B 。 A.head == NULL B head->next ==NULL C.head->next ==head D head!=NULL 16.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用 D 存储方式最节省运算时间。 A.单链表 B.给出表头指针的单循环链表 C.双链表 D.带头结点的双循环链表17.需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 B 。 20 21 B 。 22 A.删除单链表中的第一个元素 B.删除单链表中的最后一个元素 C.在单链表第一个元素前插入一个新元素 D.在单链表最后一个元素后插入一个新元素 23.与单链表相比,双链表的优点之一是 D 。 A.插入、删除操作更简单

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语言经典例题目解析

1、猴子吃桃子:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子第一天共摘了几个桃子 #include main() {int s=1,i; for(i=9;i>=1;i--) s=(s+1)*2; printf("s=%d\n",s); } 2、鸡兔同笼:有若干只鸡兔同在一个笼子里,从上面数,有35个头;从下面数,有94只脚。问笼中各有几只鸡和兔? #include main() {int a,b; for(a=1;a<=40;a++)/* 120只脚如果全是鸡的话60只,但是总头是40,所以循环到40 */ for (b=1;b<=30;b++) /* 同理如果全是兔的话最多120/4=30 所以循环到30 */ {if((a==40-b)&&(a==60-2*b)) /* 同时满足总头数40总脚数120 */ printf("There are %d chichens \nThere are %d rabbits",a,b);} } 3、百钱买百鸡:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? #include main( ) {int cocks,hens,chicks; cocks=0; while(cocks<=19) {hens=0; while(hens<=33) {chicks=100-cocks-hens; if(5*cocks+3*hens+chicks/3==100&&chicks%3==0) printf("%d,%d,%d\n",cocks,hens,chicks); hens=hens+1;} cocks=cocks+1;}} #include main() {int x,y,z; for(x=0;x<=20;x++) for(y=0;y<=33;y++) {z=100-x-y; if(15*x+9*y+z==300) printf("x=%d y=%d z=%d\n",x,y,z); } }

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经典例题

东风冷雪提供 /* 1.0用函数模板实现任何两个简单类型数据交换,并给出实例加以验证!(请先预习教材函数模板相关知识) */ #include using namespace std; template void change(T*x,T*y) { T temp; temp=*x; *x=*y; *y=temp; } int main() { int a,b; float c,d; cout<<"输入二个整数a,b :"; cin>>a>>b; change(&a,&b); cout<<"二个整数交换结果为:"<>c>>d; change(&c,&d); cout<<"二个小数交换结果:"< using namespace std; inline void p(char a) { if('0'>s;

p(s); return 0; } /*3.0 编写三个名为add的重载函数,分别实现两个整数、 两个实数和两个复数相加。*/ #include using namespace std; struct complex { int r_real; int r_imagine; }; typedef struct complex comp; comp e,f; int add(int x,int y) { return x+y; } double add(double x,double y) { return x+y; } void add(comp e,comp f) { int z1,z2; z1=e.r_real+f.r_real; z2=e.r_imagine+f.r_imagine; cout<<"二个复数相加的结果为"<>a>>b; cout<<"a+b="<>c>>d; cout<<"a+b="<>e.r_real>>e.r_imagine; cout<<"输入第二个复数的实部与虚部 "; cin>>f.r_real>>f.r_imagine; add(e,f);

最新版c语言经典习题100例(最全面)

C语言习题100例(最新整理版) 习题目录:(按住Ctrl点击可以快速跳转到对应页面) 【程序1】 (5) 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? (5) 【程序2】 (6) 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成 1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? (6) 【程序3】 (7) 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? (7) 【程序4】 (7) 题目:输入某年某月某日,判断这一天是这一年的第几天? (7) 【程序5】 (8) 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 (8) 【程序6】 (9) 题目:用*号输出字母C的图案。 (9) 【程序7】 (9) 题目:输出特殊图案,请在c环境中运行,看一看,VeryBeautiful! (9) 【程序8】 (9) 题目:输出9*9口诀。 (9) 【程序9】 (10) 题目:要求输出国际象棋棋盘。 (10) 【程序10】 (10) 题目:打印楼梯,同时在楼梯上方打印两个笑脸。 (10) 【程序11】 (11) 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? (11) 【程序12】 (11) 题目:判断101-200之间有多少个素数,并输出所有素数。 (11) 【程序13】 (12) 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 (12) 【程序14】 (12) 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 (12) 【程序15】 (13) 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 (13) 【程序16】 (13) 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 (13) 【程序17】 (14) 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 (14) 【程序18】 (14)

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经典编程练习题

C++经典编程例题(1) 1、(已验证!)计算铁路运费。已知从甲地到乙地,每张票托运行李不超过50公斤时,按每公斤0.13元,超过50公斤,超过部分按每公斤0.2元计算。输入行李重量w,计算运费y. #include using namespace std; void main() { float money=0,weight; cout<<"请输入货物重量(单位:千克):"; cin>>weight; if (weight<0) cout<<”数据错误!”< 50) money = 50 * 0.13 + (weight - 50) * 0.2; cout<<"\n总费用是:"< #include using namespace std; void main() { double a,b,c,p,x1,x2,D; cout<<"请输入3个数:"<

D=b*b-4*a*c; if (D<0) cout<<"方程无解!"<0) { p=-b/(2*a); x1=p+sqrt(D)/(2*a); x2=p-sqrt(D)/(2*a); cout<<"方程有两个不同的实根。"<>n; for (i=1;i<=n;i++) s=i*s; cout<

数据结构(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次序)和中序法(也称

相关主题
文本预览
相关文档 最新文档