Thứ Ba, 27 tháng 11, 2012


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