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)一个算法的效率可分为 ① 效率和 ② 效率。
C++与大数据结构基础简明教程课后习题问题详解
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";goto end;}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<<endl;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;}3-3-3a#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;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;}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]=t emp;}}}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]=n um;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;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){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);min=mb(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;delchar(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 te mp1=a[1][j+1];a[1][j +1]=a[1][j];a[1][j] =temp1;int te mp2=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 Date{private://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 &);};。
(完整word版)数据结构(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)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。
ElemType Max (LinkList L ){if(L—〉next==NULL) return NULL;pmax=L-〉next;//假定第一个结点中数据具有最大值p=L-〉next—>next;while(p != NULL ){//如果下一个结点存在if(p->data > pmax—>data) pmax=p;p=p->next;}return pmax-〉data;(7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间.void inverse(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个元素,第i+1至第n个元素要依次前移)。
本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。
因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。
C 及数据结构基础简明教程课后习题答案
{
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));
}
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';
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;
数据结构c 版课后习题解析
【解答】自然语言,程序设计语言,流程图,伪代码,伪代码
(7)在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模
(8)设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为2n*log25n+ 8n,则表示成数量级的形式为()。
1.知识结构图
本章的知识结构如图2-1所示,其中第二层的椭圆代表本章的学习主线。
2. 学习要点
本章虽然讨论的是线性表,但涉及的许多问题都具有一定的普遍性,因此,本章是本课程的重点之一,也是其它后续章节的重要基础。
对于本章的学习要从两条明线、一条暗线出发。两条明线是线性表的逻辑结构和存储结构,一条暗线是算法(即基本操作的实现)。注意线性表的ADT定义、顺序表类定义和单链表类定义三者之间的关系;注意在不同的存储结构下,相同操作的不同实现算法;注意对顺序表和链表从时间性能和空间性能等方面进行综合对比,在实际应用中能为线性表选择或设计合适的存储结构。
【分析】操作示意图如图2-9所示:
⑺一个具有n个结点的单链表,在指针p所指结点后插入一个新结点的时间复杂度为();在给定值为x的结点后插入一个新结点的时间复杂度为()。
【解答】Ο(1),Ο(n)
【分析】在p所指结点后插入一个新结点只需修改指针,所以时间复杂度为Ο(1);而在给定值为x的结点后插入一个新结点需要先查找值为x的结点,所以时间复杂度为Ο(n)。
(5)可以用()定义一个完整的数据结构。
A数据元素B数据对象C数据关系D抽象数据类型
【解答】D
【分析】抽象数据类型是一个数据结构以及定义在该结构上的一组操作的总称。
数据结构(c版)第二版课后习题答案
数据结构(c版)第二版课后习题答案在计算机科学中,数据结构是组织、管理和存储数据的方式,它对程序的效率和性能有着直接的影响。
《数据结构(C版)》第二版是一本广泛使用的教材,它详细介绍了各种基本的数据结构以及它们在C语言中的实现。
课后习题是帮助学生巩固理论知识和提高编程技能的重要部分。
以下是一些可能的习题答案示例,但请注意,实际的习题答案应根据具体习题内容来确定。
习题1:数组和链表问题:编写一个函数,该函数接受一个整数数组和它的大小,然后返回数组中的最大值。
答案:```c#include <stdio.h>int findMax(int arr[], int size) {int max = arr[0];for (int i = 1; i < size; i++) {if (arr[i] > max) {max = arr[i];}}return max;}int main() {int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);printf("The maximum value in the array is: %d\n", findMax(arr, size));return 0;}```习题2:栈问题:实现一个栈的数据结构,并编写一个函数来检查一个字符串是否是回文。
答案:```c#include <stdio.h>#include <string.h>#include <stdbool.h>#define MAX_SIZE 100typedef struct {char data[MAX_SIZE];int top;} Stack;void initializeStack(Stack *s) {s->top = -1;}bool isEmpty(Stack s) {return s.top == -1;}void push(Stack *s, char item) {if (s->top < MAX_SIZE - 1) {s->top++;s->data[s->top] = item;}}char pop(Stack *s) {if (!isEmpty(*s)) {return s->data[s->top--];}return '\0';}bool isPalindrome(const char *str) {Stack s;initializeStack(&s);int length = strlen(str);for (int i = 0; i < length; i++) {push(&s, str[i]);}for (int i = 0; i < length / 2; i++) { char c1 = str[i];char c2 = pop(&s);if (c1 != c2) {return false;}}return true;}int main() {char str[] = "radar";if (isPalindrome(str)) {printf("The string is a palindrome.\n");} else {printf("The string is not a palindrome.\n");}return 0;}```习题3:队列问题:实现一个循环队列,并编写一个函数来模拟银行的顾客服务,顾客到达和离开。
数据结构(C语言版)(第2版)课后习题答案-数据结构c语言版第二版课后答案
数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (13)第4章串、数组和广义表 (26)第5章树和二叉树 (33)第6章图 (42)第7章查找 (54)第8章排序 (65)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
数据结构简明教程(李春葆版)课后习题答案
数据结构简明教程(第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)答:顺序存储结构中,逻辑上相邻元素的存储空间也是相邻的,无需额外空间表示逻辑关系,所以存储密度大,同时具有随机存取特性。
数据结构(C语言版)(第2版)课后习题答案-数据结构c语言版第二版课后答案
数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (13)第4章串、数组和广义表 (26)第5章树和二叉树 (33)第6章图 (42)第7章查找 (54)第8章排序 (65)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
c简明教程习题答案
c简明教程习题答案在编写C语言简明教程习题答案时,我们首先需要明确习题的具体内容。
由于没有具体的习题提供,我将提供一个通用的习题答案模板,以供参考。
C语言简明教程习题答案一、选择题1. 在C语言中,以下哪个是合法的变量名?- A. 123abc- B. my-variable- C. 3d_variable- D. my-variable123答案:B2. 下列哪个语句是正确的C语言语句?- A. if (x = 5) { ... }- B. if (x == 5) { ... }- C. while (x-- > 0) { ... }- D. for (int i = 0; i <= 10; i++) { ... }答案:B二、填空题1. 以下C语言代码段的输出结果是____。
```c#include <stdio.h>int main() {int a = 10, b = 20;if (a < b) {printf("%d", a);} else {printf("%d", b);}return 0;}```答案:102. 以下C语言代码段的输出结果是____。
```c#include <stdio.h>int main() {int x = 10;while (x > 0) {printf("%d ", x);x--;}return 0;}```答案:10 9 8 7 6 5 4 3 2 1三、简答题1. 解释C语言中的数组和指针的区别。
答案:数组是一个数据结构,用于存储固定数量的相同类型的元素。
指针是一个变量,它存储了另一个变量的内存地址。
数组名可以作为指向数组第一个元素的指针使用,但数组本身是一个固定大小的内存块,而指针可以被赋值为任何类型的内存地址。
2. 描述C语言中函数的声明和定义的区别。
- 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");。