c++实用模板及应用习题问题详解
C语言的 简答题及director经常用的语言

一、简答题1、C语言中进行函数声明的作用是什么?答:函数声明的作用是:把函数的名字、函数类型及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照和检查(例如,函数名是否正确,实参的类型和个数是否一致)。
2、举例说明在C语言中如何定义符号常量,使用符号常量的优点?答:使用符号常量:在程序运行过程中,其值不能被改变的量称为常量。
常量分类:整型﹑实型﹑字符﹑字符串常量。
符号常量:在C语言中允许程序中的常量定义为一个标识符,这个标识符称为符号常量。
带有名字的常量定义格式:#define <符号常量> <常量>例如:#define AGE 35#define M 1.9734067e9优点:1)简化书写格式、减少出错率。
2)定义符号常量可以提高程序的可读性,便于程序的调试和修改。
3)符号常量不同于变量,在其作用域内不能被改变和重新赋值。
4)习惯上人们把符号常量名用大写字母表示,变量用小写,以示区别。
3、C语言中,变量为何要先定义后使用?答:程序中使用的各种变量都应预先加以说明,即先说明,后使用。
对变量的说明可以包括三个方面:?数据类型?存储类型?作用域数据类型决定数据所占内存字节数,数值取值范围,在其上可进行的操作。
对变量先定义后使用的目的是:1)凡是未被事先定义的不做为变量名,这就能保证程序中变量名使用得正确,便于编译时发现错误,避免变量名使用时出错。
2)每个变量被指定一确定类型,在编译时就能为其分配相应的存储单元。
3)指定每一个变量属于一个类型,便于在编译时据此检查该变量所进行的运算是否合法。
4、字符串是以'\0'结束的,存储一个字符串需要多少个字节?答:如“ABC”实际需要3+1个字节来存储这个字符串常量。
5、C语言中,动态存储区主要存放哪些数据?答:动态存储区中存放以下数据:1)函数的形参2)函数调用时的现场保护和地址等。
3)Auto register型局部变量对以上数据,当进行函数调用时分配动态存储空间,当函数调用结束时,释放这些存储单元。
c语言c操作题库及详解答案

