C++与数据结构基础简明教程课后习题答案
C++与数据结构基础简明教程课后习题答案

C++与数据结构基础简明教程课后习题答案(总3页)-本页仅作为预览文档封面,使用时请删除本页-C++与数据结构基础简明教程课后习题答案1-7-1etD(31);num[1].SetD(15);for (int i=0;i<=1;i++){cout<<num[i].GetD();if (num[i].IsOdd()) cout<<"是偶数";else cout<<"不是偶数";if (num[i].IsPrime()) cout<<"不是素数";else cout<<"是素数";cout<<endl;}system("pause");return 0;}5-7et(i+2);cout<<i+2<<"!="<<num[i].fun()<<e ndl;}return 0;}5-8#include <iostream>using namespace std;//定义线类class Line{private:double A,B,C;public://IO函数Line(double ioA,double ioB,double ioC){A=ioA;B=ioB;C=ioC;}//定义友元函数friend void judge(Line &,Line &);};//判断两线是否相交void judge(Line &l1,Line&l2){if *==* cout<<"平行(或重合)"<<endl;else{cout<<"相交,相交点是:("<< * cout<<","<<*")"<<endl;}}//主函数int main(){//定义两条直线,l1,l2,系数分别为a,b,c,d,e,fint a,b,c,d,e,f;system("color 79");cout<<"请输入直线1的三个系数";cin>>a>>b>>c;cout<<"请输入直线2的三个系数";cin>>d>>e>>f;system("color 07");Line l1(a,b,c),l2(d,e,f);judge(l1,l2);system("pause");return 0;}。
数据结构(c语言版)课后习题答案完整版

数据结构(c语言版)课后习题答案完整版数据结构(C语言版)课后习题答案完整版一、数据结构概述数据结构是计算机科学中一个重要的概念,用来组织和存储数据,使之可以高效地访问和操作。
在C语言中,我们可以使用不同的数据结构来解决各种问题。
本文将提供完整版本的C语言数据结构的课后习题答案。
二、顺序表1. 顺序表的定义和基本操作顺序表是一种线性表,其中的元素在物理内存中连续地存储。
在C 语言中,我们可以通过定义结构体和使用指针来实现顺序表。
以下是顺序表的一些基本操作的答案:(1)初始化顺序表```ctypedef struct{int data[MAX_SIZE];int length;} SeqList;void InitList(SeqList *L){L->length = 0;}```(2)插入元素到顺序表中```cbool Insert(SeqList *L, int pos, int elem){if(L->length == MAX_SIZE){return false; // 顺序表已满}if(pos < 1 || pos > L->length + 1){return false; // 位置不合法}for(int i = L->length; i >= pos; i--){L->data[i] = L->data[i-1]; // 向后移动元素 }L->data[pos-1] = elem;L->length++;return true;}```(3)删除顺序表中的元素```cbool Delete(SeqList *L, int pos){if(pos < 1 || pos > L->length){return false; // 位置不合法}for(int i = pos; i < L->length; i++){L->data[i-1] = L->data[i]; // 向前移动元素 }L->length--;return true;}```(4)查找顺序表中的元素```cint Search(SeqList L, int elem){for(int i = 0; i < L.length; i++){if(L.data[i] == elem){return i + 1; // 找到元素,返回位置 }}return -1; // 未找到元素}```2. 顺序表习题解答(1)逆置顺序表```cvoid Reverse(SeqList *L){for(int i = 0; i < L->length / 2; i++){int temp = L->data[i];L->data[i] = L->data[L->length - 1 - i]; L->data[L->length - 1 - i] = temp;}}```(2)顺序表元素去重```cvoid RemoveDuplicates(SeqList *L){for(int i = 0; i < L->length; i++){for(int j = i + 1; j < L->length; j++){if(L->data[i] == L->data[j]){Delete(L, j + 1);j--;}}}}```三、链表1. 单链表单链表是一种常见的链式存储结构,每个节点包含数据和指向下一个节点的指针。
(完整版)C++与数据结构基础简明教程课后习题答案

