2 code tính 1+1/2+1/3+....+1/n: 1 cách tính đúng, 1 cách tính sai

Chào mn em là lính mới
Đề bài của em là tính tổng của dãy 1+1/2+1/3…+1/n

em sử dụng cấu trúc lặp theo hai cách
C1

#include<stdio.h>

int main() {
	unsigned int n;
	printf("Nhap gia tri");
	scanf("%d", &n);
	unsigned int a;
	float sum=0;
	do {
		a=1;
		sum+= (float)1/a;
		a++;
	} while ( a < n);
	printf("Tong : %f", sum);
return 0;
}

C2

#include<stdio.h>

int main() {
	unsigned int n;
	printf("Nhap gia tri");
	scanf("%d", &n);
	unsigned int a;
	float sum=0;
	for ( a = 1 ; a <= n; a++){
		sum+= (float)1/a;
	}
printf("Tong = %0.3f ", sum);




return 0;
}

Tại sao cách hai em chạy ra đúng đáp án còn cách một lại làm không ra ạ anh chị giúp em với

cho n = 2 đi, bạn chạy chay code 1 ra là thấy

4 Likes

em cho n= 2 thì nó chỉ ra kết quả là 1 thôi ạ :((

bạn chạy chay code chưa? Ý mình là bạn run code bằng não ấy chứ không phải bằng máy

7 Likes

Ở cách 1: Mỗi lần lặp thì bạn gán a = 1, tức là về đầu. Lặp vô tận chứ nhỉ? (Nếu n > 2).

4 Likes

Dạ nếu em gán a = 1 trên phần khai báo rồi đổi a<= n thì sao ạ

	do {
		a=1;
		sum+= (float)1/a;
		a++;
	} while ( a < n);
	printf("Tong : %f", sum);
return 0;
}

Bạn nên tìm hiểu rõ cách hoạt động của do while nhé (anh đạt có nói rất rõ trong video ltc rồi đó):
Do ‘‘do{}’’ thực hiện trước a = 1 -> sum = 1/1 -> a++ -> a=2
Nếu bạn nhập n = 3 thì a< n vậy lại quay lại vòng do và a = 1 -> sum = 1/1 -> a++ -> a=2 và cứ thế mãi
Nếu bạn nhập n = 2 thì a !< n vậy kết quả sẽ in ra là sum = 1/1

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?