《程序设计基础C++》实验教程2.docx
《《程序设计基础C++》实验教程2.docx》由会员分享,可在线阅读,更多相关《《程序设计基础C++》实验教程2.docx(74页珍藏版)》请在冰点文库上搜索。
《程序设计基础C++》实验教程2
《程序设计基础》实验教程
对于从事计算机行业的人员来说,设计能力是最主要的基本功之一。
入门课程《程序设计基础》的学习效果将直接关系到编程能力的掌握和提高以及后续课程的学习。
然而,实践证明,许多初学者在学习这门课程时的效果并不理想。
对初学者来说,如何学好本课程?
首先,要理解教材中所给出的语法描述,并学会按语法规定去编写指定问题的求解程序。
经过这样的多次反复,初学者就可以找到编程的感觉。
除了要学好理论知识外,更重要的一点是要到计算机上去验证,因为只有实践才是检验真理的标准。
只有通过到计算机上去实践,才能发现学习中存在的问题,巩固所学知识,加强解决实际问题的能力,增强信心。
因此,《程序设计基础》课程的上机实验是本课程必不可少的实践环节,必须加以重视。
本课程上机实验的目的是使学生熟悉用高级语言解决实际问题的全过程,加深对语言的理解,得到程序设计基本方法和能力的训练。
在独立编写程序、独立上机调试程序的同时,真正能用高级语言这个工具去解决实际问题,对计算机学科的相关知识有所了解,从而为后续课程的学习奠定良好的基础。
本实验指导所用环境是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:
\MyProject\MyFirst,见图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的最大整数)。
(2)阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能。
<1>
#include
voidmain()
{
charch;
cin>>ch;
ch=(ch>=’A’&&ch<=’Z’)?
(ch+32):
ch;
ch=(ch>=’a’&&ch<=’z’)?
(ch–32):
ch;
cout<}
<2>
#include
voidmain()
{
intm;
floatx;
boolbi,br;
cout<<"\nintm=";
cin>>m;
bi=m>1000;
cout<<"\nfloatx=";
cin>>x;
br=x<=1e3;
cout<}
分别输入10040,20003000,10001000,2000300,1004000运行。
<3>
#include
voidmain()
{
intn;
cin>>n;
if(n++<10)
cout<else
cout<}
(3)编写程序实现下列问题的求解。
<1>根据随机从键盘输入的圆半径值,求圆的周长和半径并输出。
<2>读入三个整数a、b、c,交换它们中的数,使a存放b的值,b存放c的值,c存放a的值。
<3>对任意输入的四位整数,分别求出其各位数字,并按从后到前的顺序依次输出。
例如,输入为1234时,输出结果为4,3,2,1。
3.思考题
*对任意输入的小于1的并且只有3位尾数的实数,分别求出其各位数字并输出。
要求输出的各数字之间要空2格。
例如,输入为0.368时,输出结果为‘0368’。
实验二控制结构程序设计
1.实验目的要求
(1)理解基本的解题技巧,掌握用自顶向下、逐步求精的过程设计算法。
(2)熟练掌握if/else语句和switch语句的使用。
(3)熟练掌握while语句、do/while语句和for语句的使用以及区别。
(4)掌握break和continue程序控制语句的使用。
2.实验内容
(1)阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能。
<1>
#include
voidmain()
{
intm,n;
m=1000;
n=850;
cout<<“\n(“<while(m!
=n){
while(m>n){
m=m–n;
cout<<‘(‘<}
while(mn=n–m;
cout<<‘(‘<}
}
cout<<“\n”<}
<2>
#include
voidmain()
{
intm,n,k;
m=1000;
n=45;
cout<<“\n(“<’<k=0;
while(m>=n){
m=m–n;
k=k+1;
}
cout<}
<3>
#include
voidmain()
{
inti;
for(i=1;i<=5;i++){
if(i%2)
cout<<‘*’;
else
continue;
cout<<‘#’;
}
cout<<“$\n”;
}
<4>
#include
voidmain()
{
inta=1,b=10;
do{
b-=a;
a++;
}while(b--<=0);
cout<<“a=”<}
(2)编写程序实现下列问题的求解。
<1>求解下面函数的值。
ex+yx<0,y<0
z=ln(x+y)1≤x+y〈10
log10|x+y|+1其它情况
<2>编程求解下列各计算式:
1)S=
=1+2+3+…+100
2)S=
=1!
+2!
+…+7!
3) S=1×2+3×4+5×6+…+39×40
4) Y=X-
+
-
+…+(-1)n+1
+…的值,精确到10-6。
<3>打印下面图形。
1
131
13531
1357531
135797531
…………………
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。
3.思考题
*<1>编程求出数列的所有升或降的最大子序列。
如下面数列的解为如下:
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.实验目的要求
(1)掌握一维数组和二维数组的定义、初始化赋值、元素引用的方法。
(2)初步了解数组名与地址的关系。
(3)掌握字符数组和字符串函数的使用。
(4)掌握与数组有关的算法(特别是排序和查找算法)。
2.实验内容
(1)阅读下列程序,写出其运行结果,并指出其功能。
<1>
#include
#defineN10
voidmain()
{
inta[N];
ints,i,j,t;
for(i=0;iif(i%2)a[i]=i*i;
elsea[i]=100-(i/2)*(i/2);
}
for(i=0;icout<cout<s=0;
for(i=0;is=s+a[i];
cout<<“sumofa=”<
for(i=0;it=a[i];
j=i-1;
while(j>=0&&t>a[j]){
a[j+1]=a[j];
j--;
}
a[j+1]=t;
}
for(i=0;icout<cout<}
<2>
#include
#include
voidmain()
{
chara[20]=”TER”,b[20]=”COMP”;
inti=0;
strcat(a,b);
while(a[i++]!
=’\0’)b[i]=a[i];
cout<
}
<3>
#include
voidmain()
{
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<}
(2)编写程序实现下列问题的求解。
<1>编程产生下列数组,并输出。
⑴一维数组
1)(149162536496481100)
2)(13610152128364555)
3) (123581321345589)
⑵二维数组
1)1234562)123.....n-10
234560234.....01
345601345.....12
456012................
560123n-101.....n-3n-2
601234012.....n-2n-1
3)1234564)ABCDEF
212345BCEHLQ
321234CDFIMR
432123DEGJNS
543212EFHKOT
654321
<2>编程实现数组的排序:
将有15个元素的整型数组按从小到大的次序排序。
<3>编程求一组整数的最大公因子和最小公倍数。
<4>随机输入一组数组元素值,利用题<2>使一个数组有序。
然后随机输入一个数,用折半查找法在数组中查找,如在数组中,则输出元素在数组中的位置;如不在,则输出提示。
<5>将两个字符串连接起来,不要用strcat。
3.思考题
<1>用数组存储数据,实现筛选法求素数问题的求解。
要求求出2到1000之间的所有素数。
注意:
筛选法求出2~N间的所有素数的方法是:
首先将这些数全部放入一个数组中,然后重复下面的操作直到数组为空为止:
a.找出其中的最小数K,则K一定是一个素数,因此可输出。
b.从数组中删除K及其所有倍数。
<2>判断一个二维数组是否有“鞍点”,即该位置上的元素在该行上最大,在该列上最小。
如有,输出其行列号和值;若无,给出提示。
(数组元素的值用scanf输入)
<3>编写程序将一个16进制数转换为十进制。
任意进制如何转换为十进制?
<4>本实验内容
(1)—<4>习题所完成的功能是否有不完备之处?
若有,请完备这个程序。
实验四函数
1.实验目的要求
(1)理解并掌握如何模块化的用函数来构建程序。
(2)掌握定义函数的方法,了解函数的重载方法,了解内联函数的机制。
(3)掌握函数间传递信息的机制。
(4)掌握函数的嵌套调用(和递归调用)的方法。
(5)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。
2.实验内容
(1)阅读下列程序,写出其运行结果,并指出其功能。
<1>
#include
inthcf(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=”<l=lcd(u,v,h);
cout<<“lcd=”<}
输入:
48,32
<2>
#include
longfib(intg)
{
switch(g)
{
case0:
return0;
case1:
case2:
return1;
}
return(fib(g–1)+fib(g–2));
}
voidma