(完整版)C++与数据结构基础简明教程课后习题答案C++与数据结构基础简明教程课后习题答案1-7-1//输出一个数的10倍#includeusing namespace std;int main(){cout<<"Please input an interger:\n";int a;cin>>a;cout<<"result="<<a*10<<endl;< p="">return 0;}1-7-2//输出两个数中的较小的#includeusing namespace std;int main(){double x,y,min;cout<<"please input two numbers"<<endl;< p=""> cin>>x>>y;min=(x>y?y:x);cout<<"the smaller is"<<' '<<min<<endl;< p=""> return 0;}1-7-3//输入半径计算周长和面积using namespace std;int main(){cout<<"请输入半径\n";double rad;cin>>rad;double c,s;c=2*3.14*rad;s=3.14*rad*rad;cout<<"周长是"<<c<<endl;< p="">cout<<"面积是"<<s<<endl;< p="">return 0;}1-7-4//将10000秒化成小时分钟秒#includeusing namespace std;int main(){int hour,min,second;hour=10000/3600;min=(10000%3600)/60;second=10000-hour*3600-60*min;cout<<hour<<"hours"<<min<<"minutes"<<second<<"sec onds"<<endl;< p="">return 0;}1-7-5//将一个三位数倒叙输出using namespace std;int main(){int num,num_bai,num_shi,num_ge;cout<<"请输入一个三位数";cin>>num;num_bai=num/100;num_shi=(num-num_bai*100)/10;num_ge=num-num_bai*100-num_shi*10; cout<<num_ge<<endl;< p="">cout<<num_shi<<endl;< p="">cout<<num_bai<<endl;< p="">return 0;}2-3//简单的输入输出#includeusing namespace std;int main(){double y,n;cout<<"please input a number\n";cin>>n;if (n>0) y=n+1;if (n<0) y=n*n;if (n==0) y=0;cout<<"the result is:"<<' '<<y;< p="">return 0;}2-4//输出学生学号和对应的成绩等级#includeusing namespace std;int main(){double fenshu;int xuehao;char dengji;int i;for (i=1;i<=10;i++){onerror:cout<<"please input student score\n"; cin>>fenshu;if (fenshu>=90&&fenshu<=100) dengji='A'; if (fenshu>=80&&fenshu<90) dengji='B';if (fenshu>=600&&fenshu<80) dengji='C';if (fenshu>=0&&fenshu<60) dengji='D';if (fenshu<0){cout<<"error";goto onerror;}if (fenshu>100)cout<<"error";goto onerror;}cout<<"the id is"<<i<<endl;< p="">cout<<"the score is"<<dengji<<endl;< p=""> }}2-5//判断输入字符类别#includeusing namespace std;int main(){char zifu;int ascii;cout<<"please input a characteristic\n"; cin>>zifu;ascii=zifu;if (ascii>=48&&ascii<=57){cout<<"数字\n";goto end;}if (ascii>=97&&ascii<=122){cout<<"小写字母\n";}if (ascii>=65&&ascii<=90){cout<<"大写字母\n";goto end;}cout<<"其他字符";cout<<endl;< p="">end:}2-6//求圆周率的近似值#include#includeusing namespace std;int main(){int xishu=-1;double danshu=1.0;int i=1;double sifenzhipi=0;do{xishu=xishu*(-1);danshu=1.0/(2*i-1);sifenzhipi=sifenzhipi+xishu*danshu;i++;}while(danshu>=0.000001);cout<<setprecision(15)<<sifenzhipi*4<<="" p="" return=""> }2-7//输出斐波那契数列前40个数,以8*5的格式输出#include#includeusing namespace std;int main(){int b=2;int feibo1=0;int feibo2=1;cout<<setw(9)<<'0'<<setw(9)<<'1';< p=""> for(int i=1;i<=38;i++){int a=feibo2;feibo2=feibo1+feibo2;feibo1=a;cout<<setw(9)<<feibo2;< p="">b=b+1;if(b%8==0) cout<<endl;< p="">}return 0;}2-8//统计输入的元音字母个数#includeusing namespace std;int main(){char zimu;int a,e,i,o,u;a=e=u=i=o=0;begin:cin>>zimu;switch(zimu){case 'a' :a++;break;case 'e' :e++;break;case 'i' :i++;break;case 'o' :o++;break;case 'u' :u++;break;case '#' :goto end;}goto begin;end:cout<<a<<endl<<e<<endl<<i<<endl<<o<<endl<<u <<endl<<a+e+i+o+u;< p="">return 0;}2-10//计算5!+6!+7!#includeusing namespace std;int main(){int i,j;int sum=0;for (i=5;i<=7;i++){int jiecheng=1;for (j=1;j<=i;j++) jiecheng=jiecheng*j;sum=sum+jiecheng;}cout<<sum;< p="">return 0;}2-11//从2开始100个素数#includeusing namespace std;int main(){int num=1;int sushu=0;start:;num++;for (int i=2;i<=num;i++){if(num%i==0) break;}if (i==num){cout<<num<<endl;< p="">sushu+=1;}if(sushu!=100) goto start;return 0;}2-12//百钱买百鸡问题#includeusing namespace std;int main(){int x,y,z;for(x=0;x<=100;x++){for(y=0;y<=100;y++){for(z=0;z<=100;z++)if (x+y+z==100&&5*x+3*y+z/3==100&&z%3==0) cout<<x<<'\t'<<y<<'\t'<<z<<endl;< p="">}}return 0;}2-13#includeusing namespace std;int main(){int a,b,c,d,e;c=0;cin>>a;cout<<"输入"<<a<<endl<<"该数的三次方是"<<a<<"个连续奇数";< p="">b=1;e=a*a*a;while (c!=e){d=b;c=0;for (int i=1;i<=a;i++){c=c+d;d=d+2;}b=b+2;}//cout<<b-2;< p="">int f=b-4;for (int j=1;j<=a;j++){f=f+2;cout<<f<<' ';<="" p="">}cout<<"的和\n";return 0;}2-14//输出四方*形状#includeusing namespace std;int main(){int i,j;for (i=1;i<=9;i++){j=1;for(j=1;j<=9;j++){if(i+j>=6&&i+j<=14&&j-i<=4&&i-j<=4) cout<<'*';else cout<<' ';}cout<<endl;< p="">}return 0;}3-1-1//向数组a中输入10个整数,求其中的最大值,最小值和10个数的算术平均值#includeusing namespace std;int main(){int a[10];for(int i=0;i<=9;i++)cin>>a[i];int max=a[0],min=a[0],sum=a[0];for(int j=0;j<=9;j++){sum=sum+a[j];max=(max>a[j]?max:a[j]);min=(min<a[j]?min:a[j]);< p="">}double ave=sum/10.00;cout<<max<<endl<<min<<endl<<ave<<endl;< p=""> return 0;}3-1-2#includeusing namespace std;int main(){int score[10];int sum=0,a=0,b=0;for(int i=0;i<=9;i++){cin>>score[i];sum=sum+score[i];}double ave=sum/10.0;for(int j=0;j<=9;j++){if(score[j]>ave) a++;if(score[j]<60) b++;}cout<<"成绩大于平均值的人数是"<<a<<endl<<"成绩小于60的人数"<<b<<="" p="">return 0;}3-3-1#includeusing namespace std;int main(){int a[10],sum=0,min,max;double ave;int *ptoa=a;for (int i=0;i<=9;i++){cin>>*(a+i);sum+=*(a+i);}min=*(a);max=*(a);for (int j=1;j<=9;j++){min=(min<*(a+j)?min:*(a+j));max=(max>*(a+j)?max:*(a+j));}cout<<max<<endl<<min<<endl;< p="">ave=sum/10.0;cout<<ave<<endl;< p="">return 0;}3-3-2#includeusing namespace std;int main(){int a[10],sum=0,j=0,c=0; //定义数组a,sum是各学生成绩之和,j是小于60的个数,c是大于平均值的个数double ave=0; //定义平均值int *ptoa=a; //使用指针for (int i=0;i<=9;i++) //输入并算和,统计小于60的{cin>>*(ptoa+i);sum+=*(ptoa+i);if (*(ptoa+i)<60){j++;}}ave=sum/10.0; //计算平均值//cout<<ave<<="">for (int k=0;k<=9;k++) //计算大于平均值的if (*(ptoa+k)>ave){c++;}}cout<<c<<endl<<j;< p="">return 0;}3-3-3#includeusing namespace std;int main(){char string[100];cin>>string;int i=0,an=0,in=0;cout<<"您输入的字符串";while (string[i]!='\0'){if(string[i]=='a') an++;if(string[i]=='i') in++;cout<<string[i];< p="">i++;}cout<<endl<<an<<endl<<in<<endl;< p=""> return 0;}#includeusing namespace std;int main(){char a[100]; //定义存放字符串的数组char *ptoa=a; //使用指针int i=0,an=0,in=0; //an,in分别为a,i的个数cin>>a; while (*(ptoa+i)!='\0') //a【i】{cout<<*(ptoa+i);switch (*(ptoa+i)) //判断{case 'a' : an++;break;case 'i' : in++;break;}i++;}cout<<endl<<an<<endl<<in;< p="">return 0;}3-3-4#includeusing namespace std;int main(){int a[3][3];for (int i=0;i<=2;i++){for(int j=0;j<=2;j++){cin>>*(*(a+i)+j);}}cout<<*(*(a+0)+0)+*(*(a+1)+1)+*(*(a+2)+2)<<endl;< p=""> cout<<*(*(a+0)+2)+*(*(a+1)+1)+*(*(a+2)+0)<<endl;< p=""> return 0;}3-3-5v1#includeusing namespace std;int main(){int a[11]={2,4,5,8,12,14,16,18,20,30,0},b,i,m,j; cin>>b;a[10]=b;if (b<2){m=0;goto end;}if (b>30){goto end2;}for(i=0;i<=9;i++){if (a[i+1]>b){m=i+1;goto end;}}end:;for (j=10;j>=m+1;j--){a[j]=a[j-1];}a[m]=b;end2:;for (int k=0;k<=10;k++)cout<<a[k]<<endl;< p="">return 0;}3-3-5v2#includeusing namespace std;int main(){int i,j,temp;int a[11]={2,4,5,8,12,14,16,18,20,30};cin>>a[10];</a[k]<<endl;<></endl;<></endl;<></endl<<an<<endl<<in;<></endl<<an<<endl<<in<<endl;<></string[i];<></c<<endl<<j;<></ave<</ave<<endl;<></max<<endl<<min<<endl;<></a<<endl<<"成绩小于60的人数"<<b<</max<<endl<<min<<endl<<ave<<endl;<></a[j]?min:a[j]);<></endl;<></f<<'></b-2;<></a<<endl<<"该数的三次方是"<<a<<"个连续奇数";<></y<<'\t'<<z<<endl;<></num<<endl;<></sum;<></a<<endl<<e<<endl<<i<<endl<<o<<endl<<u<<endl< <a+e+i+o+u;<></endl;<></setw(9)<<feibo2;<></setw(9)<<'0'<<setw(9)<<'1';<></setprecision(15)<<sifenzhipi*4<</endl;<></dengji<<endl;<></i<<endl;<></y;<></num_bai<<endl;<></num_shi<<endl;<></num_ge<<endl;<></hour<<"hours"<<min<<"minutes"<<second<<"seconds "<<endl;<></s<<endl;<></c<<endl;<></min<<endl;<></endl;<></a*10<<endl;<>。
数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(第2版)配套练习题参考答案———————数据结构简明教程———————1.练习题1参考答案1.单项选择题(1)D (2)C (3)C (4)A (5)C (6)B (7)C (8)A (9)C (10)B 2.填空题(1)①逻辑结构 ②存储结构 ③运算(不限制顺序)(2)①线性结构 ②非线性结构(不限制顺序)(3)①数据元素 ②关系(4)①没有 ②没有(5)①前驱 ②一 ③后继 ④任意多个(6)任意多个(7)①顺序 ②链式 ③索引 ④哈希(不限制顺序)(8)①时间 ②空间(不限制顺序)(9)问题规模(通常用n 表示)。
(10)辅助或临时空间3.简答题(1)答:运算描述是指逻辑结构施加的操作,而运算实现是指一个完成该运算功能的算法。
它们的相同点是,运算描述和运算实现都能完成对数据的“处理”或某种特定的操作。
不同点是,运算描述只是描述处理功能,不包括处理步骤和方法,而运算实现的核心则是处理步骤。
(2)答:T 1(n )=O(n log 2n ),T 2(n )=O( ),T 3(n )=O(n 2),T 4(n )=O(n log 2n )。
(3)答:j =0,第1次循环:j =1,s =10。
第2次循环:j =2,s =30。
第3次循环:j =3,s =60。
第4次循环:j =4,s =100。
while 条件不再满足。
所以,其中循环语句的执行次数为4。
(4)答:语句s ++的执行次数2)2)(3(3)1()1(12121-+=++-+=+-=∑∑∑-=-==n n n n i n n i n i i nj。
(5)答:其中x ++语句为基本运算语句,∑∑∑=+==-=-==n i n i j ni n n i n n T 1112)1()(1)(=O(n 2)。
(6) 答:由于内循环j 的取值范围,所以i ≤n /2,则,该程序段的时间复杂度为O(n 2)。
∑∑∑-===--==2/122/124/))12((n i nij n i n i n m 3log 2n2.练习题2参考答案1.单项选择题(1)A (2)C (3)A (4)B (5)C(6)D (7)C (8)B (9)A (10)C(11)B (12)A (13)C (14)D (15)D(16)D (17)A (18)C (19)A (20)D2.填空题(1)L.length=0(2)O(1)(3)O(n)(4)n-i(5)①物理存储位置②指针域(6)①前驱 ②O(n)(7)q=p->next; p->next=q->next; free(q);(8)s->next= p->next; p->next=s;(9)O(1)(10)L->next==L3.简答题(1)答:顺序存储结构中,逻辑上相邻元素的存储空间也是相邻的,无需额外空间表示逻辑关系,所以存储密度大,同时具有随机存取特性。
数据结构课程课后习题集答案解析

《数据结构简明教程》练习题及参考答案练习题11. 单项选择题(1)线性结构中数据元素之间是()关系。
A.一对多B.多对多C.多对一D.一对一答:D(2)数据结构中与所使用的计算机无关的是数据的()结构。
A.存储B.物理C.逻辑D.物理和存储答:C(3)算法分析的目的是()。
A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性答:C(4)算法分析的两个主要方面是()。
A.空间复杂性和时间复杂性B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性答:A(5)计算机算法指的是()。
A.计算方法B. 排序方法C.求解问题的有限运算序列D.调度方法答:C(6)计算机算法必须具备输入、输出和()等5个特性。
A.可行性、可移植性和可扩充性B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性答:B2. 填空题(1)数据结构包括数据的①、数据的②和数据的③这三个方面的内容。
答:①逻辑结构②存储结构③运算(2)数据结构按逻辑结构可分为两大类,它们分别是①和②。
答:①线性结构②非线性结构(3)数据结构被形式地定义为(D,R),其中D是①的有限集合,R是D上的②有限集合。
答:①数据元素②关系数据结构简明教程(4)在线性结构中,第一个结点 ① 前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点 ② 后继结点,其余每个结点有且只有1个后继结点。
答:①没有 ②没有 (5)在树形结构中,树根结点没有 ① 结点,其余每个结点有且只有 ② 个前驱结点;叶子结点没有 ③ 结点,其余每个结点的后继结点数可以是 ④ 。
答:①前驱 ②1 ③后继 ④任意多个(6)在图形结构中,每个结点的前驱结点数和后继结点数可以是( )。
答:任意多个(7)数据的存储结构主要有四种,它们分别是 ① 、 ② 、 ③ 和 ④ 存储结构。
答:①顺序 ②链式 ③索引 ④哈希(8)一个算法的效率可分为 ① 效率和 ② 效率。
C与数据结构基础简明教程课后习题答案

C与数据结构基础简明教程课后习题答案1.给定一个整数数组,编写一个函数来返回数组中出现次数最多的元素。
答案:```c#include <stdio.h>#include <stdlib.h>int findMostFrequent(int arr[], int n)int maxCount = 0;int maxElement = 0;for (int i = 0; i < n; i++)int count = 1;for (int j = i + 1; j < n; j++)if (arr[i] == arr[j])count++;}if (count > maxCount)maxCount = count;maxElement = arr[i];}}return maxElement;int maiint arr[] = {1, 2, 3, 2, 2, 3, 4};int n = sizeof(arr) / sizeof(arr[0]);int result = findMostFrequent(arr, n);printf("Most frequent element is: %d\n", result); return 0;```2.编写一个函数判断一个字符串是否是回文字符串。
答案:```c#include <stdio.h>#include <stdlib.h>#include <string.h>int isPalindrome(char *str)int length = strlen(str);for (int i = 0; i < length / 2; i++)if (str[i] != str[length - i - 1])return 0;}return 1;int maichar str[] = "level";if (isPalindrome(str))printf("%s is a palindrome.\n", str);elseprintf("%s is not a palindrome.\n", str);return 0;```3.编写一个函数,接受一个整数数组和数组的长度作为参数,返回数组中的最大值和最小值。
数据结构c语言版课后习题答案完整版

第1章绪论5.:CCBDCA6.分析下面各程序段的复度。
1〕O〔1〕2〕O〔m*n〕3〕O〔n2〕4〕O〔log3n〕〔5〕因x++共行了n-1+n-2+⋯⋯+1=n(n-1)/2,所以行O〔n2〕〔6〕O( n)第2章线性表1.babadbcabdcddac2.算法〔6〕一个算法,通一趟遍在表中确定最大的点。
ElemTypeMax(LinkListL){if(L->next==NULL)returnNULL;pmax=L->next;// 假定第一个点中数据具有最大p=L->next->next;while(p!=NULL){// 如果下一个点存在if(p->data>pmax->data)pmax=p;p=p->next;}returnpmax->data;〔7〕一个算法,通遍一趟,将表中所有点的接方向逆,仍利用原表的存空。
voidinverse(LinkList&L){ 逆置点的表Lp=L->next;L->next=NULL;while(p){q=p->next; //q指向*p的后p->next=L->next;L->next=p; //*p插入在点之后p=q;}}〔10〕度n的性表A采用序存构,写一复度O(n)、空复度O(1)的算法,算法除性表中所有item的数据元素。
[目分析] 在序存的性表上除元素,通常要涉及到一系列元素的移〔第个元素,第i+1至第n个元素要依次前移〕。
此题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。
因此可以考虑设头尾两个指针〔 i=1,j=n〕,从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。
void Delete 〔ElemTypeA[] ,int n〕∥A是有n个元素的一维数组,本算法删除A中所有值为item的元素。
数据结构课程课后习题集答案解析

《数据结构简明教程》练习题及参考答案练习题11. 单项选择题(1)线性结构中数据元素之间是()关系。
A.一对多B.多对多C.多对一D.一对一答:D(2)数据结构中与所使用的计算机无关的是数据的()结构。
A.存储B.物理C.逻辑D.物理和存储答:C(3)算法分析的目的是()。
A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性答:C(4)算法分析的两个主要方面是()。
A.空间复杂性和时间复杂性B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性答:A(5)计算机算法指的是()。
A.计算方法B. 排序方法C.求解问题的有限运算序列D.调度方法答:C(6)计算机算法必须具备输入、输出和()等5个特性。
A.可行性、可移植性和可扩充性B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性答:B2. 填空题(1)数据结构包括数据的①、数据的②和数据的③这三个方面的内容。
答:①逻辑结构②存储结构③运算(2)数据结构按逻辑结构可分为两大类,它们分别是①和②。
答:①线性结构②非线性结构(3)数据结构被形式地定义为(D,R),其中D是①的有限集合,R是D上的②有限集合。
答:①数据元素②关系数据结构简明教程(4)在线性结构中,第一个结点 ① 前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点 ② 后继结点,其余每个结点有且只有1个后继结点。
答:①没有 ②没有 (5)在树形结构中,树根结点没有 ① 结点,其余每个结点有且只有 ② 个前驱结点;叶子结点没有 ③ 结点,其余每个结点的后继结点数可以是 ④ 。
答:①前驱 ②1 ③后继 ④任意多个(6)在图形结构中,每个结点的前驱结点数和后继结点数可以是( )。
答:任意多个(7)数据的存储结构主要有四种,它们分别是 ① 、 ② 、 ③ 和 ④ 存储结构。
答:①顺序 ②链式 ③索引 ④哈希(8)一个算法的效率可分为 ① 效率和 ② 效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++与数据结构基础简明教程课后习题答案1-7-1//输出一个数的10倍#include <iostream>using namespace std;int main(){cout<<"Please input an interger:\n";int a;cin>>a;cout<<"result="<<a*10<<endl;return 0;}1-7-2//输出两个数中的较小的#include <iostream>using namespace std;int main(){double x,y,min;cout<<"please input two numbers"<<endl;cin>>x>>y;min=(x>y?y:x);cout<<"the smaller is"<<' '<<min<<endl;return 0;}1-7-3//输入半径计算周长和面积#include <iostream>using namespace std;int main(){cout<<"请输入半径\n";double rad;cin>>rad;double c,s;c=2*3.14*rad;s=3.14*rad*rad;cout<<"周长是"<<c<<endl;cout<<"面积是"<<s<<endl;return 0;}1-7-4//将10000秒化成小时分钟秒#include <iostream>using namespace std;int main(){int hour,min,second;hour=10000/3600;min=(10000%3600)/60;second=10000-hour*3600-60*min;cout<<hour<<"hours"<<min<<"minutes"<<second<<"seconds"<<endl;return 0;}1-7-5//将一个三位数倒叙输出#include <iostream>using namespace std;int main(){int num,num_bai,num_shi,num_ge;cout<<"请输入一个三位数";cin>>num;num_bai=num/100;num_shi=(num-num_bai*100)/10;num_ge=num-num_bai*100-num_shi*10; cout<<num_ge<<endl;cout<<num_shi<<endl;cout<<num_bai<<endl;return 0;}2-3//简单的输入输出#include <iostream>using namespace std;int main(){double y,n;cout<<"please input a number\n";cin>>n;if (n>0) y=n+1;if (n<0) y=n*n;if (n==0) y=0;cout<<"the result is:"<<' '<<y;return 0;}2-4//输出学生学号和对应的成绩等级#include <iostream>using namespace std;int main(){double fenshu;int xuehao;char dengji;int i;for (i=1;i<=10;i++){onerror:cout<<"please input student score\n";cin>>fenshu;if (fenshu>=90&&fenshu<=100) dengji='A';if (fenshu>=80&&fenshu<90) dengji='B';if (fenshu>=600&&fenshu<80) dengji='C';if (fenshu>=0&&fenshu<60) dengji='D';if (fenshu<0){cout<<"error";goto onerror;}if (fenshu>100)cout<<"error";goto onerror;}cout<<"the id is"<<i<<endl;cout<<"the score is"<<dengji<<endl;}return 0;}2-5//判断输入字符类别#include <iostream>using namespace std;int main(){char zifu;int ascii;cout<<"please input a characteristic\n";cin>>zifu;ascii=zifu;if (ascii>=48&&ascii<=57){cout<<"数字\n";goto end;}if (ascii>=97&&ascii<=122){cout<<"小写字母\n";}if (ascii>=65&&ascii<=90){cout<<"大写字母\n";goto end;}cout<<"其他字符";cout<<endl;end:return 0;}2-6//求圆周率的近似值#include <iostream>#include <iomanip>using namespace std;int main(){int xishu=-1;double danshu=1.0;int i=1;double sifenzhipi=0;do{xishu=xishu*(-1);danshu=1.0/(2*i-1);sifenzhipi=sifenzhipi+xishu*danshu;i++;}while(danshu>=0.000001);cout<<setprecision(15)<<sifenzhipi*4<<endl; return 0;}2-7//输出斐波那契数列前40个数,以8*5的格式输出#include <iostream>#include <iomanip>using namespace std;int main(){int b=2;int feibo1=0;int feibo2=1;cout<<setw(9)<<'0'<<setw(9)<<'1';for(int i=1;i<=38;i++){int a=feibo2;feibo2=feibo1+feibo2;feibo1=a;cout<<setw(9)<<feibo2;b=b+1;if(b%8==0) cout<<endl;}return 0;}2-8//统计输入的元音字母个数#include <iostream>using namespace std;int main(){char zimu;int a,e,i,o,u;a=e=u=i=o=0;begin:cin>>zimu;switch(zimu){case 'a' :a++;break;case 'e' :e++;break;case 'i' :i++;break;case 'o' :o++;break;case 'u' :u++;break;case '#' :goto end;}goto begin;end:cout<<a<<endl<<e<<endl<<i<<endl<<o<<endl<<u<<endl<<a+e+i+o+u;return 0;}2-10//计算5!+6!+7!#include <iostream>using namespace std;int main(){int i,j;int sum=0;for (i=5;i<=7;i++){int jiecheng=1;for (j=1;j<=i;j++) jiecheng=jiecheng*j;sum=sum+jiecheng;}cout<<sum;return 0;}2-11//从2开始100个素数#include <iostream>using namespace std;int main(){int num=1;int sushu=0;start:;num++;for (int i=2;i<=num;i++){if(num%i==0) break;}if (i==num){cout<<num<<endl;sushu+=1;}if(sushu!=100) goto start;return 0;}2-12//百钱买百鸡问题#include <iostream>using namespace std;int main(){int x,y,z;for(x=0;x<=100;x++){for(y=0;y<=100;y++){for(z=0;z<=100;z++)if (x+y+z==100&&5*x+3*y+z/3==100&&z%3==0) cout<< x<<'\t'<<y<<'\t'<<z<<endl;}}return 0;}2-13#include <iostream>using namespace std;int main(){int a,b,c,d,e;c=0;cin>>a;cout<<"输入"<<a<<endl<<"该数的三次方是"<<a<<"个连续奇数";b=1;e=a*a*a;while (c!=e){d=b;c=0;for (int i=1;i<=a;i++){c=c+d;d=d+2;}b=b+2;}//cout<<b-2;int f=b-4;for (int j=1;j<=a;j++){f=f+2;cout<<f<<' ';}cout<<"的和\n";return 0;}2-14//输出四方*形状#include <iostream>using namespace std;int main(){int i,j;for (i=1;i<=9;i++){j=1;for(j=1;j<=9;j++){if(i+j>=6&&i+j<=14&&j-i<=4&&i-j<=4) cout<<'*';else cout<<' ';}cout<<endl;}return 0;}3-1-1//向数组a中输入10个整数,求其中的最大值,最小值和10个数的算术平均值#include <iostream>using namespace std;int main(){int a[10];for(int i=0;i<=9;i++)cin>>a[i];int max=a[0],min=a[0],sum=a[0];for(int j=0;j<=9;j++){sum=sum+a[j];max=(max>a[j]?max:a[j]);min=(min<a[j]?min:a[j]);}double ave=sum/10.00;cout<<max<<endl<<min<<endl<<ave<<endl;return 0;}3-1-2#include <iostream>using namespace std;int main(){int score[10];int sum=0,a=0,b=0;for(int i=0;i<=9;i++){cin>>score[i];sum=sum+score[i];}double ave=sum/10.0;for(int j=0;j<=9;j++){if(score[j]>ave) a++;if(score[j]<60) b++;}cout<<"成绩大于平均值的人数是"<<a<<endl<<"成绩小于60的人数"<<b<<end l;return 0;}3-3-1#include <iostream>using namespace std;int main(){int a[10],sum=0,min,max;double ave;int *ptoa=a;for (int i=0;i<=9;i++){cin>>*(a+i);sum+=*(a+i);}min=*(a);max=*(a);for (int j=1;j<=9;j++){min=(min<*(a+j)?min:*(a+j));max=(max>*(a+j)?max:*(a+j));}cout<<max<<endl<<min<<endl;ave=sum/10.0;cout<<ave<<endl;return 0;}3-3-2#include <iostream>using namespace std;int main(){int a[10],sum=0,j=0,c=0; //定义数组a,sum是各学生成绩之和,j是小于60的个数,c是大于平均值的个数double ave=0; //定义平均值int *ptoa=a; //使用指针for (int i=0;i<=9;i++) //输入并算和,统计小于60的{cin>>*(ptoa+i);sum+=*(ptoa+i);if (*(ptoa+i)<60){j++;}}ave=sum/10.0; //计算平均值//cout<<ave<<endl; //可以输出平均值for (int k=0;k<=9;k++) //计算大于平均值的if (*(ptoa+k)>ave){c++;}}cout<<c<<endl<<j;return 0;}3-3-3#include <iostream>using namespace std;int main(){char string[100];cin>>string;int i=0,an=0,in=0;cout<<"您输入的字符串";while (string[i]!='\0'){if(string[i]=='a') an++;if(string[i]=='i') in++;cout<<string[i];i++;}cout<<endl<<an<<endl<<in<<endl;return 0;}#include <iostream>using namespace std;int main(){char a[100]; //定义存放字符串的数组char *ptoa=a; //使用指针int i=0,an=0,in=0; //an,in分别为a,i的个数cin>>a;while (*(ptoa+i)!='\0') //a【i】{cout<<*(ptoa+i);switch (*(ptoa+i)) //判断{case 'a' : an++;break;case 'i' : in++;break;}i++;}cout<<endl<<an<<endl<<in;return 0;}3-3-4#include <iostream>using namespace std;int main(){int a[3][3];for (int i=0;i<=2;i++){for(int j=0;j<=2;j++){cin>>*(*(a+i)+j);}}cout<<*(*(a+0)+0)+*(*(a+1)+1)+*(*(a+2)+2)<<endl;cout<<*(*(a+0)+2)+*(*(a+1)+1)+*(*(a+2)+0)<<endl;return 0;}3-3-5v1#include <iostream>using namespace std;int main(){int a[11]={2,4,5,8,12,14,16,18,20,30,0},b,i,m,j;cin>>b;a[10]=b;if (b<2){m=0;goto end;}if (b>30){goto end2;}for(i=0;i<=9;i++){if (a[i+1]>b){m=i+1;goto end;}}end:;for (j=10;j>=m+1;j--){a[j]=a[j-1];}a[m]=b;end2:;for (int k=0;k<=10;k++)cout<<a[k]<<endl;return 0;}3-3-5v2#include <iostream>using namespace std;int main(){int i,j,temp;int a[11]={2,4,5,8,12,14,16,18,20,30};cin>>a[10];for (i=0;i<=10;i++){for(j=0;j<=10-i-1;j++){if(a[j]>a[j+1]){temp=a[j+1];a[j+1]=a[j];a[j]=temp;}}}for (int k=0;k<=10;k++) cout<<a[k]<<' ';cout<<'\n';return 0;}3-3-5v3#include <iostream>using namespace std;int main(){int a[11]={2,4,5,8,12,14,16,18,20,30},num,i,j;cout<<"请输入一个整数";cin>>num;if (num>a[9]){a[10]=num;}else{for (i=0;i<=11;i++){if(a[i]>num){for(j=9;j>=i;j--){a[j+1]=a[j];}a[i]=num;break;}}}for (i=0;i<=10;i++){cout<<a[i]<<' ';}return 0;}3-3-5final#include<iostream.h>void main(){int a[11]={2,4,5,8,12,14,16,18,20,30},b,i=0,j=10;cin>>b;while(a[i]<b&&i<=9)i++;while(j>i){a[j]=a[j-1];j--;}a[i]=b;cout<<"输入插入后的结果:";for(i=0;i<11;i++)cout<<a[i]<<" ";cout<<endl;}3-3-6#include <iostream>using namespace std;int main(){int a[5][3],s[5]={0,0,0,0,0},temp;for (int i=0;i<=4;i++){cout<<"请输入第"<<i+1<<"行的数据"<<endl;for (int j=0;j<=2;j++){cin>>*(*(a+i)+j);*(s+i)+=*(*(a+i)+j);}}/*//注释掉的部分可以输出每行数据之和for (int k=0;k<=4;k++){cout<<*(s+k)<<endl;}*/for (int m=0;m<=4;m++){for (int n=0;n<=4-m-1;n++)if (*(s+n)>*(s+n+1)){ temp=*(s+n+1);*(s+n+1)=*(s+n);*(s+n)=temp;}}for (int l=0;l<=4;l++){cout<<endl<<*(s+l);}cout<<endl;system("pause");return 0;}4-3#include <iostream>using namespace std;int fun1(int x,int y);int fun2(int x,int y);int fun3(int x,int y);int fun4(int x,int y);int main(){int a,b;cout<<"输入两个数";cin>>a>>b;cout<<"两个数的和的平方是"<<fun1(a,b)<<endl;cout<<"两个数的平方和是"<<fun2(a,b)<<endl;cout<<"两个数的差的平方是"<<fun3(a,b)<<endl;cout<<"两个数平方的差是"<<fun4(a,b)<<endl;return 0;}int fun1(int x,int y){int z=(x+y)*(x+y);return z;}int fun2(int x,int y){int z=x*x+y*y;return z;}int fun3(int x,int y){int z=(x-y)*(x-y);return z;}int fun4(int x,int y){int z=x*x-y*y;return z;}4-4#include <iostream>using namespace std;double jc(int x);int sm(int x);int main(){int m,n,s2;double s1;cin>>m>>n;s1=jc(m)/(jc(n)*jc(m-n));s2=sm(m)-sm(n);cout<<s1<<endl<<s2;return 0;}double jc(int x){double s=1;for (int i=1;i<=x;i++) s*=i;return s;}int sm(int x){int s=0;for (int i=1;i<=x;i++) s+=i;return s;}4-6#include <iostream>#include <cmath>using namespace std;double jxf(int n);double txf(int n);double f(double x);//const pi=3.1415927;int main(){int n;double y1,y2;cin>>n;y1=jxf(n);y2=txf(n);cout<<y1<<endl<<y2;return 0;}double jxf(int n){double sum=0,s;for (int i=0;i<=n-1;i++){s=(i*3.14)/n;sum+=(3.14/n)*f(s);}return sum;}double txf(int n){double sum=0,s1,s2;for (int i=0;i<=n-1;i++){s1=i*3.14/n;s2=(i+1)*3.14/n;sum+=3.14/n*(f(s1)+f(s2));}sum/=2.0;return sum;}double f(double x){double y;y=sin(x)+cos(x);return y;}4-6v1#include <iostream>#include <cmath>using namespace std;double jxf(int n);double txf(int n);double f(double x);const pi=3.1415927;int main(){int n;double y1,y2;cin>>n;y1=jxf(n);y2=txf(n);if (abs(y1-2)>abs(y2-2)) cout<<"矩形法";else cout<<"梯形法";return 0;}double jxf(int n){double sum=0;for (int i=0;i<=n-1;i++) sum+=pi/n*f(i*pi/n);return sum;}double txf(int n){double sum=0;for (int i=0;i<=n-1;i++) sum+=pi/n*(f(i*pi/n)+f((i+1)*pi/n));sum/=2;return sum;}double f(double x){double y;y=sin(x)+cos(x);return y;}4-6v2error#include <iostream>#include <cmath>using namespace std;double jxf(int n);double txf(int n);double f(double x);const pi=3.1415927;int main(){int n;double y1,y2;cin>>n;y1=jxf(n);y2=txf(n);if (abs(y1-2)>abs(y2-2)) cout<<"矩形法";else cout<<"梯形法";return 0;}double jxf(int n){double sum=0;for (int i=0;i<=n-1;i++) sum+=pi/n*f(i*pi/n);return sum;}double txf(int n){double sum=0;for (int i=0;i<=n-1;i++) sum+=pi/n*(f(i*pi/n)+f((i+1)*pi/n));sum/=2;return sum;}double f(double x){double y;y=sin(x)+cos(x);return y;}4-7#include <iostream>using namespace std;int my(int x,int y);int mb(int x,int y);int main(){int a,b,max,min;cin>>a>>b;max=my(a,b);cout<<max<<endl<<min<<endl;system("pause");return 0;}int my(int x,int y){for (int i=(x>y?y:x);i>=1;i--)if (x%i==0&&y%i==0) return i; }int mb(int x,int y){for (int i=(x>y?x:y);i>=1;i++)if (i%x==0&&i%y==0) return i; }4-11#include <iostream>using namespace std;void delchar(char *s1,char s2);int main(){char s1[100];char s2;cin>>s1>>s2;return 0;}void delchar(char *s1,char s2){for (int i=1;*(s1+i)!='\0';i++){if (*(s1+i)==s2){for (int j=0;*(s1+i+j)!='\0';j++){*(s1+i+j)=*(s1+i+j+1);}}}cout<<s1;}4-12#include <iostream>#include <cmath>using namespace std;int check(int a,int b,int c);double s(double a,double b,double c);int main(){double a,b,c;cin>>a>>b>>c;if (check(a,b,c)) cout<<s(a,b,c);else cout<<"error";system("pause");return 0;}int check(int a,int b,int c){if (a+b>c&&abs(a-b)<c) return 1;else return 0;}double s(double a,double b,double c){double p=(a+b+c)/2;double area=sqrt(p*(p-a)*(p-b)*(p-c));return area;}4-13#include <iostream>#include <cmath>using namespace std;fun (int n,int k);pow10 (int x);int main(){int n,k;cin>>n>>k;cout<<fun(n,k)<<endl;system("pause");return 0;}int fun (int n,int k){if (k>n||k<1) return 0;else{int s;s=n/pow10(k-1);s=s%10;return s;}}int pow10 (int x){int s=1;for (int i=1;i<=x;i++) s*=10;return s;}4-14#include<iostream>using namespace std;double ave(int p[][4],int i);int main(){int a[5][4];for (int i=0;i<=4;i++)for (int j=0;j<=3;j++)cin>>a[i][j];for (i=0;i<=4;i++)cout<<ave(a,i)<<endl;system("pause");return 0;}double ave(int p[][4],int i){double sum=0;for(int j=0;j<=3;j++)sum+=p[i][j];sum/=4;return sum;}4-15#include <iostream>using namespace std;int find(char str[],char a);int main(){char str[100],a;cin>>str>>a;cout<<find(str,a)+1;system("pause");return 0;}int find(char str[],char a){for (int i=0;str[i]!='\0';i++){if (str[i]==a){return i;break;}}if (str[i]=='\0') return -1; }4-16//4_16#include<iostream>using namespace std;int change (int n,int R,int *a);int main(){cout<<"Please input n and R(2<=R<=16)"<<endl;int n,R,a[10];cin>>n>>R;int i=change(n,R,a);for (int j=i-1;j>=0;j--){switch (a[j]){case 11:cout<<'A';break;case 12:cout<<'B';break;case 13:cout<<'C';break;case 14:cout<<'D';break;case 15:cout<<'E';break;default: cout<<a[j];}}system("pause");return 0;}int change (int n,int R,int *a) {int i=0;while (n!=0){*(a+i)=n%R;n/=R;i++;}return i;}4-17#include <iostream>using namespace std;const int N=5;int init(int a[][N]);void fun1(int a[][N]);void fun2(int a[][N]);void fun3(int a[][N],int sum); void fun4(int a[][N]);int main(){int sum=0;int a[2][N];sum=init(a);cout<<"(1)"<<endl;fun1(a);cout<<"(2)"<<endl;fun2(a);cout<<"(3)"<<endl;fun3(a,sum);cout<<"(4)"<<endl;fun4(a);return 0;}int init(int a[][N]){int sum=0;for (int i=0;i<=N-1;i++){a[0][i]=i+1;cin>>a[1][i];sum+=a[1][i];}return sum;}void fun1(int a[][N]){for (int i=0;i<=N-1;i++)if (a[1][i]>85){cout<<a[0][i]<<' '<<a[1][i]<<endl;}}void fun2(int a[][N]){for (int i=0;i<=N-1;i++)if (a[1][i]<60){cout<<a[0][i]<<' '<<a[1][i]<<endl;}}void fun3(int a[][N],int sum){int aveplus=0;double ave=sum/N;for (int i=0;i<=N-1;i++)if (a[1][i]>=ave)aveplus++;cout<<aveplus<<endl;}void fun4(int a[][N]){for (int i=0;i<=N-1;i++)for (int j=0;j<=N-1;j++){if (a[1][j]>a[1][j+1]){int temp1=a[1][j+1];a[1][j+1]=a[1][j];a[1][j]=temp1;int temp2=a[0][j+1];a[0][j+1]=a[0][j];a[0][j]=temp2;}}for (i=0;i<=N-1;i++){cout<<a[0][i]<<' '<<a[1][i]<<endl;}}5-5//计算当前日期是一年之中的第几天#include <iostream>using namespace std;//定义日期类class Dateprivate://y年m月d天nod一年中的第几天ly是否是闰年int y,m,d,nod,ly;public:Date (int ioy=2009,int iom=5,int iod=1){y=ioy;m=iom;d=iod;}int checkdate();int Issleapyear();void Print();int NumberOfDays();};//是否是闰年int Date::Issleapyear(){return ly=(y%400==0)||(y%4==0&&y%100!=0); }//计算一年之中的第几天int Date::NumberOfDays (){int a[2][13]={{0,31,29,31,30,31,30,31,31,30,31,30,31},{0,31,28,31,30,31,30,31, 31,30,31,30,31}};nod=0;for (int i=0;i<=m-1;i++)nod+=a[Issleapyear()][i];nod+=d;return nod;}//判断日期是否合法int Date::checkdate (){return (m>0&&m<13)&&(d>0&&d<=31);}//输出void Date::Print (){cout<<y<<"年"<<m<<"月"<<d<<"日"<<"是该年的第"<<NumberOfDays ()<<"天"<<endl;}//主函数int main(){Date d1;Date d2(1991,5,2);int y,m,d;cout<<"请依次输入年月日";cin>>y>>m>>d;Date d3(y,m,d);d1.Print();d2.Print();if(d3.checkdate()){d3.Print();}else{cout<<"Error";}system("pause");system("cls");system("pause");return 0;}5-6//判断15,31是否偶数,素数#include <iostream>using namespace std;//定义整数类class Interger{private:int d;public:int GetD();void SetD(int iod=0){d=iod;}int IsOdd();int IsPrime();};//返回D的值int Interger::GetD(){return d;}//判断是否偶数int Interger::IsOdd(){return 1-d%2;}//判断是否素数int Interger::IsPrime(){for (int i=2;i<=d;i++)if (d%i==0) break;if (i==d) return 0;else return 1;}//主函数int main(){Interger num[2];num[0].SetD(31);num[1].SetD(15);for (int i=0;i<=1;i++){cout<<num[i].GetD();if (num[i].IsOdd()) cout<<"是偶数";else cout<<"不是偶数";if (num[i].IsPrime()) cout<<"不是素数";else cout<<"是素数";cout<<endl;}system("pause");return 0;}5-7//编写一个求n!的类,并在main()中分别输出2-9的阶乘#include<iostream>using namespace std;//定义阶乘类(汗)class jc{private:int a,j;public://传值void set(int ioa){a=ioa;}//计算阶乘int fun(){j=1;for (int i=1;i<=a;i++)j*=i;return j;}};//主函数int main(){jc num[8];for (int i=0;i<=7;i++){num[i].set(i+2);cout<<i+2<<"!="<<num[i].fun()<<endl;}return 0;}5-8#include <iostream>using namespace std;//定义线类class Line{private:double A,B,C;public://IO函数Line(double ioA,double ioB,double ioC){A=ioA;B=ioB;C=ioC;}//定义友元函数friend void judge(Line &,Line &);};//判断两线是否相交void judge(Line &l1,Line&l2){if (l1.A*l2.B==l2.A*l1.B) cout<<"平行(或重合)"<<endl;else{cout<<"相交,相交点是:("<<(l1.C*l2.B-l1.B*l2.C)/(l2.A*l1.B-l1.A*l2.B);cout<<","<<(l2.A*l1.C-l1.A*l2.C)/(l1.A*l2.B-l1.B*l2.A)<<")"<<endl;}}//主函数int main(){//定义两条直线,l1,l2,系数分别为a,b,c,d,e,fint a,b,c,d,e,f;system("color 79");cout<<"请输入直线1的三个系数";cin>>a>>b>>c;cout<<"请输入直线2的三个系数";cin>>d>>e>>f;system("color 07");Line l1(a,b,c),l2(d,e,f);judge(l1,l2);system("pause");。