扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
问题一,x和y都是双精度型(double)数变量,用格式输入和输出时,要使用格式符%lf,否则会出错,得不到正确的结果。
成都创新互联长期为近1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为长泰企业提供专业的做网站、网站建设,长泰网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
你用的%d是整型(int)数的输出输入格式符。
所以你必须把他们统一起来,方法一是:把scanf和printf两个语句中的%d都换成%lf;方法二是:把前面定义语句double x,y;中的double换成int,语句变成:
int x,y;
采用上面两个方法都可以让程序正常运行。
问题二,scanf语句中双引号当中有“x=”,全部是:
scanf("x=%d",x);
或scanf("x=%lf",x);
这样的写法,要求在程序运行时,输入的内容要包含双引号内除格式符以外的所有字符,即你一定要输入:
x=2[回车]
系统才能读到x的值2。值得注意的是,x的大小写都必须跟程序中的大小写相同!
所以,你在程序运行时,直接输入:
2[回车]
系统并不会取得2,更不会把2赋值给x,所以,导致程序运行到后面,也不会得出正确的y的值(11)。
有鉴于此,也有两个办法让程序正确运行:
方法一,输入时按“x=2[回车]”;
方法二,由于按“x=”非常不方便,容易出错,建议把输入语句的x=去掉,改成:
scanf("%d",x);
或scanf("%lf",x);
就能按照你图片发来的输入方法操作,得到正确的结果了。
有什么问题请留言。
你这个题是ACM的题目?我看了下你的程序,正经的数字是可以的,但你说错了,那就该就是要考虑极限情况了。譬如x=0.0000000000000000000000000000000001的时候,你的程序输出是100.0。。。。。应该就是出错在这里了。
还有我的老师告诉我,使用float不要用x==0这种表达方式,,因为float类型的等于其实就是在有限的位数上比较大小。。。当数字极小或者极大的时候就会出现不相等的数字会出现相等的情况了。
换成double就行了
#include "stdio.h"
void main()
{
double a=0.0;
while(scanf("%lf",a)!=EOF)
{
if(a0)
{
a=a*a+1;
}
else if(a0)
{
a=-a;
}
else if(a==0)
{
a=100.0;
}
printf("%.1lf\n",a);
a=0.0;
}
}
#include "stdio.h"
#include "math.h"
int main(int argc,char *argv[]){
double x,y;
printf("Input x(R:)...\nx=");
scanf("%lf",x);
if(x5)
y=-x+3.5;
else if(x=5 x10)
y=20-3.5*pow(x+3,7);//这里看着像7,是几就把7改成几
else
y=-3.5+sin(x);
printf("y = %g\t(x==%g)\n",y,x);
return 0;
}
运行样例:
输入数用scanf()函数;
分段用switch()函数;
1、绝对值用math库里面的abs()函数
2、e^x用math库里面的pow(e,x)函数
3、同理指数的都有pow()函数,
4、cos函数也是math库里面的double cos(double x)函数
自己动手吧,我已经把难点全部说出来了!
希望可以帮到你,如果满意请采纳!
建立一个函数,对不同的区间进行不同的运算规则即可,可使用if-else 实现,如实现下图中的分段函数的自定义函数代码:
double f(double x)
{
double fx = 0.0;
if (x=0)fx = 3*x+5;
else if (x = 1)fx = x+5;
else fx = -2*x+8;
return fx;
}
在需要计算该分段函数的地方调用即可,其他分段函数实现类似。
修改如下,//注释并且修改,x应该是数组
#include stdio.h
#include math.h
int main(void)
{
int repeat,n;
double x[100],y; //double x,y;
scanf("%d",repeat);
for(n=0;nrepeat;n++) //for(n=1;n=repeat;n++)
scanf("%lf",x[n]); //scanf("%lf",x);
for(n=0;nrepeat;n++) //for(n=1;n=repeat;n++)
{
if (x[n]!=0) //if(x!=0)
y=1/x[n]; //1/x
else
y=0;
printf("f(%.2f)=%.3f\n",x[n],y); // printf("f(%.2f)=%.3f\n",x,y);
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流