Đề: 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:
#include <stdio.h> void main() { unsigned int n,i; double Aver,sum1,sum2,max,min,a0; scanf_s("%d",&n); scanf_s("%lf",&a0); max=a0; min=a0; sum1=a0*a0; sum2=a0; for (i=1;i<=n-1;i++) { double ai; scanf_s("%lf",&ai); sum1+=ai*ai; sum2+=ai; if (ai>max) max=ai; if (ai<min) min=ai; } Aver=2*sum1+1.0*n*(max*max+min*min)-2*(max+min)*sum2 +1.0*n/2*(max-min)*(max-min); printf("%lf",Aver); }
0 nhận xét:
Đăng nhận xét