Bài tập C++ kinh điển

Để củng cố những kiến thức đã học về lập trình C++. Mời bạn đọc cùng thực hành qua một số bài tập C++ cơ bản dưới đây.

Mục lục nội dung

Bài tập C++ kinh điển

1. Bài 01

Viết một chương trình C++ in ra dãy số Fibonacci

Gợi ý:

  • Sử dụng đệ quy
  • Không sử dụng đệ quy

Code mẫu: In dãy số Fibonacci trong C++ không sử dụng đệ quy.

/**
 * Tinh day so Fibonacci KHONG dung phuong phap de quy
 * 
 * @author viettuts.vn
 */

#include <iostream>
  
using namespace std;

/**
 * Tinh so Fibonacci thu n
 *
 * @param n: chi so cua so Fibonacci tinh tu 0
 *           vd: F0 = 0, F1 = 1, F2 = 1, F3 = 2
 * @return So Fibonacci thu n
 */
int fibonacci(int n) {
    int f0 = 0;
    int f1 = 1;
    int fn = 1;
    int i;

    if (n < 0) {
        return -1;
    } else if (n == 0 || n == 1) {
        return n;
    } else {
        for (i = 2; i < n; i++) {
            f0 = f1;
            f1 = fn;
            fn = f0 + f1;
        }
    }
    return fn;
}

/**
 * Ham main
 */
int main() {
 int i;
    cout << "10 so dau tien cua day so Fibonacci: \n";
    for (i = 0; i < 10; i++) {
        cout << fibonacci(i) << " ";
    }
}

Kết quả:

10 so dau tien cua day so Fibonacci: 
0 1 1 2 3 5 8 13 21 34 

2. Bài 02

Viết một chương tình C++ kiểm tra số nguyên tố.

Code mẫu:

#include <iostream>
#include <cmath>

using namespace std;
  
/**
 * check so nguyen to trong C++
 *
 * @author viettuts.vn
 * @param n: so nguyen duong
 * @return 1 la so nguyen so,
 *         0 khong la so nguyen to
 */
int isPrimeNumber(int n) {
    // so nguyen n < 2 khong phai la so nguyen to
    if (n < 2) {
        return 0;
    }
    // check so nguyen to khi n >= 2
    int squareRoot = (int) sqrt(n);
    int i;
    for (i = 2; i <= squareRoot; i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}

/**
 * Ham main
 */
int main() {
 int i;
    cout << "Cac so nguyen to nho hon 100 la: \n";
    for (i = 0; i < 100; i++) {
        if (isPrimeNumber(i)) {
            cout << i << " ";
        }
    }
}

Kết quả:

Cac so nguyen to nho hon 100 la: 
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

3. Bài 03

Viết một chương trình C++ tính giai thừa của một số bằng cách không sử dụng đệ quy và có sử dụng đệ quy.

Gợi ý:

  • Sử dụng đệ quy
  • Không sử dụng đệ quy

Code mẫu: Tính giai thừa trong C++ không sử dụng đệ quy.

/**
 * Tinh giai thua KHONG dung phuong phap de quy
 * 
 * @author viettuts.vn
 */

#include <iostream>
  
using namespace std;

/**
 * tinh giai thua
 *
 * @author viettuts.vn
 * @param n: so nguyen duong
 * @return giai thua cua so n
 */
long tinhGiaithua(int n) {
 int i;
    long giai_thua = 1;
    if (n == 0 || n == 1) {
        return giai_thua;
    } else {
        for (i = 2; i <= n; i++) {
            giai_thua *= i;
        }
        return giai_thua;
    }
}

/**
 * Ham main
 */
int main() {
    int a = 5;
    int b = 0;
    int c = 10;
    cout << "Giai thua cua " <<  a << "la: " << tinhGiaithua(a) << endl;
    cout << "Giai thua cua " <<  b << "la: " << tinhGiaithua(b) << endl;
    cout << "Giai thua cua " <<  c << "la: " << tinhGiaithua(c) << endl;
}
Kết quả:
Giai thua cua 5  la: 120
Giai thua cua 0  la: 1
Giai thua cua 10  la: 3628800

4. Bài 04

Viết một chương trình C++ để chuyển đổi số nguyên N sang hệ cơ số B (2 <= B <= 32) bất kỳ.

Code mẫu: Chuyển đối hệ cơ số 10 sang hệ cơ số B

/**
 * Chuong trinh chuyen doi he co so trong C
 * Bai tap nay su dung bang ASCII de chuyen doi so nguyen thanh kieu ky tu
 * Link tham khao: https://vi.wikipedia.org/wiki/ASCII
 * 
 * @author viettuts.vn
 */

#include <iostream>
  
using namespace std;

const char CHAR_55 = 55;
const char CHAR_48 = 48;

/**
 * chuyen doi so nguyen n sang he co so b
 *
 * @author viettuts.vn
 * @param n: so nguyen
 * @param b: he co so
 */
int convertNumber(int n, int b) {
    if (n < 0 || b < 2 || b > 16 ) {
        printf("He co so hoac gia tri chuyen doi khong hop le!");
        return 0;
    }
    int i;
    char arr[20];
    int count = 0;
    int m;
    int remainder = n;
    while (remainder > 0) {
        if (b > 10) {
            m = remainder % b;
            if (m >= 10) {
                arr[count] = (char) (m + CHAR_55);
                count++;
            } else {
                arr[count] = (char) (m + CHAR_48);
                count++;
            }
        } else {
            arr[count] = (char) ((remainder % b) + CHAR_48);
            count++;
        }
        remainder = remainder / b;
    }
    // hien thi he co so
    for (i = count - 1; i >= 0; i--) {
        printf("%c", arr[i]);
    }
    return 1;
}

/**
 * Ham main
 */
int main() {
    int n = 12;
    printf("So %d trong he co so 2 = ", n);
    convertNumber(n, 2);
    printf("\nSo %d trong he co so 16 = ", n);
 convertNumber(n, 16);
    return 1;
}

Kết quả:

So 12 trong he co so 2 = 1100
So 12 trong he co so 16 = C

Trên đây là một số bài tập C++ kinh điển mà eLib.VN tổng hợp được. Một bài có thể có nhiều hướng giải quyết. Bạn có thể chọn cách phù hợp. Chúc các bạn thành công!

Để củng cố kiến thức và nắm vững nội dung, mời các bạn cùng làm bộ câu hỏi trắc nghiệm "400 câu hỏi trắc nghiệm lập trình C++ có đáp án và lời giải chi tiết"

Trắc Nghiệm

Ngày:29/10/2020 Chia sẻ bởi:Denni

CÓ THỂ BẠN QUAN TÂM