程序实验报告

《程序设计基础》实验报告

      实验一  面向过程的简单程序设计

1.实验目的

掌握C++语言的数据类型(包括对各种数据类型变量的定义、初始化、赋值等)、运算符和表达式的使用。掌握赋值语句的使用。掌握数据的输入输出方法。

2.实验设备   

Visual  C++ 6.0

3.实验内容

(1)设计简单程序,分别计算下列表达式,式中变量由键盘输入,输出表达式的值。

<1>  

源代码:

#include

#include

void main()

{

 int x,a,b,c,d,e,f,g;

 cout<<"x=";

 cin>>x;

 cout<<"a=";

 cin>>a;

 cout<<"b=";

 cin>>b;

 cout<<"c=";

 cin>>c;

 cout<<"d=";

 cin>>d;

 e=a+b;

 f=c-d;

 g=e/f;

 cout<<(x+g)<

}

   

测试过程和运行结果分析:

  输入数据为:2  3  4  2  5     运行结果为:0

<2>

源代码:

#include

#include

void main()

{

  float x,a,b,c,d,e;

  cout<<"x=";

  cin>>x;

  a=x+1;

  b=1/a;

  c=x+b;

  d=1/c;

  e=1+d;

  cout<<"jieguo"<

}

测试过程和运行结果分析:

输入数据为:2              运行结果为:1.19523

<3> sinX+cosX+tan-1X

源代码:

#include

#include

void main()

{

  float x,a,b,c,d;

  cout<<"x=";

  cin>>x;

  a=sin(x);

  b=cos(x);

  c=1/tan(x);

  d=a+b+c;

  cout<<"jieguo"<

}

测试过程和运行结果分析:

输入数据为:1         运行结果为:2.02387

  <4> ex+y+ex-y

          源代码:

#include

#include

void main()

{

 int x,y;

 float a,b,c;

 cout<<"x=";

 cin>>x;

 cout<<"y=";

 cin>>y;

 a=exp(x+y);

 b=exp(x-y);

 c=(a+b);

 cout<<"jieguo"<

}

测试过程和运行结果分析:

输入数据为:x=1 y=1        输出数据为:8.38906

<5>log10(1+)

源代码:

#include

#include   

void main()

{

 float a,b,c,x,d;

 cout<<"x=";

 cin>>x;

 a=(1+x*x);

 b=sqrt(a);

 c=(1+b);

 d=log10(c);

 cout<<"jieguo"<

}

测试过程和运行结果分析:

输入数据为:x=8                  输出数据为:0.957236

<6>+

源代码:

#include

#include

void main()

{

  int a,b,c,d,e;

  cout<<"a=";

  cin>>a;

  cout<<"b=";

  cin>>b;

  c=abs((a*a)-(b*b));

  d=abs(a-b);

  e=(c+d);

  cout<<"jieguo"<

}

测试过程和运行结果分析:

输入数据为:a=2 b=1                输出数据为:4

(2)阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能。

<1>  

测试过程和运行结果分析:

   输入数据为:A     运行结果为:A

      输入数据为:a     运行结果为:A

无论输入为大写或小写字母时,结果都为大写。其中

ch = ( ch >= ’A’ && ch <= ’Z’ ) ? ( ch + 32 ) : ch ;  

此语句是将大写字母转换为小写字母,如果是小写字母,则保持不变

<2>

测试过程和运行结果分析:

输入数据为:100  40,   2000  3000,   1000  1000,    2000  300,    100  4000

运行结果为: 0  , 1 ;     1,   0 ;     0,    1 ;      1,   1;       0, 0

功能:分别判断数m,n与1000的大小

<3>

测试过程和运行结果分析:

输入数据为:9                 运行结果为10

输入数据为:10                运行结果为11

输入数据为:11                运行结果为12

功能:输入一个n,给n加1后输出

(3)编写程序实现下列问题的求解。

<1> 根据随机从键盘输入的圆半径值,求圆的周长和半径并输出。

源代码:

#include

void main()

{

  float pi,r,c,s;

  pi=3.14;

  cout<<"r=";

  cin>>r;

  cout<<"r="<

  cout<<"c="<<(2*pi*r)<

  cout<<"s="<<(pi*r*r)<

}

测试过程和运行结果分析:

输入数据为:r=3

运行结果为:r=3

c=18.84

s=28.26

<2> 读入三个整数a、b、c,交换它们中的数,使a存放b的值,b存放c的值,c存放a的值。

源代码:

#include

void main()

