学堂在线TsinghuaX: 00740043X C++语言程序设计基础 第四章Lab

第一题:最大公约数

题目描述

求两个正整数a 和 b的最大公约数。

要求使用c++ class编写程序。可以创建如下class

#include <iostream>
using namespace std;
class Integer {
private:
    int _num;
public:
//构造函数
    Integer(int num) {
    }
//计算当前Integer 和 b之间的最大公约数
    int gcd(Integer b) {
    }
};
int main(){
    int a, b;
    cin >> a >> b;
    Integer A(a);
    Integer B(b);
    cout << A.gcd(B) << endl;
    return 0;
}

输入描述

两个正整数a,b,并且1=<a,b <=10000

输出描述

a和b的最大公约数

样例输入

1000 1000

样例输出

1000
#include <iostream>
using namespace std;
class Integer {
private:
    int _num;
public:
//构造函数
    Integer(int num) {
        _num=num;
    }
//计算当前Integer 和 b之间的最大公约数
    int gcd(Integer b) {
        int c=b._num,d;
        _num>c?d=c:d=_num;
        while((_num%d!=0)||(c%d!=0))
                d--;
         return d;
    }
};
int main(){
    int a, b;
    cin >> a >> b;
    Integer A(a);
    Integer B(b);
    cout << A.gcd(B) << endl;
    return 0;
}

第二题:反转整数

题目描述

对于输入的一个正整数,输出其反转形式 

要求使用c++ class编写程序。可以创建如下class

#include <iostream>
using namespace std;
 
class Integer{
private:
    int _num;
//getLength()函数获取_num长度
    int getLength(){
    }
public:
//Integer类构造函数
    Integer(int num){
    }
//反转_num
    int inversed(){
    }
};
 
int main() {
    int n;
    cin >> n;
    Integer integer(n);
    cout << integer.inversed() << endl;
}

输入描述

一个正整数a ,且1=<a<=1,000,000,000

输出描述

a的反转形式

样例输入

1011

样例输出

1101
#include <iostream>
using namespace std;
class Integer{
private:
    int _num;
//getLength()函数获取_num长度
    int getLength(){
         int x=_num;
         int len=0;
         while(x!=0||x%10!=0)
         {
              len++;
              x/=10;
         }
         return len;
    }
public:
//Integer类构造函数
    Integer(int num){
         _num=num;
    }
//反转_num
    int inversed(){
         int len = getLength();
         int tmp=_num;
         int s=0;
         for(int i=0;i<len;i++)
         {
              s=s*10+tmp%10;
              tmp/=10;
         }
         return s;
    }
};
 
int main() {
    int n;
    cin >> n;
    Integer integer(n);
    cout << integer.inversed() << endl;
}

第三题:一元二次方程求解

题目描述

对于一元二次方程ax^2 + bx + c = 0,解可以分为很多情况。

若该方程有两个不相等实根,首先输出1,换行,然后从小到大输出两个实根,换行;

若该方程有两个相等实根,首先输出2,换行,然后输出这个这个实根,换行;

若该方程有一对共轭复根,输出3,换行;

若该方程有无解,输出4,换行;

若该方程有无穷个解,输出5,换行;

若该方程只有一个根,首先输出6,换行,然后输出这个跟,换行;

要求使用c++ class编写程序。可以创建如下class

#include <iostream>
#include <cmath>
using namespace std;
class Equation{
private:
    int _a, _b, _c;
public:
    Equation(int a, int b, int c){
    }
    void solve(){
    }
};
int main(){
    int a, b, c;
    cin >> a >> b >> c;
    Equation tmp(a, b, c);
    tmp.solve();
}

输入描述

该一元二次方程的系数a,b,c,且-100=<a,b,c<=100

输出描述

解的情况。输出解的时候保留两位小数

样例输入

1 4 3

样例输出

1
-3.00 -1.00
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
class Equation {
private:
    int _a, _b, _c, _x;
public:
    Equation(int a, int b, int c) {
        _a = a, _b = b, _c = c;
        _x = _b * _b - 4 * _a * _c;
    }
    void solve() {
        if (_x > 0 && _a != 0)
        {
            cout << 1 << endl;
            double x = -_b / 2.0 / (double)_a;
            double y = sqrt(_x) / 2.0 / (double)_a;
            printf("%.2f %.2f
", x - y, x + y);
        }
        else if(_x==0&&_a!=0)
        {
            cout << 2 << endl;
            double x = -_b / 2.0 / (double)_a;
            printf("%.2f
", x);
        }
        else if(_x<0&&_a!=0)
        {
            cout<<3<<endl;
        }
        else if(_a==0&&_b==0&&_c!=0)
        {
            cout<<4<<endl;
        }
        else if(_a==0&&_b==0&&_c==0)
        {
            cout<<5<<endl;
        }
        else if(_a==0&&_b!=0)
        {
            cout<<6<<endl;
            double x = -_c /(double)_b;
            printf("%.2f
", x);
        }
    }
};

int main() {
    int a, b, c;
    cin >> a >> b >> c;
    Equation tmp(a, b, c);
    tmp.solve();
}
原文地址:https://www.cnblogs.com/Konayuki2015/p/4520680.html