Thứ Hai

Tính biểu thức Aver

Đề: Tính:
  

Trong đó Max, Min lần lượt là giá trị  lớn nhất, nhỏ nhất của n số  thực (được nhập vào từ thiết bị nhập chuẩn) a0, a1,..., an

Chỉ  dùng duy nhất 1 vòng lặp (for hoặc while), đề  xuất cách thức để  nhập n số  thực như trên  và  tính  giá  trị  của  biểu thức Aver,  xuất  kết  quả  tính  ra  thiết  bị  xuất  chuẩn.  Viết  chương trình để minh họa đề xuất đó.

Lưu ý: Phần này sinh viên chưa học về  mảng, như vậy vấn đề  chính của bài toán này là không thể dùng mảng để lưu giá trị của n số thực nói trên. Như vậy phải đề xuất một giải pháp “thông minh” để nhập và tính toán mà không đưa trước các số thực này vào mảng.

Bài giải: Biến đổi ta được:


                     

                                        
Đặt:

 


Ta có thể tính Sum1 và Sum2 một cách dễ dàng trong quá trình thực hiện vòng lặp nhập ai

Mã nguồn:
  1. #include <stdio.h>
  2. void main()
  3. {
  4. unsigned int n,i;
  5. double Aver,sum1,sum2,max,min,a0;
  6. scanf_s("%d",&n);
  7. scanf_s("%lf",&a0);
  8. max=a0;
  9. min=a0;
  10. sum1=a0*a0;
  11. sum2=a0;
  12. for (i=1;i<=n-1;i++)
  13. {
  14. double ai;
  15. scanf_s("%lf",&ai);
  16. sum1+=ai*ai;
  17. sum2+=ai;
  18. if (ai>max) max=ai;
  19. if (ai<min) min=ai;
  20. }
  21. Aver=2*sum1+1.0*n*(max*max+min*min)-2*(max+min)*sum2
  22. +1.0*n/2*(max-min)*(max-min);
  23. printf("%lf",Aver);
  24. }

0 nhận xét:

Đăng nhận xét