程序实验报告

时间:2024.4.9

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

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

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

}

实验总结

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

更多相关推荐:
C程序设计实验三实验报告

实验报告工学院土木工程专业09级20xx至20xx学年度第1学期学号xxxxxx姓名xxxxxx20xx年10月08日第34节综合楼325教室

c程序实验报告

程序设计综合训练第一部分设计报告专业软件工程班级12软件1学号12144131姓名陈雷指导教师钱进吕萍成计算机工程学院20xx年3月目录1题目名称内容来源如20xx年省计算机等级考试秋季上机试卷22解题的基本思...

C语言程序设计实验报告——实验1 C程序的运行环境和运行C程序的方法

凯里学院C语言程序设计实验报告专业年级班,学号姓名成绩合作者实验日期年月日指导教师评阅日期年月日实验一C程序的运行环境和运行C程序的方法一、实验目的:(1)了解所用的计算机系统的基本操作方法,学会独立使用该系统…

C语言程序设计实验报告9

C语言程序设计实验报告九专业计算机科学与技术班级卓越工程师班日期20xx年12月23日实验组别第一组成绩第九次实验结构与联合实验指导教师李开学生姓名学号实验名称结构与联合实验一实验目的1熟悉和掌握结构的说明和引...

实验三最简单的C程序设计实验报告

实验三最简单的程序设计一实验目的1掌握语言中使用最多的一种语句赋值语句的使用方法2掌握各种类型数据的输入输出方法能正确使用各种格式输出符二实验内容和步骤掌握各种格式输出符的使用方法includeltstdioh...

C程序设计实验报告

C语言程序设计实验报告学号不告诉你哦班级信管一班姓名你猜猜哈哈一实验题目一编程实验猜数问题输入两个整数并求这两个整数的和输入所猜的结果如果输入数比正确的结果要大提示猜大了如果输入数比正确的结果要小提示猜小了当猜...

C语言程序设计 实验报告---范例

C语言程序设计实验报告学号姓名1设计一个函数fc统计数组中偶数和奇数的个数数组元素个数不多于10个编写main函数正确调用fc函数实现对数组a的统计输出统计结果includequotstdiohquotintj...

《C语言及程序设计》实验报告一

C语言及程序设计实验报告班级09级物理学4班学号20xx00910435姓名武文峰分数实验一C程序的运行环境和运行C程序的方法实验目的1掌握一种C语言集成开发环境的使用2掌握在集成开发环境中编辑编译连接和运行一...

C语言程序设计实验报告

实验一1includestdiohmainIntabcsa5b4c6sabc3printfadbdcdnsdabcs已知a5b4c6求出s并换行2includestdiohmainintrsscanfdampr...

C程序设计实验四实验报告

实验报告工学院土木工程专业09级20xx至20xx学年度第1学期学号xxxxxx姓名xxxxxxx20xx年10月20日第34节综合楼325教室

深圳大学C程序设计Lab Assignment3实验报告(四则运算)

附件四本文档仅限于学习交流禁止抄袭程序结果截图非本人信息请自行修改深圳大学实验报告课程名称实验名称LabAssignment3学院信息工程学院专业指导教师报告人报告人学号班级实验时间报告提交时间教务处制共13页...

C语言程序设计实验报告

C语言程序设计实验报告实验名称计算出1000以内10个最大素数之和实验目的1熟练掌握ififelseifelseif语句和witch语句格式及使用方法掌握if语句中的嵌套关系和匹配原则利用if语句和switch...

c程序实验报告(28篇)