3个回答
展开全部
#include<stdio.h>
#include<math.h>
int fun(int a);
main()
{
int i,j,k,n;
scanf("%d",&n);
k=fun(n);
if(k)
{
for(i=-n/2;i<=n/2;i++)
{
for(j=0;j<n/2-fabs(i);j++)
printf(" ");
for(j=0;j<fabs(i)*2+1;j++)
printf("*");
printf("\n");
}
}
else
printf("Error!");
}
int fun(int a)
{
if(a%2==0)
return 0;
return 1;
}
您好,很高兴为您解答,流星不死为您答疑解惑
如果本题还有不懂的地方请追问,望采纳我的回答。
祝楼主学习进步。
展开全部
以图示7行来进行分析,再推广到n行:
-由于图中星号没有紧挨着,所以输出最小单位是"* "或“ ”(即星号空格或连续两个空格),下面分析中用星号和空格表示这一最小单位;
-输出7行,用循环循环变量i在每行分别等于0,1,2,3,4,5,6,即0,1,2,3,...,n-1;
-每行星号前面的空格数:0,1,2,3,2,1,0,对应i的取值,用i来计算:abs(i-3)=3,2,1,0,1,2,3,
3-abs(i-3)=0,1,2,3,2,1,0,由于是7行即7/2-abs(i-7/2),即n/2-abs(i-n/2),
其中除法利用int型数据仅保留整数部分;
-每行星号数:7,5,3,1,3,5,7,i=0,1,2,3,4,5,6,abs(i-3)=3,2,1,0,1,2,3,
abs(i-3)*2+1=7,5,3,1,3,5,7,即abs(i-n/2)*2+1
-那么程序由一个i循环开始,循环体中有三部分:循环输出星号前的空格、循环输出星号、输出换行。
【程序】
#include<stdio.h>
#include<stdlib.h>
int Pattern(int n)
{ int i,j;
if ( n%2==0 || n<=0 ) return 0;
for ( i=0;i<n;i++ )
{ for ( j=0;j<n/2-abs(i-n/2);j++ ) printf(" ");
for ( j=0;j<abs(i-n/2)*2+1;j++ ) printf("* ");
printf("\n");
}
return 1;
}
-由于图中星号没有紧挨着,所以输出最小单位是"* "或“ ”(即星号空格或连续两个空格),下面分析中用星号和空格表示这一最小单位;
-输出7行,用循环循环变量i在每行分别等于0,1,2,3,4,5,6,即0,1,2,3,...,n-1;
-每行星号前面的空格数:0,1,2,3,2,1,0,对应i的取值,用i来计算:abs(i-3)=3,2,1,0,1,2,3,
3-abs(i-3)=0,1,2,3,2,1,0,由于是7行即7/2-abs(i-7/2),即n/2-abs(i-n/2),
其中除法利用int型数据仅保留整数部分;
-每行星号数:7,5,3,1,3,5,7,i=0,1,2,3,4,5,6,abs(i-3)=3,2,1,0,1,2,3,
abs(i-3)*2+1=7,5,3,1,3,5,7,即abs(i-n/2)*2+1
-那么程序由一个i循环开始,循环体中有三部分:循环输出星号前的空格、循环输出星号、输出换行。
【程序】
#include<stdio.h>
#include<stdlib.h>
int Pattern(int n)
{ int i,j;
if ( n%2==0 || n<=0 ) return 0;
for ( i=0;i<n;i++ )
{ for ( j=0;j<n/2-abs(i-n/2);j++ ) printf(" ");
for ( j=0;j<abs(i-n/2)*2+1;j++ ) printf("* ");
printf("\n");
}
return 1;
}
追答
【分析】
-用循环变量i控制项数,i=1,2,...,n,每循环一次计算当前的项并进行累加,e初始值为1,i每次循环加1,结束条件是判断当前项与前项的差是否小于给定的1.0e-5
-每项的计算:阶乘实际上是累乘,比如3!=3*2!=当前项数*前项的分母=i*m,m初始值为1
#include
#include
#include
void Sum2()
{ double e,t1,t0,m; //e当前累加值,t0前项,t1当前项,m当前项分母
int i;
e=1; i=0; m=1; t0=t1=0;
do
{ i++; t0=t1; //记住前一项得数
m*=i; //累乘计算当前项分母
t1=1.0/m; //当前项计算
e+=t1;
} while ( abs(t1-t0)>=1.0e-5 ); //注意差有正有负,需要用绝对值进行判断
printf("e值=%lf,总累加项数=%d\n",e,i);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
占个位置再来慢慢看哈~!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询