{

int a,b,c,t;

    cout<<"a=";

cin>>a;

cout<<"b=";

cin>>b;

cout<<"c=";

cin>>c;

t=a;

a=b;

    b=c;

c=t;

cout<<"a="<

cout<<"b="<

cout<<"c="<

}

测试过程和运行结果分析:

输入数据为:a=1   b=2    c=3

运行结果为:a=2   b=3    c=1

<3> 对任意输入的四位整数,分别求出其各位数字,并按从后到前的顺序依次输出。例如,输入为1234时,输出结果为4,3,2,1

源代码:

#include

#include

void main()

{

  int a,b,c,d,x;

  cout<<"x=";

  cin>>x;

  a=(x/1000);

  b=(x/100-a*10);

  c=(x/10-a*100-b*10);

  d=(x-a*1000-b*100-c*10);

           cout<

}

测试过程和运行结果分析:

输入数据为:2345               运行结果为:5432

3.思考题

* 对任意输入的小于1的并且只有3位尾数的实数,分别求出其各位数字并输出。要求输出的各数字之间要空2格。例如,输入为0.368时,输出结果为‘0  3  6  8’。

源代码:

#include

#include

void main()

{

    float x;

    int a,b,c,d;

    cout<<"x=";

    cin>>x;

    a=x*1000/100;

    b=x*1000/10-a*10;

    c=x*1000-a*100-b*10;

    d=0;

    cout<

}

测试过程和运行结果分析:

输入数据为:0.423                 运行结果为:0  4  2  3

实验总结

本次实验学习了C/C++语言编程基本语法,能编写简单的赋值和输入输出程序。

                      实验二  控制结构程序设计

1.实验目的

掌握if/else语句的用法,掌握循环语句for,do/while的用法。

2.实验设备   

Visual  C++ 6.0

3.实验内容

(1)阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能。

<1>测试过程和运行结果分析:

运行结果:

<1000,850><150,850><150,700><150,550><150,400><150,250><150,100><50,100><50,50>

       50

功能:给定2个数,用大数a减小数b,得到a-b,b一直循环下去,知道两数相等,之后输出相等的那个数。

<2>测试过程和运行结果分析:

运行结果:<1000:45>22---10

功能:得出1000除以45的商数22和余数10

<3>测试过程和运行结果分析:

运行结果为:*#*#*#$

功能:i等于1,3,5时有余数,输出*#3次,没余数结束本次循环,以$结尾

<4>测试过程和运行结果分析:

运行结果为:a=2   b=8

功能:首次循环得出b=9,a=2,之后b--,b=8>0,跳出循环,输出结果.

(2)编写程序实现下列问题的求解。

<1> 求解下面函数的值。

               ex+y                     x<0,y<0

         z=   ln(x+y)                 1≤x+y〈10

              log10|x+y|+1               其它情况

源代码:

#include

#include

void main()

{

 float x,y;

 cin>>x>>y;

      if (x<0&&y<0){

               cout<<"jieguo"<<(exp(x+y)); }

else if(1<=(x+y)<10){

               cout<<"jieguo"<

else  {cout<<"jieguo"<

 }

<2> 编程求解下列各计算式:

1)       S= =1+2+3+…+100

源代码:

#include

void main()

{

 int s,i;

     s=0,i=1;

     while (i<=100){

         s=s+i;

         i=i++;

     }

         cout<<"jieguo"<

}

2)       S==1!+2!+…+7!

源代码:

#include

void main()

{

    float s=0,i=1;

    int j;

    for (j=1;j<=7;j++)

    {

        i=i*j;

        s=s+i;

    }

    cout<<"jieguo"<

}

3)       S=1×2+3×4+5×6+…+39×40

源代码:

#include

void main()

{

    int s,i,j;

       s=0,i=1;

       while (i<=39){

      j=(i*(i+1));

      s=s+j;

      i=i+2;}

       cout<<"jieguo"<

}

4)Y=X+…+(-1)n+1的值,其中X和n的数值由用户从键盘输入源代码:

#include

#include

int ft(int n)

    {

        int r;

        if(n==0) r=1;

        else r=n*ft(n-1);

        return r;

    }

void main()

{

   float x,y;

   int n,a;

   cout<<"x=";

   cin>>x;

   cout<<"n=";

   cin>>n;

   y=0;

   for(a=1;a<(2*n-1);a++)

   {

       y=y+(pow(-1,a+1)*pow(x,2*a-1))/(ft(2*a-1));

   }

   cout<<"y="<

}

