《程序设计基础C++》实验教程文档格式.docx
《《程序设计基础C++》实验教程文档格式.docx》由会员分享,可在线阅读,更多相关《《程序设计基础C++》实验教程文档格式.docx(61页珍藏版)》请在冰豆网上搜索。
安装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所示的Win32ConsoleApplicationStep1of1对话框后,选择“Anemptyproject”项,然后按Finish按钮继续,图0-3Win32ConsoleApplicationStep1of1对话框出现如图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)设计简单程序,分别计算下列表达式,式中变量由键盘输入,输出表达式的值。
sinX+cosX+tan-1Xex+y+ex-ylog10(1+)+(其中表示取不大于a的最大整数)。
(2)阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能。
#includevoidmain()charch;
cinch;
ch=(ch=A&
ch=a&
ch=z)?
(ch32):
ch;
coutchendl;
#includevoidmain()intm;
floatx;
boolbi,br;
coutm;
bi=m1000;
coutx;
br=x=1e3;
coutbi,brendl;
分别输入10040,20003000,10001000,2000300,1004000运行。
#includevoidmain()intn;
cinn;
if(n+10)coutnendl;
elsecoutn-endl;
(3)编写程序实现下列问题的求解。
根据随机从键盘输入的圆半径值,求圆的周长和半径并输出。
读入三个整数a、b、c,交换它们中的数,使a存放b的值,b存放c的值,c存放a的值。
对任意输入的四位整数,分别求出其各位数字,并按从后到前的顺序依次输出。
例如,输入为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)阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能。
#includevoidmain()intm,n;
m=1000;
n=850;
cout“n(“m,nn)m=mn;
cout(m,n);
while(mn)n=nm;
cout“n”m;
#includevoidmain()intm,n,k;
n=45;
cout“n(“m:
n=n)m=mn;
k=k+1;
coutk“-”mendl;
#includevoidmain()inti;
for(i=1;
i=5;
i+)if(i%2)cout*;
elsecontinue;
cout#;
cout“$n”;
#includevoidmain()inta=1,b=10;
dob-=a;
a+;
while(b-=0);
cout“a=”a“b=”bendl;
(2)编写程序实现下列问题的求解。
求解下面函数的值。
ex+yx0,y0z=ln(x+y)1x+y10log10|x+y|+1其它情况编程求解下列各计算式:
1)2)!
3)4)Y=X(-1)n+1的值,精确到10-6。
打印下面图形。
1131135311357531135797531132131编程产生出1到10以内的所有数对并输出,其中ij。
编程求出10000以内的所有符合如下条件的数:
其高位数字小于低位数字。
如12,238,3578等。
但21,548不符合条件。
求任一整数N的标准分解式,即素数因子之积。
例如16=2*2*2*2,15=3*5。
3.分析与思考分析与思考*编程求出数列的所有升或降的最大子序列。
如下面数列的解为如下:
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)。
*编程求12100的末三位数。
实验三实验三数数组组1.实验目的要求实验目的要求
(1)掌握一维数组和二维数组的定义、初始化赋值、元素引用的方法。
(2)初步了解数组名与地址的关系。
(3)掌握字符数组和字符串函数的使用。
(4)掌握与数组有关的算法(特别是排序和查找算法)。
2.实验内容实验内容
(1)阅读下列程序,写出其运行结果,并指出其功能。
#include#defineN10voidmain()intaN;
ints,i,j,t;
for(i=0;
iN;
i+)if(i%2)ai=i*i;
elseai=100-(i/2)*(i/2);
i+)coutai;
coutendl;
s=0;
i+)s=s+ai;
cout“sumofa=”s;
i=0&
taj)aj+1=aj;
j-;
aj+1=t;
#include#includevoidmain()chara20=”TER”,b20=”COMP”;
inti=0;
strcat(a,b);
while(ai+!
=0)bi=ai;
coutb;
#includevoidmain()inti=0,base,n,j,num20;
cinnbase;
doi+;
numi=n%base;
n=n/base;
while(n!
=0);
for(j=i;
j=1;
j-)coutnumj;
编程产生下列数组,并输出。
一维数组1)(149162536496481100)2)(13610152128364555)3)(123581321345589)二维数组1)1234562)123.n-10234560234.01345601345.12456012.560123n-101.n-3n-2601234012.n-2n-13)1234564)ABCDEF212345BCEHLQ321234CDFIMR432123DEGJNS543212EFHKOT654321编程实现数组的排序:
将有15个元素的整型数组按从小到大的次序排序。
编程求一组整数的最大公因子和最小公倍数。
随机输入一组数组元素值,利用题使一个数组有序。
然后随机输入一个数,用折半查找法在数组中查找,如在数组中,则输出元素在数组中的位置;
如不在,则输出提示。
将两个字符串连接起来,不要用strcat。
3.分析与思考分析与思考用数组存储数据,实现筛选法求素数问题的求解。
要求求出2到1000之间的所有素数。
注意:
筛选法求出2N间的所有素数的方法是:
首先将这些数全部放入一个数组中,然后重复下面的操作直到数组为空为止:
a.找出其中的最小数K,则K一定是一个素数,因此可输出。
b.从数组中删除K及其所有倍数。
判断一个二维数组是否有“鞍点”,即该位置上的元素在该行上最大,在该列上最小。
如有,输出其行列号和值;
若无,给出提示。
(数组元素的值用scanf输入)编写程序将一个16进制数转换为十进制。
任意进制如何转换为十进制?
本实验内容
(1)习题所完成的功能是否有不完备之处?
若有,请完备这个程序。
实验四实验四函函数数1.实验目的要求实验目的要求
(1)理解并掌握如何模块化的用函数来构建程序。
(2)掌握定义函数的方法,了解函数的重载方法,了解内联函数的机制。
(3)掌握函数间传递信息的机制。
(4)掌握函数的嵌套调用(和递归调用)的方法。
(5)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。
#includeinthcf(intu,intv)inta,b,t,r;
if(uv)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;
cinuv;
h=hcf(u,v);
cout“hcf=”hendl;
l=lcd(u,v,h);
cout“lcd=”lendl;
输入:
48,32#includelongfib(intg)switch(g)case0:
return0;
case1:
case2:
return1;
return(fib(g1)+fib(g2);
voidmain()longk;
k=fib(7);
cout“k=”kendl;
#includeintk=1;
voidmain()inti=4;
intfun(int);
fun(i);
cout“
(1)“i,kendl;
fun(intm)m+=k;
k+=m;
chark=B;
cout“
(2)”char(k-A)endl;
cout“(3)”m,kendl;
#include#includevoidsubp()staticintx=0,y=0;
/*问题
(1)*/inta,b;
a=xy;
b=x+y;
coutsetw(5)asetw(5)bendl;
coutsetw(5)xsetw(5)yendl;
intx,y;
voidmain()inta=9,b=3;
x=ab;
y=a+b;
subp();
1)运行结果是:
2)如果问题
(1)处语句改为staticintx,y;
,运行结果会发生改变么?
为什么?
求方程ax2+bx+c=0的根,用三个函数分别求b2-4ac大于0、等于0和小于0时的根,并输出结果。
从主函数输入a、b、c的值。
用函数实现将一个以字符串形式表示的十六进制数转换为一个十进制整数。
例如,输入”A2”转换为162。
编写一个将十进制整数转换为十六进制字符串的函数。
编写出判断一个整数是否为素数的函数,并求出在2000以内的有十个以上的所有连续的非素数组。
3.分析与思考分析与思考
(1)本实验内容
(2)1中,是否考虑了程序的完备性?
考虑a、b、c等于零的各种情况,完备程序。
*
(2)用递归和递推两种形式编程求函数n(x)。
n(x)定义为:
0(x)=11(x)=2xn(x)=2xn-1(x)-2(n-1)n-2(x)n1实验五实验五指指针针1.实验目的要求实验目的要求
(1)掌握指针的概念,学会定义和使用指针变量。
(2)学会使用数组指针和指向数组的指针变量。
(3)学会使用字符串指针和指向字符串的指针变量。
(4)了解指向指针的指针的概念以及其使用方法。
(5)掌握指针、引用、数组做函数参数的传递机制。
(6)*学会使用指向函数的指针变量。
2.实验内容实验内容
(1)阅读下面程序,写出其运行结果。
#includesub(intx,inty,int*z)*z=yx;
voidmain()inta,b,c;
sub(10,5,&
a);
sub(7,a,&
b);
sub(a,b,&
c);
couta,b,cendl;
#include#includevoidmain()intstre(char);
charstr10,*p=str;
gets(p);
coutstre(p)endl;
intstre(charstr)intnum=0;
while(*(str+num)!
=0)num+;
return(num);
1输入三个整数,按由小到大的顺序输出,然后将程序改为:
输入三个字符串,按由小到大的顺序输出。
2将一个3*3的矩阵转置,用一个函数实现。
在主函数中用scanf输入以下矩阵元素:
2,4,6,8,10,12,14,16,18。
将数组名作为函数参数。
函数调用后在主函数中输出已转置的矩阵。
3自己写一个strcmp函数,实现两个字符串的比较。
两个字符串s1,s2由main函数输入,strcmp函数的返回值也在main函数中输出。
4动态链表的每个结点包括一个整数和一个后继指针。
分别编写过程完成如下操作:
(1)从键盘输入数据建立链表,并按数据的输入顺序建立链表。
(2)依次打印其中各结点的数据。
(3)*按与链表结点相反的次序打印各结点的值。
(4)逐个释放所有结点的存储单元。
3.分析与思考分析与思考
(1)自定义函数完成strcpy、strcat、strlen等字符串函数的功能,比较实验三中实验内容
(2)用数组处理的区别。
(2)用指向指针的指针的方法对n个整数排序并输出。
要求将排序单独写成一个函数。
N和各整数在主函数中输入。
最后在主函数中输出。
实验六实验六结构和联合类型以及编译预处理结构和联合类型以及编译预处理1.实验目的要求实验目的要求
(1)掌握结构类型变量、联合类型变量的定义和使用,以及两者在内存中分配空间时的区别。
(2)掌握结构类型数组的概念和使用。
(3)*掌握链表的概念,初步学会对链表进行查找、插入、删除、排序等操作。
(4)掌握宏定义、文件包含、条件编译的方法。
#includeunionpwinti;
charch2;
a;
voidmain()a.ch0=13;
a.ch1=0;
cout“size=”sizeof(a)n“a.i=”a.i;
#include#defineLETTER0voidmain()charstr20=”CLanguage”,c;
while(c=stri)!
=0)i+;
#ifLETTERif(c=a&
c=A&
c=Z)c=c+32;
#end