zoukankan      html  css  js  c++  java
  • C++第五章函数

    书上的点:

    这次直接写写画画了,遇到的bug也就直接敲了,忘记记录了,好在都在书上,所以勾画一下,提一下。发现每一章后面的小结,都蛮有意思的。可以抄一遍。

    1、返回值的函数成为返回值函数(value-returning function),不返回值的函数成为void函数 (void function

    2、实际参数(actual parameter) 也称 自变量 argument

    3、参数列表(parameter list)指明了函数的参数类型、次序和数量。函数名和参数列表一起构成了函数签名(function signature)。

    4、主函数与其他函数的唯一差别在于,它是由操作系统来调用的,用于启动程序的执行。

    5、按值方式(pass-by-value)传递参数。当调用一个带参数的函数时,实参的值被传递给形参,这种参数传递方式称为按值方式。无论函数中形参的值如何改变,实参变量的值都不会受影响。

    6C++提供了一种特殊的变量类型,称为引用变量(reference variable),将函数形参声明为此种类型的变量,形参将成为原变量的一个引用(而不是拷贝)。一个引用变量实质上是另一个变量的的一个别名,任何对引用变量的改变实际上都会作用到原变量上。为声明一个引用变量,应在变量名钱放置一个“与符号”(&)。

    7、按值方式和按引用方式是函数参数传递的两种方式。按值方式将实参的值传递给一个无关的变量(形参),而按引用方式中形参与实参共享相同的变量。从语义的角度来看,按引用方式可以理解为按共享方式(pass-by-sharing)。

    8、然后是书上的一个应该是编译通不过的,但是书上却给出了结果。。。

    大概就是:

    void f(double &p){

    p++;

    }

    int main(){

    double a = 1.0;

    int b = 1;

    f(a);

    f(b);//这个是跑不了的。

    }

    9、二义调用:有事,对一个函数调用可能有两个或更多的与之匹配的函数定义,而编译器无法确定那个匹配更为京珠你,这称为二义调用(ambiguous invocation)。

    10、在函数调用之前声明一个函数原型(funciton prototype)。一个函数原型就是一个没有函数实现(函数体)的单纯的函数声明,函数的实现在稍后的程序中将会给出。

    11、如果函数的参数中,有的设置默认值,有的没有,那么带默认值的参数应该放在参数列表的末尾。

    12、变量的作用域(scope of a variable)。一个变量的作用域就是能够引用该变量的程序范围。函数内部定义的变量成为局部变量(local variable

    13、如果一个局部变量与一个全局变量同名,使用::globalVariable可以访问全局变量,::运算符称为一元作用域解析(unary scope resolution)运算符。

    14、函数抽象(funciton abstraction)就是将函数的使用和实现分离。

    15、信息隐藏(information hiding)或封装(encapsulation

    16、分而治之(divide and conquer) 逐步求精 (stepwise refinement

    17、要编写一个程序,我们应该如何入手?立即开始编码?程序员新手通常会这样做,开始就试图从细节着手求解问题。虽然在最终程序中西街是很重要的,但在开始阶段就考虑西街会阻塞问题的求解进程。为是问题求解流程尽可能顺畅,我们求解这个问题是,使用函数抽象思想将设计和细节分离,最后在实现细节。

    18、自顶向下方法top-down approach 自底向上方法bottom-up approach

    19、对于还未实现的函数,可用桩函数(stub)代替之。所谓桩函数就是一个简单的但并不完整的函数版本。

    20、挡视线一个大型程序时,我们应该使用自顶向下方法或者自底向上方法,不要试图一下子完成整个程序的编码。这两种方法看起来会花费更多的时间编码(因为需要反复的编译和不断地测试程序的渐进版本),但实际上会节省总时间,并且使调试更为容易。

    21、内联函数(inline function)总是接触到这个东西,但貌似总也不知道这是啥意思。使用函数来实现程序可以是程序更为易读、易于维护,但是函数调用有额外的运行时开销(即将参数和CPU寄存器亚茹调用栈,以及在函数间切换控制所花费的时间)。C++提懂了内联函数功能,这样可以便面函数调用的开销。内联函数是不会被调用的,实际上,编译器将其代码复制到了每个调用点上。

    这些话比较冠冕。

    实际上,我们之前写函数都是调用方式的,但是内联函数的本质是,不产生调用关系。而是在编译阶段,就把inline function 的函数体拿出来,代替函数调用。也就是用内联函数函数体,来代替当前函数调用的这行代码,也就是用一大段代码来替换一行代码。因而可以不产生调用。

    22、内联函数机制对于短函数而言是值得使用的,但对于在程序中多次被调用的长函数并不合适,因为在此情况下,是用内联函数时,函数代码会被复制到多个位置,从而会急剧增加可执行代码的长度。出于这一原因。C++允许编译器对于过长的函数忽略inline关键字。因此,inline关键字只是对编译器提出了一个要求,至于世界收还是忽略这一请求则有编译器来决定。

     

     

    习题

    5.1 使用函数的好处是什么?如何声明一个函数?如何调用一个函数?

    灵活,易读,可扩展,易维护。

    返回值类型 函数签名

    函数名,参数,参数是可选的。

    5.2主函数的返回类型是什么?

    整形的数字

    5.3 你恩能够用条件运算符简化程序清单5-1中的函数max嘛?

    int getMax(int a,int b){

    return a>b?a:b;

    }

    5.4下面叙述是正确的还是错误的?对一个返回类型为void的函数的调用只能作为语句使用,而对一个有返回值的函数的调用只能作为一个表达式的一部分。

    错误的。前半句的说法是没有问题的,但是后半句的说法存在问题。同样也可以作为语句使用。

    5.5在一个有返回值的函数中没有编写return 语句会造成什么错误?能在一个void函数中使用return语句,如下面程序那样吗?

    void p(){

    int i;

    while(true){

    //prompt the user to enter an integer

    cout<< “Enter an integer:”;

    cin>> i;

    if(i==0)

    return ;

    cout<<” i is “<< i << endl;

    }

    }

    编译都通不过啊!!!必须要写return的。

    可以。

    5.6解释属于:参数、自变量和 函数签名。

    参数 分为两类,实际参数和形式参数。实际参数 是指,在函数调用过程中,调用处需要传入的数据,成为实际参数。形式参数是 被调用的函数中用来接收数据的参数,也称自变量。函数签名,是函数名个由形式参数构成的参数列表共同组成的。所谓的参数列表包括形式参数的个数,数据类型,以及形式参数的顺序。

    5.7为下面的函数编写函数头:

    给定销售额和佣金率,计算销售佣金。

    double getCommission(double saleAmount,double commisionRate);

    给定年份和月份,打印该月的日历。

    void printCalendar(int year,int month);

    计算一个数的*方根

    double getRootOfANumber(double number);

    检查一个数是否是偶数,若是返回true.

    bool isEven(int number);

    以指定次数打印一个字符。

    void print(int time,char ch);

    给定贷款额、贷款年限和年利率,计算每月还款额。

    double getPaymentOfAMonth(double loan,double year,double annualRate);

    给定一个小写字母,求对应的大写字母。

    char getUpperCase(char ch);

    5.8找出下面程序中的错误,并改正之。

    int xFunction(int n)

    {

    cout<<n;

    }

     

    function1(int n,m)//m需要指定参数类型

    {

    n+=m;

    xFunction(3.4);//没有可以调用的函数修改方式1是,把上面函数签名里的int改成double

    }

    5.9什么是按值方式?什么是按引用方式?给出下面程序的运行结果。

    按值方式,就是在程序调用的过程中传递给形式参数的是实际参数的值,在函数体中对于形式参数的修改,并不会反馈到实际参数上。按引用方式是把实际参数的别名传递给形式参数,本质上参与运算的是实际参数,对形式参数的修改会反馈到实际参数上。所以这种方式也被称作按共享方式传值。常见的例子就是两数互换。如果采用按值方式话,是不会起到效果的,但是如果是按引用方式的话是有效果的。

    A:

    #include <iostream>

    using namespace std;

    void maxValue(int value,int value2 ,int max){

    if(value1 > value2)

    max = value1;

    else

    max = value2;

    }

    int main(){

    int max = 0;

    maxValue(1,2,max);

    cout<< “max is “<<max<< endl;

     

    return 0;

    }

    运行结果:

    max is 0

    B:

    #include <iostream>

    using namespace std;

    void maxValue(int value1,int value2,int &max)

    {

    if(value1 > value2)

    max = value1;

    else

    max = value2;

    }

    int main(){

    int max = 0;

    maxValue(1,2,max);

    cout<< “max is “<<max <<endl;

     

    return 0;

    }

    运行结果:

    max is 2

     

    C:

    #include <iostream>

    using namespace std;

    void f(int i,int num){

    for(int j=1;j<=i;j++){

    cout<< num<< “ “;

    num*=2;

    }

    cout <<endl;

    }

    int main(){

    int i = 1;

    while(i<=6){

    f(i,2);

    i++;

    }

     

    return 0;

    }

    2

    2 4

    2 4 6

    2 4 6 8

    2 4 6 8 10

    2 4 6 8 10 12

     

    D:

    #include <iostream>

    using namespace std;

    void f(int &i,int num)

    {

    for(int j = 1 ; j <= i ; j++)

    {

    cout<< num << “ “;

    num *= 2;

    }

     

    cout<<endl;

    }

    int main(){

    int i = 1;

    while(i<=6)

    {

    f(i,2);

    i++;

    }

     

    return 0;

    }

    运行结果:

    2

    2 4

    2 4 6

    2 4 6 8

    2 4 6 8 10

    2 4 6 8 10 12

     

    5.10 对于上一题中的程序a,分别给出函数max被调用前、刚刚进入max时,max返回之前以及max刚刚返回后的调用栈的内容。

    调用前,没值

    进入 1 2 0

    返回前 1 2 2

    刚刚返回 毛儿都没了。

    5.11 给出下面程序的输出结果。

    #include <iostream>

    using namespace std;

    voidf(double &p){

    p+=2;

    }

    int main(){

    double x = 10;

    int y = 10;

    f(x);

    f(y);

     

    cout<< “x is “<< x<< endl;

    cout<< “y is “<< y << endl;

     

    return 0;

    }

    编译通不过。

     

    5.12 什么是函数重载?可以定义两个同名但参数类型不同的函数么?可以在一个程序中定义两个同名且参数相同,但返回值类型不同的函数吗?

    具有相同函数名但是参数列表不同的函数组,通常完成的功能是相同的,只是在参数列表里面有差别。可以,不可以。

    5.13 下面程序有什么错误?

    void p(int i){

    cout<< i <<endl;

    }

    int p(int j){

    cout<< j << endl;

    }

    已经定义了一个p(int ) 函数。编译通不过了。

    5.14 下面程序中有什么错误?

    #include <iostream>

    using namespace std;

    void p(int &i){

    cout << i <<endl;

    }

    int p(int j){

    cout << j<< endl;

    }

    int main(){

    int k = 5;

    p(k);

     

    return 0;

    }

    二义调用,这个时候调用哪个参数都是可以的,这样会出问题。

    唉?忽然想到如果这个时候给调用加一个返回值 还会报错么?应该不会了吧。试试

    他这样写迷惑性还不大:

    我这样写迷惑性就更大了。

    #include <iostream>

    using namespace std;

    void p(int &i){

    cout << i << endl;

    }

    int p(int j){

    cout << j << endl;

    }

    int main(){

    int k = 5;

    int c = p(k);//在这里依然通不过。

     

    return 0;

    }

     

    5.15 下面哪些函数声明是非法的?

    void t1(int x,int y =0,int z);//非法

    void t2(int x = 0,int y =0,int z);//非法

    void t3(int x,int y=0,int z = 0);

    void t4(int x = 0,int y = 0,int z = 0);

     

    5.16找出下面程序中的全局变量和局部变量。全局变量有默认值吗?局部变量呢?下面程序的输出结果是什么?

    #include <iostream>

    using namespace std;

     

    int j;

    int main(){

    int i;

    cout<< “ i is “<< i <<endl;

    cout << “ j is “<< j << endl;

    }

    全局变量有默认值是0,局部变量没有默认值,下面程序的输出结果:

    i is -858993460

    j is 0

    好吧 编译都通不过,但是某一次尝试 确实得到了这个 -858993460

     

    5.17找出下面程序中的全局变量,局部变量和静态局部变量。程序的输出结果是什么?

    #include <iostream>

    using namespace std;

    int j =40;//全局变量

    void p(){

    int i = 5;//局部变量

    static int j = 5;//静态全局变量

    i++;

    j++;

    cout << “i is “<< i << endl;

    cout << “ j is “<< j<< endl;

    }

     

    int main(){

    p();

    p();

    }

    i is 6

    j is 6

    i is 6

    j is 7

     

    5.18 找出下面程序中的错误并改正。

    void p(int i){

    int i =5;//重名了,把 int去了吧。

     

    cou << “ i is “ << i << endl;

     

    }

    5.19下面说法是正确的还是错误的?三角函数的参数表示弧度值。

    对的

    #include <iostream>

     

    using namespace std;

    int main(){

     

    cout<<sin(3.141592 / 2);

    system("pause");

    return 0;

     

    }

    输出 1

    5.20编写三个表达式分别生成:34~55之间的随机整数,0~999之间的随机整数;随机小写字母。

    int get34To55(){

    return 34+rand()%(55-34+1);

    }

    int get0To999(){

    return rand()%1000;//0+rand()%(999-0+1)

    }

    char getRandomLowerCase(){

    return static_cast<int>( ‘a’+rand()%(‘z’-’a’+1));

    }

    5.21 假设PI的值为3.14159E的值为2.71828.求下面函数的结果。

    A.sqrt(4.0)   2.0

    B.sin(2*PI)   0

    C.cos(2*PI)   1

    D.pow(2,2)   4

    E.log(E)   1

    F.exp(1.0)   2.71828

    G.max(2,min(3,4)) 3

    H.fmod(2.5,2.3)   0.2

    I.ceil(-2.5)   -2

    J.floor(-2.5)   -3

    K.abs(-2.5f)   2.5

    L.log10(100.0)   2

    M.cos(PI)   -1

    N.ceil(2.5)   3

    O.floor(2.5)   2

    P.pow(2.0,4)   16

    Q.fmod(4.2,3.5)  0.7

    R.Ceil(abs(-2.5))   3

     


    程序设计练习

    5.1将一个大写字母转换为小写字母

    #include <iostream>

    using namespace std;

     

    char upperCast2LowerCase(char ch){

    return static_cast<char>(ch +'a'-'A');

     

    }

     

    int main(){

     

    cout << "thisaprogramabout" << endl;

     

    cout<<upperCast2LowerCase('C');

     

    system("pause");

    return 0;

     

    }

     

    5.2计算一个整数的数字之和:

    #include <iostream>

    using namespace std;

     

    //将一个整数中的所有数字相加 ,范围是0-1000

     

    int getSurfaceSum(int number){

    int sum = 0;

    while (number>0){

    sum += number % 10;

    number /= 10;

    }

    return sum;

    }

    int main(){

    int number = 0;

    cout << "请输入一个(0-1000)的整数,计算它的每个数字之和" << endl;

    cin >> number;

    cout << "数字和为: " << getSurfaceSum(number) << endl;

     

    system("pause");

     

    return 0;

     

     

     

    }

     

    5.3编写一个函数逆序显示一个整数,函数头如下:

    void reverse(int nuber)

    例如,reverse(3456) 应显示6543.

    #include <iostream>

    using namespace std;

     

    //将一个整数中的所有数字相加 ,范围是0-1000

     

    void reverse(int number){

     

    while (number > 0){

     

    cout << number % 10;

    number /= 10;

     

    }

     

     

     

    }

    int main(){

    int number = 0;

    cout << "数字逆序显示,输入数字:" << endl;

    cin >> number;

    //cout << "逆序为: " << reverse(number) << endl;

     

    reverse(number);

     

    system("pause");

     

    return 0;

     

     

     

    }

    5.4返回一个整数的逆序

    int reverse(int number)

    #include <iostream>

    using namespace std;

     

    //将一个整数中的所有数字相加 ,范围是0-1000

     

    int getBits(int number){

     

    if (number == 0)return 1;

    int bit = 0;

    while (number>0){

    number /= 10;

    bit++;

    }

    return bit;

    }

     

    int reverse(int number){

     

    int sum = 0;

    int bit = getBits(number);

    int stage = pow(10,bit-1);

    int currentNumber = 0;

    while (number > 0){

     

    currentNumber =  number % 10;

    sum += currentNumber*stage;

    stage /= 10;

    number /= 10;

     

    }

     

     

    return sum;

     

     

     

    }

    int main(){

    int number = 0;

    cout << "数字逆序显示,输入数字:" << endl;

    cin >> number;

    cout << "逆序为: " << reverse(number) << endl;

    //cout<<getBits(number);

     

    //reverse(number);

     

    system("pause");

     

    return 0;

     

     

     

    }

     

    5.5 对三个整数进行排序:

    void sort(double &num1,double &num2,double &num3)

    #include <iostream>

    using namespace std;

     

    void swap(double &a, double &b){

    double temp = a;

    a = b;

    b = temp;

    }

     

     

    void sort(double &num1, double &num2, double &num3){

    if (num1>num2){

    swap(num1, num2);

    if (num3 < num1)

    swap(num1, num3);

    else if (num3 < num2)

    swap(num2, num3);

    }

    else{

    if (num3 < num1)

    swap(num1, num3);

    else if (num3 < num2)

    swap(num2, num3);

    }

     

    }

     

    int main(){

     

    cout << "对三个数字排序" << endl;

    double a1, a2, a3;

    cout << "输入三个数字" << endl;

    cin >> a1 >> a2 >> a3;

    sort(a1, a2, a3);

    cout << a1<<"  "<< a2<<"  "<< a3 << endl;

     

    system("pause");

    return 0;

     

    }

     

    5.6 输出图案:

     

     

    #include <iostream>

    #include <iomanip>

    using namespace std;

     

    void displayPattern(int n){

    for (int i = 1; i <= n; i++){

    for (int j = 0; j < n - i; j++)

    cout << "   ";

    for (int j = i; j>0;j--){

    cout << setw(3)<<j ;

    }

    cout << endl;

    }

     

    }

     

    int main(){

     

    cout << "输出图案" << endl;

     

    displayPattern(5);

     

    system("pause");

    return 0;

     

    }

     

    5.7计算投资的未来价值:

    #include <iostream>

    using namespace std;

    double futureInvestmentValue(double investmentAmount, double monthlyInterestRate, double years){//年利率转化成月利率

    //输入的是一个 类似于3.25 的数值,/100 得到百分数形式的 /12 得到月利率。

    //return pow(investmentAmount*(1 + interestRate / 1200), numberOfYears*12);

     

    return investmentAmount*(pow(1 + monthlyInterestRate / 1200, years * 12));

    }

     

    void displayInvestmentTable(double investmentAmount, double monthlyInterestRate){

     

    cout << " 未来价值" << endl;

    for (int i = 1; i <= 30; i++){

    cout << i << " " << futureInvestmentValue(investmentAmount, monthlyInterestRate, i) << endl;;

    }

     

     

     

    }

     

     

    int main(){

    cout << "计算投资未来价值" << endl;

    cout << "投资总额,比如1000" << endl;

    double money = 0;

    cin >> money;

    cout << "年利率,比如3.25" << endl;

    double rate = 0;

    cin >> rate;

     

    //cout << "未来价值: " << futureInvestmentValue(money, rate, year) << endl;

    displayInvestmentTable(money,rate);

     

     

    system("pause");

    return 0;

     

     

     

    }

     

    练习5.8温度转换表

     

    #include <iostream>

    using namespace std;

    double celsiusToFahrenheit(double celsius){

     

    return celsius*9.0 / 5 + 32;

     

     

    }

     

    double fahrenheitToCelsius(double fahrenheit){

     

    return (fahrenheit - 32) * 5 / 9;

    }

     

    void displayTemperatureTransformTable(){

     

    double fahrenheit = 120;

    cout << "Celsius Fahrenheit | Fahrenheit Celsius" << endl;

    for (double celsius = 40; celsius > 30.5;celsius--,fahrenheit-=10){

    cout << celsius << " " << celsiusToFahrenheit(celsius) << " | " << fahrenheit <<" "<< fahrenheitToCelsius(fahrenheit) << endl;

    }

     

     

    }

     

    int main(){

    cout << "温度转换表" << endl;

     

    //cout << "未来价值: " << futureInvestmentValue(money, rate, year) << endl;

    displayTemperatureTransformTable();

     

    system("pause");

    return 0;

     

     

     

    }

     

    练习5.9编写一个头文件,包含下面两个函数:

    double footToMeter(double foot)

     

    double meterToFoot(double meter)

    转换公式

    meter = 0.305*foot

    main.cpp

    #include <iostream>

    #include "footAndMeter.h"

    using namespace std;

    void displayFootAndMeterTransformTable(){

    cout << "Feet Meters | Meters Feet" << endl;

    double meters = 20;

    for (double feet = 1; feet < 10.5;feet++,meters+=5){

    cout << feet << " " << footToMeter(feet) << " | " << meters << " " << meterToFoot(meters) << endl;

    }

    }

     

    int main(){

    cout << "英尺和米转换表" << endl;

    displayFootAndMeterTransformTable();

     

    system("pause");

    return 0;

     

    }

     

    footAndMeter.h

    double footToMeter(double foot){

     

    return 0.305*foot;

    }

     

    double meterToFoot(double meter){

    return meter / 0.305;

    }

    5.10 编写函数返回两个正整数的最大公约数,函数头如下:

    int gcd(int m,int n)

     

    #include <iostream>

     

    int min(int a,int b){

    if (a < b)

    return a;

    return b;

    }

    int gcd(int a,int b){

    int grestestCommonDivisor = 1;

     

     

    for (int i = min(a, b) / 2; i >1; i--){//有时候在想要抠这一次两次么?他们说抠了好。

    //std::cout << i;

    if (a%i == 0 && b%i == 0){

    grestestCommonDivisor = i;

    break;

    }

    }

    return grestestCommonDivisor;

     

    }

     

    5.11 计算佣金

    double computeCommission(double salesAmount)

     

     

    #include <iostream>

    using namespace std;

     

    double computeCommission(double salesAmount){

     

    if (salesAmount<5000){

    return salesAmount*0.08;

    }

    else if (salesAmount<10000){

    return 5000 * 0.08 + (salesAmount - 5000)*0.1;

    }

    else {

    return 5000 * 0.08 + (10000 - 5000)*0.1 + (salesAmount - 10000)*0.12;

    }

    }

    void displayCommissionTable(){

    cout << "SalesAmount Commission" << endl;

    for (int salesAmount = 10000; salesAmount <= 100000; salesAmount += 5000){

    cout << salesAmount << " " << computeCommission(salesAmount) << endl;

    }

    }

     

    int main(){

    cout << "打印佣金表" << endl;

    displayCommissionTable();

     

    system("pause");

    return 0;

     

    }

     

    512打印字符

    void printChars(char ch1,char ch2,int numberPerLine)

    参数 1 Z 10

     

    #include <iostream>

    using namespace std;

    void printChars(char ch1, char ch2, int perLine){

    int count = 0;

    for (int i = ch1; i <= ch2; i++){

     

    cout << static_cast<char>(i) << " ";

    count++;

    if ((count + 1) % perLine == 0)

    cout << endl;

    }

    cout << endl;

     

    }

     

    int main(){

    cout << "打印字符表" << endl;

    printChars('1','z',10);

     

    system("pause");

    return 0;

     

    }

     

    5.13 求级数和

    公式:

    #include <iostream>

    using namespace std;

    double getSum(int number){

    double sum = 0;

    for (double i = 2; i <= number; i++){

     

    sum += (i-1) / i;

     

    }

    return sum;

     

    }

    void displaySumTable(){

     

    cout << "i m(i)" << endl;

    for (int i = 2; i <= 20;i++){

    cout << i << " " << getSum(i) << endl;

    }

    }

     

    int main(){

     

    cout << "计算级数和" << endl;

    displaySumTable();

     

    system("pause");

     

    return 0;

    }

     

    5.14 计算级数

    编写一个函数计算下面级数:

     

    第四章就写过这个 PI

    #include <iostream>

    #include <iomanip>

    using namespace std;

    double getSumOfPI(int number){

     

    double sum = 0;

    for (int i = number * 2 + 1; i >= 1; i -= 4){

    sum += 1.0 / i;

    }

    return sum;

     

    }

     

    double getMinusOfPI(int number){

     

    double sum = 0;

    for (int i = number * 2 - 1; i >= 3; i -= 4){

    sum += 1.0 / i;

    }

    return sum;

     

    }

     

     

    //传递参数不会减小精度。

    double getPI(int number){//由于知道,右边开始算比较精确,所以从右边开始计算:

     

    return 4*(getSumOfPI(number) - getMinusOfPI(number));

    }

     

     

    int main(){

     

    cout << "计算级数和" << endl;

    cout << setw(20) << fixed << setprecision(20) << getPI(10000) << endl;

    cout << setw(20) << fixed << setprecision(20) << getPI(20000) << endl;

    cout << setw(20) << fixed << setprecision(20) << getPI(100000) << endl;

    cout << setw(20) << fixed << setprecision(20) << getPI(1000000) << endl;

     

    //getPI(20000);

    //getPI(100000);

    system("pause");

    return 0;

     

    }

     

    5.15打印纳税表

     

    #include <iostream>

    #pragma warning(disable:4703)

    using namespace std;

    /* 计算税款,根据美国2002年的数据

    说实话连人家的这些例子都觉得特别棒!!!

    */

     

    int singleFilers[5] = { 6000, 27950, 67700, 141250, 307050 };

    int marriedFileJointly[5] = { 12000, 46700, 112850, 171950, 307050 };

    int marriedFileSeparately[5] = { 6000, 23350, 56425, 85975, 153525 };

    int headOfHousehold[5] = { 10000, 37450, 96700, 15600, 307050 };

    #define stageOne 10.0

    #define stageTwo 15.0

    #define stageThree 27.0

    #define stageFour 30.0

    #define stageFive 35.0

    #define stageSix 38.6

    double taxStageRate[6] = { stageOne / 100, stageTwo / 100, stageThree / 100, stageFour / 100, stageFive / 100, stageSix / 100 };

     

     

    //double getTax(double money, int* moneyStage, double* taxRateStage){

    //

    // return 0;

    //

    //}

     

    /*

    根据这个人的状态和 挣到的钱,来决定纳税金额。

    现在的想法就是是不是可以因为这一组数据很有规律,所以想做一个数组,来规范这样的话,只需要根据不同的状态,来分不同的税率阶段就可以了

    */

    double getTax(int status, double money){

    int* MoneyStage;

    if (status == 0){

    MoneyStage = singleFilers;

    }

    else if (status == 1){

    MoneyStage = marriedFileJointly;

    }

    else if (status == 2){

    MoneyStage = marriedFileSeparately;

    }

    else if (status == 3){

    MoneyStage = headOfHousehold;

    }

    double tax = 0;

    if (money <= MoneyStage[0]){

    tax = (money - 0)*taxStageRate[0];//10

    }

    else if (money <= MoneyStage[1]){

     

    tax = MoneyStage[0] * taxStageRate[0] + (money - MoneyStage[0]) * taxStageRate[1];//6000*10+(money-6000)*15

    }

    else if (money <= MoneyStage[2]){

    tax = MoneyStage[0] * taxStageRate[0] + (MoneyStage[1] - MoneyStage[0]) * taxStageRate[1] + (money - MoneyStage[1])*taxStageRate[2];

    }

    else if (money <= MoneyStage[3]){

    tax = MoneyStage[0] * taxStageRate[0] + (MoneyStage[1] - MoneyStage[0]) * taxStageRate[1] + (MoneyStage[2] - MoneyStage[1]) * taxStageRate[2] + (money - MoneyStage[2])*taxStageRate[3];

    }

    else if (money <= MoneyStage[4]){

    tax = MoneyStage[0] * taxStageRate[0] + (MoneyStage[1] - MoneyStage[0]) * taxStageRate[1] + (MoneyStage[2] - MoneyStage[1]) * taxStageRate[2] + (MoneyStage[3] - MoneyStage[2]) * taxStageRate[3] + (money - MoneyStage[3])*taxStageRate[4];

    }

    else{

    tax = MoneyStage[0] * taxStageRate[0] + (MoneyStage[1] - MoneyStage[0]) * taxStageRate[1] + (MoneyStage[2] - MoneyStage[1]) * taxStageRate[2] + (MoneyStage[3] - MoneyStage[2]) * taxStageRate[3] + (MoneyStage[4] - MoneyStage[3]) * taxStageRate[4] + (money - MoneyStage[4])*taxStageRate[5];

    }

    //tax = getTax(money,MoneyStage,taxStageRate);

     

    return tax;

    }

     

    void displayTaxTable(){

     

    cout << "可课税收入 单身纳税者 夫妻联合纳税者 夫妻分别纳税者 户主纳税者" << endl;

    for (int i = 50000; i <= 60000; i += 50){

    cout << i << " " << getTax(0, i) << " " << getTax(1, i) << " " << getTax(2, i) << " " << getTax(3, i) << endl;

    }

    }

     

    int main(){

     

     

    cout << "打印纳税表" << endl;

    displayTaxTable();

    system("pause");

    return 0;

    }

     

    5.16 编写一个函数判断一个整数是否是素数

    bool isPrime(int num)

    找到1000个宿舍 每行十个。

     

    #include <iostream>

    #include <iomanip>

    using namespace std;

    bool isPrime(int number){

     

    for (int i = 2; i <= number / 2; i++){

    if (number%i == 0)

    return false;

    }

    return true;

     

    }

     

    void displayPrimes(){

     

    int count = 0;

    for (int i = 2; count < 1000; i++){

     

    if (isPrime(i)){

    cout << setw(5) << i;

    count++;

    if ( count % 10 == 0)

    cout << endl;

    }

    }

    }

     

    int main(){

     

     

    cout << "打印1000个素数" << endl;

    displayPrimes();

     

    system("pause");

    return 0;

     

    }

     

    5.17 生成矩阵

    #include <iostream>

    #include <ctime>

    using namespace std;

     

    int getRandom0To1(){

    return rand() % 2;

    }

     

    void printMatrix(int n){

     

    for (int i = 1; i <= n; i++){

    for (int j = 1; j <= n; j++){

    cout << getRandom0To1();

    }

    cout << endl;

    }

    }

     

    int main(){

     

    cout << "打印n阶矩阵,矩阵元素非01随机生成" << endl;

    srand(time(0));

    printMatrix(3);

     

    system("pause");

    return 0;

     

    }

     

    5.18 使用程序清单中的RandomCharacter 打印100个随机大写字母,100个 随机个位数字,每行打印10个字母或者数字。

     

    #include <iostream>

    #include <ctime>

    #include "RandomChracter.h"

    using namespace std;

     

    void print100RandomUpperCase(){

     

    for (int i = 0; i < 100; i++){

    cout << getRandomUpperCase() << " ";

    if ((i + 1) % 10 == 0)

    cout << endl;

     

    }

     

    }

     

    void print100RandomSingleNumber(){

     

    for (int i = 0; i < 100; i++){

    cout << getRandomNumber() << " ";

    if ((i + 1) % 10 == 0)

    cout << endl;

     

    }

    }

     

    int main(){

    srand(time(0));

     

    print100RandomUpperCase();

    cout << endl;

    print100RandomSingleNumber();

     

    system("pause");

    return 0;

     

     

    }

     

     

    5.19 打印*方根表:

     

    #include <iostream>

    using namespace std;

     

    void displaySquareRootTable(){

     

    cout << "Number SquareRoot" << endl;

    for (int i = 0; i <= 20;i+=2){

    cout << i << " " << sqrt(i) << endl;

    }

    }

    int main(){

     

    displaySquareRootTable();

     

    system("pause");

    return 0;

     

    }

     

    5.20 三角形面积:

    面积公式:

    MyTriangle.h

    #include <iostream>

    bool isValid(double a, double b, double c){

    if (a + b > c&&a + c > b&&b + c > a){

    return true;

    }

    return false;

    }

     

    double area(double a, double b, double c){

    double s = (a + b + c) / 2;

    return sqrt(s*(s - a)*(s - b)*(s - c));

    }

    main.cpp

    #include <iostream>

    #include "MyTriangle.h"

    using namespace std;

    int main(){

     

    cout << "计算三角形面积" << endl;

    cout << "输入三角形三边" << endl;

    double a, b, c;

    cin >> a >> b >> c;

    if (!isValid(a, b, c)){

    cout << "三角形不合法" << endl;

    }

    else{

    cout << "面积是:" << area(a, b, c) << endl;

    }

    system("pause");

    return 0;

    }

    5.21 适用三角函数打印sin cos 表 角度 从 0°到360°,间隔为10°。结果舍入到小数点后四位。

    #include <iostream>

    #include <iomanip>

    using namespace std;

    #define PI 3.14159

    void displaySinAndCosTable(){

    cout << "Degree Sin Cos" << endl;

    for (int i = 0; i <= 36; i += 1){

    cout <<fixed<<setprecision(4)<< i*10 << " " << setw(5) << sin(i*PI /18) << " " << setw(5) << cos(i*PI /18) << endl;

    }

    }

    int main(){

    displaySinAndCosTable();

    system("pause");

    return 0;

    }

     

    5.22 随机生成10个数,计算*均数,和方差。

    方差推到比较容易,应该可以在下一次展示出来的。

    #include <iostream>

    #include <ctime>

    #include <iomanip>

    using namespace std;

     

    int getRandomNumber(){

    return rand() % 1001;

    }

     

    double getAvg(double sum,int count){

    return sum / count;

    }

    double getDeviation(double sumOfSquare,double squareOfSum,int count){//sumOfSquare *方和,squareOfSum 和的*方

    //自己推了个公式。。。

     

     

    return sqrt((sumOfSquare - squareOfSum / count)/count);

    }

     

    void getFinalResult(){

    double mean = 0;

    int sum = 0;

    double sumOfSquare = 0;

    //double squareOfSum = 0;

    int currentNumber = 0;

    for (int i = 0; i < 10; i++){

    currentNumber =  getRandomNumber();

    sumOfSquare += currentNumber*currentNumber;

    sum += currentNumber;

    cout << setw(4) << currentNumber;

    if (i == 4)

    cout << endl;

    }

    cout <<"*均数是: "<< getAvg(sum, 10) << endl;

    cout << "方差是: " << getDeviation(sumOfSquare,sum*sum,10) << endl;

     

    }

     

    int main(){

     

    srand(time(0));

    //cout << getRandomSingleNumber();

    getFinalResult();

    //cout<<getDeviation(50, 144, 3);

     

    system("pause");

     

    return 0;

     

     

    }

     

    5.23 逼**方根。实现sqrt函数。

    给了这样一个公式

    nextGuesslastGuess*似相等的时候,认为nextGuess就是 这个数字的*方根了。

    #include <iostream>

    #include <iomanip>

    using namespace std;

    double mySqrt(double num){

     

    double guess = 1;

    double nextGuess = 0;

    while (1){

    nextGuess = (guess + num / guess) / 2;

    if (abs(guess - nextGuess) < 0.0001)

    return nextGuess;

    guess = nextGuess;

     

    }

     

    }

    int main(){

     

    cout <<fixed<<setprecision(5)<< mySqrt(30) << endl;

     

    system("pause");

    return 0;

     

     

    }

     

    我也不知道 为啥,感觉挺简单的 想了这么久。。。

    还差5个题。。。

     

    5.24显示当前时间日期

    #include <iostream>

    #include <ctime>

    #pragma warning(disable:4244)

     

    using namespace std;

    void showTime(void){

    int totalSeconds = time(0);//得到从197011日到现在的秒数。

    int currentSecond = totalSeconds % 60;//当前秒=总秒数%60.

    int totalMinutes = totalSeconds / 60;//总分钟数 = 当前秒数/60

    int currentMinute = totalMinutes % 60;//当前分钟数 = 总分钟数%60

    int totalHours = totalMinutes / 60; //总分钟数/60= 当前小时数

    int currentHour = (totalHours + 8) % 24;//这个结果几次出来都是2想到时区问题了,但是想的方式不对,没出结果,

    //现在是早上10点,几次输出的都是2。百思不得解,这个返回的是0时区的时间,北京也就是现在呆的地方时东8区,应该+2,所以,得到结果了。

    cout << currentHour << ":" << currentMinute << ":" << currentSecond << endl;

    }

     

    bool isLeapYear(int year){

    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))

    return true;

    return false;

    }

     

     

    int getMonth(int year, int totaldays){

    int currentMonth = 0;

    int February = 28;

    if (isLeapYear(year)){

    February = 29;

    }

     

    if (totaldays > 31 * 6 + 30 * 4 + February){

    currentMonth = 12;

    }

    else if (totaldays > 31 * 6 + 30 * 3 + February){

    currentMonth = 11;

    }

    else if (totaldays > 31 * 5 + 30 * 3 + February){

    currentMonth = 10;

    }

    else if (totaldays > 31 * 5 + 30 * 2 + February){

    currentMonth = 9;

    }

    else if (totaldays > 31 * 4 + 30 * 2 + February){

    currentMonth = 8;

    }

    else if (totaldays > 31 * 3 + 30 * 2 + February){

    currentMonth = 7;

    }

    else if (totaldays > 31 * 3 + 30 * 1 + February){

    currentMonth = 6;

    }

    else if (totaldays > 31 * 2 + 30 * 1 + February){

    currentMonth = 5;

    }

    else if (totaldays > 31 * 2 + February){

    currentMonth = 4;

    }

    else if (totaldays > 31 + February){

    currentMonth = 3;

    }

    else if (totaldays > 31){

    currentMonth = 2;

    }

    else

    currentMonth = 1;

     

    return currentMonth;

     

    }

     

    int getYear(int totalDays){

    //cout << totalDays << endl;

    const int unixEpoch = 1970;

    int currentYear = unixEpoch;

    //int currentMonth = 0;

    //放在循环里面一直做这个

    while (totalDays>=365){

     

    if (totalDays > 365 * 400 + 24 * 4 + 1){

    totalDays -= 365 * 400 + 24 * 4 + 1;

    currentYear += 400;

    }

    else if (totalDays>365*100+25-1){

    totalDays -= 365 * 100 + 25 - 1;

    currentYear += 100;

    }

    else if (totalDays>365*4+1){

    totalDays -= 365 * 4 + 1;

    currentYear += 4;

    }

    else if (totalDays > 365){

    if (isLeapYear(currentYear)){

    totalDays -= 366;

    }

    else

    totalDays -= 365;

    currentYear++;

    }

    }

    //cout << totalDays << endl;

     

    int currentMonth = 0;

    int February = 28;

    if (isLeapYear(currentYear)){

    February = 29;

    }

     

    if (totalDays > 31 * 6 + 30 * 4 + February){

    totalDays -= 31 * 6 + 30 * 4 + February;

    currentMonth = 12;

    }

    else if (totalDays > 31 * 6 + 30 * 3 + February){

    totalDays -= 31 * 6 + 30 * 3 + February;

    currentMonth = 11;

    }

    else if (totalDays > 31 * 5 + 30 * 3 + February){

    totalDays -= 31 * 5 + 30 * 3 + February;

    currentMonth = 10;

    }

    else if (totalDays > 31 * 5 + 30 * 2 + February){

    totalDays -= 31 * 5 + 30 * 2 + February;

    currentMonth = 9;

    }

    else if (totalDays > 31 * 4 + 30 * 2 + February){

    totalDays -= 31 * 4 + 30 * 2 + February;

    currentMonth = 8;

    }

    else if (totalDays > 31 * 3 + 30 * 2 + February){

    totalDays -= 31 * 3 + 30 * 2 + February;

    currentMonth = 7;

    }

    else if (totalDays > 31 * 3 + 30 * 1 + February){

    totalDays -= 31 * 3 + 30 * 1 + February;

    currentMonth = 6;

    }

    else if (totalDays > 31 * 2 + 30 * 1 + February){

    totalDays -= 31 * 2 + 30 * 1 + February;

    currentMonth = 5;

    }

    else if (totalDays > 31 * 2 + February){

    totalDays -= 31 * 2 + February;

    currentMonth = 4;

    }

    else if (totalDays > 31 + February){

    totalDays -= 31 + February;

    currentMonth = 3;

    }

    else if (totalDays > 31){

    totalDays -= 31;

    currentMonth = 2;

    }

    else{

    currentMonth = 1;

    }

    cout << "今天是" << currentYear << "" << currentMonth << ""<<(totalDays+1)<<" ";//这个 多少号这里面一定有bug

     

    return currentYear;

     

    }

     

    void showDate(void){

     

    int totalseconds = time(0);

    int totalDays = totalseconds / (60*60*24);

    int currentYear = 0;

    getYear(totalDays);

     

     

    }

     

    int main(){

     

    cout << "显示当前时间" << endl;

    showDate();

    showTime();

     

     

    system("pause");

    return 0;

     

     

    }

     

    #include <iostream>

    #include <ctime>

    #pragma warning(disable:4244)

     

    using namespace std;

    void showTime(void){

    int totalSeconds = time(0);//得到从197011日到现在的秒数。

    int currentSecond = totalSeconds % 60;//当前秒=总秒数%60.

    int totalMinutes = totalSeconds / 60;//总分钟数 = 当前秒数/60

    int currentMinute = totalMinutes % 60;//当前分钟数 = 总分钟数%60

    int totalHours = totalMinutes / 60; //总分钟数/60= 当前小时数

    int currentHour = (totalHours + 8) % 24;//这个结果几次出来都是2想到时区问题了,但是想的方式不对,没出结果,

    //现在是早上10点,几次输出的都是2。百思不得解,这个返回的是0时区的时间,北京也就是现在呆的地方时东8区,应该+2,所以,得到结果了。

    cout << currentHour << ":" << currentMinute << ":" << currentSecond << endl;

    }

     

    bool isLeapYear(int year){

    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))

    return true;

    return false;

    }

     

     

    int getMonth(int year, int totaldays){

    int currentMonth = 0;

    int February = 28;

    if (isLeapYear(year)){

    February = 29;

    }

     

    if (totaldays > 31 * 6 + 30 * 4 + February){

    currentMonth = 12;

    }

    else if (totaldays > 31 * 6 + 30 * 3 + February){

    currentMonth = 11;

    }

    else if (totaldays > 31 * 5 + 30 * 3 + February){

    currentMonth = 10;

    }

    else if (totaldays > 31 * 5 + 30 * 2 + February){

    currentMonth = 9;

    }

    else if (totaldays > 31 * 4 + 30 * 2 + February){

    currentMonth = 8;

    }

    else if (totaldays > 31 * 3 + 30 * 2 + February){

    currentMonth = 7;

    }

    else if (totaldays > 31 * 3 + 30 * 1 + February){

    currentMonth = 6;

    }

    else if (totaldays > 31 * 2 + 30 * 1 + February){

    currentMonth = 5;

    }

    else if (totaldays > 31 * 2 + February){

    currentMonth = 4;

    }

    else if (totaldays > 31 + February){

    currentMonth = 3;

    }

    else if (totaldays > 31){

    currentMonth = 2;

    }

    else

    currentMonth = 1;

     

    return currentMonth;

     

    }

     

    int getYear(int totalDays){

    //cout << totalDays << endl;

    const int unixEpoch = 1970;

    int currentYear = unixEpoch;

    //int currentMonth = 0;

    //放在循环里面一直做这个

    while (totalDays>=365){

     

    if (totalDays > 365 * 400 + 24 * 4 + 1){

    totalDays -= 365 * 400 + 24 * 4 + 1;

    currentYear += 400;

    }

    else if (totalDays>365*100+25-1){

    totalDays -= 365 * 100 + 25 - 1;

    currentYear += 100;

    }

    else if (totalDays>365*4+1){

    totalDays -= 365 * 4 + 1;

    currentYear += 4;

    }

    else if (totalDays > 365){

    if (isLeapYear(currentYear)){

    totalDays -= 366;

    }

    else

    totalDays -= 365;

    currentYear++;

    }

    }

    //cout << totalDays << endl;

     

    int currentMonth = 0;

    int February = 28;

    if (isLeapYear(currentYear)){

    February = 29;

    }

     

    if (totalDays > 31 * 6 + 30 * 4 + February){

    totalDays -= 31 * 6 + 30 * 4 + February;

    currentMonth = 12;

    }

    else if (totalDays > 31 * 6 + 30 * 3 + February){

    totalDays -= 31 * 6 + 30 * 3 + February;

    currentMonth = 11;

    }

    else if (totalDays > 31 * 5 + 30 * 3 + February){

    totalDays -= 31 * 5 + 30 * 3 + February;

    currentMonth = 10;

    }

    else if (totalDays > 31 * 5 + 30 * 2 + February){

    totalDays -= 31 * 5 + 30 * 2 + February;

    currentMonth = 9;

    }

    else if (totalDays > 31 * 4 + 30 * 2 + February){

    totalDays -= 31 * 4 + 30 * 2 + February;

    currentMonth = 8;

    }

    else if (totalDays > 31 * 3 + 30 * 2 + February){

    totalDays -= 31 * 3 + 30 * 2 + February;

    currentMonth = 7;

    }

    else if (totalDays > 31 * 3 + 30 * 1 + February){

    totalDays -= 31 * 3 + 30 * 1 + February;

    currentMonth = 6;

    }

    else if (totalDays > 31 * 2 + 30 * 1 + February){

    totalDays -= 31 * 2 + 30 * 1 + February;

    currentMonth = 5;

    }

    else if (totalDays > 31 * 2 + February){

    totalDays -= 31 * 2 + February;

    currentMonth = 4;

    }

    else if (totalDays > 31 + February){

    totalDays -= 31 + February;

    currentMonth = 3;

    }

    else if (totalDays > 31){

    totalDays -= 31;

    currentMonth = 2;

    }

    else{

    currentMonth = 1;

    }

    cout << "今天是" << currentYear << "" << currentMonth << ""<<(totalDays+1)<<" ";//这个 多少号这里面一定有bug

     

    return currentYear;

     

    }

     

    void showDate(void){

     

    int totalseconds = time(0);

    int totalDays = totalseconds / (60*60*24);

    int currentYear = 0;

    getYear(totalDays);

     

     

    }

     

    int main(){

     

    cout << "显示当前时间" << endl;

    showDate();

    showTime();

     

     

    system("pause");

    return 0;

     

     

    }

     

    这个 还是比较难搞的,并且觉得,好像也未必能跑呢。

    5.25逆序素数:

    #include <iostream>

    #include <iomanip>

    using namespace std;

     

    int getBits(int number){

     

    if (number == 0)return 1;

    int bit = 0;

    while (number>0){

    number /= 10;

    bit++;

    }

    return bit;

    }

     

    int reverse(int number){

    int sum = 0;

    int bit = getBits(number);

    int stage = pow(10, bit - 1);

    int currentNumber = 0;

    while (number > 0){

    currentNumber = number % 10;

    sum += currentNumber*stage;

    stage /= 10;

    number /= 10;

    }

    return sum;

    }

     

    bool isPrime(int number){

     

    for (int i = 2; i <= number / 2; i++){

    if (number%i == 0)

    return false;

    }

    return true;

     

    }

    bool isEmirp(int number){

    if (isPrime(number) && isPrime(reverse(number))){

    return true;

    }

    return false;

     

     

    }

     

    void printEmirp(void){//prime  逆序变成 emirp 比如 13是 素数,逆序后的31 也是,这就是 逆序,2 3 5 也是 11 也是

     

    int count = 0;

    for (int i = 2; count < 100; i++){

     

    if (isEmirp(i)){

    cout << setw(5) << i;

    count++;

    if (count  % 10 == 0)

    cout << endl;

    }

     

     

     

    }

     

     

    }

    int main(){

     

    cout << "输出逆序素数" << endl;

    printEmirp();

     

    system("pause");

    return 0;

     

    }

     

    5.26回文素数

    #include <iostream>

    #include <iomanip>

     

    using namespace std;

     

    bool isPrime(int number){

    for (int i = 2; i <= number / 2; i++){

    if (number%i == 0)

    return false;

    }

    return true;

    }

     

    int getBits(int number){

     

    if (number == 0)return 1;

    int bit = 0;

    while (number>0){

    number /= 10;

    bit++;

    }

    return bit;

    }

     

    int reverse(int number){

    int sum = 0;

    int bit = getBits(number);

    int stage = pow(10, bit - 1);

    int currentNumber = 0;

    while (number > 0){

    currentNumber = number % 10;

    sum += currentNumber*stage;

    stage /= 10;

    number /= 10;

    }

    return sum;

    }

     

    bool isReverseSame(int number){

    if (number == reverse(number))

    return true;

    return false;

    }

     

    bool isReverseSamePrime(int number){

    if (isPrime(number) && isReverseSame(number))

    return true;

    return false;

     

    }

     

    void printReverseSamePrime(void){

     

    int count = 0;

    for (int i = 2; count < 100; i++){

     

    if (isReverseSamePrime(i)){

    cout << setw(7) << i;

    count++;

    if (count % 10 == 0)

    cout << endl;

    }

    }

    }

     

     

    int main(){

     

    cout << "输出回文素数" << endl;

    printReverseSamePrime();

     

    system("pause");

    return 0;

     

    }

     

    5.27 梅森素数

    #include <iostream>

    #include <iomanip>

     

    using namespace std;

     

    bool isPrime(int number){

     

    for (int i = 2; i <= number / 2; i++){

    if (number%i == 0)

    return false;

    }

    return true;

     

    }

    void printMersennePrime(){

    int p=31;

    cout << "p 2^p-1" << endl;

    int mersenne = 0;

    for (int p = 2; p<=31; p++){

    mersenne = pow(2, p) - 1;

    if (isPrime(mersenne)){

    cout << p << " " << mersenne << endl;

    }

    }

     

    }

    int main(){

     

    cout << "输出梅森素数" << endl;

    printMersennePrime();

     

    system("pause");

    return 0;

    }

     

    5.28 孪生素数

    #include <iostream>

     

    using namespace std;

     

    bool isPrime(int number){

    for (int i = 2; i <= number / 2; i++){

    if (number%i == 0)

    return false;

    }

    return true;

    }

     

    bool isTwinPrimes(int number){

     

    if (isPrime(number) && isPrime(number + 2))

    return true;

    return false;

     

    }

     

     

    void printTwinPrimes(void){

     

    for (int i = 2; i < 1000; i++){

     

    if (isTwinPrimes(i)){

    cout << "(" << i << "," << i + 2 << ")" << endl;

    }

    }

     

     

     

    }

    int main(){

    cout << "输出孪生素数" << endl;

    printTwinPrimes();

     

    system("pause");

    return 0;

     

     

    }

  • 相关阅读:
    Mybatis中Log4j日志的使用
    Mybatis结果集ResultMap映射
    Mybatis中的基本对象的生命周期和作用域
    IAR瑞萨单片机开发加入printf调试函数
    【转】C语言mem.h中的函数介绍
    【转】c语言位域操作—_结构体内冒号:的使用
    串口数据传输当中的共用体和结构体转换
    【转】printf格式串中的%f的输出格式和内容
    【转】缓冲区设计--环形队列(C++)
    【转】环形队列理论(C语言)
  • 原文地址:https://www.cnblogs.com/letben/p/5402441.html
Copyright © 2011-2022 走看看