Yêu cầu: Nhập số tự nhiên n rồi tính tổng (lưu ý phép chia các số nguyên):
S = 1 + 1/2 + 1/3 + 1/4 +... 1/n ( n > 0)
Phân tích:
– Nhập vào số nguyên dương n (n > 0)
– Dùng vòng lặp for( ) để tính tổng S
Code:
/************************************************************ * Author: VNCODING * History * 2014/04/02 first create VNCODING *************************************************************/ #include <stdio.h> #include <conio.h> void main() { int n,i; float S = 0; do { printf("\nNhap n > 0: "); scanf("%d",&n); } while (n <= 0); for(i = 1;i <= n;i++) { S +=1/(float)i; } printf("\nS = %f", S); getch(); }
Kết quả:
Nhap n > 0: 5 S = 2.283334
tại sao chỗ tính tổng lại phải dùng dấu += thì mới có thể ra kết quả đung ak
S+=1 có nghĩa là S =S +1
ai đó giải thích giùm e với ạ
@hong, toán tử += tương đương với lệnh: S = S + 1/(float)i;
em không hiểu cái chỗ này lắm. tại sao lại là (float)i vậy ?
@Tuan Anh,
Xét phép toán a = b/c = 5/2 = 2
Nếu b và c là số nguyên thì đây là phép chia lấy phần nguyên.
Do vậy, cần ép kiểu cho b hoặc c là số thực kiểu float. Để phép chia a = b/c = 5/2 = 2.5
thế tại sao không khai báo float từ đầu lun ạ ^^
@sstrrikerr, ý bạn là khai báo biến n là kiểu float.
Nếu n là float thì ko được vì biểu thức trong vòng lặp for phải là số nguyên
em khai bao’ float cho i từ đầu, xong vẫn chạy ngon lành mà :((
tại sao phải float s=0 ạ
khởi tạo biến kết quả có giá trị bằng 0
cho e hỏi chỗ while(n0) ạ
Ai biết s=1+1/2+1/3+1/4………..+1/n giải thích công thức bằng toán học giúp mình với
#include
#include
using namespace std;
int main() {
double n,s;
cout<>n;
for(int i=1;i<=n;i++){
s+=1/(float)i;
}
cout<<"Tong can tim, s= "<<setprecision(4)<<s<<"\n";
}
#include
int main () {
int a,i;
float s=0;
do {
printf (“gia tri cua a \t “);
scanf (“%d”,&a);
}
while (a<=1);
for (i = 1; i <= a; i++) {
s += 1/(float)i;
}
printf ("Tong S = %.2f \t ",s);
return 0;
}
Cho e hỏi chút về chỗ lệnh printf cuối cùng ạ. Tại sao lệnh printf khi nằm ngoài dấu {} chỉ cho 1 giá trị và khi lệnh printf nằm trong dấu {} lại cho nhiều hơn 1 giá trị ạ? Em cảm ơn
Hi Thường,
>Cho e hỏi chút về chỗ lệnh printf cuối cùng ạ. Tại sao lệnh printf khi nằm ngoài dấu {} chỉ cho 1 giá trị và khi lệnh printf nằm trong dấu {} lại cho >nhiều hơn 1 giá trị ạ? Em cảm ơn
Nếu đặt printf trong {} là trong vòng lặp for => câu lệnh print được gọi nhiều lần.
Dạ, em cảm ơn ạ. Vậy phiền ad trả lời dùm e thêm một câu nữa nha. Em k hiểu tại sao lại dùng lệnh lặp do while ở phần đầu bài ạ? Em thấy bỏ phần đó ra thì chương trình vẫn chạy đúng ạ?
Hi Thường,
>Em k hiểu tại sao lại dùng lệnh lặp do while ở phần đầu bài ạ? Em thấy bỏ phần đó ra thì chương trình vẫn chạy đúng ạ?
Vòng lặp ở đầu hàm main() dùng để validate (kiểm tra) điều kiện nhập vào số nguyên dương.
– Nếu user nhâp vào số N < = 0, thì vòng lặp chạy và yêu cầu user nhập lại - Nêu user nhập vào số N > 0, thì kết thúc vòng lặp
#include
#include
using namespace std;
int main ()
{
int n;
float tong=0;
cout<>n;
for (int a;a<=n;a++)
{
tong=tong+1/(float)a;
}
cout<<setprecision(4);
cout<<tong;
return 0 ;
}