C语言大神,帮我看看这个程序哪里出问题了。为什么结果不对?

Python015

C语言大神,帮我看看这个程序哪里出问题了。为什么结果不对?,第1张

#include <stdio.h>

#include <math.h>

int main() {

int i

double EP,EU,EL,ED,WMM,a,T,T1,T2

double P[366],E[366],PE[366],P1[366],P2[366],P3[366],P4[366],E0[366],Q[366],R[366]

double KC=0.95,W=110,WU=10,WL=40,WD=60,WM=140,WUM=20,WLM=60,WDM=60,B=0.2,C=0.16,sum=0,sum1=0

FILE *fp

fp = fopen("d:\\xiaowenjing.txt","w")

for(i=0i<365i++) {

fscanf(fp, "%lf %lf %lf %lf %lf %lf", &Q[i], &E0[i], &P1, &P2, &P3, &P4)//数据文件中的数据是否正确,确实使用空格隔开的吗?

P[i] = 0.33*P1[i] + P2[i]*0.14 + P3[i]*0.33+P4[i]*0.2

fclose(fp)

EP = E0[i]*KC

if (WU + P[i] >= EP) {

EU = EP

EL = 0

ED = 0

}

else if(((WU + P[i]) < EP) & (WL >= C*WLM)) {// &是二进制位“与”操作符,这里是逻辑“与”操作,显然应该改为 &&,以下还有五处同样的问题。

EU = WU + P[i]

EL = (EP - EU)*WL/WLM

ED = 0

}

else if((WU + P[i] < EP) & ((C*(EP-EU)) <= WL)&(WL < C*WLM)) {

EU = WU + P[i]

EL = C*(EP - EU)

ED = 0

}

else if((WU + P[i] < EP) & (WL < C*(EP - EU))) {

EU = WU + P[i]

EL = WL

ED = C*(EP - EU) - EL

}

E[i] = EU + EL + ED

WMM = WM*(1 + B)

a = WMM*(1 - pow((1 - W/WM),(1/(1 + B))))

PE[i] = P[i] - E[i]

if(PE[i] <= 0) {

R[i] = 0

}

else if(a + PE[i] <= WMM) {

R[i] = PE[i] + W - WM + WM*(1 - pow(((PE[i] + a)/WMM),(B + 1)))

}

else if(a + PE[i] >= WMM) {

R[i] = PE[i] + W - WM

}

T = WU + P[i] - R[i] - EU

T1 = WL - EL + T

T2 = WD - ED + T1

if((T >= WUM) & (T1 >= WLM) & (T2 >= WDM)) {

WU = WUM

WL = WLM

WD = WDM

}

else if((T >= WUM) & (T2 >= WLM)*(T2 <= WDM)) {

WU = WUM

WL = WLM

WD = WD - ED + T2

}

else if((T >= WUM) & (T2 <= WLM)) {

WU = WUM

WL = WL = EL + T1

WD = WD - ED

}

else if(T < WUM) {

WU = WU + P[i] - R[i] - EU

WL = WL - EL

WU = WD - ED

}

W = WU + WL + WD

for(i = 0 i < 365 i++) {

sum = sum + R[i]

sum1 = sum1 + Q[i]

}

}

printf("sum = %1f,sum1 = %1f",sum,sum1)

}

/*

用到的公式有这些:计算参数:WM = 140mm,WUM = 20mm,WLM = 60mm, WDM = 60mm,B=0.2,C=0.16,IM = 0.00

1初始值:W = 110mm,WU = 10mm,WL = 40mm,WD = 60mmWM = WMM/(1 + b)

*/

#include<stdio.h>

int main()

{

float x, y, z

char c, d

scanf("%f%c%f%c%f", &x, &c, &y, &d, &z)

switch(c)

{

case '+':

if ((x + y) == z)

printf("perfect\n")

else

printf("error\n")

break

case '-':

if ((x - y) == z)

printf("perfect\n")

else

printf("error\n")

}

return 0

}

花了点时间做了做,自己做的不保证全对。 一.请问下列指令源操作数的寻址方式 1.MOV AX,[BX] 寄存器间接寻址 2.MOV CX,2100H立即数寻址 3.OR AX,[BX+SI+200H] 相对基址加变址寻址 4.ADD BX,WORD PTR[SI+100H] 寄存器相对寻址 二.执行下列指令后,问(AL)=? SF=? ZF=? CF=? MOV AL,7FH ADD AL,-3(AL)=7CH SF=0 ZF=0 CF=1 三.试分析下面的程序段完成什么操作 MOV CL,04 让cl=4 SHL DX,CL dx左移4位 MOV BL,AH bl=ah SHL AX,CL ax左移4位 SHR BL,CL bl右移4位 OR DL,BL dl,bl 逻辑或,结果保存在dl中 总的操作为:取原来dx的最低四位和ax的最高四位 组成一个新的8位数,存放在dl中 四.设异步传输时 每个定符对应1个超始位 7个信息位 1个奇/偶效验和1个停止位 如果波特率位9600 每位能传输的最大定符数位多少个? 9600/(1+7+1+1)=960个 五.写出指令,使: 1.AX的低4位清零 AND AX,0FFF0H 2.BX的低4位取反 XOR BX,000FH 六.试编一段程序段 对多精度(32位)求补 其数值在DX:AX中 没考虑 七.填空 1.18的8421BCD编码是( 0018H) 2.A=+0110101,[A]反=( 00110101) 3.B=-0110101,[B]补=(11001011 ) 4中央处理器由(EU )和(BIU )构成 5.8086/8088中断共有( 2)种类型中断,可分为(可屏蔽 )中断和( 不可屏蔽)中断 6.825FA称为(8251A是可编程串行接口芯片 8255A是可编程并行接口芯片 ,8259A 是中断控制器) 7.“VAR DB 5 DVP (8,2 DVP(5))”语句汇编应分配(15 )个字节单元 8.8088中,AD7-AD0是( 地址数据)线