Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: giúp em sửa sai với ak!

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Unhappy giúp em sửa sai với ak!

    Đề bài :Viết chuơng trình nhập vào số loại điểm, việc nhập kết thúc khi có gõ vào 1 số âm,nhưng vẫn tính tổng dương trước đó Em làm nhưng khi gõ số âm thì ra lỗi. Anh chị giúp em với ạ!


    #include<stdio.h>
    int main()
    { int i,n;
    float s,diem_tb ,a[20];
    printf("nhap so luong diem\n");scanf("%d",&n);
    i=0;
    do
    {
    printf("nhap a[%d]=\n",i); scanf("%f",&a[i]);
    if(a[i]>=0)i++;
    else break;
    }while(i<n);
    for(i=0;i<n;i++)
    {
    s=s+a[i];
    }
    printf("\ndiem tong la %f",s);

    }

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Lỗi gì hả bạn?
    Mình thấy có 1 cái lỗi BỰ BỰ là biến s ko dc khởi tạo từ giá trị 0
    Nên nó thường là 1 con số "rác" của ram với giá trị khá khủng .
    Xử lý:
    cho s=0 trước khi làm thao tác cộng các phần tử mảng vào
    Um Mani Padme Hum...!!

  3. #3
    Ngày gia nhập
    09 2011
    Bài viết
    0

    oh.Nhưng mà t sửa s=0 khi nhập số âm nó vẫn ra số to quá. Tớ tìm mãi mà k ra là sai chỗ nào nhỉ. Hix

  4. #4
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Vậy đợi mình 1 tí, mình debug cho.

    Nếu trường hợp nhập âm, ngắt nửa chừng. thì i sẽ <n khi out vòng lặp.Những phần từ từ 0-> i là ngon rồi, ko cần phải bàn Nhưng những phần tử từ i -> n sẽ là "rác" . Mà cộng rác vào là nó ra "đống rác" là đúng rùi đóa

    Ở vòng for + dồn, bạn phải cho 1 biến j chạy từ 0 đến <i mới được.
    Vì i mới chính là size thực thụ của mảng. n chưa phải là size thực thụ

    Nhưng lại xảy ra vấn đề: I khi out giữa chừng thì phần tử a[i] vẫn là phần tử xịn. Còn khi nạp đủ n phần tử thì a[n] là rác, a[n-1] mới xịn. Do đó cho chạy tới <i cũng ko ổn , mà <=i cũng ko xong
    Do đó bạn cần phải xử lý 1 trong 2 chỗ , công đoạn nhập hoặc công đoạn cộng cho phù hợp để thỏa điều trên
    Gợi ý:
    ở vòng cộng :for(int j=0; j<= (i==n?i-1:i);j++)
    Đã được chỉnh sửa lần cuối bởi clchicken : 03-12-2011 lúc 10:52 PM.
    Um Mani Padme Hum...!!

  5. #5
    Ngày gia nhập
    07 2011
    Bài viết
    38

    1. s của bạn chưa set về 0
    2. vòng lặp cuối cùng của bạn là i< n , trong khi nếu bạn dùng số âm để kết thúc vòng while trước thì số phần tử trong a[] của bạn sẽ nhỏ hơn n -> lỗi. Nói cụ thể hơn 1 tí
    - đầu bạn set số phần tử nhập vào n = 5
    - nhập đc 3 số đầu , bạn break
    - khi chạy vòng lặp tính tổng, chỉ 3 giá trị đầu là đúng với bạn nhập, còn 2 giá trị nữa, 1 cái sẽ = số âm mà bạn dùng để break, cái còn lại nữa thì là 1 số ko xác định
    => tính tổng sai là phải rồi

Các đề tài tương tự

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 22-10-2011, 08:43 AM
  3. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM
  4. Code giúp add một key vào registry, ai giúp em?
    Gửi bởi olavien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-12-2007, 08:45 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn