实验一报告

  在第一次上机实验中,我们完成了四个主要是c语言部分的题目,对上学期学过的c进行了一定程度的复习,话不多说,一起来看看。

第一部分:代码&结果

———分割线———

                     实验2-28

  要求实现一个简单的菜单程序,对应输入的字母,输出语句,当输入值为“Q”的时候,退出。

  第一种要求用if......else来实现

  

 1
 1 #include <iostream>
 2   using namespace std;
 3   int main()
 4 {
 5       while (true)
 6     {
 7         char n,A,D,S,Q;
 8         cout << "Menu: A(dd) D(elete) S(ort) Q(uit),Select one:" << endl;
 9         cin >> n;
10         if (n == 'A')
11             cout<< "数据已经增加" << endl;
12         else if (n =='D')
13             cout << "数据已经删除" << endl;
14         else if (n =='S')
15             cout << "数据已经排序" << endl;
16         else if (n =='Q')
17             break;
18     }
19       return 0;
20 }

运行结果如下

第二种:要求用switch来实现

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     while(true)
 6     {
 7         char n,A,Q,S,D;
 8         cout << "Menu: A(dd) D(elete) S(ort) Q(uit),Select one:" << endl;
 9         cin>>n;
10         switch(n)
11         {
12             case 'A':cout<< "数据已经增加" << endl;break;
13             case 'D':cout<< "数据已经删除" << endl;break;
14             case 'S':cout<< "数据已经排序" << endl;break;
15             case 'Q':return 0;
16         }
17         
18     }
19     return 0;
20  } 

运行结果如下

  实验2-29

题目要求:将1-100内所有质数输出到屏幕上

第一种,用for循环来完成

代码如下:

#include<iostream>
using namespace std;
int main()
{
    int i,j,p=1;
    for(i=2;i<=100;i++)
    {
        for(j=2;j<=i/2;j++)
        if(i%j==0)
        {
            p=0;
            break;
            
        }
        if(p==1)
        cout<<i<<endl;
        p=1;
    }
    
    return 0;
}

运行结果如下:

第二种:用do.......while实现

代码如下:

#include<iostream>
using namespace std;
int main()
{
    int n=2;
    do
    {
    int    i=2;
        while(true)
        {
            if(n==2)
            {
            cout<<n<<endl;
            break;
            }
            else if(n==i)
            {
            cout<<n<<endl;
            break;
            }
            else if(n%i==0)
            break;
            i++;
            
        }
    n++;
    }while(n<100);
    
    return 0;
}

运行结果如下:

第三种,用while实现

代码如下:

#include<iostream>
using namespace std;
int main()
{
    int n=2;
    while(n<100)
    {
        int i=2;
        while(true)
        {
            if(n==2)
            {
                cout<<n<<endl;
                break;
            }
            else if(n==i)
            {
            cout<<n<<endl;
            break;
            }
            else if(n%i==0)
            break;
            i++;
        }
        n++;    
    }
    return 0;
}

运行结果如下:

  实验2-32

在这个程序中,系统随机在1-100内选择一个整数,操作者在界面不断地输入数值,系统会与这个随机数比较大小,并将比较结果显示在屏幕上,直到猜到了这个随机数,显示“你猜对了”,并结束。第一种 :用while来实现

代码如下:

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<ctime>
 4 using namespace std;
 5 int main()
 6 {
 7     srand(time(0));
 8     int m;
 9     int n=rand()%100;
10     cout<<"请输入一个一到一百的整数"<<endl;
11     cin>>m;
12     do
13     {
14         while(m>n)
15         {
16             cout<<"输入值偏大"<<endl;
17             cin>>m;
18             break;
19         }
20         while(m<n)
21         {
22             cout<<"输入值偏小"<<endl;
23             cin>>m;
24             break;
25         }
26     }while(m!=n);
27     if(m==n)
28     cout<<"你答对了"<<endl;
29     return 0;
30 } 

运行结果如下:

第二种:用do.....while来实现。

代码如下:

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
    srand(time(0));
    int m;
    int n=rand()%100;
    cout<<"请输入一个一到一百的整数"<<endl;
    cin>>m;
    do
    {
        while(m>n)
        {
            cout<<"输入值偏大"<<endl;
            cin>>m;
            break;
        }
        while(m<n)
        {
            cout<<"输入值偏小"<<endl;
            cin>>m;
            break;
        }
    }while(m!=n);
    if(m==n)
    cout<<"你答对了"<<endl;
    return 0;
} 

运行结果如下:

 实验2-34

 这个题是在五种颜色的球里面随机挑三种,显示有多少种结果。但分成两小题,第一个是求不全排列的,第二个是要全排列的。

而且我改成了输入m,n,两个值,求在m里选n个有多少种结果。

第一种:不考虑全排列

代码如下

#include<iostream>
using namespace std;
int c(int m,int k)
{
    if(k>m)
    return 0;
    else if(k==m||k==0)
    return 1;
    else
    return c(m-1,k)+c(m-1,k-1);
 }
 
 int main()
 {
     int m,k;
     cin>>m>>k;
     cout<<    c(m,k)<<endl;
     return 0;
 }

运行结果如下

第二种:考虑全排列

代码如下

#include<iostream>
using namespace std;
int c(int m,int k)
{
    if(k>m)
    return 0;
    else if(k==m||k==0)
    return 1;
    else
    return c(m-1,k)+c(m-1,k-1);
 }
 
 int main()
 {
     int m,k,n,p,i=1;
     cin>>m>>k;
     n=c(m,k);
     while(k)
     {
     i*=k;
     k--;
    }
     p=n*i;
     cout<<p<<endl;
     return 0;
 }

 运行结果如下

——————————————————————————分割线——————————————————————————————

第二部分:实验反思

  • 第一点是印象最深的,学会了随机函数rand的用法,以前在抽签程序中见过它,但是不会用,这一次在2-32中学会了。实验2-32中要求在1-100里随机选一个数,如果用rand()函数,虽然能够随机选一个值,但是这是一个伪随机数。举个例子,第一次随机出38,后面的每次都会是38.所以要用到srand(time(0)),调取本地时间,因为时间每秒都在变化,所以rand随机出来的数每次都不一样,是真正的随机数,要注意的的是在开头添上头文件<ctime>。
  • 第二点是一个老毛病了,就是在写2-28用switch语句的时候在case后面忘记写break语句,导致当输入'A‘的时候,,屏幕上会把三种结果一次性输出,所以不要忘记break的使用。
  • 实验2-29是输出1-100内所有的质数,要求用while,do.....while,for分别来写,关键就在于如何去思考以一种合适的方式来利用质数的本质写程序吧。除了1和它本身,无法被其他数整除,那就设置两个变量比如i,j,一个在(2,100)内循环,一个在(2,i)内循环,i==j就输出,i%j==0就break跳过不输出。
  • 在2-34的摸球代码中用到了递归,原理是排列数的一个性质,定义一个函数,递归得出答案。如果考虑全排列的话,再加上一个while循环就可以了。

猜你喜欢

转载自www.cnblogs.com/21savage-code/p/10515962.html