C++程序设计教程(钱能)课后习题

2.1

#include<iostream>
using namespace std;
int main(){
    int num=129;
    cout<<oct<<num<<endl;
    cout<<hex<<num<<endl;
    
    unsigned short int num1=129;
    cout<<sizeof(signed short)<<dec<<num1<<endl;
//    cout<<dec<<(signed)num1<<endl;没用 

当以有符号数输出时,结果比原数在左边多了一个2.

2.2

#include<iostream>
// #define PI 3.1415926 不合适,超出长度 
#include<iomanip>
int area(float r);
using namespace std;
double PI=3.1415926; 

int main(){
    cout<<setw(10)<<PI<<endl;
    cout<<setw(10)<<40<<endl;
    cout<<setw(10)<<928.335<<endl;
     
    int output1=area(40);
    float output2=area(928.335);
    
    cout<<setw(10)<<output1<<endl;
    cout<<setw(10)<<output2<<endl;
    

int area(float r){
    return r*r*PI;
}

2.3

#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    const double e=2.718281828;
    cout<<setprecision(10)<<e<<endl;
    cout<<setiosflags(ios::fixed)<<setprecision(8)<<e<<endl;
    cout<<setiosflags(ios::scientific)<<setprecision(8)<<e<<endl;
    
    


2.4

#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    const int stu=500;
    cout<<"\"How many students here?\""<<endl<<"\""<<stu<<"\"";

    
    

2.5

2.8

#include<iostream>
using namespace std;
double getvol(float r,float h);
int main(){
    float r,h;
    cin>>r>>h;
    double vol=getvol(r,h);
    cout<<vol<<endl;

double getvol(float r,float h){
    return 3.14159*r*r*h; 
}
 

3.1

#include<iostream>
#include<math>
using namespace std;

int main(){
    double x;
    double num1=sin(x);
    double num2=pow(num1,2.5);
    double num3=sqrt(num2);
    
    double a;
    double num4=(a+x)/4*a;
    double num5=1/2*(a*x+num4);
    
    double c;
    double num6=pow(c,x*x);
    double num7=sqrt(2*3.1415926);
    double num8=num6/num7;

3.5

if(能被3整除){
    输出能被3整除;
    if(能被5整除){输出}
    else(能被7整除)(输出)    

}
else(能被5整除){
    输出
    if(能被7整除){输出}

}
else(能被7整除){


}
else 输出不能被任一个整除

4.1

错误代码:

#include<iostream>
using namespace std;
int cycle(int i);

int main(){
    int i=2;
    int x;
    int n;
    int sum=i+x;
    cin>>x;
    cin>>n;
    
    while(i<=n){
        
        int add*=x;//[错误]标记“*=”之前需要初始值设定项
        int a=cycle(i);
        sum+=add/a;
        i++;
    }

int cycle(int i){

while(i>0){
    int cy*=i;
    i--;
}
return cy;
}

答案:

#include<iostream>
#include<math.h>
using namespace std;

int main(){
    double sum=1,t=1,x;
    int i=1;
    cout<<"please input a value:\n";
    cin>>x;
    do{
        t*=(-1)*x/i;
        sum+=t;
        i++;
    }
    while(fabs(t)>1e-8);// 精度一乘十的负八次方 
    cout<<"sum="<<sum<<endl;
}

4.2

#include<iostream>
#include<math.h>
using namespace std;

int main(){
    int i=1;
    int t=1;
    int sum=0;
    do{
        t*=i;
        sum+=t;
        i++;
    } while(i>12)
    
    cout<<sum<<endl;
    }

4.3

#include<iostream>
#include<math.h>
using namespace std;

int main(){
    int x;
    cout<<"请输入一个三位数"<<endl;
    cin>>x;
    int hun=x/100;
    int ten=(x-hun*100)/10;
    int one=x-hun*100-ten*10;
    if(x=hun*hun*hun+ten*ten*ten+one*one*one){
        cout<<"为水仙花数"; 
    }else cout<<"不为水仙花数";
    
    }

标准答案

#include<iostream>
#include<math.h>
using namespace std;

int main(){
    for(int i=1;i<=9;i++){
        for(int j=0;j<=9;j++){
            for(int k=0;k<=9;k++){   //遍历所有三位数
                if(i*i*i+j*j*j+k*k*k==100*i+10*j+k)
                    cout<<(100*i+10*j+k)<<endl;
            }
        }
    }
    
    }

4.4

#include<iostream>
#include<math.h>
using namespace std;

int main(){
    for(int i=1;i<1000;i++){
        int sum=0;
        for(int j=1;j<=i/2;j++){   //对半求 
            if(i%j==0) sum+=j;
                if(sum==i) cout<<i<<"是完数"<<endl; 
        }
    }
    
    }

4.5

#include<iostream>
#include<math.h>
using namespace std;

int main(){
    ffloat s=100,h=100;
    for(int i=1;i<10;i++)
{
    s+=h;
    h/=2;
}
cout<<
    }

4.6

以剩下的桃子为主体来做

4.7

#include<iostream>
#include<math.h>

using namespace std;

int main(){
    double a,x0,x1;
    cout<<"please input a value :\n";
    cin>>a;
    x1=a;
    do{
        x0=x1;
        x1=(x0+a/x0)/2;               // x1=1/2*(x0+a/x0);为非法运算   输出为nan表示运算非法
        
    }while(fabs(x0-x1)>=1e-7);
    cout<<x1;
}

4.8

(1)错答

#include<iostream>
#include<iomanip>

using namespace std;

int main(){
    for(int i=9;i>0;i--){
        cout<<" ";    //setfill(" ")的意思是重置
        for(int j=1;j<20;j++){
            cout<<'#';
        }
    }
}

标答

#include<iostream>
#include<iomanip>

using namespace std;

int main(){
    for(int i=1;i<=10;i++){     //先有一个整体的列的循环
        for(int j=1;j<=10-i;j++) cout<<" "; 
        for(int j=1;j<=2*i-1;j++) cout<<'#';
        cout<<endl;    //再有一个行的循环,两个循环之间找出对应关系
    }
}

(2)

#include<iostream>
#include<iomanip>

using namespace std;

int main(){
    for(int i=0;i<8;i++){
        for(int j=0;j<=i-1;j++){
            cout<<" ";
        }
        for(int k=0;k<=18-i;k++){
            cout<<"# ";
        }
        cout<<endl;
    }
    }
 

4.9

#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    cout<<" *";
    for(int i=1;i<10;i++) cout<<setw(4)<<i;
    cout<<"\n----------------------------\n";
    for(int i=1;i<=9;i++){   //如果是嵌套循环,先列后行 
        cout<<setw(3)<<i;
        for(int j=1;j<=9;j++)   cout<<setw(4)<<i*j;
        cout<<endl;
    }
}

#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    cout<<" *";
    for(int i=1;i<10;i++) cout<<setw(4)<<i;
    cout<<"\n----------------------------\n";
    for(int i=1;i<=9;i++){   //如果是嵌套循环,先列后行 
        cout<<setw(3)<<i;
        for(int j=1;j<=i;j++)  
          cout<<setw(4)<<i*j;
          cout<<endl;   //如果输出的结果不对,可能是嵌套用的括号位置不对或者多余 
    } 
}

#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    cout<<" *";
    for(int i=1;i<10;i++) cout<<setw(4)<<i;
    cout<<"\n----------------------------\n";
    for(int i=1;i<=9;i++){   
        cout<<setw(3)<<i;
        if(i!=1) cout<<setw(4*i-4)<<" ";
        for(int j=i;j<=9;j++) cout<<setw(4)<<i*j;
        cout<<endl;    } 
}

4.10

错答

#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    int n;
    cin>>n;
    int [n]b={1,1,1,1};  //需要分配确定的内存给数组 
    int sum=4;
    for(int i=4;i<n;i++) {
        
        b[i]=sum+b[i-4];
        sum+=b[i];
    }
    cout<<sum<<endl;
}

标答

#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    int n;
    long a=1,b=1,c=1,temp;
    cout<<"please input a value:\n";
    cin>>n;
    for(int i=4;i<=n;i++){
        temp=a+c;a=b;b=c;c=temp;
    }
    cout<<c<<endl;
}

将求n!的递归函数非递归化

#include<iostream>
using namespace std;
int add(int n);
int main(){
    int n;
    cin>>n;
    int con;
    while(n>1){
        int temp;
        for(int i=0;i<n;i++){
    
        temp*=n;
        n--;
        
    }
        con=temp;
}
    cout<<con<<endl;
}
 

猜你喜欢

转载自blog.csdn.net/yghkdr/article/details/87973243