《实验2——面向对象程序设计.docx》由会员分享,可在线阅读,更多相关《实验2——面向对象程序设计.docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验2面向对象程序设计 实验2 数组、指针和结构体(2学时) 1.一、实验目的 1.掌握一维数组和二维数组的定义和使用方法。 2.掌握指针变量的定义和使用方法。 3.掌握结构体类型的定义和结构体变量的使用方法。 4.学习使用VC+编程环境提供的程序的单步调试功能。 1.二、实验任务 1.编写程序,创建一个包含10个元素的整型数组,在程序运行时由用户从键盘输入数组元素 的值。然后使用选择排序法对数组元素按从小到大的顺序进行排序。选择排序法的算法思路是:对包含n个元素的数组进行排序时,首先通过比较,选择出数组中最大的元素,将它和数组末尾的元素(如果数组元素下标从0开始,则是第n-1个元素;如果数组
2、元素下标从1开始,则是第n个元素)相交换,也就是说,要把最大的元素选择出来并放到整个数组的末尾;然后重复上述的选择过程,从前n-1个元素中找出最大的元素,并把它放到前n-1个元素的末尾;这样的选择过程重复进行应n-1次,每次选择都找出一个最大的元素放到未排序列的末尾。这样数组就成为了一个按从小到达顺序排列的有序数组。要求分两行输出排序前和排序后的数组。 2.编写程序,创建一个4行4列的二维整型数组,按行序优先将1到16的整数值存放在该数 组中。按矩阵的形式在屏幕上输出该数组。计算并输出数组主对角线元素的和;然后将该矩阵转置,并将转置后的矩阵存放在原来的二维数组中。所谓转置就是将由主对角线分割的
3、上三角矩阵中的元素与下三角矩阵中的相应元素互换。 3.编写程序,定义2个整型指针,并使它们指向2个整形变量,利用指针分别输出两个变量的 值和它们的内存地址;使用指针交换两个变量的值,再次输出变量的值和它们的内存地址; 交换两个指针的值,观察程序的运行结果 4.编写程序,动态创建一个字符数组,从键盘输入一个字符串并把它保存到字符数组中。找出 字符串中所有的小写字母字符,将它们转换成相应的大写字母字符,输出转换后的字符串。 要求使用字符指针操作字符数组。 5.编写程序,定义一个表示学生考试成绩信息的结构数据类型,在程序运行过程中,根据用户 输入的学生数目,动态创建一个这种结构数据类型的变量数组,并
4、从键盘输入每个学生的相关信息,然后根据某门课程的成绩,按从大到小的顺序对该数组中的元素进行排序。分别输出排序前的数组内容和排序后的数组内容。 6.学习VC+IDE提供的程序单步调试技术。 1.三、实验步骤 1.设计VC+控制台应用程序exp2_1,按照任务1的要求创建一个包含10个元素的整型数组, 并从键盘输入10个整数: int array10; for(int k=0; karrayk; 2.下面的二重循环对数组进行选择排序: for(int i=9; i0; i-) int max=arrayi; intmaxindex=i; for(int j=i-1; j=0;j-) if(max
5、max=arrayj; maxindex=j; if(maxindex!=i) arraymaxindex=arrayi; arrayi=max; 上边程序段中的外层for循环控制选择的次数,排序包含n个元素的数组需要n-1次选择。内层for 循环在每次选择的过程中查找最大的元素。 3.设计一个VC+控制台应用程序exp2_2,实现任务2的要求。用二维数组存放的矩阵,其主 对角线元素的行下标和列下标相等。若假设所定义的整型二维数组为matrix,则可使用下面的程序来求出主对角线元素的和。 int sum=0; for(i=0;istrp; 执行上面的语句,如果用户从键盘输入的字符串是“Hell
6、o”,则编译器会自动将字符数组strp 中的元素strp5赋值为空字符0,使得字符数组strp可以表示一个字符串。 需要注意,如同上面第二条语句,使用标准输入流对象cin直接从键盘输入的字符串不包含空格,因为空格符和换行符都是字符串输入的结束标志。也就是说,如果输入的字符串中要包含空格,则不能使用上述的输入方式。输入流类istream的成员函数getline可以用来输入包含空格的字符串。关于getline函数的使用方法将在后面的实验中介绍。有兴趣的同学可以先做尝试。另外任务4的另一个主要目的是让同学们复习数组的动态创建技术和使用指针操作数组的编程技术。 8.创建VC+控制台程序exp2_5,首
7、先创建结构体类型StudentInfo表示学生信息,其中包含 学生姓名,学号,年龄,性别(可以用一个字符来表示),和某门课程的成绩。如下所示: structStudentInfo char name20; intnum; int age; char sex; int score; ; 根据任务5的要求,创建一个StudentInfo结构体类型的变量数组保存一组学生的相关信息,并从键盘依次输入每个学生的信息,然后根据学生的成绩,以从大到小的顺序对数组元素进行排序,要求输出排序前后的数组内容。 9.以下完成任务6的要求,学习VC+ IDE的程序调试功能。源程序中主要存在两种类型的错 误:语法错误和
8、逻辑错误。语法错误是指程序结构和语句中存在违背C+语法规则的错误,例如遗漏了语句之间的分号、标识符中出现了非法字符或使用了未定义的标识符等等。存在语法错误的源程序是无法通过编译的,C+编译器在编译源程序时,会识别其中全部的语法错误,并向程序员反馈相关的错误信息,程序员可以通过分析这些错误信息,找到出错的原因和出错的位置并对错误进行修改,然后再次编译源程序。不存在任何语法错误的源程序才能通过编译,从而生成由机器码组成的目标文件。逻辑错误是指程序的语义逻辑中存在错误,存在逻辑错误的源程序虽然可以通过编译并生成可运行的目标程序,但程序的运行结果却是错误的,或者是在程序的运行过程中出现实时异常。编译器
9、无法识别程序中逻辑错误,对于规模很小的程序,可以通过分析程序结构,找出可能存在错误的部分,并逐条检查其中的每条语句以发现其中存在的错误。但是,对于规模较大的程序,使用这种方法寻找逻辑错误是效率低下和不切合实际的。在这种情况下,可以使用各种调试技术对程序进行调试,以发现出错的原因。所谓调试是指寻找和排除程序中存在的逻辑错误的途径和方法。大多数的C+程序开发环境都为编程者提供了完备的调试工具。下面将介绍VC+开发环境为程序员提供的部分调试技术。 10.参考下面简单的程序,学习程序的单步执行功能。 #include using namespace std; void main() intsum,i;
10、 sum=0; for(i=1;i=10;i+) sum+=i; coutsumendl; 上面的程序计算并输出正整数1到10的和。 11.现在我们来学习VC+ IDE的单步调试技术。创建VC+控制台应用程序exp2_6,为程序添 加源文件exp2_6.cpp,并向该文件输入将上面的程序。如图2.1所示。 图2.1 12.如图2.1所示,语句sum=0;是程序的第一条执行语句,用鼠标单击该语句的左侧将光标定位 到这条语句处。选择菜单命令“Build”“StartDebug”“Run to Cursor”,或者使用快捷键“Ctrl+F10”进入单步调试状态。如图2.2所示。 图2.2 13.如图
11、2.2所示,进入单步调试状态后,会弹出一个悬浮的“Debug”菜单,在包含程序的工 作区的下面有两个窗体,左边的是Variables窗体,其中显示正在执行的函数中的变量信息,包括变量名和变量值。右边的是Watch窗体,它也可以在调试时查看程序中的变量或对象的值,并可以在该窗体中修改这些值。程序左边的小箭头指向将要执行的语句。 14.点击“Debug”窗体中的快捷按扭或直接按快捷键F10,开始程序的单步执行,在单步执行 过程中,没按一次快捷按钮或快捷键,程序就向前执行1条语句。小箭头始终指向当前将要执行的语句。当执行程序中的循环时,可以看到,小箭头也在循环体中上下移动。 15.在单步执行的过程中
12、,可以从左下的变量窗体中查看到变量的当前值。如图2.3所示。程序 正在执行循环体语句,当前循环控制变量i的值为2,而保存累加和的变量sum的值为3。 图2.3 16.也可以通过“Watch”窗体来观察和改变变量的值,方法是,在“Watch”窗体中的“Name” 栏中点击鼠标左键获取光标,从键盘输入想要查看的变量名,然后点击回车键,该变量的值就会出项在右边同一行的“Value”栏中。例如输入字母i,之后,该变量的当前值就会出现在右边的“Value” 栏中。再在下一行的“Name”栏中输入变量名sum,则该变量的当前值也会出现在右边同一行的“Value”栏中。如图2.4所示。 图2.4 17.如果想修改某个变量的值,则可以直接在“Value”栏的相应行中进行修改。 18.单步执行结束后,可以按“Debug”窗体中的按钮,或使用快捷键“Shift+F11”跳出调试状 态,转回到程序的编辑窗体。 1.四、实验要求 1、参加实验的学生独立完成所有的实验任务。 2、实验结束后,按时提交纸质实验报告。实验报告中应包括实验目的、实验任务、实 验步骤、实验结果和实验总结等内容。