01/10/2018, 00:05

Em mới học C có chỗ này thắc mắc,tại sao phải có ".0" hoặc (float)i thì mới dc ạ.hai cái đó có tác dụng gì vậy ạ

//Viết chương trình tính tổng nghịch đảo của N số nguyên đầu tiên theo công thức S = 1 + 1/2 + 1/3 + … + 1/N 
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,n;
    float s=0;
    printf("Nhap vao n:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        s=s+1.0/i; //hay s=s+1/(float)i;
    }
    printf("%f",s);
    return 0;
}
Sơn viết 02:15 ngày 01/10/2018

s=s+1.0/i; là phêp chia, nên kết quả có thể là số nguyên hoặc số thực(đa phần là số thực) nên bạn phải thêm 1.0 hawocj (float) để ép kiểu. Giả sử s=6+1/6, nếu không ép kiểu thì phép chia 1/6 sẽ lấu phần nguyên, là 0 nên sau khi tính s=6. Nếu
để 1.0 hoặc float vào đó thì kq sẽ là 6.166666 bạn ạ

Lương Quang Mạnh viết 02:19 ngày 01/10/2018

Bạn phải dùng số thực trong toán hạng thì kết quả mới được số thực, còn không chỉ được phần nguyên của nó thôi. Cho nên phải ép kiểu, và có 2 cách:

  • Trong một biểu thức, kiểu dữ liệu của kết quả là kiểu dữ liệu “to” nhất. Cho nên, khi bạn thêm .0, mặc nhiên bạn đã làm cho phép chia với số nguyên thành phép chia với số thực
  • Sử dụng trực tiếp (data_types) để ép kiểu. Hiệu quả y xì, nhưng tổng quát hơn.
DV.Nam viết 02:14 ngày 01/10/2018

ý của bạn là chỗ 1/i nó sẽ mang kiểu nguyên như i nếu ko ép kiểu đúng ko ạ

Sơn viết 02:19 ngày 01/10/2018

đúng rồi. nếu bạn muốn ép kiểu thì 1.0/i hặc 1/(float)i đều được

Bài liên quan
0