东北大学C++实验报告6
东北大学 c++实验报告 exercise6
Exercise 6 数组、指针与字符串班级:计算机1102班姓名:xxx学号:2011xxxx1实验目的(1)学习使用数组。
(2)学习字符串数据的组织和处理。
(3)学习标准C++库的使用。
(4)掌握指针的使用方法。
(5)练习通过Debug观察指针的内容及其所指的对象的内容(6)联系通过动态内存分配实现动态数组,并体会指针在其中的作用。
(7)分别使用字符数组和标准C++库练习处理字符串的方法。
2 实验要求(1)编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。
(2)使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。
(3)编程实现两字符串的连接。
要求使用字符数组保存字符串,不要使用系统函数。
(4)使用string类定义字符串对象,重新实现上一小题。
(5)定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。
Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。
实现并测试这个类。
(6)定义包含5个元素的对象数组,每个元素都是Employee类型的对象。
(7)(选做)修改实验4中的选做实验中的people(人员)类。
具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。
其中“出生日期”定义为一个“日期”类内嵌对象。
用成员函数实现对人员信息的录入和显示。
要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。
在测试程序中定义people类的对象数组,录入数据并显示。
3 程序代码及截图(1)矩阵转置1:代码:#include<iostream>using namespace std;void zhuanzhi(int array[3][3]);int main(){int array1[3][3];int i,j;cout<<"请输入一个3*3的矩阵,矩阵元素以空格分开:"<<endl;for(i=0;i<=2;i++){for(j=0;j<=2;j++){cin>>array1[i][j];}};cout<<"您所输入的矩阵为:"<<endl;for(j=0;j<=2;j++){ or(i=0;i<=2;i++){cout<<array1[j][i]<<ends;}cout<<endl;}zhuanzhi(array1);return 0;}void zhuanzhi(int array[3][3]){int i,j;int array2[3][3];for(i=0;i<=2;i++){for(j=0;j<=2;j++){array2[j][i]=array[i][j];}}cout<<"转置后的矩阵为:"<<endl;for(j=0;j<=2;j++){for(i=0;i<=2;i++){cout<<array2[j][i]<<ends;} cout<<endl;}}程序截图:(2)矩阵转置2:#include<iostream>using namespace std;void zhuanzhi(int *b){int i,j,t;for(i=0;i<3;i++){for(j=0;j<3;j++){t=*(b+i*3+j);*(b+i*3+j)=*(b+j*3+i);*(b+j*3+i)=t;}}}void main()int i,j;int *a=new int[3*3];cout<<"请输入一个3*3矩阵,矩阵元素用空格分开:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++){cin>>a[i*3+j];}}cout<<"输入的矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<a[i*3+j]<<" ";cout<<endl;}zhuanzhi(a);cout<<"转置后的矩阵是:"<<endl;for(j=0;j<3;j++){for(i=0;i<3;i++)cout<<a[i*3+j]<<" ";cout<<endl;}}程序截图:(3)字符串连接:①程序代码:#include<iostream>using namespace std;void main(){ char a[100],b[100],c[200];int i,j;cout<<"请输入两个字符串:";cin>>a;cin>>b;cout<<"两字符串连接后为:"<<endl;for(i=0;a[i]!='\0';i++)c[i]=a[i];for(j=0;b[j]!='\0';j++){c[i]=b[j];i++;}c[i]='\0';cout<<c<<endl;}②程序截图:(4)字符串连接2:①程序代码:#include<iostream>#include<string>using namespace std;void main(){string a,b,c;cout<<"请输入两个字符串:";cin>>a>>b;cout<<"这两个字符串连接后为:"; c=a+b;cout<<c<<endl;}程序截图:。
c语言实验报告实验
c语言实验报告实验C 语言实验报告实验一、实验目的本次 C 语言实验的主要目的是通过实际操作和编程实践,加深对 C 语言基本语法、数据类型、控制结构、数组、指针等重要概念的理解和掌握,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程环境为 Visual Studio 2019,操作系统为Windows 10。
三、实验内容1、基本数据类型和运算符的使用定义不同类型的变量,如整数型(int)、浮点型(float、double)、字符型(char)等,并进行赋值和运算操作。
熟悉各种运算符的优先级和结合性,包括算术运算符(+、、、/、%)、关系运算符(>、<、>=、<=、==、!=)、逻辑运算符(&&、||、!)、位运算符(&、|、^、~、<<、>>)等。
2、控制结构的应用使用ifelse 语句实现条件判断,根据不同的条件执行相应的代码块。
运用 switch 语句进行多分支选择,处理不同的情况。
利用 for 循环、while 循环和 dowhile 循环实现重复执行的操作,例如计算数列的和、打印特定的图案等。
3、数组和字符串的操作定义和使用一维数组、二维数组,进行数组元素的访问、赋值和遍历。
掌握字符串的存储和处理方式,使用字符数组和字符串函数(如strlen、strcpy、strcmp 等)进行字符串的操作。
4、指针的应用理解指针的概念和指针变量的定义,通过指针访问变量和数组元素。
实现指针与数组、指针与函数的结合使用,体会指针在程序中的灵活运用。
5、函数的定义和调用编写自定义函数,实现特定的功能,如计算阶乘、判断素数等。
掌握函数的参数传递方式(值传递和地址传递),理解函数的返回值。
6、结构体和共用体的使用定义结构体类型,创建结构体变量,访问结构体成员。
了解共用体的概念和使用场景,比较结构体和共用体的区别。
四、实验步骤1、实验准备打开 Visual Studio 2019 开发环境,创建一个新的 C 语言项目。
c语言实验报告5篇
c语言实验报告c语言实验报告5篇随着社会一步步向前发展,我们使用报告的情况越来越多,我们在写报告的时候要注意涵盖报告的基本要素。
其实写报告并没有想象中那么难,以下是小编收集整理的c语言实验报告,欢迎阅读与收藏。
c语言实验报告1学号:__________ 姓名:__________ 班级:__________ 日期:__________指导教师:__________ 成绩:__________实验六综合实验一、实验目的1、掌握C语言中的变量、数组、函数、指针、结构体等主要知识点。
2、掌握C程序的结构化程序设计方法,能使用C语言开发简单的应用程序。
3、掌握C程序的运行、调试方法等。
二、实验内容编写一个学生信息排序程序。
要求:1、程序运行时可输入n个学生的信息和成绩(n预先定义)。
2、学生信息包括:学号、英文姓名、年龄;学生成绩包括:语文、数学、计算机。
3、给出一个排序选择列表,能够按照上述所列信息(学号、姓名、年龄、语文、数学、计算机)中的至少一个字段进行排序,并显示其结果。
1、使用函数方法定义各个模块。
三、实验步骤与过程物理实验报告·化学实验报告·生物实验报告·实验报告格式·实验报告模板四、程序调试记录c语言实验报告2第一章基础掌握1.1 实验目的掌握C程序设计编程环境Visual C++,掌握运行一个C程序的基本步骤,包括编辑、编译、链接和运行。
(]1.2 实验要求在报告中记录建立、保存C程序实习过程。
1.3 实验基本内容编写程序,在屏幕上显示一个短句“Hello World”(1)程序:1)编译如下程序:#includeVoid main(){printf (“Hello World! ”);}2)链接。
执行Build-命令。
3)运行。
执行Build Execute 命令。
显示结果。
4)关闭程序工作区。
(2)运行结果:输出结果:Hello World!总结:掌握C语言程序设计的基本框架,能够编写简单的程序。
东北大学C++实验报告6
实验六1.实验要求(1)定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。
(2)定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
观察虚函数的作用。
2. 实验内容及实验步骤(1) 编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point&operator--();Point operator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。
程序名:1ab8_1.cpp。
(2) 编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。
再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。
程序名:lab8_2.cpp。
3. 源程序Lab8_1#include<iostream>using namespace std;class Point{public:Point(int X,int Y): _x(X),_y(Y){}Point operator++();Point operator++(int);Point operator--();Point operator--(int);void Putout() const;private:int _x,_y;};void Point::Putout() const{cout<<"("<<_x<<","<<_y<<")"<<endl; }Point Point:: operator++(){_x++;_y++;return *this;}Point Point::operator++(int){++_x;++_y;return *this;}Point Point::operator--(){_x--;_y--;return *this;}Point Point::operator--(int){--_x;--_y;return *this;}int main(){Point A(6,7);cout<<"Point++: ";(A++).Putout();cout<<"++Point: ";(++A).Putout();cout<<"Point--: ";(A--).Putout();cout<<"--Point: ";(--A).Putout();return 0;}运行结果Lab8_21)在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数。
c语言大实验报告
c语言大实验报告C 语言大实验报告一、实验目的本次 C 语言大实验的主要目的是通过实际的编程项目,深入巩固和应用 C 语言的基础知识,提高编程能力和解决实际问题的能力。
具体而言,包括熟练掌握数据类型、控制结构、函数、数组、指针等核心概念,并能够运用它们构建较为复杂的程序逻辑。
二、实验要求1、完成一个具有一定规模和功能的 C 语言程序,例如学生成绩管理系统、图书管理系统等。
2、程序应具备良好的代码结构和可读性,遵循编程规范。
3、实现数据的输入、处理和输出功能,能够进行数据的存储和查询。
4、对程序进行充分的测试,确保其稳定性和正确性。
三、实验环境1、操作系统:Windows 102、编程工具:Visual Studio 2019四、实验内容本次实验我选择开发一个学生成绩管理系统,该系统能够实现学生成绩的录入、查询、修改、删除以及成绩统计分析等功能。
(一)数据结构设计为了存储学生的信息,我定义了一个结构体`Student` ,包含学生的学号、姓名、各科成绩等字段:```ctypedef struct {int id;char name50;float score3; //假设存储三门课程的成绩} Student;```同时,使用一个动态数组来存储多个学生的信息:```cStudent students;int numStudents = 0; //记录学生数量```(二)功能模块实现1、成绩录入通过循环让用户输入学生的信息,包括学号、姓名和各科成绩,并将其添加到动态数组中:```cvoid inputStudent(){Student newStudent;printf("请输入学号:");scanf("%d",&newStudentid);printf("请输入姓名:");scanf("%s", newStudentname);printf("请输入三门课程的成绩:");for (int i = 0; i < 3; i++){scanf("%f",&newStudentscorei);}students =(Student )realloc(students, (numStudents + 1) sizeof(Student));studentsnumStudents++= newStudent;}```2、成绩查询根据用户输入的学号,在动态数组中查找对应的学生信息并输出:```cvoid queryStudent(){int id;printf("请输入要查询的学号:");scanf("%d",&id);for (int i = 0; i < numStudents; i++){if (studentsiid == id) {printf("学号:%d\n", studentsiid);printf("姓名:%s\n", studentsiname);printf("成绩:");for (int j = 0; j < 3; j++){printf("%2f ", studentsiscorej);}printf("\n");return;}printf("未找到该学号的学生信息!\n");}```3、成绩修改先查询要修改的学生信息,然后让用户输入修改后的成绩:```cvoid modifyStudent(){int id;printf("请输入要修改的学号:");scanf("%d",&id);for (int i = 0; i < numStudents; i++){if (studentsiid == id) {printf("请输入修改后的三门课程成绩:");for (int j = 0; j < 3; j++){scanf("%f",&studentsiscorej);printf("修改成功!\n");return;}}printf("未找到该学号的学生信息!\n");}```4、成绩删除根据学号删除指定的学生信息,并重新调整动态数组:```cvoid deleteStudent(){int id;printf("请输入要删除的学号:");scanf("%d",&id);int found = 0;for (int i = 0; i < numStudents; i++){if (studentsiid == id) {found = 1;for (int j = i; j < numStudents 1; j++){studentsj = studentsj + 1;}numStudents;students =(Student )realloc(students, numStudents sizeof(Student));printf("删除成功!\n");return;}}if (!found) {printf("未找到该学号的学生信息!\n");}}```5、成绩统计分析计算所有学生的平均成绩,并输出最高和最低成绩:```cvoid statistics(){float totalScore = 0;float maxScore = students0score0;float minScore = students0score0;for (int i = 0; i < numStudents; i++){float sum = 0;for (int j = 0; j < 3; j++){sum += studentsiscorej;}totalScore += sum / 3;if (sum / 3 > maxScore) {maxScore = sum / 3;}if (sum / 3 < minScore) {minScore = sum / 3;}}printf("平均成绩:%2f\n", totalScore / numStudents);printf("最高成绩:%2f\n", maxScore);printf("最低成绩:%2f\n", minScore);}```(三)主函数在主函数中,通过菜单的方式让用户选择要执行的操作:```cint main(){int choice;while (1) {printf("1、录入成绩\n");printf("2、查询成绩\n");printf("3、修改成绩\n");printf("4、删除成绩\n");printf("5、成绩统计分析\n");printf("6、退出\n");printf("请选择操作:");scanf("%d",&choice);switch (choice) {case 1:inputStudent();break;case 2:queryStudent();break;case 3:modifyStudent();break;case 4:deleteStudent();break;case 5:statistics();break;case 6:free(students);return 0;default:printf("无效的选择,请重新输入!\n");}}return 0;}```五、实验结果经过多次测试,本系统能够稳定运行,实现了预期的各项功能。
(完整版)c实验报告
(完整版)c实验报告实验名称: C语言实验报告实验内容:本次实验主要针对C语言编程进行实验。
通过实验的设计和完成,检验和加深对C语言的理解和应用能力。
实验步骤:1. 实验准备在开始实验之前,需要准备好以下必要的工具和材料:- 计算机- C语言编译器(比如GCC、Clang等)- 文本编辑器(比如Notepad++、Sublime Text等)2. 实验环境搭建在计算机上安装C语言编译器,并配置好相应的环境变量。
这样可以在终端或命令提示符中执行相关的C程序。
3. 编写实验代码根据实验要求,使用文本编辑器编写C语言代码。
根据实验的要求和功能需求,合理设计和组织代码结构,包括头文件的引用、变量的定义、函数的声明和定义等。
4. 编译和运行代码在命令行或终端中使用编译器对编写好的C语言代码进行编译,并生成可执行文件。
编译命令的具体格式根据不同的编译器而有所差异,但一般形式如下:```gcc -o output_file input_file.c```其中,"output_file"表示生成的可执行文件名,"input_file.c"表示待编译的C源代码文件名。
编译成功后,通过命令行或终端执行生成的可执行文件,检查程序的运行结果是否符合预期。
5. 实验结果分析根据实际运行结果,对实验数据进行分析和归纳。
可以通过输出结果、打印特定信息或观察程序的行为来判断程序是否正确地实现了预期的功能。
6. 实验总结在实验报告中对本次实验的过程、方法、结果进行总结,并提出实验中遇到的问题和解决方法。
同时,对所学习的C语言相关知识点进行总结和归纳,以加深对相关知识的理解和记忆。
实验结果:通过本次实验的设计和实现,我成功完成了对C语言编程的实验,达到了预期的目标。
通过编写实际的代码,我巩固了对C语言语法和基本概念的理解。
在实验过程中,我遇到了一些问题,通过查阅资料和与同学的讨论,我成功解决了这些问题。
c语言实习报告3篇
c语言实习报告3篇c语言实习报告1在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的.学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。
为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。
课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1.加深对课堂讲授内容的理解课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用c语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。
东北大学C语言实验报告要求及模板模版
C语言上机实验要求:1、每次实验满分10分,每次试验按要求写实验报告。
2、每次把实验报告提交到LINTIAN8@信箱里。
3、上实验课不得迟到、早退(扣2分),旷课本次实验0分记。
4、事假必须有假条,否则一律按旷课处理。
5、上实验课不得做与实验无关的事情,否则酌情扣分或取消上实验课资格。
6、实验报告不得抄袭,发现实验报告雷同者,一律按0分记。
参考看网站:1)、/ 上-->教学资源中心-----〉资源共享课-----〉工学--------〉高级语言程序设计2)、/cxsj/ 上------〉上机实践(教学视频1,2,3)----〉程序实例C语言程序运行过程四个步骤:1、编辑(EDIT)2、编译(COMPILE)3、链接(BUILD)4、运行(RUN)具体操作步骤:启动VisualC++6.0-->文件--〉新建(new)-->文件---〉C++Sourcefile-->添加文件名(必须后缀.C)--->添加存放文件目录-->编辑文件-->编译文件--->链接文件--->运行文件--->看结果.C语言程序设计实验报告1实验目的2实验内容3算法描述流程图4源程序5测试数据6运行结果7出现问题及解决方法8实验心得C语言程序设计实验报告1实验目的1.熟练掌握if、if...else、if...else if语句,掌握if语句中的嵌套关系和匹配原则,利用if语句实现分支选择结构。
2.熟练掌握for语句格式及使用方法3.掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧.进一步学习调试程序,掌握语法错误和逻辑的检查方法。
4.掌握C函数的定义方法,函数的调用方法,参数说明以及返回值,掌握实参与形参的对应关系以及参数之间的“值传递”的方式。
5.在编程的过程中加深函数调用的设计思想。
2实验内容输入一个数值,计算并输出该数值以内最大的10个素数以及它们的和.要求:(1) 在程序内部加必要的注释.(2)要对小于该数以内不够10个素数的情况进行处理.(3)输出的形式为:素数1+素数2+...+素数10=总和值.3算法描述流程图主函数流程图:判断素数函数流程图:4源程序int a(int n) /*设计一个求素数的函数*/{ int i;for(i=2;i<=n/2;i++)if(n%i==0) return 0; /*不是素数则返回0*/return 1; /*是素数则返回1*/}main(){int i=1,n,sum=0,k;printf(“Input a number:”);scanf("%d",&k); /*输入一个整数*/for(n=k;n>1;n-=1){if(a(n)) /*调用a(int n)函数,判断是否为素数*/ {if(i==1) printf("%d",n);else printf("+%d",n); /*是素数以和的形式输出*/sum+=n; /*是素数则求和*/i++;}if(i==11) break; /*当i>10时就退出循环*/}printf("=%d\n",sum);if(i<=10) printf("not shuchu.\n"); /*当i〈10时,程序结束*/}5测试数据测试数据为10,100,1000.6运行结果当测试数据为10时:当测试数据为100时:当测试数据为1000时:7出现问题及解决方法1)在本实验中,需按要求的格式输出“素数1+素数2+...+素数10=总和值.”,因采用循环for(n=k;n>1;n-=1){if(a(n)){if(i==1) printf("%d",n);else printf("+%d",n);sum+=n;i++;}if(i==11) break;}printf("=%d\n",sum);从而使输出结果符合题目要求;2)要对不足10个的素数进行处理,因而要加入“if(i<=10) printf("not shuchu.\n");”8实验心得通过该实验,我对分支(if,if``else,if```else if```)和循环结构(for,while,do```while)的几种用法更加熟练,并掌握了函数的定义与调用,参数说明以及返回值使用。
东北大学C语言课程设计程序实践报告
C语言程序设计报告工资管理系统学生姓名:学生系别:计算机科学与技术学生班级:日期:20xx年x月x日程序实践报告【运行环境】软件:Windows、Microsoft Visual C++ 6.0PC一台【实践要求】工资信息包括:编号、姓名、基本工资、岗位工资、实发工资、房改补助、奖励、公积金、扣税使之提供以下功能:(1)用户登陆。
(2)背景音乐。
(3)工资信息录入功能。
(4)工资信息浏览功能。
(5)工资信息查询功能。
(6)工资信息删除功能。
(7)工资信息修改功能。
(8)工资信息排序功能。
【概要设计】【存储设计】程序数据存取主要由两个文件:pay.txt、admin.txt组成。
admin.txt :主要存储用户名和密码pay.txt :职工信息。
包括编号、姓名、基本工资、岗位工资、实发工资、房改补助、奖励、公积金、扣税【头函数】typedef struct pay{long num;short month;char name[20];float should_pay,rebate,actual_pay,post_wage,merit_pay,house_subsidy,prize,reserve_fund;struct pay *next;}PAY;定义了一个包含编号、姓名、基本工资、岗位工资、实发工资、房改补助、奖励、公积金、扣税变量的结构体。
【模块功能】1、void menu();z这个是菜单,用来提示用户选择需要的功能。
打印出各种选项可供用户选择。
2、PAY *input();y这是用来新建职工信息。
包括编号、姓名、基本工资、岗位工资、实发工资、房改补助、奖励、公积金、扣税。
用预先定义的结构体和指针链表来完成。
3、void output();m这是用来输出职工信息。
可以按照各种关键字排序输出。
包括按编号输出、按基本工资输出、按岗位工资输出、按实发工资输出。
用预先定义的结构体和指针链表来完成。
C语言实验报告9篇
C语言实验报告C语言实验报告9篇随着个人素质的提升,报告的适用范围越来越广泛,我们在写报告的时候要注意语言要准确、简洁。
写起报告来就毫无头绪?以下是小编为大家整理的C语言实验报告,仅供参考,欢迎大家阅读。
C语言实验报告1一、实习目的1.掌握在集成环境中编辑、编译、连接和运行C程序的方法。
(1)运行TC(2)启动TC集成环境,输入一个源程序,编译并运行。
2.掌握单步执行、设置/去除断点,观察变量或表达式的值。
(3)在该程序中按CTRL+F7单步招待并在观察窗口中查看变量和表达式的值。
(4)设置/去除断点,继续调试。
1、熟练掌握if.switch分支语句的使用。
2、熟练掌握for.while.do.while循环语句的使用。
3、熟练掌握函数的定义、说明、参数传递及嵌套和递归调用方法。
4、熟练掌握一维数组、二维数组、字符数组的定义、说明和使用方法。
熟练掌握结构体和指针的综合应用链表的操作二、实习地点北京交通干部管理学院计算机系机房十三号.三、实习成果熟练掌握TC集成环境的使用方法。
认真编写实习报告和实习总结,描述实习操作和心得体会,总结在这次实习中的业务收获,作出自我评价。
熟练掌握并应用TC程序设计的各个知识点。
掌握结构体和指针的联合使用,学会链表的构造和常用操作方法,认真编写实习日志和实习体会。
并通过各种途径查找所需资料,拓宽视野,培养自学能力。
四、实习心得在短短一周的实习期间使我获取了不少新知识也巩固了许多老知识。
我体会到了老师和同学们的热心帮助,无论面对学习中多大的困难,同学们都会帮助你,老师也会帮助你,大家就像兄弟姐妹一样。
老师安排我们有具有的分工:首先,在计算机机房里同学们积极的对C语言进行巩固与实习,老师热心的讲解同学们提出的问题和实习过程中应该注意的事项和同学们的任何。
老师把我们分为几组,每一组十一个人,并且分配了具体的任务,在我们实习结束后每一组的同学都把自己组里的成果展示给大家一起分享,告诉大家编程的原理、方法等,使同学们既有动手能力,又能提高语言表达能力。
c语言实验报告总结
c语言实验报告总结在大学的计算机科学与技术专业中,学习C语言是一个非常重要的环节。
通过实验的方式,我们可以更好地理解和掌握这门编程语言。
在此次实验中,我对C语言的基本语法、数据类型、控制结构以及函数等方面进行了深入学习和实践,并取得了一定的成果。
首先,在实验中我通过编写简单的程序,掌握了C语言的基本语法规则。
C语言是一门结构化的编程语言,具有严格的语法要求。
通过实验,我深刻理解了C语言的语法规则对编写正确程序的重要性。
在每个实验环节中,我都会根据实验要求,遵循正确的语法结构,确保程序能够顺利运行。
其次,在实验过程中,我掌握了C语言的各种数据类型。
C语言中的数据类型包括整型、浮点型、字符型等多种类型,每一种类型都有其特定的用途和限制。
通过实验,我学会了如何定义不同类型的变量,并能够利用这些变量进行各种运算和操作。
这为我后续的程序设计提供了基础。
另外,在实验中我学习了C语言的控制结构。
控制结构在程序设计中起到了重要的作用,可以通过条件判断和循环控制实现不同的功能。
在实验中,我通过编写程序,学会了使用if语句、switch语句以及for、while、do-while等循环语句。
这些控制结构的灵活运用使我的程序更加健壮和实用。
在实验的过程中,我还学习了C语言中的函数。
函数是C语言中的一种代码模块,可以将一段具有特定功能的代码封装起来,提高代码复用性和可维护性。
通过实验,我了解了函数的定义、声明和调用等基本概念,并学会了如何自己编写函数,并在主程序中调用这些函数。
函数的使用使我的程序模块更加清晰,减少了代码的重复性,提高了代码的可读性和可维护性。
总的来说,这次C语言的实验让我受益匪浅。
通过实际动手编写程序,我不仅巩固了对C语言基础知识的理解,还掌握了更多实际应用的技巧。
同时,实验还培养了我的分析和解决问题的能力,使我在编写程序时可以更加深入地思考和分析。
在未来的学习和工作中,C语言将成为我必不可少的工具。
C实验报告6参考答案
《高级语言程序设计》实验报告班级: 学号: 姓名: 成绩:实验6 数组程序设计一、实验目的1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。
2. 掌握字符数组和字符串函数的使用。
3. 掌握与数组有关的算法。
二、实验内容1(1)中存在的错误,以实现其功能。
程序以文件名sy6_1.c 保存。
#include<stdio.h>void main() {int n=10,i,sum=0; int a[n]; int a[10];for(i=0;i<10;i++){scanf("%d",a[i]); scanf("%d",&a[i]);sum=sum+a[i];}printf("sum=%d\n",sum);}(2)下列程序的功能为:将字符串b 连接到字符串a 。
纠正程序中存在的错误,以实现其功能。
程序以文件名sy6_2.c 保存。
#include<stdio.h>void main( ) { char a[]="wel",b[]="come"; char a[20]int i,n=0;while(!a[n]) n++; while(a[n] != '\0') n++; for(i=0;b[i]!='\0';i++)a[n+i]=b[i];a[n+i]=’\0’;printf("%s\n",a);}(3)下列程序的功能为:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。
也可能没有鞍点。
纠正程序中存在的错误,以实现其功能。
程序以文件名sy6_3.c 保存。
#include<stdio.h>#define N 4#define M 4main(){for (i=0;i<N;i++)for (j=0;j<M;j++)scanf("%d",&a[i][j]);flag2=0;for (i=0;i<N;i++){max=a[j][0]; max=a[i][0];for (j=0;j<M;j++)if (a[i][j]>max) if (a[i][j]>=max){max=a[i][j];maxj=j;}for (k=0,flag1=1;k<N&&flag1;k++)if (max>a[k][maxj])flag1=0;if (flag1){printf("\nThe saddle point is:a[%d][%d]=%d\n",i,maxj,max);flag2=1;}}if ( flag2) if (! flag2)printf("\nThere is no saddle point in the Matrix\n");}2.程序填空题(1)以下程序的功能是:采用二分法在给定的有序数组中查找用户输入的值,并显示查找结果。
东北大学软件学院C++实验报告
课程编号:B080101020《C++程序设计》实验报告东北大学软件学院1. 实验目的实验一1)学习编写简单的C++程序,并掌握C++程序的基本格式与规范。
2)练习重载函数的使用,掌握指针的使用方法。
3)学习标准输人输出及格式控制。
4)学习使用VC ++的debug调试功能,使用step into追踪到函数内部。
实验二1)学习并掌握类与对象的定义、使用、声明。
2)学习具有不同属性的数据成员与成员函数的访问方式。
3)理解构造函数和析构函数的定义与执行过程。
4)理解什么是运算符重载,掌握运算符重载的方法实验三1)学习定义和使用类的继承关系,定义派生类。
2)熟悉不同继承方式下对基类成员的访问控制。
3)学习使用虚函数实现动态多态性。
4)学习利用虚基类解决二义性问题。
实验四1)加强对模板相关概念的理解,熟悉模板编程的语法。
2)学习编写简单的函数模板和类模板。
3)理解STL中容器、算法、迭代器的等概念,明确它们之间的关系。
4)掌握STL中Vector容器的使用方法。
2. 实验环境编译器:Microsoft Visual C++ 6.0操作系统:Windows 103. 实验内容与实验过程及分析实验一项目一:内容:使用动态数组完成编写并测试3X3矩阵转置函数,使用数组保存3X3矩阵,使用指针实现函数的功能。
代码:main(){int i,j;int **p;p=new int*[3];cout<<"输入矩阵的元素:"<<endl;for(i=0;i<3;i++){p[i]=new int[3];for(j=0;j<3;j++){cin>>p[i][j];}}transpose(p);cout << "转置后的矩阵的为:" << endl;for(i=0; i<3; i++){for (j=0; j<3; j++)cout << p[i][j] << " ";cout << endl;}delete[] p;}void transpose (int **matrix){int i,k,j;for(i=0;i<3;i++){for(j=0;j<3;j++){if(j>i){k=matrix[j][i];matrix[j][i]=matrix[i][j];matrix[i][j]=k;}}}}运行结果:总结:传递二维数组时候通过指针传递,可以对数组进行修改,方便了许多。
C语言实验6 实验报告(指针)
C语言程序设计实验报告实验六使用指针的程序设计(1)班级 2012153 学号 201215317 姓名杜顺永一、实验目的(1)掌握指针的概念,会定义和使用指针变量;(2)能正确使用数组的指针和指向数组的指针变量;(3)熟悉指针做函数参数的使用方法;(4)能正确使用字符串的指针和指向字符串的指针变量。
二、实验内容及步骤1、按要求完善程序下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参n给了数组中数据的个数,利用指针odd返回奇数之和,利用指针even返回偶数之和。
例如:数组中的值依次为:1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。
请在下面空白处将实现这一功能的函数完善,并且调试运行出结果。
程序代码如下所示:#include <stdio.h>#define N 20void fun(int *a,int n,int *odd,int *even){int i;*odd=0;*even=0;for(i=0;i<n;i++,a++){if(*a%2==0)*even=*even+*a;else*odd=*odd+*a;}}void main(){int a[N]={1,9,2,3,11,6},i,n=6,odd,even;printf("The original data is:\n");for(i=0;i<n;i++)printf("%5d",*(a+i));printf("\n\n");fun(a,n,&odd,&even);printf("The sum of odd numbers:%d\n",odd);printf("The sum of even number:%d\n",even);}运行结果:2.假设每班人数最多不超过30人,具体人数由键盘输入,试编程打印最高分及其学号。
东北大学操作系统实验报告
else if(sta == "b")
bl.push_back(process);
else
cout << "Error!!" << endl;
cout << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" << endl;
cout << endl;
基础内容:编写程序使其模拟两个进程,即生产者(producer)进程和消费者(Consumer)进程工作;生产者每次产生一个数据,送入缓冲区中;消费者每次从缓冲区中取走一个数据。每次写入和读出数据时,都将读和写指针加一。当指针到达缓冲区尾,重新将指针退回起点;
/***************************************************************/
2.三种状态在满足某种条件时会发生转换:
①就绪——》运行:调度程序选择一个新的进程运行
②运行——》就绪:运行进程用完了时间片
运行进程被中断,因为一高优先级进程处于就绪状态
③运行——》阻塞:当一进程等待某一事件的发生时,如
请求系统服务; 初始化I/O 且必须等待结果;
无新工作可做; 等待某一进程提供输入 (IPC)
cout << "#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#" << endl;
cout << endl;
cout << endl;
return 0;
}
int iniQ() //initialize the process
C语言实验报告总结(共6篇)
c语言上机实验心得在科技高度发展的今天,计算机在人们之中的作用越来越突出。
而c语言作为一种计算机的语言,学习它将有助于我们更好的了解计算机,与计算机进行交流,因此,我们一定要学好c语言,这对我们以后的发展是十分重要的。
说到这,上机实验当然就是一个必不可少的环节了,c语言灵活、简洁的特点,只有通过编程实践才能真正了解,真正说懂。
为了更好地学习语法规定、掌握程序设计方法、提高程序开发能力,我们必须实际上机、编写程序。
通过实验我也发现了自己不少的问题,这都是只看书上的程序而没有自己亲身上机编写程序而无法得知的,假如我们只因看熟书上的程序就以为自己已经掌握了c语言那就大错特错了。
我主要存在以下的这些缺点:1、学习耐心与细心不足,如scanf(“%d”,&n);中的“&”有时候会忘了。
而在最后输出时又错写成printf(“%d”,&n);从而错误得输出了地址而不是我原来想要的答案。
2、编程思想不够发散,看着题目有时想不出解答的方法,更不用说编写程序来解题了。
3、4、基本功不够,有些函数的表达不太精通,需要看书来核实,以致耗时较多。
知识不够广,有些内容没有学好,不能要用到时及时反映出来,认识程度不够深刻。
5、6、有时候不够精简,有一点用处不大或者说没有也可以的文字存在。
英语水平较差,对错误的地方虽然电脑有说,但由于是英文,理解上还是存在一点问题。
为了能更好地学好c语言,在今后学习中我要更多的动脑,综合运用所学,多看相关东西,多上机练习,提高电脑水平,增强自学能力,把已会的东西掌握好。
实验中我深刻意识到完成程序的编写,决不意味着万事大吉。
认为万无一失的程序,实际上机运行时可能会出现很多意想不到的问题。
有时编译程序检测出一大堆错误,有时程序能够顺利运行,但是运行结果并不是你预期中想要的。
因为开发环境所提供的编译系统无法发现程序逻辑错误,或者是你原来所设计时的理论错误,这就只能靠自己的上机经验来分析判断错误的所在了。
东北大学C++实验报告6
实验六1.实验要求(1)定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。
(2)定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
观察虚函数的作用。
2. 实验内容及实验步骤(1) 编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point& operator--();Point operator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。
程序名:1ab8_1.cpp。
(2) 编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。
再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。
程序名:lab8_2.cpp。
3. 源程序Lab8_1#include<iostream>using namespace std;class Point{public:Point(int X,int Y): _x(X),_y(Y){}Point operator++();Point operator++(int);Point operator--();Point operator--(int);void Putout() const;private:int _x,_y;};void Point::Putout() const{cout<<"("<<_x<<","<<_y<<")"<<endl;}Point Point:: operator++(){_x++;_y++;return *this;}Point Point::operator++(int){++_x;++_y;return *this;}Point Point::operator--(){_x--;_y--;return *this;}Point Point::operator--(int){ --_x;--_y;return *this;}int main(){Point A(6,7);cout<<"Point++: ";(A++).Putout();cout<<"++Point: ";(++A).Putout();cout<<"Point--: ";(A--).Putout();cout<<"--Point: ";(--A).Putout();return 0;}运行结果Lab8_21)在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数。
C语言背单词课程设计报告(东北大学)
C语言程序设计课程设计报告题目:背单词概述:该系统是帮助单词背诵单词的软件,要求用户可以选择背诵的词库,并可以编辑自己的词库,系统可以给出中文,让单词输入其英文意思,也可输出英文让单词输入中文意思。
并判定词义是否正确。
如不正确给出提示并要求用户重新输入。
如正确给以鼓励。
还应有词语预览功能。
词库的维护课程预览显示中文用户输入英文的背诵方法显示英文用户输入中文的背诵方法背诵成绩的记录。
课程设计目的:是综合训练单词用C语言编程解决问题和处理问题的能力,巩固其对C语言课程内容和知识的掌握。
对课程设计的基本要求:1、尽量多的应用C语言中所学到的知识和语句2、课程设计前应书写开题报告主要内容包括(对题目的分析和对该课程设计的概要设计)3、课程设计后应交《课程设计报告》,和软件原代码及编译后的应用软件4、课程设计最后一次上机实验时检查题目的完成情况5、课程设计中必须用到的内容为a) 文件的存取b) 结构体的使用c) 数组的使用d) 指针操作一、开题报告1:变量和结构体说明1)单词信息的结构体如下:typedef struct word//单词的结构体{char en[MAX_CHAR]; // 英文形式char no[MAX_CHAR]; //中文形式}word;2)存放单词的信息的变量如下:word s[MAX_NUM]; //单词数组int num; //单词个数2: 概要设计1)定义结构体数组用来存放单词的信息2)单词信息存放在data.txt中,文件格式如下:单词个数—长度为4个字节第1个单词的信息-----长度为sizeof(word)第2个单词的信息-----长度为sizeof(word)。
第n个单词的信息-----长度为sizeof(word)3)读文件data.txt的过程如下:先读取单词个数,然后逐个读取单词的信息,采用fread函数4)写文件data.txt的过程如下:先写入单词个数,然后逐个写入单词的信息,采用fwrite函数5)删除单词和修改单词信息的时候,都需要先输入英文,从该英文找到单词的位置6)程序采用菜单的形式显示,用户可以输入选择进行操作3:树型结构模块图功能模块图如下:4课程流程图学生背单词系统读取文件信息添加单词信息删除单词信息修改单词信息显示单词信息背诵(中至英)背诵(英至中)查询成绩写入文件信息5: 操作说明1)本程序需要目录下存在“data.txt”文件2)系统的菜单如下:3)添加单词信息的功能操作方法如下:5)修改单词信息的功能操作方法如下:6)显示单词背诵(中至英)功能操作方法如下:7)显示单词背诵(英至中)功能操作方法如下:8)成绩查询的功能操作方法如下:6: 课程详细代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAX_CHAR 20 // 最大字符#define MAX_NUM 100 // 单词的最大个数typedef struct word//单词的结构体{char en[MAX_CHAR]; // 英文形式char no[MAX_CHAR]; //中文形式}word;word s[MAX_NUM]; //单词数组int num; //单词个数void read_from_file()//从文件中读取单词的信息{FILE *fp;int i=0;fp=fopen("data.txt","rb");if(!fp){printf("打开文件data.txt失败!\n"); return ;}fread(&num,1,sizeof(num),fp); //先读取单词的个数for(i=0;i<num;i++)fread(&s[i],1,sizeof(word),fp); //读取每个单词的信息存放到结构体fclose(fp);//关闭文件}void write_to_file()//从文件中读取单词的信息{FILE *fp;int i=0;fp=fopen("data.txt","wb+");if(!fp){printf("打开文件data.txt失败!\n");return ;}fwrite(&num,1,sizeof(num),fp); //先写入单词的个数for(i=0;i<num;i++)fwrite(&s[i],1,sizeof(word),fp); //写入每个单词的信息fclose(fp);//关闭文件}void add_infor()//添加单词信息{int a,i=num;printf("请输入单词的英文形式:");scanf("%s",s[i].en);printf("请输入单词的中文形式:");scanf("%s",s[i].no);num++;printf("您输入的信息为: 英文: %s 中文: %s \n Enter 0 继续输入; Enter 1 返回主菜单",s[i].en,s[i].no);}void del_infor()//删除单词信息{int i=0,j=0;char no[MAX_CHAR]; //中文形式printf("请输入你要删除的单词中文形式:");scanf("%s",no);for(i=0;i<num;i++)//先找到该中文形式对应的序号if(strcmp(s[i].no,no)==0){for(j=i;j<num-1;j++)s[j]=s[j+1];num--; //数量减少 1return;}printf("没有这个单词!");printf("Enter Enter 1 返回主菜单");}void modify_infor()//修改单词信息{int i=0;char no[MAX_CHAR]; //中文形式printf("请输入你要修改的单词中文形式:");scanf("%s",no);for(i=0;i<num;i++)//先找到该中文形式对应的序号if(strcmp(s[i].no,no)==0){printf("请输入单词正确的英文形式:");scanf("%s",s[i].en);printf("请输入此单词正确的的中文形式:");scanf("%s",s[i].no);return;}printf("没有这个单词!");printf("Enter Enter 1 返回主菜单");}void show_infor(){int i=0;printf("单词:英文中文 \n");for(i=0;i<num;i++)printf(" %10s%10s\n",s[i].en,s[i].no);printf("Enter Enter 1 返回主菜单");}void search_infor()//查询单词{int i=0;char no[MAX_CHAR]; //中文形式printf("请输入你要查询的单词中文形式:");scanf("%s",no);for(i=0;i<num;i++)//先找到该中文形式对应的序号if(strcmp(s[i].no,no)==0){printf("英文形式中文形式 \n");printf("%10s%12s\n",s[i].en,s[i].no);return;}printf("没有这个中文形式!");printf("Enter Enter 1 返回主菜单");}void zy_infor(){char b1[20];int z,d=0,c=0;int i;i = rand()%num;printf("【%s】请输入英文单词:",s[i].no);scanf("%s",b1);for(z=0;strcmp(b1,s[i].en)!=0;z=z){printf("输入错误!!请重新输入:");scanf("%s",b1);c=c+1;}printf("\n恭喜你,回答正确,加10分!\n\n");d=d+1;printf("Enter 2 继续输入; Enter 1 返回主菜单",s[i].en,s[i].no);}void yz_infor(){char b1[20];int z,x=41,d=0,c=0;int i;i = rand()%num;printf("【%s】请输入中文意思:",s[i].en);scanf("%s",b1);for(z=0;strcmp(b1,s[i].no)!=0;z=z){printf("输入错误!!请重新输入:");scanf("%s",b1);c=c+1;}printf("\n恭喜你,回答正确,加10分!\n\n");d=d+1;printf("\n Enter 3 继续输入; Enter 1 返回主菜单",s[i].en,s[i].no);}void chengji_infor(){int c,d;printf("\n 共计输入错误:%d次**每次扣10分**\n",c);printf(" 共计输入正确:%d次**每次加10分**\n",d);printf(" 你的总得分为:%d分\n\n",10*d-10*c);printf("Enter Enter 1 返回主菜单");}void show_main_menu(){printf("\n");printf(" ●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●\n");printf(" ◎◎\n");printf(" ●背单词系统●\n");printf(" ◎◎\n");printf(" ●作者: 4091405 吴昊●\n"); printf(" ◎◎\n");printf(" ●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●\n");printf(" ◎◎\n");printf(" ● 1、添加单词信息 2、删除单词信息●\n"); printf(" ◎◎\n");printf(" ● 3、修改单词信息 4、显示单词信息●\n"); printf(" ◎◎\n");printf(" ● 5、背诵(中至英) 6、背诵(英至中) ●\n"); printf(" ◎◎\n");printf(" ● 7、查询成绩 8、退出●\n"); printf(" ◎◎\n");printf(" ●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●\n"); //用户界面printf("\n");printf(" 请选择您需要的操作序号(1-8)按回车确认:");}int main(){int a,choose=0;num=0;//初始化单词个数为0read_from_file(); //读取文件show_main_menu();scanf("%d",&choose);printf("\n");while(choose!=8){switch(choose){case 1:add_infor();break;case 2:del_infor();break;case 3:modify_infor();break;case 4:show_infor();break;case 5:zy_infor();break;case 6:yz_infor();break;case 7:chengji_infor();break;}while (a<10000){scanf("%d",&a);if(a==0){write_to_file();add_infor();}if(a==1){printf("\n");write_to_file();main();printf("\n");}if(a==2){write_to_file();zy_infor();}if(a==3){write_to_file();yz_infor();}if(a>3){break;}}write_to_file();//写入文件}printf(" ***************谢谢使用单词背诵系统!再见!*************** \n");getchar();return 1;}7: 心得体会通过本次C语言课程设计,是我对C语言的文件的存取、结构体的使用、数组的使用和指针操作有了更深的理解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东北大学C++实验报告6 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII
实验六
1.实验要求
(1)定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。
(2)定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
观察虚函数的作用。
2. 实验内容及实验步骤
(1) 编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point&operator--();Point operator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。
程序名:1ab8_1.cpp。
(2) 编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。
再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。
程序名:lab8_2.cpp。
3. 源程序
Lab8_1
#include<iostream>
using namespace std;
class Point{
public:
Point(int X,int Y): _x(X),_y(Y){}
Point operator++();
Point operator++(int);
Point operator--();
Point operator--(int);
void Putout() const;
private:
int _x,_y;
};
void Point::Putout() const{
cout<<"("<<_x<<","<<_y<<")"<<endl; }
Point Point:: operator++(){
_x++;
_y++;
return *this;
}
Point Point::operator++(int){
++_x;++_y;
return *this;
}
Point Point::operator--(){
_x--;
_y--;
return *this;
}
Point Point::operator--(int){
--_x;
--_y;
return *this;
}
int main(){
Point A(6,7);
cout<<"Point++: ";
(A++).Putout();
cout<<"++Point: ";
(++A).Putout();
cout<<"Point--: ";
(A--).Putout();
cout<<"--Point: ";
(--A).Putout();
return 0;
}
运行结果
Lab8_2
1)在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数。
#include<iostream>
using namespace std;
class Vehicle{
public:
void Run(){cout<<"基类Vehicle的Run函数调用"<<endl;}
void Stop(){cout<<"基类Vehicle的Stop函数调用"<<endl;}
};
class bicycle :public Vehicle
{
public:
void Run(){cout<<"派生类bicycle的Run函数调用"<<endl;}
void Stop(){cout<<"派生类bicycle的Stop函数调用"<<endl;}
};
class motorcar :public Vehicle
{
public:
void Run(){cout<<"派生类motorcar的Run函数调用"<<endl;}
void Stop(){cout<<"派生类motorcar的Stop函数调用"<<endl;}
};
class motorcycle :public bicycle,public motorcar
{
public:
void Run(){cout<<"派生类motorcycle的Run函数调用"<<endl;} void Stop(){cout<<"派生类motorcycle的Stop函数调用"<<endl;}
};
int main(){
Vehicle V;
bicycle B;
motorcar M;
motorcycle Mc;
V.Run(); V.Stop();
B.Run(); B.Stop();
M.Run(); M.Stop();
Mc.Run(); Mc.Stop();
return 0;
}
运行结果
2)用vehicle类型的指针来调用这几个对象的成员函数。
#include<iostream>
using namespace std;
class Vehicle{
public:
virtual void Run(){cout<<"基类Vehicle的Run函数调用"<<endl;}
virtual void Stop(){cout<<"基类Vehicle的Stop函数调用"<<endl;} };
class bicycle :virtual public Vehicle
{
public:
void Run(){cout<<"派生类bicycle的Run函数调用"<<endl;} void Stop(){cout<<"派生类bicycle的Stop函数调用"<<endl;} };
class motorcar :virtual public Vehicle
{
public:
void Run(){cout<<"派生类motorcar的Run函数调用"<<endl;} void Stop(){cout<<"派生类motorcar的Stop函数调用"<<endl;} };
class motorcycle :public bicycle,public motorcar
{
public:
void Run(){cout<<"派生类motorcycle的Run函数调用"<<endl;} void Stop(){cout<<"派生类motorcycle的Stop函数调用"<<endl;} };
void fun(Vehicle *p){
p->Run();
p->Stop();
}
int main(){
Vehicle V;
bicycle B;
motorcar M;
motorcycle Mc;
fun(&V);
fun(&B);
fun(&M);
fun(&Mc);
return 0;
}
运行结果
4.思考题
(1).函数类型 operator 运算符(形参表)
{
函数体;
}
(2). friend 函数类型operator 运算符(形参表)
{
函数体;
}
(3).通过指向基类类型的指针和引用来调用对象的虚函数来实现。