当前位置:天才代写 > C++/C代写,c语言代写代考-100%安全,包过 > C++代写实验项目题目:十个项目题目整合

C++代写实验项目题目:十个项目题目整合

2017-12-15 08:00 星期五 所属: C++/C代写,c语言代写代考-100%安全,包过 浏览:805

 

 

 

 

实验报告

 

 

 

 

 

课程名称:   C++程序设计            

   别:   数学与计算机学院       

   级:     16数字媒体技术        

指导教师:      叶增炉               

   名:                           


实验项目一:  Visual C++ 2010的基本用法       

实验项目二:  数据类型、运算符和表达式          

实验项目三:  三种基本结构的实现                

实验项目四:  函数                               

实验项目五:  指针                            

实验项目六:  结构体                         

实验项目七:  类与对象                         

实验项目八:  运算符重载                       

实验项目九:  派生与继承                       

综合性实验:  某公司人员信息管理系统        


实验项目名称(一)

Visual C++ 2010的基本用法

实验学时

2

一、实验目的

1.熟悉Visual C++2010集成开发环境的基本命令和功能键

2.学习完整的C++程序开发过程

3. 理解简单的C++程序结构

二、实验主要内容

1. Visual Studio 2010 安装步骤

2. 使用VC++创建一个C++文件

3. 编写一个简单的C++程序,对其进行调试和生成可执行文件

要求:输入圆的半径,计算圆的周长和面积。

(1)创建一个项目,名字为“Circle”。

(2)在项目中增加一个文件,命名为“Circle.cpp”。

(3)编写程序代码,并进行调试和运行。

三、实验步骤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、实验结果及分析

 

 

 

成绩

教师签名

 

实验项目名称(二)

数据类型、运算符和表达式

实验学时

2

一、实验目的

1.掌握Visual C++基本数据类型的字节宽度和范围表示,熟悉如何定义一个整型、字符型和浮点型变量,以及对它们赋值的方法。 

2.掌握不同类型数据之间赋值的规律。 

3.学会使用C++的有关算术运算符,以及包含这些运算符的表达式,特别是自增(++)和自减(――)运算符的使用。 

4.进一步熟悉C++程序的编辑、编译、连接和运行的过程。

一、实验主要内容

1.基本数据类型的长度

编写一个程序,输出基本数据类型charshortintlongfloatdouble和指针类型void*char*short*int*long*float*double*的数据类型的长度。 

要求: 

弄清所使用的系统上运行的C++编译器中每个基本数据类型的长度。 

提示:利用运算符sizeof(数据类型名)来得到各个数据类型的长度。

   2.整型、字符型数据变量的定义与赋值

1)输入并调试运行下面的程序

#include<iostream>

#include<iomanip>

using namespace std;

        int main( )

{

  char c1, c2;

  c1=a;

  c2=b;

  cout<<c1<<setw(5)<<c2<<endl;

return 0;

}

①运行此程序,写出执行结果。

②在此基础上增加一个语句:cout<<(int)c1<<setw(5)<<(int)c2<<endl; 再运行,并观察结果。

③将第1行改为: int c1, c2;再运行,并观察结果。

 

2)输入并调试运行下面的程序

#include<iostream>

#include<iomanip>

using namespace std;

int main( )

{

   char c1=a,  c2=b, c3=c, c4=\101, c5= \116;

   cout <<c1<<c2<<\t<<c3<<\t<<c1<<c2<<c3<<endl;

   cout<<\t\b<<c4<<c5<<endl;

   return 0;

}

要求:在实验前先分析程序,写出应得结果,实验时将二者对照。

 

3)输入并调试运行下面的程序

#include<iostream>

#include<iomanip>

using namespace std;

int main( )

{

   int x, y, m, n;

   x = 8;

   y = 10;

   m = ++x;

   n = y++;

   cout<<x<<setw(5)<<y<<setw(5)<<m<<setw(5)<<n<<endl;

return 0;

}

②  运行程序,注意xymn各变量的值。