c语言c操作题库及详解答案C语言C操作题库及详解答案1. 请编写一个C程序,实现两个整数的加法运算,并输出结果。
答案:```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两个整数相加的结果是:%d\n", sum);return 0;}```2. 编写一个C程序,实现字符串的复制功能。
答案:```c#include <stdio.h>#include <string.h>int main() {char src[] = "Hello, World!";char dest[50];strcpy(dest, src);printf("复制后的字符串是:%s\n", dest);return 0;}```3. 请编写一个C程序,实现求一个整数的阶乘。
答案:```c#include <stdio.h>int factorial(int n) {if (n == 0)return 1;elsereturn n * factorial(n - 1);}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("%d的阶乘是:%d\n", num, factorial(num)); return 0;}```4. 编写一个C程序,实现判断一个数是否为素数。
答案:```c#include <stdio.h>#include <math.h>int isPrime(int n) {if (n <= 1)return 0;for (int i = 2; i <= sqrt(n); ++i) { if (n % i == 0)return 0;}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num))printf("%d是素数。
C语言必考100题解析

C语⾔必考100题解析1.按下述格式,从键盘输⼊⼀个整数加法表达式:操作数1+操作数2,然后计算并输出表达式的计算结果,形式如下:操作数1+操作数2=计算结果。
2.输⼊两个整形数并打印,如果⽤户不慎输⼊了⾮法字符,那么程序提⽰“输⼊数据类型错误”。
3.已知三⾓形的三边长a,b,c,要求编写程序,从键盘输⼊a,b,c的值,计算并输出三⾓形的⾯积(注意不存在的情况)。
4.编程从键盘输⼊圆的半径r,计算并输出圆的周长和⾯积。
5.任意从键盘输⼊⼀个三位整数,要求正确分离它的个位,⼗位和百位数,并分别在屏幕上输出。
6.写⼀个函数实现统计⼀个输⼊的整形数的位数。
7.编程计算⽅程ax*x+bx+c=0的根,a,b,c由键盘输⼊,只是⽤主函数来实现。
8.编写三个函数,分别在b*b-4*a*c⼤于0、⼩于0、等于0时进⾏调⽤,并输出结果,在主函数中读⼊a、b、c的值。
9.从键盘输⼊你和你朋友的年龄,变成判断谁的年龄⼤,并打印最⼤者的年龄。
10.从键盘输⼊⼀个年份,判断该年是否是闰年,并输出结果。
11.判断某⼈是否属于肥胖体型。
根据⾝⾼与体重因素,医务⼯作者经⼴泛的调查分析给出了以下按“体指数”对肥胖程度的划分:体指数t=w/h*h(w为体重,单位为kg,h为⾝⾼,单位为m)。
当t<18时,为低体重;当t介于18和25之间时,为正常体重;当t介于25和27之间时,为超重体重;当t≧27时,为肥胖。
编程从键盘输⼊你的⾝⾼h和体重w,根据上式,判断体重类型。
12.利⽤switch语句将百分制成绩转化为五分制成绩。
13.利⽤switch语句将五分制成绩转换成对应分数范围并输出。
14.编程设计⼀个简单的计算器程序,要求根据⽤户从键盘输⼊的表达式:操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除。
15.利⽤时间函数编写⼀个猜数程序。
16.编程实现计算n的阶乘。
17.利⽤函数递归实现计算n!。
18.利⽤π/4=1-1/3+1/5-1/7……计算π的值直到最后⼀项的绝对值⼩于0.0001为⽌,要求统计总共累加了多少项。
c语言设计与应用考试题目及答案

c语言设计与应用考试题目及答案一、选择题(每题2分,共20分)1. 在C语言中,用于定义字符常量的是()。
A. 单引号B. 双引号C. 尖括号D. 花括号答案:A2. 下列哪个关键字用于定义一个结构体?()A. structB. unionC. enumD. typedef答案:A3. 在C语言中,用于定义一个函数的关键字是()。
A. functionB. defC. defineD. void答案:A4. 以下哪个选项不是C语言中的控制语句?()A. ifB. switchC. whileD. forE. case答案:E5. 在C语言中,以下哪个运算符用于连接字符串?()A. +B. %C. &&D. ||答案:A6. 下列哪个函数用于将字符串转换为浮点数?()A. atoi()B. atof()C. itoa()D. sprintf()答案:B7. C语言中,用于输入输出的库函数是()。
A. math.hB. stdio.hC. string.hD. time.h答案:B8. 在C语言中,用于定义一个指针的关键字是()。
A. pointerB. ptrC. refD. *答案:D9. 下列哪个选项是C语言中的合法变量名?()A. 2variableB. variable2C. _variable2D. variable$2答案:C10. 在C语言中,用于定义一个数组的语法是()。
A. int array[10];B. int [10] array;C. int array=10;D. int array;答案:A二、填空题(每题2分,共20分)1. 在C语言中,一个整型变量占用的字节数是______。
答案:4(或根据实际情况填写)2. C语言中,定义一个全局变量的关键字是______。
答案:extern3. 在C语言中,用于声明一个函数的关键字是______。
答案:int(或其他返回类型)4. C语言中,用于计算两个数的和的运算符是______。
C++习题与解析-模板

}
template<class T>
Array<T>::~Array()
{
delete elems;
}
template<class T>
T& Array<T>::operator[](int index)
{
return elems[index];
}
解:
本题说明函数模板的使用方法。max()函数是一个函数模板,它返回两个参数中的较大者。在调用时自动联编相应的max()函数。所以输出为:5,3.5
注重:T为类型形式参数,可包含基本数据类型,也可以包含类类型,不能是普通的数据变量。
-------------------------------------------------------
}
本程序的执行结果如下:
arr1:
原序列:6 3 8 1 9 4 7 5 2
8在arr1中的位置:2
排序后:1 2 3 4 5 6 7 8 9
arr2:
原序列:2.3 6.1 1.5 8.4 6.7 3.8
8.4在arr2中的位置:3
排序后:1.5 2.3 3.8 6.1 6.7 8.4
题1.分析以下程序的执行结果
#include<iostream.h>
template <class T>
T abs(T x)
{
return (x>0?x:-x);
}
void main()
{
cout<<abs(-3)<<","<<abs(-2.6)<<endl;
C语言程序设计学习指导与实践教程习题和实验解答(第2章)2

C语言程序设计学习指导与实践教程——第2章习题和实验解答2.1 C语言概述1.【习题解答】1结构化程序有三大基本结构:顺序、分支和循环.2..算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。
或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
有穷性:一个算法应包含有限的操作步骤而不能是无限的。
确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的,有零个或多个输入输出,有一个或多个输出。
有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。
对于程序设计人员,必须会设计算法,并根据算法写出程序。
可以用自然语言、流程图、伪代码和计算机语言表示算法。
3.C语言的主要特点有:语言简洁、紧凑,使用方便、灵活。
ANSI C一共只有32个关键字;控制语句丰富,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分;运算符丰富,共有34种;数据结构类型丰富;具有结构化的控制语句;语法限制不太严格,程序设计自由度大;C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。
因此有人把它称为中级语言;生成目标代码质量高,程序执行效率高;与汇编语言相比,用C语言写的程序可移植性好。
4.用传统流程图表达如下:5. 计算机硬件系统的组成:计算机硬件系统主要由运算器、控制器、存储器、输入设备和输出设备构成,运算器和控制器合称为中央处理器(CPU),输入设备和输出设备统称为外部设备。
6.计算机网络常用的传输介质:分为有线介质和无线介质;有线介质包括光纤、同轴电缆和双绞线;无线介质包括红外信号、微波等。
2.2 数据类型与表达式1.【习题解答】一、选择题1.D2.B3.A4.B5.A6.B7.D8.D9.C二、填空题1.整型、实型、字符型、枚举类型2.3.5000003.逗号运算符4.三,自右向左5.1,06.32767三、编程题1.已知球的半径为1.5cm,计算球的体积。
c语言知识点与典型例题解析
c语言知识点与典型例题解析本文旨在介绍c语言的知识点及典型例题,帮助读者更好地理解和掌握c语言,提升编程技能。
C语言是一种多用途的通用型编程语言,有着强大的表达能力,能够轻松实现复杂的任务。
它是一门程序设计语言,主要被用于系统软件的开发和应用软件的开发。
C语言的知识点包括:(1)据类型:所有的C语言程序都包含有变量,变量用于存储和计算数据。
C语言支持多种类型的变量,比如整型、浮点型、字符型、指针型等,在编写程序时要根据变量的不同类型来选择合适的数据类型。
(2)制语句:控制语句是用来控制程序的执行流程的,比如if-else、do-while、while等。
它们的作用是在程序中实现逻辑判断,根据不同的输入数据来决定程序的执行流程。
(3)环:C语言支持多种循环,比如for、while、do-while、goto 等。
它们可以让程序在一定的条件下执行多次,这是一种有效的编程方式。
(4)数:函数可以把一组语句封装在一起,可以重复调用。
C语言中可以定义多种类型的函数,比如内置函数(如strcpy()、strcat()等)、用户自定义函数(例如函数max()、min()等)以及库函数(如printf()、scanf()等)。
(5)组:C语言支持一维和多维数组。
它们是一种用来存储相关数据的有效结构,可以更快地访问和操作数据。
(6)针:指针是C语言的特色,是一种用来存储内存地址的变量。
它可以用来访问和操作内存中的数据,实现类似于对对象的操作。
以上是C语言的基本知识点,在实际编程过程中还有一些典型例题需要大家去解决。
例1:有三个数a、b、c,现在要求把它们从小到大排列,如何做?解析:首先,通过if-else语句实现逻辑判断,判断a和b的大小,如果a<b,则交换a和b的位置,否则保持原位置。
然后,再判断a和c的大小,如果a<c,则交换a和c的位置,否则保持原位置,最后判断b和c的大小,如果b<c,则交换b和c的位置,否则保持原位置,最后得到a、b、c从小到大排列的结果。
c++模板及应用习题答案
1.概念填空题1.1 C++最重要的特性之一就是代码重用,为了实现代码重用,代码必须具有通用性。
通用代码需要不受数据类型的影响,并且可以自动适应数据类型的变化。
这种程序设计类型称为参数化程序设计。
模板是C++支持参数化程序设计的工具,通过它可以实现参数化多态性性。
1.2函数模板的定义形式是template <模板参数表> 返回类型函数名(形式参数表){…}。
其中,<模板参数表>中参数可以有多个,用逗号分开。
模板参数主要是模板类型参数。
它代表一种类型,由关键字typename或class后加一个标识符构成,标识符代表一个潜在的内置或用户定义的类型参数。
类型参数由可以是任意合法标识符。
C++规定参数名必须在函数定义中至少出现一次。
1.3编译器通过如下匹配规则确定调用那一个函数:首先,寻找最符合函数名和参数类型的一般函数,若找到则调用该函数;否则寻找一个函数模板,将其实例化成一个模板函数,看是否匹配,如果匹配,就调用该模板函数;再则,通过类型转换规则进行参数的匹配。
如果还没有找到匹配的函数则调用错误。
如果有多于一个函数匹配,则调用产生二义性,也将产生错误。
1.4类模板使用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值能取任意类型(包括系统预定类型和用户自定义的类型)。
类是对一组对象的公共性质的抽象,而类模板则是对不同类的数据类型?的抽象,因此类模板是属于更高层次的抽象。
由于类模板需要一种或多种类型参数,所以类模板也常常称为参数化类。
2. 简答题2.1简述函数模板生成函数的过程。
2.2 简述类模板生成对象的过程。
2.3 简述函数模板与模板函数、类模板与模板类的区别。
3. 选择题3.1关于函数模板,描述错误的是(A )。
A.函数模板必须由程序员实例化为可执行的函数模板B.函数模板的实例化由编译器实现C.一个类定义中,只要有一个函数模板,则这个类是类模板D.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化3.2下列的模板说明中,正确的是(D )。
C面向对象实用例子章习题分析PPT课件
-
31
int main() { CArea area(3.0, 4.0, 5.0, 3.0, 5.0, 3.0); cout << "图形面积之和:" << area.GetArea() << endl; area.SetData(); cout << "图形面积之和:" << area.GetArea() << endl; return 0; }
-
29
class CCircle:public CShape { double r; public: CCircle() { r = 0.0; } CCircle(double R) { r = R; } virtual double Area() { return r * r * 3.14; } virtual void SetData() {cout << "输入圆形的半径:\n"; cin >> r;} };
-
19
//abc.cpp
#include "Triangle.h" void main() { Triangle t1; t1.SetTriangle(4,5,6); Triangle t2; t2.SetTriangle(7,8,9); Triangle & max = compare(t1,t2); max.Print(); }
cin >> a >> b >> c; }
};
-
28
class CRect:public CShape { double h, w; public: CRect() { h = w = 0.0; } CRect(double H, double W){h = H; w = W; } virtual double Area() { return h * w; } virtual void SetData() {cout << "输入矩形的长和宽:\n"; cin >> h>> w;} };
C程序设计教程课后习题问题详解吉顺如版
第1章习题一、选择题1、A2、D3、C4、D5、B6、C7、C8、B9、B 10、A二、填空题1、一,函数体2、main(主),main(主)3、编译,目标4、.c,.obj,.exe5、缩进,无影响,/* */三、程序分析题1、*****************Very good!*****************2、a=12,b=5a=17,b=223、r= 5.50,s=95.033098四、编程题1.用printf()函数在屏幕上输出自己的班级、学号、姓名。
#include"stdio.h"void main(){printf("班级:BX1109\n");printf("学号:111003530901\n");printf("姓名:王孟荣\n");}2.从键盘输入两个整数,计算它们的和、差、积、商,并在屏幕上输出结果。
#include<stdio.h>void main(){int x,y,a,b,c;float d;printf("Please Input Two Integers:\n"); scanf("%d%d",&x,&y);a=x+y;b=x-y;c=x*y;d=1.0*x/y;printf("a=%d\nb=%d\nc=%d\nd=%f\n",a,b,c,d); }第2章习题一、选择题1~5 BCDCD6~10 DBBCA二、填空题1.单精度浮点型、双精度浮点型、字符型2.03.x%10*10+x/104.5.55.5.7 206.sin(sqrt(x*x))/(a*b)7.,8.1111011 173 7B9.3 310.3三、程序分析题1.7,8,102.1,33. 5 F4.(int)i=12,12.505. 461579112四、编程题1.编写程序,求表达式c=21%9-(float)a+4/b*b的值,假设表达式中a和b的值分别由键盘输入。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.概念填空题1.1 C++最重要的特性之一就是代码重用,为了实现代码重用,代码必须具有通用性。
通用代码需要不受数据类型的影响,并且可以自动适应数据类型的变化。
这种程序设计类型称为参数化程序设计。
模板是C++支持参数化程序设计的工具,通过它可以实现参数化多态性性。
1.2函数模板的定义形式是template <模板参数表> 返回类型函数名(形式参数表){…}。
其中,<模板参数表>中参数可以有多个,用逗号分开。
模板参数主要是模板类型参数。
它代表一种类型,由关键字typename或class后加一个标识符构成,标识符代表一个潜在的内置或用户定义的类型参数。
类型参数由可以是任意合法标识符。
C++规定参数名必须在函数定义中至少出现一次。
1.3编译器通过如下匹配规则确定调用那一个函数:首先,寻找最符合函数名和参数类型的一般函数,若找到则调用该函数;否则寻找一个函数模板,将其实例化成一个模板函数,看是否匹配,如果匹配,就调用该模板函数;再则,通过类型转换规则进行参数的匹配。
如果还没有找到匹配的函数则调用错误。
如果有多于一个函数匹配,则调用产生二义性,也将产生错误。
1.4类模板使用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值能取任意类型(包括系统预定类型和用户自定义的类型)。
类是对一组对象的公共性质的抽象,而类模板则是对不同类的数据类型?的抽象,因此类模板是属于更高层次的抽象。
由于类模板需要一种或多种类型参数,所以类模板也常常称为参数化类。
2. 简答题2.1简述函数模板生成函数的过程。
2.2 简述类模板生成对象的过程。
2.3 简述函数模板与模板函数、类模板与模板类的区别。
3. 选择题3.1关于函数模板,描述错误的是(A )。
A.函数模板必须由程序员实例化为可执行的函数模板B.函数模板的实例化由编译器实现C.一个类定义中,只要有一个函数模板,则这个类是类模板D.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化3.2下列的模板说明中,正确的是(D )。
A.template<typename T1,T2>B.template<class T1,T2>C.template<class T1,class T2>D.template<typename T1,typename T2>3.3 函数模板定义如下:template <typename T>Max( T a, T b ,T &c){c=a+b;}下列选项正确的是(B )。
A.int x, y; char z;B.double x, y, z;Max(x, y, z); Max( x, y, z);C.int x, y; float z;D.float x; double y, z;Max( x, y, z); Max( x,y, z);3.4 下列有关模板的描述错误的是(D)。
A.模板把数据类型作为一个设计参数,称为参数化程序设计。
B.使用时,模板参数与函数参数相同,是按位置而不是名称对应的。
C.模板参数表中可以有类型参数和非类型参数。
D.类模板与模板类是同一个概念。
3.5类模板的使用实际上是将类模板实例化成一个(C)。
A.函数 B.对象 C.类 D.抽象类3.6类模板的模板参数(D)。
A.只能作为数据成员的类型 B.只可作为成员函数的返回类型C.只可作为成员函数的参数类型 D.以上三种均可3.7类模板的实例化(A)。
A.在编译时进行 B.属于动态联编C.在运行时进行 D.在连接时进行3.8以下类模板定义正确的为(A)。
A.template<class T,int i=0> B.template<class T,class int i> C.template<class T,typename T> D.template<class T1,T2>4.编程题4.1设计一个函数模板,其中包括数据成员T a[n]以及对其进行排序的成员函数 sort( ),模板参数T可实例化成字符串。
#include <iostream>#include <string>using namespace std;template<typename T>void Sort(T* a,int n){int i,j;T t;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++)if (a[j]>a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;}}template<typename T>void Print(T* a,int n){int i;for(i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;}int main(){stringStr[10]={"Zhang","Li","Wang","Qian","Zhao","Wu","Xu","Tang","Shen","Liang"};int Int[8]={20,12,0,-5,9,-18,6,11};double Dou[7]={3.07,8.12,-0.45,6,10,-9,7.29};Sort<string>(Str,10);Sort<int>(Int,8);Sort<double>(Dou,7);Print(Str,10);Print(Int,8);Print(Dou,7);return 0;}4.2设计一个类模板,其中包括数据成员T a[n]以及在其中进行查找数据元素的函数int search(T)模板参数 T可实例化成字符串。
#include <iostream>using namespace std;template<typename T,int n>class A{int size;T* element;public:A();~A();int Search(T);void SetElement(int index,const T& value);};template<typename T,int n>A<T,n>::A(){size=n>1? n:1;element=new T[size];}template<typename T,int n>A<T,n>::~A(){delete [] element;}template<typename T,int n>int A<T,n>::Search(T t){int i;for(i=0;i<size;i++)if(element[i]==t)return i;return -1;}template<typename T,int n>void A<T,n>::SetElement(int index,const T& value){element[index]=value;}int main(){A<int,5> intAry; //用int实例化,建立模板类对象A<double,10> douAry;//用double实例化,建立模板类对象int i;for(i=0;i<5;i++)intAry.SetElement(i,i+3);for(i=0;i<10;i++)douAry.SetElement(i,(i+i)*0.35);i=intAry.Search(7);if(i>=0)cout<<i<<endl;i=douAry.Search(0.7);if(i>=0)cout<<i<<endl;return 0;}4.3设计一个单向链表类模板,节点数据域中数据从小到大排列,并设计插入、删除节点的成员函数。
#include<iostream>using namespace std;template<typename T>class List;template<typename T>class Node{T info; //数据域Node<T> *link; //指针域public:Node(); //生成头结点的构造函数Node(const T & data);//生成一般结点的构造函数friend class List<T>;};template <typename T> Node<T>::Node(){link=NULL;}template <typename T> Node<T>::Node(const T & data){info=data;link=NULL;}//定义链表类template<typename T>class List{Node<T> *head; //链表头指针和尾指针public:List(); //构造函数,生成头结点(空链表)~List(); //析构函数void MakeEmpty(); //清空一个链表,只余表头结点Node<T>* Find(T data); //搜索数据域与data相同的结点,返回该结点的地址void PrintList(); //打印链表的数据域void InsertOrder(Node<T> *p); //按升序生成链表Node<T>* CreatNode(T data); //创建一个结点(孤立结点)Node<T>* DeleteNode(Node<T>* p); //删除指定结点};template<typename T>List<T>::List(){head=new Node<T>(-9999);//头结点,最小的数据从小到大插入}template<typename T>List<T>::~List(){MakeEmpty();delete head;}template<typename T>void List<T>::MakeEmpty(){Node<T> *tempP;while(head->link!=NULL){tempP=head->link;head->link=tempP->link; //把头结点后的第一个节点从链中脱离delete tempP; //删除(释放)脱离下来的结点}}template<typename T> Node<T>* List<T>::Find(T data){Node<T> *tempP=head->link;while(tempP!=NULL && tempP->info!=data) tempP=tempP->link;return tempP; //搜索成功返回该结点地址,不成功返回NULL}template<typename T>void List<T>::PrintList(){Node<T>* tempP=head->link;while(tempP!=NULL){cout<<tempP->info<<'\t';tempP=tempP->link;}cout<<endl;}template<typename T>void List<T>::InsertOrder(Node<T> *p){Node<T> *tempP=head,*tempQ=head; //tempQ指向tempP前面的一个节点while(tempP!=NULL){if(p->info<tempP->info)break; //找第一个比插入结点大的结点,由tempP指向tempQ=tempP;tempP=tempP->link;}p->link=tempP;tempQ->link=p;}template<typename T>Node<T>* List<T>::CreatNode(T data){//建立新节点Node<T>*tempP=new Node<T>(data);return tempP;}template<typename T>Node<T>* List<T>::DeleteNode(Node<T>* p){Node<T>* tempP=head->link,*tempQ=head,*tempC;while(tempP!=NULL && tempP!=p){tempQ=tempP;tempP=tempP->link;}tempC=tempP;tempQ->link=tempP->link;return tempC;}int main(){Node<int> * P1;List<int> list1;int a[10]={20,12,0,-5,9,-18,6,11,5,3},i,j;for(i=0;i<10;i++){P1=list1.CreatNode(a[i]);list1.InsertOrder(P1);}list1.PrintList();cout<<"请输入一个要求删除的整数"<<endl;cin>>j;P1=list1.Find(j);if(P1!=NULL){P1=list1.DeleteNode(P1);delete P1;list1.PrintList();}else cout<<"未找到"<<endl;cout<<"请输入一个要求插入的整数"<<endl;cin>>j;P1=list1.CreatNode(j);list1.InsertOrder(P1);list1.PrintList();list1.MakeEmpty();//清空list1list1.PrintList();return 0;}4.4 为单链表类模板增加一个复制构造函数和赋值运算符(=)。