Bài
2: Xem
công thức tính sau đây (đề thi tuyển sinh
cao học ngành KHMT, năm 2011):
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-1.
Nhận định bài toán:
Ta có thể sử
dụng nhiều vòng lặp để giải quyết
Vòng lặp thứ
nhất ta sử dụng để nhập
Vòng lặp thứ
hai ta tìm được Min
Vòng thứ ba
ta tìm được Max
Vòng thứ tư
ta tìm được tổng bình phương vế đầu
Vòng thứ
năm ta tìm được tổng bình phương vế sau.
Nhưng như thế ta không thỏa mãn được yêu cầu bài toán là chỉ sử
dụng vòng lặp.
Suy nghĩ theo hướng khác ta khai triển biểu thức:
(ai-max2)+(ai
–min2)+n/2(max-min)2=2ai2-2ai(max+min)+(1+n/2)(max2+min2)-nmaxmin
Vậy chỉ dùng 1 vòng lặp tìm được min, max, tổng bình phương S, tổng các số
S2
Bài giải:
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
double a,aver,n,s,s2,max,min;
printf("nhap gia
tri cua a: ");
scanf("%lf",&a);
if(a==0)
{
printf("vong lap dung lai");
return;
}
n=0;s=0;s2=0;max=a,min=a;
do
{
scanf("%lf",&a);
n=n+1;
s=
s+pow(a,2.0);
s2=s2+a;
if(max<a)
{
max=a;
}
if(min>a)
{
min=a;
}
}
while(a!=0);
aver=2*s-2*s2*(max+min)+(1+n/2)*(pow(max,2.0)+pow(min,2.0))-n*min*max;
printf("ket qua của bieu
thuc la: %lf\n",aver);
getch();
}
|
Không có nhận xét nào:
Đăng nhận xét