② 将第45行改为: m = x++;  n = ++y;再运行。

③ 将程序改为:

void main( )

{

  int xy;

  x = 8;

  y = 10;

  cout<<x++<<setw(5)<<++y<<endl;

}

④ 在③的基础上,将cout语句改为:cout<<++x<<setw(5)<<++y<<endl;

⑤ 再将cout语句改为:cout<<x<<setw(5)<<y<<setw(5)<<x++<<setw<<y++<<endl;

 

三、实验步骤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、实验结果及分析

 

成绩

教师签名

 

实验项目名称(三)

三种基本结构的实现

实验学时

2

一、 实验目的

1.学会正确使用逻辑运算符和逻辑表达式。

2.熟练掌握if语句和switch语句。

3.学习调试程序。

二、实验主要内容

1.已知三个数a、b、c,找出最大值放于max中。

(1) 输入并调试运行下面的程序:

#include<iostream>

using namespace std;

int main()

{

int a,b,c,max;      //定义四个整型变量

cin>>a>>b>>c;

if(a>= b)

max = a;        //a>=b

else

max = b;        //a<b

if(c>max)

max = c;        //c是最大值

cout<<"max="<<max<<endl;

    return 0;

}

(2) 若输入下列数据,分析程序的执行顺序并写出运行结果。

① 1 2 3

② 2 1 3

③ 3 2 1

④ 3 1 2

⑤ 3 3 2

⑥ 2 1 2

 

2.输入某学生的成绩,经处理后给出学生的等级,等级分类如下:

90分以上(包括90):A

80至90(包括80):B

70至80(包括70):C

60至70(包括60)D

60分以下:E

输入以下程序并调试运行。

#include<iostream>

using namespace std;

int main()

{

float score;

char grade;

cout<<"input a student score:";

cin>> score;

if ( score <0 || score >100 )

cout<<"input error!"<<endl;

else

{

switch ( int(score)/10 )

{

case 10:

case 9: grade = 'A';break;

case 8: grade = 'B';break;

case 7: grade = 'C';break;

case 6: grade = 'D';break;

default: grade = 'E';

}

cout<<"the student scort:"<< grade <<endl;

}

    return 0;

}

输入测试数据,调试程序并写出结果。测试数据要覆盖所有路径,注意临界值,例如此题中的100分、60分、0分以及小于0和大于100的数据。

 

3.有一函数:

                     x           ( x<1 )

             y =   2x-1        ( 1≤x<10 )

                     3x-11       ( x≥10 )

用cin语句输入x的值,求y值。

运行程序,输入x的值(分别为x<11x<10x10三种情况),检查输出的y值是否正确。

 

三、实验步骤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、实验结果及分析

 

 

 

成绩

教师签名

 

 

实验项目名称(四)

函数

实验学时

2

一、 实验目的

1. 掌握函数的定义和调用方法。

2.掌握函数实参与形参的对应关系以及C++的三种函数参数传递机制。

3.掌握函数嵌套调用和递归调用的方法。

4.掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。

二、实验主要内容

1.写一个判断素数的函数,在主函数中输入一个整数,输出是否是素数的信息。

输入以下程序并调试运行。

#include<iostream>

#include<math>

#include<string>

        using namespace std;

int prime(int number)

{

   int flag=1, n;

   for  ( n=2; n<= int(sqrt(number)) && flag == 1; n++)

if  (number%n ==0)

flag = 0;

return flag;

}

int main ( )

{

   int number;

   cout<<"请输入一个正整数:";

   cin>>number;

   if  (prime(number))

      cout<<number<<"是素数."<<endl;

   else

      cout<<number<<"不是素数."<<endl;

   return 0;

}

注意:函数的定义声明的方法和格式。

 

2.分析程序的运行结果

输入下列程序,运行它,分析得到的结果。

#include<iostream>

 using namespace std;

int n=0;

int func( int x=10 );

int main()

