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.
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.
Giải:
Điều kiện không dùng vòng lặp là
hiển nhiên bởi tính đến lúc viết tôi vẫm
chưa học mảng.
Nhìn vào đề bài ta thấy ngay cần
phải tách các giá trị Max,Min là các số chưa biết vì đến cuối vòng lặp ta mới
xác định được 2 số này.
Ta có :

Chỉ
cần tính
và
sau khi lặp được các giá trị Max, Min thế vào
Aver ta được ngay đáp số với chỉ 1 vòng lặp


Mã
nguồn:
#include <stdio.h>
void main()
{
int n,i,j,max,min;
float aver1,aver2;
aver1=aver2=0;
min=2147483648;
max=-1*min;
printf("Input n = ");
scanf("%d",&n);
for (i=1;i<n;i++)
{
printf("nhap so thu %d\t",i);
scanf("%d",&j);
aver1
+= j;
aver2
+= j*j;
if (min >= j)
min=j;
if (max <= i)
max=j;
}
float aver;
aver=
2*aver2 -2*(max+min)*aver1+(n/2.0)*(max-min)*(max-min)+max*max+min*min;
printf("%f",aver);
}
|
Không có nhận xét nào:
Đăng nhận xét