• C++简单程序设计-2


    实验结论:

      1.验证性实验部分

    ①函数声明和函数定义各自的作用及二者的区别:

      如果编译器在调用一函数时,发现在之前未定义便会报错,而函数声明就是告诉编译器“在后面有这个函数”,编译器便会向下继续寻找。当然在调用之前就将函数定义好也是可以的,所以我认为函数定义兼有函数声明的功能。

    举一个知乎上看到的比喻:

    小明,你去把窗子开一下。(谁是小明?报错了。)
    
    所以要写成:
    小明是身份证号为XXXXX的同学。//定义
    小明,你去把窗子开一下。  //调用
    
    或者写成:
    有一个小明  //声明
    小明,你去把窗子开一下。 //调用
    小明是身份证号为XXXXX的同学。 //定义
    作者:[已重置]
    链接:https://www.zhihu.com/question/54655761/answer/141337226
    来源:知乎
     
    ②什么是形参?什么是实参?函数参数和返回值在函数中起到什么作用?
      
        差不多就这样吧……
     
    ③函数参数传递过程中,值传递和引用传递区别
      值传递仅仅传递的是值,就如我上图所示。引用传递,传递的是内存地址,修改后会改变内存地址对应储存的值。
     
      2.编程实验部分
    (1)2-28
    #include <iostream>
    using namespace std;                     //if……else  break contiue版本
    
    int main()
    {
        char select = 0;
        while (true)                         //构建循环
        {
            cout << "Menu: Add Delete Sort Quit,select one:";
            cin >> select;
            if (select == 'A')
            {
                cout << "数据已增加" << endl;
                continue;
            }
            else if (select == 'D')
            {
                cout << "数据已删除" << endl;
                continue;
            }
            else if (select == 'S')
            {
                cout << "数据已排序" << endl;
                continue;
            }
            else if (select == 'Q')
                break;
            else cout << "ERROR" << endl;          //输入其他数据返回error
        }
        return 0;
    }            
    #include <iostream>
    using namespace std;                   //switch版本
    
    int main()
    {
        char select=0;
        while(true)                         //构建循环
        {
        cout<<"Menu: Add Delete Sort Quit,select one:";
        cin>>select;
        switch (select)
        {
        case 'A':cout<<"数据已增加"<<endl;continue;
        case 'D':cout<<"数据已删除"<<endl;continue;
        case 'S':cout<<"数据已排序"<<endl;continue;
        case 'Q':break;
        }
        break;
        }
        return 0;
    }        

    (2)2-29
    判断质数算法:
      从2到要判断的数字的一半,进行取余数的操作,如果结果有为0,则不是质数。
    #include <iostream>
    using namespace std;                    //for循环
    
    int main()
    {
        int num,i,status;                          
        for (num = 2; num<=100; num++)
        {
            status = 1;                            //条件判断
            for (i = 2; i <= (num/2); i++)         //从2到数字的一半进行穷举
            {
                if (num%i == 0)
                {
                    status = 0;                    //如果不是素数,条件判断为假,跳出循环
                    break;
                }
            }
            if (status)                            //当判断为真时,即为素数时,输出这个数
                cout << num << endl;
        }
       return 0;
    }
    #include <iostream>
    using namespace std;                    //while循环
    
    int main()
    {
        int num, i, status;
        num = 2;
        while(num<=100)
        {
            status = 1;                            //条件判断
            i = 2;
            while ( i <= (num / 2))                //从2到数字的一半进行穷举
            {
                if (num%i == 0)
                {
                    status = 0;                    //如果不是素数,条件判断为假,跳出循环
                    break;
                }
                i++;
            }
            if (status)                            //当判断为真时,即为素数时,输出这个数
                cout << num << endl;
            num++;
        }
        return 0;
    }
    #include <iostream>
    using namespace std;                    //do……while循环
    
    int main()
    {
        int num, i, status;
        num = 2;
        do
        {
            status = 1;                            //条件判断
            i = 2;
            do                                       //从2到数字的一半进行穷举
            {
                if (num%i == 0&&num!=2)            //因为do……while先执行语句,想出的笨方法
                {
                    status = 0;                    //如果不是素数,条件判断为假,跳出循环
                    break;
                }
                i++;
            } while (i <= (num / 2));
            if (status)                            //当判断为真时,即为素数时,输出这个数
                cout << num << endl;
            num++;
        } while (num <= 100);
        return 0;
    }

    (3)2-32

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;                                                   //while循环
    
    int main()
    {
        int num, guess;
        srand((unsigned int)time(NULL));                               //调用时间函数传送不同的seed值
        num = 1 + rand() % 100;                                        //生成每次不同的随机数
        while (1)
        {
            cout << "Enter the number you guess:";
            cin >> guess;
            if(num==guess)                                              //对两个数字进行判断
            {
                cout << "Congratulations!!" << endl;
                break;
            }
            if (num < guess)
            {
                cout << "Too large……" << endl;
                continue;
            }
            if (num > guess)
            {
                cout << "Too small……" << endl;
                continue;
            }
        }
        return 0;
    }
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;                                                   //do while循环
    
    int main()
    {
        int num, guess;
        srand((unsigned int)time(NULL));                               //调用时间函数传送不同的seed值
        num = 1 + rand() % 100;                                        //生成每次不同的随机数
        do
        {
            cout << "Enter the number you guess:";
            cin >> guess;
            if(num==guess)                                              //对两个数字进行判断
            {
                cout << "Congratulations!!" << endl;
                break;
            }
            if (num < guess)
            {
                cout << "Too large……" << endl;
                continue;
            }
            if (num > guess)
            {
                cout << "Too small……" << endl;
                continue;
            }
        } while (1);
        return 0;
    }

    (4)2-34

    思路:两种

    1.参照书本例3-9,利用递归的方法实现不同组合

    2.利用for循环,检验每种情况,是否满足颜色不同后输出

    #include <iostream>
    using namespace std;                                 //思路1
    int comm(int, int);
    
    int main()
    {
        int n, k;
        n=5;k=3                                          //5种颜色,摸3个
        cout << comm(n, k) << endl;
        return 0;
    }
    
    int comm(int n, int k)
    {
        if (k > n)
            return 0;
        else if (k == 0 || n == k)                   //递归结束条件是n=k或k=0
            return 1;                                //此时值为1
        else
            return comm(n - 1, k) + comm(n - 1, k - 1);
    } 

    #include <iostream>
    using namespace std;                                        //思路2
    enum color{Red,Yellow,Blue,White,Black};             //定义枚举
    
    int main()
    {
        int i, j, k, n = 0;                                       //n代表种数
        for (i = Red; i<=Black; i++)
            for (j = i + 1; j<=Black; j++)
                for (k = j + 1; k <=Black; k++)
                {
                    if (i != j && j != k && k != i)     //3球颜色不相同
                        cout << i << " " << j << " " << k<<endl;
                    n++;
                }
        cout << n << endl;
        return 0;
    }

    实验总结与体会:

      在本次的实验中,题目2-32中使用了时间函数作为rand()的seed值,省去了手动输入,并提高了猜数游戏的可玩性。在实验2-34中,在使用递归后,在网上又看见了使用for循环进行枚举的方法,并自己尝试了一下。

      收获不少,因为在自己写完程序后,程序肯定不是最优的,需要与别人的代码进行比较和参考,了解了别人的思路,才能写出最好的。自己也任然有很多地方需要加强,比如在2-29中的do while语句中采用了比较笨的方法解决do while先执行后判断的特点。

  • 相关阅读:
    JavaScript随机数
    javascript函数
    hdu 4122(RMQ)2011福州现场赛B题
    hdu 4119 (模拟+字符串)成都现场赛I题
    hdu 4118(树形dp) 成都现场赛H题
    hdu 4115(2-SAT) 2011 成都现场赛E题
    Codeforces Round #237 (Div. 2) 解题报告
    Codeforces Round #234 (Div. 2) 解题报告
    uva 1411(二分图最大权匹配)
    uva 11383(二分图最大权匹配)
  • 原文地址:https://www.cnblogs.com/zhibifenli/p/8643483.html
Copyright © 2020-2023  润新知