{

int a, b;

a=5;

b=func(a);

cout<<\nlocal a=<<a<<endl<<local b=<<b<<endl

<<global n=<<n<<endl;

a++;

b=func(a);

cout<<\nlocal a=<<a<<endl<<local b=<<b<<endl

<<global n=<<n<<endl;

func();

return 0;

}

 

int func( int x )

{

int a=1;

static int b=10;

a++;

b++;

x++;

n++;

cout<<\nlocal a=<<a<<endl<<local b=<<b<<endl

<<parameter x=<<x<<endl;

return a+b;

}

 

运行该程序,得到执行结果。分析得到的结果,说明为什么得到这样的结果。

 

3.递归函数与非递归函数。

编写一个函数,求从n个不同的数中取r个数的所有选择的个数。其个数值为:

         n

C rn=

      r*n-r)!

其中:n!=n*(n-1)*(n-2)*……..*1

要求:

(1) 分别用递归和非递归两种方式完成程序设计;

(2) 主程序中设计一个循环,不断从输入接收nr的值,计算结果并输出,当用户输入0 0时,程序结束;

(3) 能检查输入数据的合法性,要求n>=1并且n>=r;

(4) 注意整数能存放的数据范围有限,如何解决?

提示:

(1) 可以用double数据类型来存放函数的计算结果。

(2) 递归结束条件:

如果r=0,则C(n,r)=1;

如果r=1, C(n,r)=n

     测试数据:

输入:5 3

输出:10

输入:10 20

输出:Iput Invalid1

输入:50 3

输出:1.#IND

输入:0 0

Iput Invalid1

程序结束

思考问题:

(1) 对各种数据类型的字长是否有了新的认识?

(2) 递归函数的书写要点是什么?

(3) 递归和非递归函数各有哪些好处?

 

 

三、实验步骤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、实验结果及分析

 

 

 

成绩

教师签名

 

实验项目名称(五)

指针

实验学时

2

一、实验目的

1.掌握指针的概念,会定义和使用指针变量。

2.能正确使用数组的指针和指向数组的指针变量。

3.能正确使用字符串的指针和指向字符串的指针变量。

4.了解二级指针的概念及其使用方法。

二、实验主要内容

1.输入两个整数,按由大到小的顺序输出。

输入以下程序并调试运行。

#include<iostream>

#include<iomanip>

using namespace std;

int main()

{

    int a, b;

int * p=&a, *q=&b, *t;

cout<<"请输入a和b:";

cin>>a>>b;

if ( a<b )

{    t=p;   p=q;  q=t;  }

cout<<a<<setw(5)<<b<<endl;

cout<<*p<<setw(5)<<*q<<endl;

return 0;

}

输入测试数据,分析运行结果。

2.将若干字符串按英文字典由小到大排序。

提示:利用字符指针数组存放若干字符串,字符串的比较和交换。

3.有n个人围成一圈,从第一个人开始报数(从1到3),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

4.编写程序,当输入整数112(月份号)时,输出该月的英文名称,输入其他整数时结束程序。

例如,输入“4”,则应输出“April”。输入“0”,则退出程序,要求使用指针数组处理。

三、实验步骤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、实验结果及分析

 

 

 

成绩

教师签名

 

 

实验项目名称(六)

结构体

实验学时

2

一、实验目的

1.掌握结构体类型变量的定义和使用。

2.掌握结构数组的概念和使用。

3.掌握链表的概念,初步学会对链表进行操作。

4.掌握联合体的概念与应用。

二、实验主要内容

1.输入和运行以下程序。

#include<iostream>

using namespace std;

union data

{

short int s[2];

float a;

int b;

char c[4];

}u;

int main()

{

cin>>u.s[0]>>u.s[1];

cout<<"s[0]="<<u.s[0]<<"  s[1]="<<u.s[1]<<endl

<<"a="<<u.a<<"   b="<<u.b<<endl

<<"c[0]="<<u.c[0]<<"   c[1]="<<u.c[1]<<endl

<<"c[2]="<<u.c[2]<<"   c[3]="<<u.c[3]<<endl;

    return 0;

}

输入两个整数10000、20000给u.s[0]和u.s[1],分析运行结果。

然后将cin语句改为: cin>>u.b;输入60000给b,分析运行结果。

 

2.打印学生成绩单,内容包括学号、姓名、三门课(数学MT、英语EN、计算机COMPU的成绩。计算每个学生三门课程的总分SUM和平均分AVER。若三门课成绩都在90分以上者,输出“Y;否则输出“N”,并打印学生成绩单,格式如下:

NUM NAME     MT  EN  COMP SUM  AVER  >=90

9501    Liufan     95      98  96.5 289.5 96.5  Y

9502    Zhanghua    95      82       86.5 263.5 87.8333  N

9503    Liming       68       89      85  242  80.6667  N

输入以下程序并调试运行。

#include <iomanip>

using namespace std;

struct student

{

int num;

char name[15];

float score[3];

float sum;

float aver;

char ch;

};

int main()

{

student stu[3];

int i,j;

for ( i=0; i<3; i++ )

{

cin>> stu[i].num;

cin>> stu[i].name;

for ( j=0; j<3; j++ )

    cin>> stu[i].score[j];

}

for ( i=0; i<3; i++ )

{

stu[i].sum=0;

stu[i].ch='Y';

for ( j=0; j<3; j++ )

{

stu[i].sum +=stu[i].score[j];

if (stu[i].score[j]<90)

stu[i].ch='N';

}

stu[i].aver=stu[i].sum/3;

}

cout<<"NUM    NAME    MT    EN     COMP     SUM   AVER   >=90"<<endl;

for (i=0;i<3;i++)

{

cout<<stu[i].num<<setw(8)<<stu[i].name<< setw(8)<<stu[i].score[0]

<<setw(8)<<stu[i].score[1]<<setw(8)<<stu[i].score[2]

<<setw(8)<<stu[i].sum<<setw(8)<<stu[i].aver

<< setw(5)<<stu[i].ch<<endl;

}

return 0;

}

 

3、设计一个单向链表。从标准输入读取若干整数,建立链表,每次读入的数放入链表结尾。当用户输入0时,结束链表的建立工作。然后从前往后依次输出链表结点中的内容。

提示:

(1) 链表结点空间动态申请。

(2) 因为每次新结点插入在表尾,所以应设一个指针总是指向当前的表尾。

(3) 处理申请不到空间的情况。

测试数据:

    程序输出:请输入若干整数建立链表(输入0结束):

    用户输入:1 2 3 4 5 6 7 0

    程序输出:1 2 3 4 5 6 7

思考问题:

    如果是双向链表,程序要做哪些改动?

 

三、实验步骤

 

 

 

四、实验结果及分析

 

成绩

教师签名

 

实验项目名称(七)

类与对象

实验学时

2

一、实验目的

1.类的定义

2.类对象的使用

3.类成员变量的定义和使用

4.类成员函数的定义和使用

5.理解类的作用域

6.理解类的声明

7.理解类中private和public权限的声明依据。

二、实验主要内容

1.理解下面的程序并运行查看结果,回答程序后面的问题。 

#include <iostream> 

using namespace std; 

class CDate 

 void Set(int m, int d, int y )  

{ month = m  

day = d  

year = y    

 int IsLeapYear()  

{  return (year%4 == 0 && year%100 != 0)||(year%400 == 0);   } public: 

 void Print() 

{  cout<<month<<"/"<<day<<"/"<<year<<endl;  } 

private: 

 int  month;    

int  day;    

int  year; 

}; 

void main() 

 CDate  a; ————————————————– (1)  

a.Set(10,15,2007)      

a.Print(); 

问题一:以上程序编译能通过吗,为什么,应该如何改正?

问题二:类CDate中分别有哪些成员函数和成员变量,它们分别属于哪种访问权限?

问题三:(1)处语句的意思是什么?

 

2.理解下面的程序并运行查看结果,回答程序后面的问题。 

#include <iostream> 

using namespace std; 

int month;//全局变量   

int day;   

int year; 

void Set(int m,int d,int y) 

 ::month=m; ————————————————-(1)  

::day=d;   

::year=y; 

 

class CDate 

public:  

 void Set(int m,int d,int y)   

{ ::Set(m,d,y); ————————————————-(2)} 

void Print()  

{ cout<<month<<"/"<<day<<"/"<<year<<endl;  } 

private:  

 int month; //成员变量  

int day;   

int year; 

};  

