应该是直接复制就能跑的,小小的有点复杂,有兴趣的朋友可以留个QQ,我把题目发给你,要是能直接找到问题更好。
区间里面的数字,全部取最小值的时候出问题。
比如k=0.1 , a=0 , b=0 , d=1 , w=1 , z=1, r=2
就会拿不到结果。。。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{ int r;
float a,b,d,k,w,z; /* input */
float s_kbd,kbd,wzr,wr,zr,wz; /* sub equation label */
float Qr1,Qr2,Gr,Qr,F,kaq; /* final Q(r) & G(r) label */
printf("\nF = G(r)*[1+k^3*a/Q(r)]\n\n");
printf("G(r) = (b*w^r+d*z^r)/[1+(w/r)^r]\n\n");
printf("Q(r) = [(b*w^r)/(d*z^r)]*[1+(k^2-bd)^(1/2)]\n\n");
printf("k[ 0.1 - 10 ] a[ 0 - 1 ]\n");
printf("b[ 0 - 1 ] d[ 0 - 1 ]\n");
printf("w[ 1 - 5 ] z[ 1 - 10 ]\n\n");
printf("please type in k[0.1-10] : ");
scanf("%f",&k);
while(!(k>=0.1&&k<=10)) {
printf("Out of range k[0.1-10],please type in again : ");
scanf("%f",&k);}
printf("\nplease type in a[0-1] : ");
scanf("%f",&a);
while(!(a<=1&&a>=0)) {
printf("Out of range a[0-1],please type in again : ");
scanf("%f",&a);}
printf("\nplease type in b[0-1] : ");
scanf("%f",&b);
while(!(b>=0&&b<=1)) {
printf("Out of range b[0-1],please type in again : ");
scanf("%f",&b);}
printf("\nplease type in d[0-1] : ");
scanf("%f",&d);
while(!(d>=0&&d<=1)) {
printf("Out of range d[0-1],please type in again : ");
scanf("%f",&d);}
printf("\nplease type in w[1-5] : ");
scanf("%f",&w);
while(!(w>=1&&w<=5)) {
printf("Out of range w[1-5],please type in again : ");
scanf("%f",&w);}
printf("\nplease type in z[1-10] : ");
scanf("%f",&z);
while(!(z>=1&&z<=10)) {
printf(" Out of range z[1-10] ,please type in again : ");
scanf("%f",&z);}
printf("\nplease type in r[1,2,3...] : ");
scanf("%d",&r);
while(!(r>=1)) {
printf(" Out of range r[1,2,3...] ,please type in again : ");
scanf("%d",&r);}
/* Calculation for G(r) , Q(r) */
wr=pow(w,r); /* w^r */
zr=pow(z,r); /* z^r */
wz=w/z; /* w/z */
wzr=pow(wz,r); /* (w/z)^r */
kbd=(k*k-b*d); /* k^2-b*d */
s_kbd=sqrt(kbd); /* root of (k^2-b*d) */
if (kbd<0){
Qr=1;
printf("\nCannot generate a real value for Q(r) ");
printf("\nwill set Q(r) to 1 for F ");}
else{
Qr1=(b*wr)/(d*zr);
Qr2=(1+s_kbd);
Qr=Qr1*Qr2;
printf("\nQ(r)= %f",Qr);}
Gr=(b*wr+d*zr)/(1+wzr);
printf("\nG(r)= %f",Gr);
if (Qr>Gr)
printf("\nQ(r) > G(r)");
else if (Qr<Gr)
printf("\nQ(r) < G(r)");
else
printf("\nQ(r) = G(r)");
kaq=(k*k*k*a);
F=Gr*(1+kaq/Qr);
printf("\nF = %f",F);
system("pause");
}