我的C语言程序编译运行成功,但是现实不出结果怎么回事,程序在下面,会的帮忙看下好么,解决了我追加50分
#include"math.h"main(){floata,a1,a2,b,a3,y1,y2,m,n;n=0.618;scanf("%f,%f,%f",&a,&b,&m)...
#include "math.h"
main()
{float a,a1,a2,b,a3,y1,y2,m,n;
n=0.618;
scanf ("%f,%f,%f",&a,&b,&m);
a1=b-n*(b-a),y1=a1*a1-2*a1;
a2=a+n*(b-a),y2=a2*a2-2*a2;
p1:if(y1>=y2)
{a=a1,a1=a2,y1=y2;
a2=a+n*(b-a),y2=a2*a2-2*a2;}
else
{b=a2,a2=a1,y2=y1;
a1=b-n*(b-a),y1=a1*a1-2*a1;}
if(fabs((b-a)/b)<m)
{a3=(a+b)/2;}
else{goto p1;}
printf("MIN=%f",a3);
} 展开
main()
{float a,a1,a2,b,a3,y1,y2,m,n;
n=0.618;
scanf ("%f,%f,%f",&a,&b,&m);
a1=b-n*(b-a),y1=a1*a1-2*a1;
a2=a+n*(b-a),y2=a2*a2-2*a2;
p1:if(y1>=y2)
{a=a1,a1=a2,y1=y2;
a2=a+n*(b-a),y2=a2*a2-2*a2;}
else
{b=a2,a2=a1,y2=y1;
a1=b-n*(b-a),y1=a1*a1-2*a1;}
if(fabs((b-a)/b)<m)
{a3=(a+b)/2;}
else{goto p1;}
printf("MIN=%f",a3);
} 展开
11个回答
展开全部
出现ATTEMPT TO DEFINE AN ALREADY DEFINED LABEL,表示以前已经定义过一个标号,要换一个标号
movc a,@a+dptr
movc a,@a+pc
对于这两条指令,查了一下网上的兄弟的解释:
movc a,@a+dptr
从DPTR开始偏移A个地址的数读取到A中.
DPTR一般为数据段的首地址.
movc a,@a+pc
从PC指令地址开始偏移A个地址的数读取到A中.
PC为当前指令地址.
这两个指令都是从程序空间中读取数据.
貌似我也不大听懂,得去问问老师
还有对于PUSH A Keil老是编译出现为什么编译说错,
EXPRESSION TYPE DOSE NOT MATCH INSTRUCTION
网上的兄弟
1.说应该为PUSH ACC
2.是编译选项不对,应选择韦福汇编器
3.为什么不是A,而是ACC?
因为:A表示的是内存地址,ACC表示的是寄存器
51中,可以将寄存器入栈,不可以将内存入栈。
4.在51指令中没有PUSH A,只有PUSH ACC,同样对累加器A进行位操作时,没有A.0,只有ACC.0
A是ACC的缩写,有些地方不能互换,原因我也不知道,书中是这么写的,编译软件也是这么认的,否则就出错。
movc a,@a+dptr
movc a,@a+pc
对于这两条指令,查了一下网上的兄弟的解释:
movc a,@a+dptr
从DPTR开始偏移A个地址的数读取到A中.
DPTR一般为数据段的首地址.
movc a,@a+pc
从PC指令地址开始偏移A个地址的数读取到A中.
PC为当前指令地址.
这两个指令都是从程序空间中读取数据.
貌似我也不大听懂,得去问问老师
还有对于PUSH A Keil老是编译出现为什么编译说错,
EXPRESSION TYPE DOSE NOT MATCH INSTRUCTION
网上的兄弟
1.说应该为PUSH ACC
2.是编译选项不对,应选择韦福汇编器
3.为什么不是A,而是ACC?
因为:A表示的是内存地址,ACC表示的是寄存器
51中,可以将寄存器入栈,不可以将内存入栈。
4.在51指令中没有PUSH A,只有PUSH ACC,同样对累加器A进行位操作时,没有A.0,只有ACC.0
A是ACC的缩写,有些地方不能互换,原因我也不知道,书中是这么写的,编译软件也是这么认的,否则就出错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
编辑没什么问题,代码也没有问题。
估计是你自己在输入a,b,m的值时没有输对。
在格式"%f,%f,%f"里加了逗号,这种非空字符在手工输入时也要求必须输上,如:
2,3,4
这样得到结果的
如果你输入的是:
2 3 4
这样是不行的,必须得把逗号输上。
如果把格式串改为"%f%f%f",就可以输:
2 3 4
估计是你自己在输入a,b,m的值时没有输对。
在格式"%f,%f,%f"里加了逗号,这种非空字符在手工输入时也要求必须输上,如:
2,3,4
这样得到结果的
如果你输入的是:
2 3 4
这样是不行的,必须得把逗号输上。
如果把格式串改为"%f%f%f",就可以输:
2 3 4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的说法不是很准确的。在Microsoft Visual Studio中这种标准输入输出的头文件是不用自己添加的。
这个程序的错误在于scanf语句中%f%f%f之间是不能加逗号的。
我建议你以后写程序要规范化,不然导师看了之后会直接DELETE的。呵呵。还有就是goto语句最好不要常用,会造成语句混乱。它的功能代替是有很多选择的。
这个程序的错误在于scanf语句中%f%f%f之间是不能加逗号的。
我建议你以后写程序要规范化,不然导师看了之后会直接DELETE的。呵呵。还有就是goto语句最好不要常用,会造成语句混乱。它的功能代替是有很多选择的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这视乎你使用的编译器,使用TC是可以看到结果的,如果看不到结果,你可以在后面加入getch()函数(有些编译器是getchar()函数)来停留等待(直到你按下任意一个按键),而且,对于C编译器,要求加入标准输入输出头文件#include<stdio.h>,对于C++编译器来说,可以不加。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序本身没有问题
你在输入时需要注意格式,例如1,2,3+回车
这样程序就可以运行了
你在输入时需要注意格式,例如1,2,3+回车
这样程序就可以运行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询