CODE

#include<stdio.h>
#include<conio.h>

int main()
{
    int i, n;
    float S;
    S = 0; i = 1;
    do
    {
        printf("\nNhap n: ");
        scanf("%d", &n);
        if(n < 1)
        {
            printf("\nN phai lon hon hoac bang 1. Xin nhap lai !");
        }

    } while(n < 1);

    while(i <= n)
    {
        S = S + 1.0 / i;  // phải nhớ là 1.0 / i
        i++;
    }
    printf("i = %d", i);
    printf("\nS = %f", S);
    printf("\nTong 1 + 1/2 + ... + 1/%d la %.2f: ", n, S);

    getch();
    return 0;
}

GIẢI THÍCH

Đoạn mã trên là một chương trình C đơn giản nhằm tính tổng của dãy số nghịch đảo S(n) = 1 + \frac{1}{2} + \frac{1}{3} + \dots + \frac{1}{n} với n là một số nguyên dương do người dùng nhập vào. Chúng ta sẽ cùng nhau tìm hiểu từng phần của đoạn mã này nhé!

Khai báo thư viện

#include<stdio.h>
#include<conio.h>

Hai dòng đầu của mã là khai báo thư viện. stdio.h chứa các hàm nhập/xuất chuẩn như printfscanf, còn conio.h cung cấp hàm getch() dùng để chờ người dùng nhấn một phím bất kỳ trước khi chương trình kết thúc. Lưu ý, thư viện conio.h chủ yếu dùng trong môi trường Windows cũ và thường không cần thiết trong nhiều hệ thống hiện đại.

Định nghĩa hàm main()

Trong hàm main(), chương trình khai báo các biến i, n, và S:

  • i đóng vai trò như biến đếm trong vòng lặp.
  • n lưu giá trị số nguyên dương mà người dùng nhập vào.
  • S là biến để lưu tổng dãy nghịch đảo mà chương trình sẽ tính toán.

Nhập giá trị n từ người dùng

do
{
    printf("\nNhap n: ");
    scanf("%d", &n);
    if(n < 1)
    {
        printf("\nN phai lon hon hoac bang 1. Xin nhap lai !");
    }

} while(n < 1);

Chương trình yêu cầu người dùng nhập giá trị n và tiếp tục yêu cầu nhập lại nếu n nhỏ hơn 1. Đoạn mã này giúp kiểm tra tính hợp lệ của giá trị đầu vào, đảm bảo rằng n phải là một số nguyên dương.

Tính tổng dãy nghịch đảo với vòng lặp while

Vòng lặp while này thực hiện việc tính tổng dãy nghịch đảo. Ở mỗi lần lặp, chương trình cộng thêm vào S giá trị của \frac{1.0}{i}​, trong đó 1.0 đảm bảo rằng phép chia trả về giá trị thực thay vì số nguyên. Giá trị i tăng thêm 1 sau mỗi lần lặp cho đến khi i vượt quá n.

In kết quả

printf("i = %d", i);
printf("\nS = %f", S);
printf("\nTong 1 + 1/2 + ... + 1/%d la %.2f: ", n, S);

Cuối cùng, chương trình hiển thị giá trị cuối cùng của i (tức là n + 1 sau khi vòng lặp kết thúc), tổng S với định dạng đầy đủ, và tổng dưới dạng làm tròn đến 2 chữ số thập phân.

Hàm getch()return 0;

getch();
return 0;

Hàm getch() giữ màn hình lại để người dùng có thể đọc kết quả trước khi thoát chương trình. return 0; báo hiệu rằng chương trình đã kết thúc mà không gặp lỗi.

Categorized in: