Code
#include<stdio.h>
#include<conio.h>
int main()
{
int i, n;
long S;
S = 0;
i = 1;
printf("\nNhap n: ");
scanf("%d", &n);
while(i <= n)
{
S = S + i * i;
i++;
}
printf("i = %d", i);
printf("\nTong 1^2 + 2^2 + ... + %d^2 la: %ld", n, S);
/*int n,i;
int sum=0;
printf("Enter the n i.e. max values of series: ");
scanf("%d",&n);
sum = (n * (n + 1) * (2 * n + 1 )) / 6;
printf("Sum of the series : ");
for(i = 1; i <= n ; i++){
if (i != n)
printf("%d^2 + ",i);
else
printf("%d^2 = %d ",i,sum);
}*/
getch();
return 0;
}
Giải thích
Đoạn code C này tính toán tổng của các số nguyên bình phương từ 1 đến n
, nhưng có hai phần khác nhau: phần đầu là cách tính tổng thủ công bằng vòng lặp while
, còn phần bị comment là cách tính tổng theo công thức toán học cho tổng bình phương của các số nguyên.
Hãy đi qua từng phần:
1. Phần đầu tiên (vòng lặp while
):
Chương trình này tính tổng các số bình phương từ 1 đến n
theo cách thủ công bằng vòng lặp.
- Khai báo và khởi tạo:
int i, n;
: Khai báo hai biến nguyêni
(biến đếm) vàn
(biến nhập từ người dùng).long S;
: BiếnS
dùng để lưu tổng các bình phương.S = 0;
vài = 1;
: Khởi tạo giá trị ban đầu cho tổngS
bằng 0 và biến đếmi
bằng 1.
- Vòng lặp
while
:while(i <= n)
: Vòng lặp chạy từi = 1
đếni = n
.S = S + i * i;
: Cộng bình phương củai
vào biếnS
để cập nhật tổng.i++
: Tăng giá trị củai
lên 1 sau mỗi lần lặp.
- Hiển thị giá trị
i
sau vòng lặp:printf("i = %d", i);
: In ra giá trị củai
khi vòng lặp kết thúc. Doi++
diễn ra sau mỗi lần lặp, giá trị cuối cùng củai
sẽ làn + 1
.
- In kết quả tổng bình phương:
printf("\nTong 1^2 + 2^2 + ... + %d^2 la: %ld", n, S);
: In kết quả tổng các bình phương từ 1 đếnn
.
2. Phần bị comment (tính tổng theo công thức):
Phần này đã bị comment, nhưng nó chứa một cách khác để tính tổng bình phương các số từ 1 đến n
bằng công thức toán học trực tiếp thay vì dùng vòng lặp:
- Công thức toán học:
sum = (n * (n + 1) * (2 * n + 1 )) / 6;
: Đây là công thức tính tổng các số bình phương từ 1 đếnn
. Công thức này nhanh hơn vòng lặp vì chỉ cần thực hiện phép tính một lần, dựa trên giá trịn
.
- In dãy số bình phương:
- Phần này sử dụng vòng lặp
for
để in từng số bình phương, từ 1 đếnn
, theo định dạng:1^2 + 2^2 + ... + n^2
. - Khi in ra, nó thêm dấu
+
giữa các số, nhưng với số cuối cùng (khii == n
), nó in dấu=
và tổng cuối cùng.
- Phần này sử dụng vòng lặp
3. Kết thúc chương trình:
getch();
: Chờ người dùng nhấn một phím trước khi thoát chương trình (tương tự như phần trước).return 0;
: Kết thúc chương trình với giá trị trả về là 0, báo hiệu chương trình kết thúc thành công.