<4> 编程产生出1到10以内的所有数对并输出,其中i>j

源代码:

#include

void main()

{

    int i,j;

    for(i=1;i<10;i++)

       for (j=1;j<10;j++)

           if(i

               cout<<"<"<"<

}

<5> 编程求出10000以内的所有符合如下条件的数:其高位数字小于低位数字。如12,238,3578等。但21,548不符合条件。

源代码:

#include

#include

void main()

{

   int i,a,b;

   for (i=10;i<100;i++)

   {      a=i/10;

          b=i-a*10;

          if (a

      cout<

   }

   int j,c,d,e;

     for (j=100;j<1000;j++)

     {

       c=(j/100);

       d=((j/10)-c*10);

       e=(j-c*100-d*10);

          if ((c

          { cout<

     }

    int p,f,g,h,k;

      for(p=1000;p<10000;p++)

      {

          f=p/1000;

          g=p/100-f*10;

          h=p/10-f*100-g*10;

          k=(p-f*1000-g*100-h*10);

          if ((f

              cout<

      }

}

<6> 求任一整数N的标准分解式,即素数因子之积。例如16=2*2*2*2, 15=3*5

源代码:

#include

#include

void main()

{

    int n,i;

    cout<<"n=";

    cin>>n;

    i=2;

    while (i<=n)

    {if ((fmod(n,i))==0)

    {cout<

    n=n/i;}

     else

         

     i=i++;

    }

           

}

实验总结

本次实验掌握了if/else语句和switch语句、while语句、do/while语句和for语句的使用.

                  实验三  数  组

1.实验目的

掌握一维数组和二维数组的定义、初始化赋值、元素引用、字符数组和字符串函数的使用方法以及与数组有关的算法(特别是排序和查找算法)。初步了解数组名与地址的关系。

2.实验设备   

Visual  C++ 6.0

3.实验内容

(1)阅读下列程序,写出其运行结果,并指出其功能

<1>测试过程和运行结果分析:

运行结果:100  1  99  9  96  25  91  49  84  81

Sum of a =635

100  99  96  91  84  81  49  25  9  1

功能:将数组a[i]按由大到小的顺序排序

<2>测试过程和运行结果分析:

运行结果为:CERCOMP

功能: 判断a[0]!= '\0' 后,从b[ 1] = a[ 1] 将a[i]赋值给了b[i]。

<3>测试过程和运行结果分析:

输入数据为:8   2      运行结果为:1000

功能:前3次循环,num[1]=0n=4;num[2]=0n=2;num[3]=0n=1;第四次1%2不够除,余数为1,n=0;之后把num[i]倒序输出。

(2)编写程序实现下列问题的求解。

<1> 编程产生下列数组,并输出。

    ⑴一维数组

      1)  (1  4  9 16 25 36 49 64 81 100)

源代码:

#include

void main()

{

    int a[10];

    int i,n;

    n=1;

    for(i=1;i<=10;i++) {a[n]=i*i;n++;}

    cout<<"(";

    for(n=1;n<10;n++) {cout<

    cout<

}

⑵二维数组

      1)  1 2 3 4 5 6        

          2 3 4 5 6 0            

          3 4 5 6 0 1            

          4 5 6 0 1 2                

          5 6 0 1 2 3           

          6 0 1 2 3 4   

源代码:

#include

void main()

{

    int a[6][6];

    int i,j;

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

    {  

        a[i][0]=i+1;

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

        { 

            if(a[i][j]>6) {a[i][j]=0;}

            cout<

            a[i][j+1]=a[i][j]+1;

        }

        cout<

    }

}

<2> 编程实现数组的排序:将有15个元素的整型数组按从小到大的次序排序。

源代码:

#include

void main()

{

    int a[15];

    int i,j,t;

    printf("input 15 nums :\n");

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

        scanf("%d",&a[i]);

    printf("\n");

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

        for(i=0;i<14-j;i++)

            if(a[i]>a[i+1])

            {

                t=a[i];

                a[i]=a[i+1];

                a[i+1]=t;

            }

            printf("jieguo:\n");

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

               printf("%d",a[i],"\n");

     printf("\n");

}

<3> 编程求一组整数的最大公因子和最小公倍数。

源代码:

#include

int gcd(int n,int m)

{

   int r,p,temp;

  

   if (n

   {

       temp=n;

       n=m;

       m=temp;

   }

   p=n*m;

   while(m!=0)

   {

       r=n%m;

       n=m;

       m=r;

   }

   return n;

}

int gbs(int n,int m)

{

    int r,p,temp,z;

   if (n

   {

       temp=n;

       n=m;

       m=temp;

   }

   p=n*m;

   while(m!=0)

   {

       r=n%m;

       n=m;

       m=r;

   }

   z=(p/n);

   return z;

}

void main()

{

   int a[50];

   int i=-1;

   cout<<"input nums ,ending is 0"<

   do{

       i++;

       cin>>a[i];

   }while(a[i]!=0);

   int j,n;

   j=gcd(a[0],a[1]);

   for(n=2;n<=i-1;n++)

   {

       j=gcd(j,a[n]);

   }

   cout<<"最大公因子为"<

   j=gbs(a[0],a[1]);

   for(n=2;n<=i-1;n++)

   {

       j=gbs(j,a[n]);

   }

   cout<<"最小公倍数为"<

}

<5> 将两个字符串连接起来,不要用strcat

源代码:

#include

void main()

{

    char s1[80],s2[40];

    int i=0,j=0;

    cout<<"shuru1"<

    cin>>s1;

    cout<<"shuru2"<

    cin>>s2;

    while (s1[i]!='\0')

        i++;

    while (s2[j]!='\0')

        s1[i++]=s2[j++];

    s1[i]='\0';

    cout<<"jieguo"<

}

实验总结

本次实验掌握一维数组和二维数组的定义、初始化赋值、元素引用、字符数组和字符串函数的使用方法以及与数组有关的算法(特别是排序和查找算法)。初步了解数组名与地址的关系。

                  实验四  函  数

1.实验目的

                  理解并掌握如何模块化的用函数来构建程序,定义函数的方法,了解函数的重载方法,了解内联函数的机制以及函数间传递信息的机制,函数的嵌套调用(和递归调用)的方法,全局变量和局部变量、动态变量和静态变量的概念和使用方法。

2.实验设备   

Visual  C++ 6.0

3.实验内容

(1)阅读下列程序,写出其运行结果,并指出其功能。

<1>输入数据为:48,32    运行结果为:hcf=16

                                     Lcd=96

功能:求最大公约数和最小公倍数

<2>运行结果为:k=13

功能:fib()是递归函数. fib(g)= fib(g-1)+fib(g-2)

<3>运行结果:(2)?

(3)5,6

(1) 4,6

功能:第二行int k = 1 ;定义全局变量,fun函数中,将i=4传递给形参m,m=m+k=5;k=k+m=6,接着输出 Ascall码中‘B’-‘A‘的字符,再输出m,n的值。

<4>运行结果是:0 0

        0 0

        9 3

        6 12    

1)  如果问题(1)处语句改为static int x,y ; ,运行结果会发生改变么?为什么?

答:结果没发生改变,因为定义局部变量时不赋初值,对静态局部变量来说,编译时自动赋初值0.

(2)编写程序实现下列问题的求解。

<1> 求方程ax2+bx+c=0的根,用三个函数分别求b2-4ac大于0、等于0和小于0时的根,并输出结果。从主函数输入a、b、c的值。

源代码:

#include

#include

float x1,x2,disc,p,q;

void main()

{void greater_than_zero(float,float);

 void equal_to_zero(float,float);

 void smaller_than_zero(float,float);

 float a,b,c;

 printf("\ninput a,b,c:");

 scanf("%f,%f,%f",&a,&b,&c);

 printf("equation:%5.2f*x*x+%5.2f*x+%5.2f=0\n",a,b,c);

 disc=b*b-4*a*c;

 printf("root:\n");

 if (disc>0)

 {

          greater_than_zero(a,b);

          printf("x1=%f\t\tx2=%f\n",x1,x2);

 }

 else if (disc==0)

 {equal_to_zero(a,b);

  printf("x1=%f\t\tx2=%f\n",x1,x2);

 }

 else

 {smaller_than_zero(a,b);

  printf("x1=%f+%fi\tx2=%f-%fi\n",p,q,p,q);

 }

}

  void greater_than_zero(float a,float b)

  {x1=(-b+sqrt(disc))/(2*a);

   x2=(-b-sqrt(disc))/(2*a);

  }

  void equal_to_zero(float a,float b)

  {

           x1=x2=(-b)/(2*a);

  }

   void smaller_than_zero(float a,float b)

   {

            p=-b/(2*a);

            q=sqrt(-disc)/(2*a);

   }

<2> 用函数实现将一个以字符串形式表示的十六进制数转换为一个十进制整数。例如,输入”A2”转换为162

源代码:

#include

int transform(int &n);

void main()

{

     int n;

     printf("输入十六进制数:\n");

     scanf("%x",&n); 

     printf("输出十进制数:\n");

     printf("%d\n",n);

}

int transform(int &n)

{

   int a = n;

   int r = 1,b = 0;

   while(a!=0)

   {

      b += (a%10)*r;

      a /= 10;

      r *= 8;

   }

   return b;

}

<3> 编写一个将十进制整数转换为十六进制字符串的函数。

源代码:

#include

void itoa0(int n,char s[],int b);

int main(){

        

         int m;

         char a[50];

         cout<<"请输入一个十进制整数";

         cin>>m;

         itoa0(m,a,16);

         cout<

         return 0;

}

void itoa0(int n,char s[],int b){

         int i=0;

         do{

                  s[i]=n%b;

                  if(s[i]>9){

                           s[i]+='A'-10;

                  }else{

                           s[i]+='0';

                  }

                  n/=b;

                  i++;

         }while(n!=0);

         s[i]='\0';

         for(int j=0; j

        char temp=s[j];

                  s[j]=s[i-j-1];

                  s[i-j-1]=temp;

                 

         }

        

}

<4> 编写出判断一个整数是否为素数的函数,并求出在2000以内的有十个以上的所有连续的非素数组。

源代码:

#include

#include

using namespace std;

int Prime(int n)

{

    int i,k=(int)sqrt(n)-1;

    for(i=2;i

        if(n%i==0)break;

        if((i==k))return 1;

        else return 0;

}

int main()

{

    int m,i,j,h=0,SUM=0;

    int a,b;

    cout<<"\n input a,b:";

    cin>>a>>b;

    for(m=a;m<=b;m++)

    {

        h=0;

        if(Prime(m)==1)

        {

            for(i=1;;i++)

            {

                if((Prime(m+i)==0)&&(m+i<=b))h++;

                else break;

            }

            m=m+i;

            if(h>=9)

            {SUM++;

            cout<

            for(j=i-1;j>=-1;j--)

                cout<

            cout<<"\n";

            }

        }

        else continue;

    }

    cout<<"\nThe total groups are "<

    return 0;

    cin>>m;

}

实验总结

本次实验了解如何模块化的用函数来构建程序,定义函数的方法,能够初步运用函数来编译程序。

实验五  指针

1.实验目的

掌握指针的概念,学会定义和使用指针变量。学会使用数组指针和指向数组的指针变量,使用字符串指针和指向字符串的指针变量,了解指向指针的指针的概念以及其使用方法,握指针、引用、数组做函数参数的传递机制以及使用指向函数的指针变量。

2.实验设备   

Visual  C++ 6.0

3.实验内容

(1)阅读下列程序,写出其运行结果,并指出其功能。

<1>运行结果为:-5,-12,-7

功能:sub( 10 , 5 , &a ) ;得出a=-5,sub( 7, a, &b ) ;得出b=-12;sub( a, b, &c ) ;得出c=-7

<2>输入数据:aaa    运行结果为:3

   输入数据:bbbb    运行结果为:4

功能:while( * ( str + num ) != '\0' )  num ++ ;计算输入字符个数。

(2)将一个3*3的矩阵转置,用一个函数实现。在主函数中用scanf输入以下矩阵元素:{2,4,6,8,10,12,14,16,18}。将数组名作为函数参数。函数调用后在主函数中输出已转置的矩阵。

源程序:

#include

void main()

{

   void move(int *p);

   int a[3][3],i;

   printf("input matrix:\n");

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

       scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);

   move(a[0]);

   printf("now,matrix:\n");

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

       printf("%d%d%d\n",a[i][0],a[i][1],a[i][2]);

}

void move(int *p)

{

    int i,t,j;

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

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

        {

            t=*(p+3*i+j);

            *(p+3*i+j)=*(p+3*j+i);

            *(p+3*j+i)=t;

        }

}

(3)  自己写一个strcmp函数,实现两个字符串的比较。两个字符串s1,s2由main函数输入,strcmp函数的返回值也在main函数中输出。

源程序:

#include

void main()

{

    int strcmp(char *p1,char *p2);

    int m;

    char s1[30],s2[30],*p1,*p2;

    cout<<"输入字符串"<

        cin>>s1;

        cin>>s2;

    p1=&s1[0];

    p2=&s2[0];

    m=strcmp(s1,s2);

    cout<

}

int strcmp(char *p1,char *p2)

{

   int i;

   i=0;

   while(*(p1+i)==*(p2+i))

       if(*(p1+i++)=='\0') return(0);          /*s1=s2返回0*/

   return(*(p1+i)-*(p2+i));                        /*不等于时返回ascall差*/

}

实验总结

本次实验掌握指针的概念,学会定义和使用指针变量。学会使用数组指针和指向数组的指针变量,使用字符串指针和指向字符串的指针变量,了解指向指针的指针的概念以及其使用方法,握指针、引用、数组做函数参数的传递机制以及使用指向函数的指针变量。

实验六  结构和联合类型以及编译预处理

1.实验目的

掌握结构类型变量、联合类型变量的定义和使用,以及两者在内存中分配空间时的区别,结构类型数组的概念和使用以及宏定义、文件包含、条件编译的方法。

2.实验设备   

Visual  C++ 6.0

3.实验内容

3编写程序实现下列问题的求解。

<1> 在某系的成绩登记册中,每个班最多有40个学生,每份成绩表中的成绩信息包括:学号(9位字符),姓名(8位字符),成绩(百分制),备注(20位字符)。设计程序以处理一个班级的成绩信息,包括输入、输出、查询(给定分数以上或以下的学生信息)、按分数排序等。

源代码:

#include

int n=0;

int i,g;

struct stu{

        char num[9];

        char name[8];

        int grade;

        char etc[20];

    };

struct stu s[40];

void printout()

{     

    for(i=0;i

    {

        cout<<"num:"<

        cout<<"name:"<

        cout<<"grade:"<

        cout<<"etc:"<

    }

}

void find()

{

    int select,g;

    cout<<"give your grade"<

    cin>>g;

    cout<<"grade is high,please select1,otherwise select2"<

    cin>>select;

    switch(select){

    case 1:

    for(i=0;i

    {

            if(s[i].grade>=g)

            {

             cout<<"num:"<

             cout<<"name:"<

             cout<<"grade:"<

             cout<<"etc:"<

            }

    };

    break;

    case 2:

        for(i=0;i

    {

            if(s[i].grade

            {

             cout<<"num:"<

             cout<<"name:"<

             cout<<"grade:"<

             cout<<"etc:"<

            }

    };

    break;

    }  

}

void high()

{

    for(i=0;i

    {

            if(s[i].grade>=g)

            {

             cout<<"num:"<

             cout<<"name:"<

             cout<<"grade:"<

             cout<<"etc:"<

            }

    }

}

void low()

{

    for(i=0;i

    {

            if(s[i].grade

            {

             cout<<"num:"<

             cout<<"name:"<

             cout<<"grade:"<

             cout<<"etc:"<

            }

    }

}

void order()

{

    int j,temp;

    for (i=0;i

    {

        for (j=i+1;j

        {

            if (s[i].grade>s[j].grade)

            {

                temp=s[i].grade;

                s[i].grade=s[j].grade;

                s[j].grade=temp;

            }

        }

    }

    printout();

}

void main()

{  

int judge;

    do

    {

    cout<<"printin the num"<

    cin>>s[n].num;

    cout<<"printin the name"<

    cin>>s[n].name;

    cout<<"printin the grade"<

    cin>>s[n].grade;

    cout<<"printin the etc"<

    cin>>s[n].etc;

    cout<<"end cin1,go on cin0"<

    cin>>judge;

    n++;

    }while(judge==0);

    cout<<"Please give me command"<

    cout<<"1,print all the information"<

    cout<<"2,grade is higher than what you give"<

    cout<<"3,grade is lower than what you give"<

    cout<<"4,keep in order"<

    int x;

    cin>>x;

    switch(x){

    case 1:

    printout();

        break;

    case 2:

     high();

        break;

    case 3:

     low();

    case 4:

        order();

        break;

    }

}

实验总结

本次试验掌握结构类型变量、联合类型变量的定义和使用,以及两者在内存中分配空间时的区别,结构类型数组的概念和使用以及宏定义、文件包含、条件编译的方法。

                实验七  类与对象

1.实验目的

掌握类的定义和实现以及对象创建和使用的基本方法。

2.实验设备   

Visual  C++ 6.0

3.实验内容

(1)下面程序定义了一个以hours, minutes和seconds作为数据成员的Time类。设计了成员函数将两个Time对象相加(即时间相加),并进行相应的检查,查看增加的分钟数及秒数是否大于59。如果秒数大于59,则分钟数向前递增1。类似地,如果分钟数大于59,则小时数向前增1。

输入数据:2  34  45

1  47  56

运行结果:4:22:41

输入数据:2  67  100

      1  56  200

运行结果:4:64:240

1)定义构造函数对Time类的对象进行初始化(即不用成员函数get_time)。

答:在public中加入Time(int h,int m,int s){hours=h;minutes=m;seconds=s;},然后在main中创建对象后面加上括号,里面数据为hours minutes seconds.

2)该程序要求用户输入的分钟数和秒数必须小于60,如何修改程序使得用户在输入分钟数和秒数大于等于60时,也能得到正确的结果。

答:if(seconds>=60){seconds-=60;minutes++;}中if改为while,if(minutes>=60){minutes-=60;hours++;}中,if改为while。

(2)阅读下面的一段程序代码,代码可能有错误,请仔细分析并体会。

1)仔细阅读上面程序,如果有错误,请更正。

改为:

#include

class Date {

       public:

          Date(){};

                    Date(int year,int month,int day);

           ~Date(){};

          int &GetYear(){return year;}

          int &GetMonth(){return month;}

          int &GetDay(){return day;}

        private:

          int year;

          int month;

          int day;

          static bool IsLeapyear;//是否闰年

      };

bool Date::IsLeapyear=true;

Date::Date(int year,int month,int day)

{

    (*this).year=year;

    (*this).month=month;

    (*this).day=day;

}

void main()

{

  int year,month,day;

  cin>>year>>month>>day;

  Date mydate(year,month,day);

int  &myyear=mydate.GetYear();

int  &mymonth=mydate.GetMonth();

int  &myday=mydate.GetDay();

  cout<

myyear=8888;

cout<< mydate.GetYear();

}

2)main函数中int &myyear=mydate.GetYear(); 、int &mymonth=mydate.GetMonth();  和int  &myday=mydate.GetDay();语句表达的是什么思想?这样做的目的是什么?这种方法是否“好”呢?为什么?如果“不好”应该怎样修改?

答:定义myyear mymonth myday引用了mydate中的year,month,day,能通过改变myyear mymonth myday来改变year,month,day。目的是建立3个int 型变量,将数据输出。此方法不好,因为这样类中的私有数据就容易被改变,对程序不好。

(3)编程题

<1>设计一个学生类(student),拥有私有属性:学号(num),姓名(name)。以及若干成员函数。同时编写主函数使用这个类,实现对数据的赋值和输出。要求:

1.     用成员函数实现数据的输入和输出。

源代码:

#include

#include

class STUDENT

{private:

        int num;

              char name[10];

 public:

          

           void setnum(int a){num=a;}

              void setname(char b[10]){strcpy(name,b);}

              void getnum(){cout<<"num is"<

              void getname(){cout<<"name is"<

           };

void main()

{ STUDENT s1;

       int xuehao;

char mingzi[10];

cin>>xuehao;

cin>>mingzi;

s1.setnum(xuehao);

s1.setname(mingzi);

s1.getnum();

s1.getname();

}

2.  用构造函数实现数据的输入。

源代码:

#include

class STUDENT{

private:

     int num;

     char name[20];

public:

    STUDENT();

    char* getname(){cin>>name;return name;}

};

STUDENT::STUDENT()

{cin>>num; cout<<"num is"<

void main()

{  

   STUDENT n;

    cout<<"name is"<< n.getname()<

}

实验总结

掌握类的定义和实现以及对象创建和使用的基本方法。

实验八  继承与派生类

1.实验目的

掌握单继承程序设计的基本方法和多继承程序设计的基本方法

2.实验设备   

Visual  C++ 6.0

3.实验内容

(1) 下面程序定义一个vehicle类,并派生出car和truck两个派生类。

运行结果为:

the bicycle has 2 wheels.

the bicycle weighs 25 pounds.

the bicycle's wheel loading is 12.5 pounds per tire.

the audi has 4 wheels.

the audi weighs 3500 pounds.

the audi's wheel loading is 875 pounds per tire.

the jief has 18 wheels.

the jief weighs 12500 pounds.

the jief's efficiency is 72.9291 percent.

将class car: public vehicle和class truck: public vehicle分别改为:

class car: private vehicle和class truck: private vehicle

程序运行结果有无变化,为什么?

答:程序无法运行,因为此时类car和truck中public中的函数都是private受到保护,外部无法访问。

定义并实现vehicle类、car类和truck类的构造函数,完成vehicle类、car类和truck类的数据成员初始化工作。

答:vehicle(int wh,double we){wheel=wh;weight=we;}

car(int p){ passenger_load =p;}

truck(int pt,double pa){ passenger_load =pt; payload =pa;}

将vehicle中数据成员wheels和weight改为private性质,如何修改程序以达到相同的输出结果。

答:Class vehicle中的public加入void setwheels(int wh){wheels=wh;}和void setweight(int we){weight=we;}然后将void car:: initialize(int whls, double wght, int people)中内容改成 {setwheels(whls);setweight(wght);passenger_load=people;}

然后改变double truck::efficiency()中内容为

{

           return payload/(payload+get_weight());

}

(2)下面程序对应图1所示的类层次继承结构:

阅读程序,完成in_service_graduate类中的display()函数的程序。

答:添加

cout<

在上面程序中类person中的数据成员name和birth_year在in_service_graduate类中有两个副本,请使用虚基类使它们在in_service_graduate类中只有一个副本。注意同时修改程序的其他相关部分。

答:在class person中的public中加入person(){}

在class grade中的public中加入

graduate( int g, char *spec){grade=g;

       strcpy(specialty,spec);}

in_service_graduate中定义改成class in_service_graduate:virtual public teacher, public graduate然后graduate(na, y, g, spec2)改成graduate(g, spec2)

实验总结

本次实验掌握单继承程序设计的基本方法和多继承程序设计的基本方法。

实验九  多态性和虚函数

1.实验目的

掌握虚函数定义及实现,具有多态性的面向对象程序设计的基本方法以及纯虚函数与抽象类的定义、实现及应用。

2.实验设备   

Visual  C++ 6.0

3.实验内容

(3)编程题

<2>程序实现的基本功能:小公司人员管理信息。

某小公司主要有3类人员:经理、技术人员、销售员。这些人员分别具有以下属性。

经理 :姓名、编号、月工资;

技术人员:姓名、编号、工作小时、月工资;

销售员  :姓名、编号、销售额、月工资;

要求:

人员编号基数为1000,每输入一个人员信息后编号加1(提示:编号可以用全局变量,

构造函数使编号加1);

月工资计算办法是经理固定月工资8000元;

技术人员按每小时100元计算工资;

销售员按当月销售额的4%提成。

根据题目要求,设计一个抽象基数emplyee,然后派生出technician(技术人员)类、manager(经理)类和salesman(销售员)类。

源代码:

#include

#include

int n=1000;

class emplyee{

protected:

char name[20];

int num;

public:

    emplyee(){}

    emplyee(char*p){

    strcpy(name,p);

    num=n;

    }

};

class technician:public emplyee{

private:

int time;

int money;

public:

    technician(){}

    technician(char*p,int t):emplyee(p){

    n++;

    time=t;

    money=100*time;

    }

    void display(){

    cout<<"technician"<<"  "<<"num"<<"  "<<"time"<<"  "<<"money"<

    cout<

};

class manager:public emplyee{

private:

int money;

public:

    manager(){}

    manager(char*p):emplyee(p){n++;money=8000;}

    void display(){

    cout<<"manager"<<"  "<<"num"<<"  "<<"money"<

    cout<

};

class salesman:public emplyee{

private:

int allsell;

float money;

public:

    salesman(){}

    salesman(char*p,int al):emplyee(p){n++;allsell=al;money=0.04*allsell;}

    void display(){

    cout<<"salesman"<<"  "<<"num"<<"  "<<"profit"<<"  "<<"money"<

    cout<

};

void main(){

    char q[50];

    int e,y,i;

    int t=0;   

    int m=0;   

    int s=0;

    int o=1;

    technician a[40];

    manager    b[40];

    salesman   c[40];

    do{

        cout<<"please make a choice:1,input technician;2,input manager;3,input salesman;4,input ending"<

        cin>>y;

        switch(y){

          case 1:

              {

              cout<<"technicianinputname=,time="<

              cin>>q>>e;

              technician t1(q,e);

              a[t]=t1;

              t++;

              }

          break;

          case 2: 

              {

               cout<<"managerinputname="<

               cin>>q;

               manager t2(q);

               b[m]=t2;

               m++;

              }

              break;

          case 3:

              {

                  cout<<"salesmaninputname=,allsell="<

                  cin>>q>>e;

                  salesman t3(q,e);

                  c[s]=t3; 

                  s++;

              }

              break;

          case 4:

              o=0;

              break;

        }

    }while(o==1);

    for(i=0;i

    for(i=0;i

    for(i=0;i

}

实验总结

本次实验初步掌握了虚函数的运用。

相关推荐