《《C++程序设计教程》实验报告.doc》由会员分享,可在线阅读,更多相关《《C++程序设计教程》实验报告.doc(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验1 C+概论(2学时)一、实验目的熟悉VC+的集成开发环境,学习运行一个C+程序的步骤。了解几种运算符的使用规则。掌握变量命名规则,学会变量的定义和使用。二、实验内容通过一个最简单的程序熟悉用VC+来调试Dos程序的步骤:使用Visual C+6.0对一个C+程序进行编辑、编译、连接和运行。#include void main()cout”I am a student”endl;上机要求步骤一:新建一个win32 Console Application的工程:打开VC+开发软件,从文件菜单中点击新建菜单项,出现如图1-1所示:在右上角的工程下输入该工程的名称,如 hello,并设置该工程所
2、保存的路径。最后点击确定。图1-1步骤二:当确定后会出现要你选择工程类型的对话框,如图所示:请选择一个空的工程,即第一个选项。步骤三:当单击确定后,工程建立完毕,接下来建立程序源文件,请再单击文件菜单下的新建,出现原先出现的对话框,请选择 “文件”选项卡中的c+ source file选项,并取名,如hello。步骤四: 当确定后,就进入了源代码的编辑窗口,如图所示:步骤五:编辑好开始设置的源代码后,就进入了编译和调试阶段,请按如图所示的第二个按钮,这个称作为构件,它的功能是先进行编译,同时如果编译成功的话自动建立EXE可执行文件,同时将可执行文件和编译和连接过程中的中间代码一起放置在debu
3、g文件夹中。步骤六:执行可执行文件,单击编译条上的第四个按钮,即惊叹号,对编译成功的程序进行执行。编写程序完成变量x和变量y值的交换,调试程序并观察运行结果。分析要交换变量x和变量y的值,需使用临时变量z才能在进行。一个完整的参考程序如下:#includevoid main()int x,y,z;/Acoutxy;cout输入的x=x y=y endl;z=x;x=y;y=z; cout输出的x=x y=y endl;上机要求在键盘上分别按如下格式输入两组数据:5,3(回车)5 3(回车)观察程序运行结果。将程序中的x,y,z命名为auto,break,case分析程序出错原因。只将程序A行x
4、改为大写X,运行程序观察程序运行结果。修改程序用条件运算符输出两个数中的较大数。编程序输入x、y和z的值,计算的值。分析表达式的值不一定为整数,故程序中变量的类型应采用实型。一个完整的参考程序如下:#includevoid main() float x,y,z,e,f ,w;/Acoutx,y,z= xyz;e= (x+1)*(y-1);/Bf=x+y;/Cw=e/f;/Dcoutw=wendl;上机要求输入x5.4,y3.1,z2.7,观察程序运行结果。将程序中A行改为“int x,y,z,e,f,w ;”,输入x5.4,y3.1,z2.7,观察程序运行结果。将程序中A行改为“float x
5、,y,z,w;”, B、C、D行改为“w=(x+1)*(y-1)/x+y;”,观察程序运行结果。编写程序。从键盘输入一个三位正整数,输出其逆转数。例如:输入861,输出为168。分析输入的三位数为整数,变量类型按整型进行处理。可采用求余数的方法计算各位上的数,然后逆序输出。一个完整的参考程序如下:#includevoid main()int n,i,j,k; coutn;i=n%10;/i存放个位数n=(n-i)/10;/去掉个位数 j=n%10;/j存放十位数n=(n-j)/10;/去掉十位数k=n;/k存放百位数n=i*100+j*10+k;cout逆转数为:nendl;上机要求修改程序使
6、其先取百位数,再取十位数,最后取个位数。给出下列程序的运行结果分析本例测试了不同数据类型之间的数据转换。#includevoid main()int a=32,b;double c=2.7,d;char e=D,f;b=a+c; /Ad=a+c; f=a+e;coutb=bendl;coutd=dendl;coutf=fendl; /B coutb+d+fendl; /C上机要求修改程序A行,对b的输出值四舍五入。修改程序B行,按整型值输出f。分析C行数据的值的类型。注意:本例A行提示如下警告:“conversion from double to int, possible loss of d
7、ata.”属于正常。三、实验要求1.结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2.整理上机步骤,总结经验和体会。3.完成实验报告和上交程序。实验2 C+简单程序设计(4学时)实验2.1简单数据类型使用(1学时)一、实验目的熟悉和理解C语言中的类型简单数据(整型、实型、字符型)、运算、表达式;掌握常见格式控制字符对输出结果的控制作用;能利用学习的数据类型,编制简单的C程序;初步学习调试方法。二、实验内容1. 输入并运行下列程序#includevoid main() int x=6, y ;cout x= xendl ; y = +x ; coutx= x y =yendl ;
8、x=6; y=x+; coutx= x y =yendl ; x=6;y = x-; coutx=x y = yendl ; x=6;y = -x; coutx=x y = yendl ;(2) #includevoid main() int a=20, b=6;a+=a; coutaendl;a=20; a-=a; coutaendl;a=20; a*=a; coutaendl;a=20; a/=b; coutaendl;a=20; a%=b; coutaendl;a=20; a=a-b; coutaendl;a=10; b=4; a+=a*=a-=a/b; coutaendl;(3) #i
9、ncludevoid main() int a=3,b=4,c=5,x,y;x=(a+bc&b=c);coutxendl;x=(a|b+c&b-c);coutxendl; 写出一个程序测试整型、字符型数据表示,并输出以验证是否正确。#includemain()int x=010,y=10,z=0x10; /* 整型数据表示 */char c1=M,c2=x4d,c3=115,c4=77,c; /* 字符型数据表示 */ /* 整型数据的输出 */printf(x=%o,y=%d,z=%xn,x,y,z);/* 数据以原进制输出,注意是否有前导0或0x */printf(x=%d,y=%d,z=
10、%dn,x,y,z); /* 数据以10进制输出,换算到10进制,结果对吗? */ /* 字符型数据的输出 */printf(c1=%c,c2=%x,c3=%o,c4=%dn,c1,c2,c3,c4); /* 数据以原进制输出,注意是否有前导0或0x */printf(c1=%c,c2=%c,c3=%c,c4=%cn,c1,c2,c3,c4); /* 结果都是什么字符?,也就是说字符可以自由的表示成几种形式? */printf(c1=%d,c2=%d,c3=%d,c4=%dn,c1,c2,c3,c4); /* 看看这些字符的10进制ASCII码,哦,ASCII码一样,同一种字符 */ /* 字
11、符型数据参与算术运算 */c=c1+32; /* 字符怎么参加了数学运算,哦,是字符对应的ASCII码整数/* 参与数学运算;结果还是一个整数另外一个字符的ASCII码 */printf(c=%c,c=%dn,c,c); /* 看看这个字符是什么?哇,M+32=m了,看看ASCII码表,原来如此! */常见预定义的转义字符对输出的控制作用。main() int a,b,c; a=5,b=6,c=7; printf(n); /*打印一个标尺以便检查输出结果 */ printf(%dnt%d %dn %d %dtb%dn,a,b,c,a,b,c); /* 打印1个字符串 */ printf(c:a
12、.txt); /* 打印一个文件名 */ printf(n);三、实验要求1.结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2.整理上机步骤,总结经验和体会。3.完成实验报告和上交程序。实验2.2 控制结构(1学时)一、实验目的 理解并掌握程序的顺序结构程序设计理解并掌握程序的分支结构(if语句、switch语句)程序设计理解并掌握程序的循环结构(for语句、while语句、do-while语句)程序设计掌握循环语句的嵌套形式学习过程化程序设计方法进一步学习掌握查找与修改编译错误的方法二、实验内容编写程序任意输入一个三位,将其反向输出。如输入123,输出321。有一个函数如下:
13、 x (x5) y= x+6 (5=x=15)输入x的值,计算出相应的y值。编写一个程序,输入年、月,打印出该年份该月的天数。编程按分段统计学生成绩,输入为负数时结束。要求按90100、8089、7079、6069、60以下五档分别统计各分数段人数(用if语句和switch语句编写程序)。用dowhile, while, for 三种循环语句求出1+3+5+.+101的和,输出结果。编程输出如下图形:* * * * 7.输入一行字符,分别统计其中的英文大写字母,小写字母、数字字符和其他字符。三、实验要求1.结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2.整理上机步骤,总结经验
14、和体会。3.完成实验报告和上交程序。实验2.3 数组(1学时)一、实验目的 掌握一维数组和二维数组定义的规则;掌握数组的初始化方法及数组元素的引用;熟练掌握一维数组和二维数组的使用;掌握字符数组与字符串的关系以及字符串变量的表示。二、实验内容编写一个程序,将20以内的偶数赋给数组a,然后输出此数组各元素。先定义一个含有30个整型元素的数组,依次赋予从2开始的偶数,然后按顺序每五个数的平均值放在另一个数组中,并要求按每行6个数输出结果。定义一个二维数组存储五位学生五科考试的成绩,编写程序分别取出二维数组里的元素值,经过累加之后列出总成绩,计算并输出每个同学的平均成绩,格式如下:第1个学生的总分为
15、:* 平均分为:*第2个学生的总分为:* 平均分为:*第3个学生的总分为:* 平均分为:*第4个学生的总分为:* 平均分为:*第5个学生的总分为:* 平均分为:*输入两个字符串,比较这两个字符串是否相同,并输出比较的结果。编写一个程序,由用户输入一个含有5个单词的英文句子,按照用户的要求输出句中的第i个单词。三、实验要求1.结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2.整理上机步骤,总结经验和体会。3.完成实验报告和上交程序。实验2.4 结构体与编译预处理(1学时)一、实验目的 掌握结构的概念和结构类型的定义;掌握结构变量的定义和初始化;掌握结构体类型的概念和应用;掌握结构
16、成员的访问、结构赋值的含义。学会利用Visual C+自我发现预处理问题的方法;掌握宏定义、调用、展开。二、实验内容有5个学生,每个学生的数据包括学号、姓名、三门课成绩,从键盘输入5个学生数据,要求打印出三门课总平均成绩,以及最高分和学生的数据(包括学号、姓名、三门课成绩、平均分)。将上题按照平均分由大到小排序并按大到小排序后输出每位学生的学号、姓名、三门课成绩和平均分。定义一个带参数宏,实现两个参数的值交换。要求写出测试主函数,主函数中使用此宏完成两个数交换,输出结果。定义一个带参数宏,判断一个字符是否为字母字符,若是,结果为1,否则结果为0。要求写出测试主函数使用此宏,输出结果。三、实验要
17、求1.结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2.整理上机步骤,总结经验和体会。3.完成实验报告和上交程序。实验3 函数与作用域(2学时)一、实验目的 掌握函数声明、定义和使用的方法;掌握形式参数与实在参数之间的对应关系;掌握函数调用时,形参、实参之间的“值传递”和“地址传递”的区别;掌握全局变量、局部变量、静态变量的使用方法。二、实验内容定义两个函数swap1和swap2,目的是实现两个整数的次序交换,其中swap1的参数是传递值参数,swap2的参数是传址参数,在程序中分别调用这两个函数,其输出结果如下所示: 初始值 :x=1,y=2 调用swap1后的结果:x=1
18、y=2 调用swap2后的结果:x=2 y=1编写一个函数,用来计算从键盘上输入的整数的阶乘。编写函数判断一个数是否是素数,在主程序中实现输入、输出。编写一个程序,设计一个函数可以计算并返回输入的4个数的平均值。给定某个年、月、日的值,例如,2006年7月11日,计算出这一天属于该年的第几天,要求写出计算闰年的函数和计算日期的函数。三、实验要求1.结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2.整理上机步骤,总结经验和体会。3.完成实验报告和上交程序。实验4指针和引用(4学时)一、 实验目的1熟练掌握指针、地址、指针类型、void指针、空指针、引用等概念;2 熟练掌握指针变量
19、的定义和初始化、指针的间接访问、指针的加减运算和指针表达式;3学会使用数组的指针和指向数组的指针变量;4学会使用字符串的指针和指向字符串的指针变量;5学习用指针和引用给函数传递参数的方法。二、 实验内容1用户输入任意一个字符串和字符c,寻找输入串中第一个c字符出现的位置(若有的话),并输出从c字符开始的子串以及c字符在输入串中的下标号;若输入串中不出现c字符的话,输出“no match found”。2按一定的规则可以将一个字符串经加密转换为一个新的串,例如加密的简单方法是当为ay的小写字母时用后一个字母代替前一个字母,其中z变换为a,其他字符时不变。例如:原串为 This is a secr
20、et code!加密后的串为 Tijt jt b tfdsfu dpef!编写一个程序对输入串加密,输出加密前和加密后的串,再将加密后的字符串解密输出。3输入10个整数,将其中最小数与第一个数交换,把最大数与最后一个交换。写三个函数分别完成:(1)输入10个整数;(2)进行处理;(3)输出10个数,用指针法处理。4用指针变量设计一通用函数,该函数查找实型数组中最大和最小元素并输出相应元素和下标。5编写一个函数,其原型为:void Index(int a, int n,int & sub),其功能是,在大小为n的数组a中,查找某个数sub,若找到,将对应数组元素的下标赋给sub,若没找到,将-1
21、赋给sub,在主调函数中通过判断sub的值来判断数组中是否有该数。在这里,sub是引用类型的参数,但起返回值的作用。三、 实验步骤1编程实现:定义一个返回值为指针的函数char *search(char ch,char *str),返回串str中第一个字符ch出现的位置,在主函数中从键盘得到字符串,并调用search()函数实现字符的查找。参考程序名:C41.cpp2编程实现:构造函数secret(char* s),对给定字符串s根据加密规则进行加密,直到碰到字符串结束标志;构造函数desecret(char* s),对已加密的字符串s解密,解密规则和加密规则相反,遇字符结束标志结束解密,在主
22、函数中调用这二个函数,运行,进行实例验证。参考程序名:C42.cpp3编程实现:构造输入函数void input(int *a,int n)获得10个数,然后构造函数void invert(int *a,int n),用循环查找最大,最小元素所在存储单元,注意指针变量和指针所指向内容的区别,构造输出函数void output(int *a,int n),输出10个数 在主函数中调用各函数,完成实验。参考程序名:C43.cpp。4编程实现:定义数组长度,用循环遍历数组找出数组元素最大值和最小值,同时用变量记录其下标,用Debug调试程序,查看运行过程。参考程序名:C44.cpp5编程实现:构造子
23、函数Index(b,n,sub),b为输入的数组,n为数组长度,sub是要查找的数,注意sub是引用类参数,在Index函数中用将sub赋值给一个局部变量k,同时将-1赋值给sub, 用循环遍历长度为n的数组,将每个数组元素和k比较,如果找到则将对应数组下标赋值给sub,否则返回-1。在主函数中定义数组,调用Index(b,n,sub)函数,最后根据sub的值输出相应的的结果。参考程序名:C45.cpp四、 实验要求1 结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2整理上机步骤,总结经验和体会。3. 完成实验报告和上交源程序。/C41.cpp#include#includec
24、har *search(char ch,char *str);void main(void) char s8,*p,c; coutInput a string :endl; gets(s); coutc; p=search(c,s);/调用search,返回串s中第一个字符c出现的位置,即指向字符的指针) if (p) /s中含有字符c时,返回原结果指针p值为非0 coutpendl; coutp-sendl; else /s中不含有c coutno match foundendl;char *search(char ch,char *str)/寻找str串中第一个字符ch出现的位置(地址值,
25、即指向字符的指针)并返回int i=0;while (ch!=stri&stri!=0)i+;if (ch=stri)return (&stri);else return(NULL);/C42.cpp#includeusing namespace std;void secret(char* s)while(*s!=0)if(*s96&*s97&*s123) *s=*s-1;else if(*s=97) *s=z;/注意else不可少,否则当字符为b时,先变为a,再变为zs+;int main()char st=This is a secret code!;coutstendl;secret(s
26、t);coutstendl;desecret(st);coutstendl;return 0;/C43.cpp#includevoid input(int *a,int n) int *p; for(p=a; p*p;void output(int *a,int n) int *p; for(p=a; pa+n; p+) cout*p; coutn;void invert(int *a,int n) int *p1,*p2,*p; int temp; p1=p2=a; /* p1指向最大元素所在存储单元,p2指向最小元素所在存储单元 */ for(p=a+1; p*p1)p1=p; else
27、if(*p*p2)p2=p; if(p2!=a) /* *a*p2交换第一个元素和最小元素 */ temp=*p2; *p2=*a; *a=temp; if(p!=a+n-1) /* *(a+n-1)*p1交换最后一个元素和最大元素 */ temp=*p1; *p1=*(a+n-1); *(a+n-1)=temp;void main() int x10; int n=10; input(x,n); output(x,n); invert(x,n); output(x,n);/C44.cpp#include#define N 5/数组长度void Search()float aN,*p,max,
28、min;int MaxPosition,MinPosition,i;for(i=0;iai;min=max=a0;for(p=a;pmax) max=*p;MaxPosition=p-a;for(p=a;pa+N;p+)/从前往后依次查找数组最小值并记录最小值的元素下标if (*pmin) min=*p;MinPosition=p-a;cout the max elemetn is max the suffix is MaxPositionn;/输出最大值元素和其下标cout the min elemetn is min the suffix is MinPositionn;/输出最小值元素和
29、其下标/C45.cpp#includeconst int m=5;void Index(int a, int n,int & sub);int main()int b25=2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97;int n=25,k,sub;for(k=0;km;k+)if(k=0) cout输入小于100的正整数:endl;else cout再输入小于100的正整数:sub;Index(b,n,sub);if(sub!=-1)cout对应元素下标为:subendl;else cout未找到。
30、endl;return 0;void Index(int a, int n,int & sub)int i,k=sub;sub=-1;for(i=0;in;i+)if(ai=k)sub=i;break;实验5 类和对象(4学时)一、 实验目的1 掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;2 掌握类对象的定义;3 理解类的成员的访问控制的含义,公有、私有和保护成员的区别;4 掌握构造函数和析构函数的含义与作用、定义方式和执行过程,能够根据要求正确定义和重载构造函数;5 掌握友元函数的含义,友元函数和成员函数的区别; 6. 学习静态数据成员和静态成员函数的使用。二、 实
31、验内容1 编程:建立一个分数类。分数类的数据成员包括分子和分母,操作包括约分、通分、比较、加、减、乘、除、求倒数、显示和输入。分数类定义如下:class fractionint above; /分子int below; /分母void reduction(); /约分void makeCommond(fraction); /通分public:fraction(int=0,int=1); /构造函数fraction add(fraction); /两分数相加fraction sub(fraction); /本分数减去实参分数fraction mul(fraction); /两分数相乘fracti
32、on div(fraction); /本分数除以实参分数fraction reciprocal(); /求倒数bool epual(fraction); /等于运算bool greaterThan(fraction); /大于运算bool lessThan(fraction); /小于运算void display(); /显示分数void input(); /输入分数;要求完成所有成员函数并进行检验。2. 定义一个长方形类,并且在程序中创建一个该类的对象,体现出构造函数、析构函数的调用、执行过程和重载构造函数的使用。3.设计一个矩阵类matrix(矩阵用二维数组实现),有分配空间和对矩阵附值的
33、功能。要求:(1)类外定义一个函数mul(),实现两矩阵的相乘, 要求分别用传值调用、引用调用和传址调用三种方式实现。(2)在matrix类中定义一个静态数据成员,记录当前的所有matrix对象的数量。(3)定义一个友元函数实现矩阵转置功能。三、 实验步骤1编程实现各成员函数:约分、通分、比较、加、减、乘、除、求倒数、显示和输入,并在主函数中定义具体的分数对象并调用各成员函数。参考程序名:C51.cpp2编程实现:新建类Rcet,向Rect类中添加数据成员和成员函数,并完善成员函数的功能。如设计一个Area_int()函数,计算边长为整型的长方形的面积;设计一个Area_double()函数,
34、计算边长为double的长方形的面积,重载构造函数。一种构造函数用整型变量记录长方形的长和宽,另一种构造函数用double型记录。体现对象的构造和析构过程。例如,在构造函数中用cout“I am the constructor!”endl;在析构函数中输出cout”I am the destructor”endl。在main()函数中定义两个Rect类的对象,一个对象用实例实现(就象定义普通的变量一样),(另一个对象用指针实现。并用不同的参数,以调用不同的构造函数体现构造函数的重载。参考程序名:C52.cpp3. 编程实现:声明一个矩阵matrix类,在构造函数中根据参数创建数据成员:一个二维
35、数组。提示:用构造函数记录二维数组的大小(unsigned int x,unsigned int y)。类中实际定义的二维数组的数据成员是一个指针(二级指针),int *pmatrix。在构造函数中根据传送的参数为这个二维数组分配空间:pmatrix=new intxy。设计成员函数setvalue(unsigned int x,unsigned int y, int value),完成对数组的附值功能。设计成员函数input(),从输入流(键盘)读入数据,给矩阵元素附值(通过调用setvalue()函数实现)设计成员函数print(),完成对数组的输出。以三种方式实现向mul()函数传递参数
36、,并返回矩阵相乘的结果。要求相乘前要测试两个矩阵是否可以相乘。类中定义静态数据成员objectaliveNO,记录当前共有几个matrix类的对象。在类中定义友元函数rotate()实现矩阵的转置功能。参考程序名:C53.cpp。四、 实验要求1. 结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2. 整理上机步骤,总结经验和体会。3. 完成实验报告和上交源程序。/C51.cpp/编程:建立一个分数类。分数类的数据成员包括分子和分母,操作包括显示、输入、约分、通分、比较、加、减、乘、除、求相反数。#include#include#includeclass fractionint
37、above; /分子int below; /分母void reduction(); /约分void makeCommond(fraction&); /通分public:fraction(int a=0,int b=1) /构造函数above=a;below=b;fraction add(fraction); /两分数相加fraction sub(fraction); /本分数减去实参分数fraction mul(fraction); /两分数相乘fraction div(fraction); /本分数除以实参分数fraction reciprocal(); /求倒数bool equal(fraction); /等于运算bool greaterThan(fraction); /大于运算bool lessThan(fraction); /小于运算void display(); /显示分数void input(); /输入分数;void fraction:reduction() /约分先求最大公约数int a,b,temp;if(below0)above=-above;below=-below;a=abs(above);b=abs(below);
限制150内