
c语言画正弦函数
#include<stdio.h>#include<math.h>main(){doubley;intx,m,i;printf("y=sin(x)[0<x<2*pi]\n...
#include<stdio.h>
#include<math.h>
main(){
double y;
int x,m,i;
printf("y=sin(x) [0<x<2*pi]\n");
for(y=1;y>=-1;y-=0.1){
if(y>=0){
m=asin(y)*10;
for(x=1;x<m;x++)printf(" ");
printf("*",m);
for(;x<31-m;x++)printf(" ");
printf("*\n");}
else{
m=-1*asin(y)*10;
for(i=0;i<32;i++)printf(" ");
for(x=1;x<m;x++)printf(" ");
printf("*",m);
for(;x<31-m;x++)printf(" ");
printf("*\n",m);
}
}
}
请帮忙解释每行算法的意思~~ 展开
#include<math.h>
main(){
double y;
int x,m,i;
printf("y=sin(x) [0<x<2*pi]\n");
for(y=1;y>=-1;y-=0.1){
if(y>=0){
m=asin(y)*10;
for(x=1;x<m;x++)printf(" ");
printf("*",m);
for(;x<31-m;x++)printf(" ");
printf("*\n");}
else{
m=-1*asin(y)*10;
for(i=0;i<32;i++)printf(" ");
for(x=1;x<m;x++)printf(" ");
printf("*",m);
for(;x<31-m;x++)printf(" ");
printf("*\n",m);
}
}
}
请帮忙解释每行算法的意思~~ 展开
3个回答
展开全部
首先,你输出的不是正弦图像,而是反正弦图像。
#include<stdio.h>
#include<math.h>
int main(){
double y;
int x,m,i;
printf("y=sin(x) [0<x<2*pi]\n");
for(y=1;y>=-1;y-=0.1){//表示y的取值范围是[-1,1]
if(y>=0){
m=asin(y)*10; //反正弦函数,确定空格的数量,最大值为15
for(x=1;x<m;x++)printf(" ");
//printf("*",m);
printf("*");//注意此时不换行,因为后面还有一个点
for(;x<31-m;x++)printf(" ");//输出第二个点,并换行
printf("*\n");}
else{//同理输出y小于0的点
m=-1*asin(y)*10;
for(i=0;i<32;i++)printf(" ");
for(x=1;x<m;x++)printf(" ");
//printf("*",m);
printf("*");
for(;x<31-m;x++)printf(" ");
printf("*\n",m);
}
}
getchar();
return 0;
}
#include<stdio.h>
#include<math.h>
int main(){
double y;
int x,m,i;
printf("y=sin(x) [0<x<2*pi]\n");
for(y=1;y>=-1;y-=0.1){//表示y的取值范围是[-1,1]
if(y>=0){
m=asin(y)*10; //反正弦函数,确定空格的数量,最大值为15
for(x=1;x<m;x++)printf(" ");
//printf("*",m);
printf("*");//注意此时不换行,因为后面还有一个点
for(;x<31-m;x++)printf(" ");//输出第二个点,并换行
printf("*\n");}
else{//同理输出y小于0的点
m=-1*asin(y)*10;
for(i=0;i<32;i++)printf(" ");
for(x=1;x<m;x++)printf(" ");
//printf("*",m);
printf("*");
for(;x<31-m;x++)printf(" ");
printf("*\n",m);
}
}
getchar();
return 0;
}
展开全部
简单点这么说吧。。
正弦函数图像是对称的,所以在每行打印两个星号。
用反正弦函数asin()得出各点的坐标关系。
而for(y=1;y>=-1;y-=0.1)就是从 0开始描点到 2π。
m=asin(y)*10; 是图像放大10倍、
至于for(;x<31-m;x++)是因为把图像分成了31列。。
算法细节的话LZ好好琢磨下吧。。
正弦函数图像是对称的,所以在每行打印两个星号。
用反正弦函数asin()得出各点的坐标关系。
而for(y=1;y>=-1;y-=0.1)就是从 0开始描点到 2π。
m=asin(y)*10; 是图像放大10倍、
至于for(;x<31-m;x++)是因为把图像分成了31列。。
算法细节的话LZ好好琢磨下吧。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我调试的时候是一个,运行的时候有两个。
完整的调试了一边,发现是精度的问题,到最后y的值不是-1而是-0.999.....87,所以它才输出了最后的*
,
你把y!=
-1改成y>=
-0.999,就正常了
double
y=0.0
=>
y-0.1=
-0.100...1
,所以double型的不要使用整数来作为参照点
完整的调试了一边,发现是精度的问题,到最后y的值不是-1而是-0.999.....87,所以它才输出了最后的*
,
你把y!=
-1改成y>=
-0.999,就正常了
double
y=0.0
=>
y-0.1=
-0.100...1
,所以double型的不要使用整数来作为参照点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询