• 1.22 MB
  • 2022-04-22 11:46:00 发布

《程序设计基础(C++)》实验教程及完整答案.doc

  • 76页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《程序设计基础》实验教程对于从事计算机行业的人员来说,设计能力是最主要的基本功之一。入门课程《程序设计基础》的学习效果将直接关系到编程能力的掌握和提高以及后续课程的学习。然而,实践证明,许多初学者在学习这门课程时的效果并不理想。对初学者来说,如何学好本课程?首先,要理解教材中所给出的语法描述,并学会按语法规定去编写指定问题的求解程序。经过这样的多次反复,初学者就可以找到编程的感觉。除了要学好理论知识外,更重要的一点是要到计算机上去验证,因为只有实践才是检验真理的标准。只有通过到计算机上去实践,才能发现学习中存在的问题,巩固所学知识,加强解决实际问题的能力,增强信心。因此,《程序设计基础》课程的上机实验是本课程必不可少的实践环节,必须加以重视。本课程上机实验的目的是使学生熟悉用高级语言解决实际问题的全过程,加深对语言的理解,得到程序设计基本方法和能力的训练。在独立编写程序、独立上机调试程序的同时,真正能用高级语言这个工具去解决实际问题,对计算机学科的相关知识有所了解,从而为后续课程的学习奠定良好的基础。本实验指导所用环境是VisualC++6.0及以上版本。考虑到本课程的内容和特点,设置了十四个实验,每次实验需要两至三小时,分别侧重于教材中的一个方面,其中标有“*”号的习题的综合性较强,可供学有余力的学生选择。实验时也可根据具体情况做适当调整。虽然可能由于课时和机时限制等原因而不能在实验课时内全部得到安排,但还是建议学生能将其中的每个实验都能认真做一遍,因为这些实验都是学习本课程所必需的。学生在做实验之前应仔细阅读本实验指导书,初步掌握实验的基本要求和实验方法。在实验过程中,学生应该有意识的培养自己调试程序的能力,积累发现问题、解决问题的经验,灵活主动的学习。对于分析运行结果的实验习题,上机前先进行用人工分析,写出运行结果,与上机调试得到的结果进行对照,如有差异,分析其原因。对于程序编制的实验习题,上机前应考虑出较成熟的编程思路,有意识提供出多种方案,以灵活运用所学知识和技巧。如此,可充分利用有限的上机时间,有目的的增强调试程序、解决各种实际问题的能力。每个实验完成后需要写实验报告。 实验0 VisualC++集成开发环境1.实验目的要求(1)熟悉和掌握VisualC++的集成开发环境(简称为IDE)的部分功能。(2)熟悉和掌握建立控制台应用程序(3)掌握用IDE编辑、编译和运行简单程序的基本过程。(4)掌握程序调试的基本方法,包括程序断点的设置与去除,程序的跟踪以及运行期间变量数值的观察。2.实验内容(1)了解VisualC++可视化集成开发环境VisualC++是微软公司推出的目前使用极为广泛的基于Windows平台的可视化集成开发环境,它和VisualBasic、VisualFoxpro、VisualJ++等其它软件构成了VisualStudio(又名DeveloperStudio)程序设计软件包。DeveloperStudio是一个通用的应用程序集成开发环境,包含了一个文本编辑器、资源编辑器、工程编译工具、一个增量连接器、源代码浏览器、集成调试工具,以及一套联机文档。使用DeveloperStudio,可以完成创建、调试、修改应用程序等的各种操作。VisualC++分为学习版、专业版和企业版。VC提供了一种控制台操作方式,初学者使用它应该从这里开始。Win32控制台程序(Win32ConsoleApplication)是一类Windows程序,它不使用复杂的图形用户界面,程序与用户交互时通过一个标准的正文窗口,通过几个标准的输入输出流(I/OStreams)进行。下面我们将对使用VC编写简单的控制台程序作一个最初步的介绍。这里的介绍不包含C++运行环境(尤其是Windows环境)下进行开发的内容,有关这方面的内容请参阅相应开发手册。另外,VisualC++包含丰富的函数库和类库,学生在设计程序时可以使用有关的内容,这方面的内容也请自行参阅相应的开发指南类书籍。实验操作步骤如下:安装VisualC++:运行VisualStudio软件中的setup.exe程序,选择安装VisualC++6.0,然后按照安装程序的指导完成安装过程。启动VisualC++:安装完成后,在开始菜单的程序选单中有MicrosoftVisualStudio6.0图标,其中又有MicrosoftVisualC++6.0即可运行(也可在Window桌面上建立一个快捷方式,以后可双击运行)。VisualC++6.0开发环境见图0-1。建立控制台工程:进入VisualC++环境后,选择菜单“File|New”,在弹出的对话框中单击上方的选项卡“Projects”,选择“Win32ConsoleApplication”工程类型,在“Projectname”一栏中填写工程名例如MyFirst,在“Location”一栏中填写工程路径(目录)例如:D:MyProjectMyFirst,见图0-2,然后按“OK”继续。 图0-1启动MircosoftVisualC++6.0图0-2创建控制台工程屏幕上出现如图0-3所示的Win32ConsoleApplication—Step1of1对话框后,选择“Anemptyproject”项,然后按Finish按钮继续, 图0-3Win32ConsoleApplication—Step1of1对话框出现如图0-4所示的NewProjectInformation对话框后,按OK按钮完成工程创建。图0-4NewProjectInformation对话框 编辑C++程序:选择菜单“Project|AddtoProject|New”,为工程添加新的C++源文件。如图0-5所示。图0-5选择菜单为工程添加新源文件图0-6加入新的C++SourceFile 在出现如图0-6所示的对话框后,选择“File”选项卡,选定“C++SourceFile”项,在“FileName”栏填入新添加的源文件名,如MyFirst.cpp,“Location”一栏指定文件路径,按按钮“OK”完成C++源程序的系统新建操作,如图0-6所示。在文件编辑区输入源程序,存盘,如图0-7所示。图0-7编辑MyFirst.cpp源程序编译源程序:选择Build|Build菜单(F7为快捷键),系统将会在Output窗口给出所有的错误信息和警告信息。当所有错误修正之后,系统将会生成扩展名为.exe的可执行文件。对于Output窗口给出的错误信息,双击可以使输入焦点跳转到引起错误的源代码处以进行修改。执行程序:选择Build|Execute菜单项(Ctrl+F5为快捷键),执行程序,将会出现一个DOS窗口,按照程序输入要求正确输入数据后,程序即正确执行。如图0-8所示。调试程序:在编写较长的程序时,能够一次成功而不含有任何错误决非易事,这需要进行长期大量的练习。编写的程序若已没有编译错误,可以成功运行。对于程序中的错误,VC提供了易用且有效的调试手段。在工具栏上单击鼠标右键,在弹出的菜单中选中“Debug”项。在程序调试状态下,可以进行单步执行调试程序。其中,单步跟踪进入子函数(StepInto,F11),每按一次F11键,程序执行一条无法再进行分解的程序行;单步跟踪跳过子函数(StepOver,F10),每按一次F10键,程序执行一行;Watch窗口可以显示变量名及其当前值,在单步执行的过程中,可以在Watch窗口中加入所需观察的变量,辅助加以进行监视,随时了解变量当前的情况;同时,为方便较大规模程序的跟踪,可以设置断点(F9为快捷键),断点处所在的程序行的左侧会出现一个红色圆点。选择Build|StartDebug|Go时,程序执行到断点处程序将暂停执行,可方便用户进行变量观察。取消断点只需在代码处再次按F9即可。还有运行至当前函数的末尾(StepOut)等都是很有效的调试工具,这里不再做一一介绍。 图0-8程序运行结果 图0-9MSDN 有关联机帮助:VisualC++6.0提供了详细的帮助信息,用户通过选择集成开发环境中的“Help” 菜单下的“Contents”命令就可以进入帮助系统。在源文件编辑器中把光标定位在一个需要查询的单词处,然后按〈F1〉键也可以进入VisualC++6.0的帮助系统。如图0-9所示。用户要使用帮助必须安装MSDN。用户通过VisualC++6.0的帮助系统可以获得几乎所有的VisualC++6.0的技术信息,这也是VisualC++作为一个非常友好的开发环境所具有的一个特色。3.分析与思考通过创建项目文件的实验,总结一下创建一个控制台应用项目的一般方法和经验。除了已经介绍过的调试方法,可以尝试集成开发环境提供的其它功能。实验一面向过程的简单程序设计1.实验目的要求(1)使用C++语言编写简单的计算机程序,掌握C++程序从编辑、编译到运行的全过程,初步了解C++程序的特点。(2)掌握C++语言的数据类型(包括对各种数据类型变量的定义、初始化、赋值等)、运算符和表达式的使用。(3)掌握赋值语句的使用。(4)掌握数据的输入输出方法。2.实验内容(1)设计简单程序,分别计算下列表达式,式中变量由键盘输入,输出表达式的值。<1><2><3>sinX+cosX+tan-1X<4>ex+y+ex-y<5>log10(1+)<6>+(其中表示取不大于a的最大整数)。解:<1>#includeusingnamespacestd;intmain(){floatx;floata,b,c,d;cout<<"entera,b,c,d"<>a>>b>>c>>d;cout<<"enterx"<>x;cout<<"result"<#include#includeusingnamespacestd;intmain(){floatx;floatsum;cout<<"enterx"<>x;sum=1+1/(x+1/(x+1));cout<#include#includeusingnamespacestd;intmain(){floatx,y;cout<<"enterx"<>x;y=sin(x)+cos(x)+pow(tan(x),-1);cout<#include#includeusingnamespacestd;intmain(){floatx,y;cout<<"enterx,y"<>x>>y;cout<#include#includeusingnamespacestd;intmain(){floatx;cout<<"enterx"<>x;cout<#include#includeusingnamespacestd;intmain(){doublea,b;cout<<"entera,b"<>a>>b;cout<#includevoidmain(){charch;cin>>ch;ch=(ch>=’A’&&ch<=’Z’)?(ch+32):ch;ch=(ch>=’a’&&ch<=’z’)?(ch–32):ch;cout<#includevoidmain(){intm;floatx;boolbi,br;cout<<"nintm=";cin>>m;bi=m>1000;cout<<"nfloatx=";cin>>x;br=x<=1e3;cout<#includevoidmain(){intn;cin>>n;if(n++<10)cout<根据随机从键盘输入的圆半径值,求圆的周长和半径并输出。<2>读入三个整数a、b、c,交换它们中的数,使a存放b的值,b存放c的值,c存放a的值。<3>对任意输入的四位整数,分别求出其各位数字,并按从后到前的顺序依次输出。例如,输入为1234时,输出结果为4,3,2,1。解:<1>#includeusingnamespacestd;/*constfloatPAI=3.14159;intmain(){floatr;cout<<"输入园的半径"<>r;cout<<"半径为"<#includeusingnamespacestd;intmain(){floata,b,c;floattemp;cout<<"依次输入a,b,c"<>a>>b>>c;cout<<"a="<#includeusingnamespacestd;intmain(){intn;cout<<"输入一个四位数的整数"<>n;for(inti=1;i<=3;i++){cout<usingnamespacestd;intmain(){floatn;cout<<"输入的小于1的并且只有3位尾数的实数"<>n;cout<<""";cout<#includevoidmain(){intm,n;m=1000;n=850;cout<<“n(“<n){m=m–n;cout<<‘(‘<#includevoidmain(){intm,n,k;m=1000;n=45;cout<<“n(“<=n){m=m–n; k=k+1;}cout<#includevoidmain(){inti;for(i=1;i<=5;i++){if(i%2)cout<<‘*’;elsecontinue;cout<<‘#’;}cout<<“$n”;}解:*8992*8992*8992$功能:for循环中当i为奇数时,输出*,不是就继续执行<4>#includevoidmain(){inta=1,b=10;do{b-=a;a++;}while(b--<=0);cout<<“a=”<求解下面函数的值。ex+yx<0,y<0z=ln(x+y)1≤x+y〈10log10|x+y|+1其它情况<2>编程求解下列各计算式:1)S==1+2+3+…+1002)S==1!+2!+…+7!3)   S=1×2+3×4+5×6+…+39×404)   Y=X-+-+…+(-1)n+1+…的值,精确到10-6。<3>打印下面图形。1131135311357531135797531…………………13……21………31<4>编程产生出1到10以内的所有数对并输出,其中i>j。<5>编程求出10000以内的所有符合如下条件的数:其高位数字小于低位数字。如12,238,3578等。但21,548不符合条件。<6>求任一整数N的标准分解式,即素数因子之积。例如16=2*2*2*2,15=3*5。解:<1>#include#includeusingnamespacestd;intmain(){intx,y;floatz;cout<<"enterx,y"<>x>>y;if(x<0&&y<0)z=exp(x+y);elseif(1<=(x+y)&&(x+y)<10)z=log(x+y);elsez=log10(abs(x+y)+1);cout<1)#includeusingnamespacestd;intmain(){intn=100;intsum=0;for(inti=1;i<=n;i++)sum+=i;cout<usingnamespacestd;intmain(){intn=7;intsum=0;for(inti=1;i<=n;i++){ints=1;for(intj=1;j<=i;j++)s*=j;sum+=s;}cout<<"1!+2!+…+7!="<usingnamespacestd;intmain(){intsum=0;for(inti=1;i<=39;i+=2)sum+=i*(i+1);cout<<"1×2+3×4+5×6+…+39×40="<#includeusingnamespacestd;floatf(intx,intn){ints=1;for(inti=1;i<=n;i++)s*=i;returnpow(x,n)/s;}intmain(){floatx,y=0;cout<<"enterx"<>x;for(inti=1;i+=2;){y+=pow(-1,i+1)*f(x,i);if(f(x,i)<1e-6)break;}cout<#include#include#includeintmain(){for(inti=1;i<=11;i++){for(intj=1;j<=11-i;j++)cout<<"";for(j=1;j<=2*i-1;j++)cout<#includeusingnamespacestd;intmain(){for(inti=1;i<=10;i++)for(intj=1;j";cout<#includeusingnamespacestd;intmain() {for(inti=1;i<=10000;i++){inta=i%10,b,n=i;do{n/=10;b=n%10;if(b>=a)break;a=b;}while(n!=0);if(n==0)cout<#includeusingnamespacestd;intmain(){intn;cin>>n;cout<编程求出数列的所有升或降的最大子序列。如下面数列的解为如下:1,20,30,12,3,5,7,4,6,100,11,8(1,20,30),(30,12,3),(3,5,7),(7,4),(4,6,100),(100,11,8)。*<2>编程求12100的末三位数。解:<1>#includeusingnamespacestd;constintnum=12; intmain(){staticintn=2;inta,b;cin>>a;cin>>b;while(1){cout<<"("<>b;n++;}if(n==num){cout<<")";break;}cout<<"),(";cout<b){cout<<","<>b;n++;}if(n==num){cout<<")";break;}cout<<")";}}<2>#includeusingnamespacestd;intmain(){inta=1;for(inti=1;i<=100;i++){a=a*12;a=a%1000;}cout<#include#defineN10voidmain(){inta[N];ints,i,j,t;for(i=0;i=0&&t>a[j]){a[j+1]=a[j];j--;}a[j+1]=t;}for(i=0;i#include#includevoidmain(){chara[20]=”TER”,b[20]=”COMP”;inti=0;strcat(a,b);while(a[i++]!=’’)b[i]=a[i];cout<#includevoidmain(){inti=0,base,n,j,num[20];cin>>n>>base;do{i++;num[i]=n%base;n=n/base;}while(n!=0);for(j=i;j>=1;j--)cout<编程产生下列数组,并输出。 ⑴一维数组1)(149162536496481100)2)(13610152128364555)  3) (123581321345589)⑵二维数组1)1234562)123.....n-10234560234.....01345601345.....12456012................560123n-101.....n-3n-2601234012.....n-2n-13)1234564)ABCDEF212345BCEHLQ321234CDFIMR432123DEGJNS543212EFHKOT654321<2>编程实现数组的排序:将有15个元素的整型数组按从小到大的次序排序。<3>编程求一组整数的最大公因子和最小公倍数。<4>随机输入一组数组元素值,利用题<2>使一个数组有序。然后随机输入一个数,用折半查找法在数组中查找,如在数组中,则输出元素在数组中的位置;如不在,则输出提示。<5>将两个字符串连接起来,不要用strcat。解:<1>(1)1)#includeusingnamespacestd;constintn=10;intmain(){inta[n];for(inti=0;iusingnamespacestd;intmain(){inti=1,a[10];a[0]=1;for(i=1;i<10;i++)a[i]=a[i-1]+i+1; for(i=0;i<10;i++)cout<usingnamespacestd;constintn=10;intmain(){inta[n];a[0]=1;a[1]=2;for(inti=2;iusingnamespacestd;constintn=6;intmain(){inta[n][n];for(inti=0;iusingnamespacestd;intmain(){intn;cout<<"输入n"<>n;int**a=newint*[n];for(inti=0;i#includeusingnamespacestd;constintn=6;intmain(){inta[n][n];for(inti=0;iusingnamespacestd;constintrow=5;constintcol=6;intmain(){chara[row][col];for(inti=0;i#includeusingnamespacestd;constintn=15;intmain(){inta[n];cout<<"输入15个整数"<>a[i];intt,j;for(i=0;i=0&&t#includeusingnamespacestd;intmain(){intp,q,k,p1,q1;cout<<"enterthenumberpqplease!"<>p>>q;if(p#includeusingnamespacestd;constintn=10;intmain(){cout<<"10,21,54,2,3,53,1,5,122,8"<=0&&t>num;while(low<=high){mid=(low+high)/2;if(num==a[mid])break;elseif(num#includeintmain(){charstring1[80],string2[40];inti=0,j=0;cout<<"输入字符串string1:n";cin>>string1;cout<<"输入字符串string2:n";cin>>string2;while(string1[i]!=""){i++;}while(string2[j]!=""){string1[i++]=string2[j++];}string1[i]="";cout<<"串联后的字符串为:"<用数组存储数据,实现筛选法求素数问题的求解。要求求出2到1000之间的所有素数。 注意:筛选法求出2~N间的所有素数的方法是:首先将这些数全部放入一个数组中,然后重复下面的操作直到数组为空为止:a.找出其中的最小数K,则K一定是一个素数,因此可输出。b.从数组中删除K及其所有倍数。<2>判断一个二维数组是否有“鞍点”,即该位置上的元素在该行上最大,在该列上最小。如有,输出其行列号和值;若无,给出提示。(数组元素的值用scanf输入)<3>编写程序将一个16进制数转换为十进制。任意进制如何转换为十进制?<4>本实验内容(1)—<4>习题所完成的功能是否有不完备之处?若有,请完备这个程序。解:<1>#includeusingnamespacestd;constintmax=10000;intmain(){inta[max];intn=2,j,i;for(i=0;i<=1000;i++)a[i]=1;while(n<1000){j=n;do{j+=n;a[j]=0;}while(j<=1000);n++;while(a[n]==0)n++;}for(i=2;i<=1000;i++)if(a[i])cout<#include#includeconstintrow=3;constintcol=3;intmain(){inti=0,j=0,d;intb,c,count=0;inta[row][col];for(i=0;i#include#includeusingnamespacestd;intmain(){charc[16]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};intn,count=0;charr[100];ints=0;cin>>r;while(r[count]!="")count++;for(inti=0;i没有数组倒置功能#includeusingnamespacestd;voidmain(){inta[3][3];inti,j,t;for(i=0;i<3;i++)for(j=0;j<3;j++)cin>>a[i][j];for(i=0;i<3;i++){for(j=0;j#includeinthcf(intu,intv){inta,b,t,r;if(u>v){t=u;u=v;v=t;}a=u;b=v;while((r=b%a)!=0){b=a;a=r;} return(a);}intlcd(intu,intv,inth){return(u*v/h);}voidmain(){intu,v,h,l;cin>>u>>v;h=hcf(u,v);cout<<“hcf=”<#includelongfib(intg){switch(g){case0:return0;case1:case2:return1;}return(fib(g–1)+fib(g–2));}voidmain(){longk; k=fib(7);cout<<“k=”<#includeintk=1;voidmain(){inti=4;intfun(int);fun(i);cout<<“(1)“<#include#includevoidsubp(){staticintx=0,y=0;/*问题(1)*/inta,b; a=x–y;b=x+y;cout<求方程ax2+bx+c=0的根,用三个函数分别求b2-4ac大于0、等于0和小于0时的根,并输出结果。从主函数输入a、b、c的值。<2>用函数实现将一个以字符串形式表示的十六进制数转换为一个十进制整数。例如,输入”A2”转换为162。<3>编写一个将十进制整数转换为十六进制字符串的函数。<4>编写出判断一个整数是否为素数的函数,并求出在2000以内的有十个以上的所有连续的非素数组。解:<1>#include;#include;usingnamespacestd;voidqiugen(doublea,doubleb,doublec){doubleresult;doubled;d=b*b-4*a*c;if(d<0){cout<<"该方程无解!n";}if(d==0){result=-b/(2*a); cout<<"该方程有只有一个根,为"<0){d=sqrt(d);result=(-b+d)/(2*a);cout<<"该方程有两个根,分别为"<>a>>b>>c;qiugen(a,b,c);}<2>#include#includeusingnamespacestd;intmain(){charc[16]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};intn,count=0;charr[100];ints=0;cin>>r;while(r[count]!="")count++;for(inti=0;i#includeusingnamespacestd;intmain(){charc[16]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};charr[100],i=0;intn;cout<<"输入一个十进制数"<>n;while(n>0){r[i]=n%16;i++;n/=16;}cout<<"转化成16进制后"<=0;j--)cout<#include"iostream"#include"math.h"usingnamespacestd;intPrime(intn){inti,k=(int)sqrt(n)+1;for(i=2;i=9){SUM++;cout<=-1;j--)cout<1解:(1)#include;#include;usingnamespacestd;voidqiugen(doublea,doubleb,doublec){doubleresult;doubled;d=b*b-4*a*c;if(d<0){cout<<"该方程无解!n";}if(d==0){result=-b/(2*a);cout<<"该方程有只有一个根,为"<0){d=sqrt(d);result=(-b+d)/(2*a);cout<<"该方程有两个根,分别为"<>a>>b>>c;if(a==0&&b==0&&c==0)cout<<"错误,不存在"<usingnamespacestd;intHn(intx=0,intn=0){intresult;if(n==0){result=1;}if(n==1){result=2*x;}if(n>1){result=2*x*Hn(x,n-1)-2*(n-1)*Hn(x,n-2);}returnresult;}voidmain(){intx,n;cin>>x>>n;cout<#includesub(intx,inty,int*z){*z=y–x;}voidmain(){inta,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);cout<#include#includevoidmain(){intstre(char[]);charstr[10],*p=str;gets(p);cout<。该正后,输入1234,输出4(2)编写程序实现下列问题的求解。〈1〉 输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串,按由小到大的顺序输出。〈1〉将一个3*3的矩阵转置,用一个函数实现。在主函数中用scanf输入以下矩阵元素:{2,4,6,8,10,12,14,16,18}。将数组名作为函数参数。函数调用后在主函数中输出已转置的矩阵。〈2〉自己写一个strcmp函数,实现两个字符串的比较。两个字符串s1,s2由main函数输入,strcmp函数的返回值也在main函数中输出。〈3〉动态链表的每个结点包括一个整数和一个后继指针。分别编写过程完成如下操作:(1)从键盘输入数据建立链表,并按数据的输入顺序建立链表。(2)依次打印其中各结点的数据。(3)*按与链表结点相反的次序打印各结点的值。(4)逐个释放所有结点的存储单元。解:<1>#includeusingnamespacestd;voidturn(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}voidmain(){inta,b,c;int*p1,*p2,*p3;cout<<"Pleaseinputa,bandc:n";cin>>a>>b>>c;cout<b){turn(p1,p2);}if(a>c){turn(p1,p3);}if(b>c){turn(p2,p3);}cout<#includeusingnamespacestd;voids(inta[]){printf("转置后n");printf("%d%d%dn%d%d%dn%d%d%dn",a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);}intmain(){inta[9];printf("输入9个整数n");scanf("%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8]);printf("转置前n");printf("%d%d%dn%d%d%dn%d%d%dn",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);s(a); return0;}<3>#include#includeusingnamespacestd;intstcmp(strings1,strings2){inti=0;while(s1[i]!=NULL&&s2[i]!=NULL){if(s1[i]>s2[i]){return1;break;}if(s1[i]==s2[i]){return0;break;}if(s1[i]>string1;cin>>string2;a=stcmp(string1,string2);cout<用数组处理的区别。(2)用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。N和各整数在主函数中输入。最后在主函数中输出。 实验六结构和联合类型以及编译预处理1.实验目的要求(1)掌握结构类型变量、联合类型变量的定义和使用,以及两者在内存中分配空间时的区别。(2)掌握结构类型数组的概念和使用。(3)*掌握链表的概念,初步学会对链表进行查找、插入、删除、排序等操作。(4)掌握宏定义、文件包含、条件编译的方法。2.实验内容(1)阅读下面程序,写出其运行结果。<1>#includeunionpw{inti;charch[2];}a;voidmain(){a.ch[0]=13;a.ch[1]=0;cout<<“size=”<#include#defineLETTER0voidmain(){charstr[20]=”CLanguage”,c;inti=0;while((c=str[i])!=’’){i++; #ifLETTERif(c>=’a’&&c<=’z’)c=c–32;#elseif(c>=’A’&&c<=’Z’)c=c+32;#endifcout<#definePI3.1415926;#defineAREA(r)PI*r*r;intmain(){doubleradius,s;cout<<"Entertheradiusofacircle:";cin>>radius;s=AREA(radius);cout<<"radius="<constfloatPi=3.1415.926;inlinefloatarea(constfloatr){returnPi*r*r;}intmain(){doubleradius,s; cout<<"Entertheradiusofacircle:";cin>>radius;s=area(radius);cout<<"radius="<在某系的成绩登记册中,每个班最多有40个学生,每份成绩表中的成绩信息包括:学号(9位字符),姓名(8位字符),成绩(百分制),备注(20位字符)。设计程序以处理一个班级的成绩信息,包括输入、输出、查询(给定分数以上或以下的学生信息)、按分数排序等。<2>*建立一个链表,存储上题所需数据,并实现相同功能。<3>定义一个带参数的宏,是两个参数的值互相交换。在主函数中输入来个数作为使用宏的参数,输出交换后的两个值。(说明:在程序主函数使用宏时,只能用两个参数,如swap(a,b),不能用三个参数)3.分析与思考在本实验内容(3)-<1>习题中,若要求成绩部分不仅可以是百分数,而且也可能是五分制(优、良、中、及格和不及格),应如何存储数据以及处理?实验七类与对象1.实验目的要求(1)掌握类的定义和实现。(2)掌握对象创建及使用的基本方法。2.实验内容(1)下面程序定义了一个以hours,minutes和seconds作为数据成员的Time类。设计了成员函数将两个Time对象相加(即时间相加),并进行相应的检查,查看增加的分钟数及秒数是否大于59。如果秒数大于59,则分钟数向前递增1。类似地,如果分钟数大于59,则小时数向前增1。#includeclassTime {private:inthours,minutes,seconds;public:voidget_time(){cin>>hours>>minutes>>seconds;}voiddisplay_time(){cout<=60){seconds-=60;minutes++;}if(minutes>=60){minutes-=60;hours++;}}};voidmain(){Timeone,two,three;cout<<"nEnterthefirsttime(hoursminutesseconds):";one.get_time();cout<<"nEnterthesecondtime(hoursminutesseconds):";two.get_time();three.add_time(one,two);cout<<"theresultis:"<>year>>month>>day;Datemydate(year,month,day);int&myyear=mydate.GetYear();int&mymonth=mydate.GetMonth();int&myday=mydate.GetDay();cout<>year>>month>>day;Datemydate(year,month,day);intmyyear=mydate.GetYear();intmymonth=mydate.GetMonth();intmyday=mydate.GetDay();cout<classvehicle{protected:intwheels;doubleweight;public:voidinitialize(intwhls,doublewght);intget_wheels(){returnwheels;}doubleget_weight(){returnweight;}doublewheel_loading(){returnweight/wheels;}};classcar:publicvehicle{private:intpassenger_load;public:voidinitialize(intwhls,doublewght,intpeople=4);intpassengers(){returnpassenger_load;}};classtruck:publicvehicle{private:intpassenger_load;doublepayload;public:voidinit_truck(intnumber=2,doublemax_load=24000.0);doubleefficiency();intpassengers(){returnpassenger_load;}}; voidvehicle::initialize(intwhls,doublewght){wheels=whls;weight=wght;}voidcar::initialize(intwhls,doublewght,intpeople){wheels=whls;weight=wght;passenger_load=people;}voidtruck::init_truck(intnumber,doublemax_load){passenger_load=number;payload=max_load;}doubletruck::efficiency(){returnpayload/(payload+weight);}voidmain(){vehiclebicycle;bicycle.initialize(2,25);cout<<"thebicyclehas"<#includegraduateteacher#includeclassperson{protected:charname[20];in-service_graduateintbirth_year;public:person(char*na,intyear){strcpy(name,na);birth_year=year;}intcal_age(intthis_year){returnthis_year-birth_year;}};classgraduate:publicperson{protected:intgrade;charspecialty[20];public:graduate(char*na,inty,intg,char*spec):person(na,y){grade=g;strcpy(specialty,spec); }voiddisplay(intthis_year){cout<<"graduateagegradespecialtyn";cout<#include//enumbool{false,true};structelement{//定义链表中的结点结构intval;element*next;};classlist{//定义链表类element*elems;public:list(){elems=0;}~list();virtualboolinsert(int);//此虚函数在派生类中可重新定义virtualbooldeletes(int);//此虚函数在派生类中可重新定义boolcontain(int);voidprint();};classset:publiclist{//将集合类set定义为链表类list的派生类intcard;public:set(){card=0;}boolinsert(int);//重定义此函数booldeletes(int);//重定义此函数};list::~list()//list类得析构函数定义,循环释放各元素所占的存储{element*tmp=elems;for(element*elem=elems;elem!=0;){tmp=elem;elem=elem->next;deletetmp;}}boollist::insert(intval)//定义list类中插入元素的成员函数 {element*elem=newelement;//为新元素分配存储if(elem!=0){elem->val=val;//将新元素插入到链表头elem->next=elems;elems=elem;returntrue;}elsereturnfalse;}boollist::deletes(intval)//定义list类中删除元素的成员函数{if(elems==0)returnfalse;//若表为空,返回falseelement*tmp=elems;if(elems->val==val){//若待删除的元素为表头元素elems=elems->next;deletetmp;returntrue;}elsefor(element*elem=elems;elem->next!=0;elem=elem->next)if(elem->next->val==val){//循环查找待删除元素tmp=elem->next;elem->next=tmp->next;deletetmp;returntrue;}returnfalse;}boollist::contain(intval){//判元素val在链表中是否存在if(elems==0)returnfalse;if(elems->val==val)returntrue;elsefor(element*elem=elems;elem->next!=0;elem=elem->next)if(elem->next->val==val)returntrue;returnfalse;}voidlist::print()//输出链表中各元素{ if(elems==0)return;for(element*elem=elems;elem!=0;elem=elem->next)cout<val<<"";cout<insert(30);ptr->insert(40);ptr->insert(543);ptr->insert(40);ptr->print();ptr=&set1;ptr->insert(23);ptr->insert(672);ptr->insert(456);ptr->insert(23);ptr->print();getch();return1;}[基本要求]l阅读程序,根据题意要求在处填上合适的内容完成程序。 l上机录入、调试上面程序。l运行程序,设计测试数据,观察运行结果是否正确且满足题意要求。解:(1)(contain(val))?0:list::insert(val)(2)--card;满足题意要求3.分析与思考在以上list类中设计并实现一个从链表头取一个节点(取出后该结点删除,下一个结点作为头结点)并返回节点值(整数值)的成员函数。在集合类中增加求集合并、交、差的成员函数。实验十运算符重载1.实验目的要求(1)掌握运算符重载的定义及实现。(2)掌握具有运算符重载的应用。2.实验内容(1)将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的。因为用户在创建对象时传递的二进制数,可能是以整数形式给出,也可能是以数字串形式给出,系统应该都能接受。另外有一个类型转换函数int(),用来将类类型向整型转换。程序中的两个重载运算符“+”,“-”,用来完成两个二进制数之间的加减运算。#include"iostream.h"#include"string.h"#include"conio.h"classbinary{//定义二进制类charbits[16];//二进制字模数组public:binary(char*);//字符串参数构造函数binary(int);//整型参数构造函数friendbinaryoperator+(binary,binary);//重载“+”friendbinaryoperator-(binary,binary);//重载“-”operatorint();//类类型转换函数voidprint();};binary::binary(char*num) {intisrc=strlen(num)-1;//字符串长度-1为最低位intidest=15;while(isrc>=0&&idest>=0)bits[idest--]=(num[isrc--]=="0"?"0":"1");//逐位赋值while(idest>=0)bits[idest--]="0";//空高位值0}binary::binary(intnum){for(inti=15;i>=0;i--){bits[i]=((1));//求余数num>>=1;//移位,相当于整除2}}binaryoperator+(binaryn1,binaryn2){unsignedcarry=0;unsignedvalue;binaryres="0";for(inti=15;i>=0;i--){value=(n1.bits[i]=="0"?0:1)+((2))+carry;res.bits[i]=(value%2==0?"0":"1");carry=value>>1;}returnres;}binaryoperator-(binaryn1,binaryn2){unsignedborrow=0;intvalue;binaryres="0";for(inti=15;i>=0;i--){value=(n1.bits[i]=="0"?0:1)-(n2.bits[i]=="0"?0:1)+borrow;res.bits[i]=(value==-1||value==1?"1":"0");borrow=(value==-1||borrow!=0&&(value==0||value==1)?1:0);}returnres;}binary::operatorint(){ unsignedvalue=0;for(inti=0;i<=15;i++)value=((3))+(bits[i]=="0"?0:1);returnvalue;}voidbinary::print(){charstr[17];strncpy(str,bits,16);str[16]="";cout<>(输入)等函数。3.分析与思考实验内容(1)中: 将+、-运算符定义为binary类的成员函数。重载运算符~、&、|分别将二进制数按位取反、数按位与及按位或。解:1、#include#include#includeusingnamespacestd;classbinary{charbits[16];public:binary(char*);binary(int);binaryoperator+(binary);binaryoperator-(binary);operatorint();voidprint();};binary::binary(char*num){intisrc=strlen(num)-1;intidest=15;while(isrc>=0&&idest>=0)bits[idest--]=(num[isrc--]=="0"?"0":"1");while(idest>=0)bits[idest--]="0";}binary::binary(intnum){for(inti=15;i>=0;i--){bits[i]=(num%2==0?"0":"1");num>>=1;}}binarybinary::operator+(binaryn){unsignedcarry=0;unsignedvalue;binaryres="0";for(inti=15;i>=0;i--){value=(bits[i]=="0"?0:1)+(n.bits[i]=="0"?0:1)+carry;res.bits[i]=(value%2==0?"0":"1");carry=value>>1;}returnres;}binarybinary::operator-(binaryn){unsignedborrow=0;intvalue;binaryres="0";for(inti=15;i>=0;i--){value=(bits[i]=="0"?0:1)-(n.bits[i]=="0"?0:1)+borrow;res.bits[i]=(value==-1||value==1?"1":"0");borrow=(value==-1||borrow!=0&&(value==0||value==1)?1:0);}returnres;}binary::operatorint(){unsignedvalue=0;for(inti=0;i<=15;i++)value=(value*2)+(bits[i]=="0"?0:1);returnvalue; }voidbinary::print(){charstr[17];strncpy(str,bits,16);str[16]="";cout<#include#includeusingnamespacestd;classbinary{charbits[16];public:binary(char*);binary(int);friendbinaryoperator+(binary,binary);friendbinaryoperator-(binary,binary);friendbinaryoperator|(binary,binary);friendbinaryoperator&(binary,binary);binaryoperator~();operatorint();voidprint();};binary::binary(char*num){intisrc=strlen(num)-1;intidest=15;while(isrc>=0&&idest>=0)bits[idest--]=(num[isrc--]=="0"?"0":"1");while(idest>=0)bits[idest--]="0";}binary::binary(intnum){for(inti=15;i>=0;i--){bits[i]=(num%2==0?"0":"1");num>>=1;}}binaryoperator+(binaryn1,binaryn2){unsignedcarry=0;unsignedvalue;binaryres="0";for(inti=15;i>=0;i--){value=(n1.bits[i]=="0"?0:1)+(n2.bits[i]=="0"?0:1)+carry;res.bits[i]=(value%2==0?"0":"1");carry=value>>1;}returnres;}binaryoperator-(binaryn1,binaryn2){unsignedborrow=0;intvalue;binaryres="0";for(inti=15;i>=0;i--){ value=(n1.bits[i]=="0"?0:1)-(n2.bits[i]=="0"?0:1)+borrow;res.bits[i]=(value==-1||value==1?"1":"0");borrow=(value==-1||borrow!=0&&(value==0||value==1)?1:0);}returnres;}binaryoperator|(binaryn1,binaryn2){intvalue;binaryres="0";for(inti=15;i>=0;i--){value=(n1.bits[i]=="0"?0:1)+(n2.bits[i]=="0"?0:1);if(value==0)res.bits[i]="0";elseres.bits[i]="1";}returnres;}binaryoperator&(binaryn1,binaryn2){intvalue;binaryres="0";for(inti=15;i>=0;i--){value=(n1.bits[i]=="0"?0:1)+(n2.bits[i]=="0"?0:1);if(value==2)res.bits[i]="1";elseres.bits[i]="0";}returnres;}binarybinary::operator~(){inti;for(i=0;i<=15;i++){if(bits[i]=="0")bits[i]="1";elsebreak;}for(i=15;i>=0;i--){if(bits[i]=="1")bits[i]="0";elsebits[i]="1";}returnbits;}binary::operatorint(){unsignedvalue=0;for(inti=0;i<=15;i++)value=(value*2)+(bits[i]=="0"?0:1);returnvalue;}voidbinary::print(){charstr[17];strncpy(str,bits,16);str[16]="";cout<templatevoidswap()//辅助函数:交换x和y的值{Ttemp;temp=x;x=y;y=temp;}templatevoidbubblesort(Ta[],intn){inti,j;intindex;i=n-1;while(i>0){index=0;for(j=0;ja[j]){swap(a[j],a[j+1]);index=;}i=index; }}voidmain(){inti;intdata[]={1,4,5,2,3,12,14,13,8,19,36,11,9,15,7,34,23,6,10,21};cout<<"beforesort:"<templateclassStack{private:T*data;inttop,size;intIsEmpty(){return(top<=0)?1:0;}intIsFull(){return(top>=size)?1:0;}public:Stack(intn){data=newT[n];size=n;top=0;}~Stack(){delete[]data;}voidPush(Tx);TPop();}; templatevoidStack::Push(Tx){if(IsFull()){cout<<"stackoverflow.n";return;}*(data+top++)=x;return;}templateTStack::Pop(){if(IsEmpty()){cout<<"stackunderflow.n";return(-1);}return(*(data+--top));}[基本要求]l编写应用程序(主函数),创建不同类型的栈类对象,调试运行程序,观察运行结果是否正确且满足题意要求。解:intmain(){inti1,pop1;Stacka(10);for(i1=1;i1<=10;i1++){a.Push(i1);}pop1=a.Pop();cout<<"int类型的栈顶"<b(20);for(i2=1.00;i2<=20.00;i2++){b.Push(i2);}pop2=b.Pop();cout<<"float类型的栈顶"<#include#include#include#includeusingnamespacestd;structstudent{ stringno;stringname;intage;};classnocmp{stringno;public:nocmp(string&s){no=s;}booloperator()(student&s){______________________________}};classnamecmp{stringname;public:namecmp(string&s){name=s;}booloperator()(student&s){______________________________}};structdump{voidoperator()(student&s){cout<<"学号:"<&v){for_each(______________________________);}voidadd(vector&v){charch;strings; do{cin.get();studentstu;cout<<"学号:";getline(cin,stu.no,"n");cout<<"姓名:";getline(cin,stu.name,"n");cout<<"年龄:";cin>>stu.age;______________________________cout<<"要继续添加吗?按y键继续:";cin>>ch;}while(ch=="y");}voiddel(vector&v){stringno;cout<<"请输入要删除的学生的学号:";cin>>no;vector::iteratorp=______________________________;v.erase(p);}voidfind(vector&v){stringname,s;cin.get();cout<<"请输入要查找的学生的姓名:";getline(cin,name);inti=count_if(v.begin(),v.end(),namecmp(name));if(i==0)cout<<"查无此人"<::iteratorp;p=find_if(v.begin(),v.end(),namecmp(name));cout<<"学号:"<no<<"姓名:"<name<<"年龄:"<age<v;charch;ini();cin>>ch; while(ch!="q"&&ch!="Q"){switch(ch){case"1":add(v);break;case"2":del(v);break;case"3":find(v);break;case"4":display(v);break;case"q":exit(0);}ini();cin>>ch;}}[基本要求]·阅读上面程序,根据题意要求在处填上合适的内容完成程序。·上机录入、调试、运行上面程序。解:依次填入1)if(s.no==no){return1;}return0;2)if(s.name==name){return1;}return0;3)v.begin(),v.end(),dump()4)v.push_back(stu);5)find_if(v.begin(),v.end(),nocmp(no));3.分析与思考实验内容(1)中:对于如下定义的指针数组:char*strarr[]={“Fortran”,“Basic”,“pascal”,“C”,“C++”}程序中已定义的函数模板是否可用,若不可用,程序如何修改以达到对字符串数组的排序实验内容(3)中:·上面程序能否找到具有相同姓名的所有学生,如果不能,怎样修改才能符合要求。·给上面程序添加修改学生信息的功能。 实验十二异常处理1.实验目的要求(1)掌握异常处理的概念,理解异常处理的意义。(2)掌握异常处理的实现机制和方法。2.实验内容(1)下面程序显示了数学运算中除数为零时的异常处理过程。#includeusingstd::cout;usingstd::cin;usingstd::endl;#includeusingstd::exception;classDivideByZeroException:publicexception{public:DivideByZeroException();};DivideByZeroException::DivideByZeroException():exception(“attemptedtodividebyzero”){}doublequotient(intnumerator,intdenominator){if(denominator==0)throwDivideByZeroException();returnstatic_cast(numerator)/denominator;}intmain(){intnumber1;intnumber2;doubleresult;cout<<”Entertwointegers(end-of-filetoend):”;while(cin>>number1>>number2){try{result=quotient(number1,number2); cout<<”Thequotientis“<usingstd::cout;usingstd::cin;usingstd::endl;#include#includeusingstd::exception;usingstd::runtime_error;voidfunction3(){throwruntime_error(”runtime_errorinfunction3”); }voidfunction2(){function3();}voidfunction1(){function2();}voidthrowException(){try{cout<<”FunctionthrowExceptionthrowsanexceptionn”;throw;}catch(exception&caughtException){cout<<”ExceptionhandledinfunctionthrowException”<<”nfunctionthrowExceptionrethrowsexception”;;}cout<<”Thisisalsoshouldnotprintn”;}intmain(){try{cout<<”nmaininvokesfunctiontheowExceptionn”;throwException();cout<<”Thisshouldnotprintn”;}catch(&caughtException){cout<<”nnExceptionhandledinfunctionmainn”;}try{function1();}catch(runtime_error&error){cout<<”Exceptionoccurred:”<#include#includeconstintn=40;intline_out(ifstream&f)//从文件f中读一行字符并显示,返回此行字符的个数 {charch;intlen=0;while(f.get(ch)&&ch!="n"){cout<>filename1>>filename2;ifstreamf1(filename1),f2(filename2);while(!f1.eof()&&!f2.eof()){length=line_out(f1);if(length#definemax5usingnamespacestd;structstudent{intxuehao;charname[10];charsex;intage;}stu[max];chara;inti;voiddisplay();voidinit();voidchoice();voidsys(chara);voidaddf();voiddelf();voidinqf();voiddisplay(){cout<<"StudentManager"<>a;if(a=="A"||a=="D"||a=="I"||a=="Q")sys(a);else{cout<<"Error"<>j;if(j>k){cout<<"errornumber"<>stu[h].xuehao;for(g=0;g10000){cout<<"Errornumber!"<>stu[h].name;cout<<"inputtheNO"<>stu[h].sex;if(stu[h].sex!="f"&&stu[h].sex!="m"){stu[h].sex="";cout<<"Errorsex!"<>stu[h].age;if(stu[h].age<1||stu[h].age>100){stu[h].sex="";cout<<"Errorage!"<>d;if(d<1||d>10000){cout<<"Errornumber!"<>d;cout<10000){cout<<"Errornumber!"<