void main()

{   

CDate  a;      

a.Set(10,15,2007)   

a.Print();

}  

问题一:(1)处是在给成员变量赋值,还是在给全局变量赋值,如果去掉域作用符::,程序是否还能正确运行?

问题二:(2)处调用的哪个函数,如果去掉域作用符::,程序是否还能正确运行?

问题三:该程序的输出结果是什么,试解释该输出结果。

 

3.设计实现一个CPoint类,满足以下要求:

a.该类包含两个整型成员变量x(横坐标)和y(纵坐标),以及一个输出函数Print()用来输出横坐标和纵坐标,要求不可以在类的外部直接访问成员变量;  

b.可以采用没有参数的构造函数初始化对象,此时的成员变量采用默认值0;  

c.可以采用直接输入参数的方式来初始化该类的成员变量;  

d.可以采用其它的CPoint对象来初始化该类的成员变量;  

e.设计一个主函数来测试以上功能。

三、实验步骤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、实验结果及分析

 

 

 

成绩

教师签名

 

实验项目名称(八)

运算符重载

实验学时

2

一、实验目的

1.进一步了解运算符重载的概念和使用方法。 

2.掌握几种常用的运算符重载的方法。

3.了解转换构造函数的使用方法。

二、实验主要内容

1.理解下面的程序并运行查看结果,回答程序后面的问题。 

#include <iostream> 

using namespace std; 

class CComplex 

{ public: 

  CComplex()  

   {   

      real = 0;    

      imag = 0;  

 

  CComplex(int x,int y)  

   {   

      real = x;   

      imag = y;  

    }   

   int real;  

    int imag;   

  CComplex operator + (CComplex obj1)——————————-(1)   {   

       CComplex obj2(real + obj1.real, imag + obj1.imag);   

       return obj2;  

     } 

};

int main() 

 

   CComplex obj1(100,30);  

   CComplex obj2(20, 30);  

   CComplex obj; 

  obj = obj1+obj2; ——————————–(2) 

cout << obj.real <<endl;  

cout << obj.imag << endl; 

return 0;

}

问题一:(1)处的运算符重载,为什么该函数的返回值要设计成CComplex类型?

问题二:(2)处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?

 

2.理解下面的程序并运行查看结果,回答程序后面的问题。 

#include <iostream> 

using namespace std; 

class CComplex 

{ public: 

  CComplex()  

  { real = 0.0;    

     imag = 0.0;  

   } 

 

   CComplex(float x, float y)  

  { real = x;   

     imag = y;  

   } 

 

  CComplex operator + (CComplex &obj1, CComplex &obj2)  

  { CComplex obj3(obj1.real + obj2.real, obj1.imag + obj2.imag);   

return obj3;  

 

CComplex &operator++(CComplex &obj)  

{ obj.real += 1;   

obj.imag +=1;   

return obj;  

void print()  

{   cout<<real<<"+"<<imag<<"i"<<endl;  }

private:   

float real;  

float imag;

};   

CComplex &operator–(CComplex &x)

{  x.real -= 1;  

x.imag -= 1;  

return x;

}   

int main()

{   CComplex obj1(2.1,3.2);  

CComplex obj2(3.6,2.5);  

cout<<"obj1=";  

obj1.print();  

cout<<"obj2=";  

obj2.print();   

CComplex obj3 = obj1 + obj2;  

cout<<"befor++, obj3=";  

obj3.print();  

++obj3;   

cout<<"after++, obj3=";  

obj3.print();  

–obj3;   

cout<<"after–, obj3=";  

obj3.print();   

CComplex obj4 = ++obj3;  

cout<<"obj4=";  

obj4.print(); }  

问题:以上程序中的三个运算符重载都有错误,试改正过来,并分析该程序的输出结果。

三、实验步骤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、实验结果及分析

 

 

 

成绩

教师签名

 

 

实验项目名称(九)

派生与继承

实验学时

2

一、实验目的

1.理解继承的含义以及声明 

2.掌握共有派生、私有派生和保护派生的含义以及使用

3.掌握单派生类中构造函数和析构函数的调用顺序

4.理解多重派生的定义

5.掌握多重派生中构造函数与析构函数的调用顺序

6.理解多重派生中虚拟基类的作用

二、实验主要内容

1.理解下面的程序并运行查看结果,回答程序后面的问题。  

#include <iostream>

using namespace std;

class CBase

{  public:   

     CBase(int a)   :a(a)  

     {  }

   protected:   

     void print()   

    {   cout<<"a="<<a<<endl;  }

   private:  

     int a;

};  

class CDerive : public CBase

{  public:   

     void print()  

     {   CBase::print();   

         cout<<"b="<<b<<endl;  

      }

    private:

     int b; 

};  

 

int main() 

 CDerive d;  

     d.print();  

     CBase b;  

     b.print(); 

     return 0;

问题:以上程序有两大错误,试指出来,并改正之?

 

2.理解下面的程序并运行查看结果,回答程序后面的问题。 

#include <iostream>

using namespace std;

class CBase1 

{ public: 

    CBase1(int a) :a(a)  

     {  cout<<"base1 structure…"<<endl;  } 

    ~CBase1()  

     {   cout<<"base1 destructure…"<<endl;  } 

    void print()  

     {   cout<<"a="<<a<<endl;  } 

   protected:  

     int a; 

}; 

 

class CBase2 

{ public: 

   CBase2(int b) :b(b)  

    {  cout<<"base2 structure…"<<endl;} 

   ~CBase2()  

    {  cout<<"base2 destructure…"<<endl;  } 

   void print()  

    {  cout<<"b="<<b<<endl;  } 

   protected:  

     int b; 

}; 

 

class CDerive : public CBase1, public CBase2 

{ public: 

    CDerive()  

     {  cout<<"derive structure…"<<endl;  } 

    ~CDerive()  

     {  cout<<"derive destructure…"<<endl; } 

    void print()  

     { CBase1::print();   

        CBase2::print();   

        b1.print();   

        b2.print();   

        cout<<"c="<<c<<endl;  

      } 

   private: 

 

     CBase1 b1;  

     CBase2 b2;  

     int c; 

};  

int main() 

{ CDerive d;  

   d.print(); 

   return 0;

问题:改正以上程序中存在的错误,并分析该程序的输出结果

 

3.定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类具有以下特点: 

a.CLine类含有计算直线长度和斜率的成员函数; 

b.CCircle类含有计算圆面积的成员函数。

三、实验步骤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、实验结果及分析

 

 

 

成绩

教师签名

 

 

实验项目名称(十)

某公司人员信息管理系统

实验学时

2

一、 实验目的

综合运用前面所学的各种知识,编写较复杂的程序。

二、实验主要内容

利用面向对象编程方法为某公司设计一个人员信息管理系统。

要求:

1)首先定义一个公司职员类,用来描述公司所有人员的共同信息(姓名、个人编号、级别、月薪总额);

2)然后通过继承定义兼职技术人员类、兼职推销员类、经理类和销售经理类,分别为每个类定义计算月薪函数和显示人员信息函数。月薪计算方法为:

兼职技术人员类:月薪=每小时酬金*本月的工作时数

兼职推销员类:月薪=销售提成

经理类:月薪=固定月薪

销售经理类:月薪=固定月薪+销售提成

提示:

将公司职员类定义为抽象基类,将计算月薪函数和显示人员信息函数定义为虚函数。

三、实验步骤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、实验结果及分析

 

 

 

成绩

教师签名

 

 

    关键字:

天才代写-代写联系方式