1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 输出每行坐标的的c语言算法 C语言输出空心菱形的实现

输出每行坐标的的c语言算法 C语言输出空心菱形的实现

时间:2018-10-21 09:55:16

相关推荐

输出每行坐标的的c语言算法 C语言输出空心菱形的实现

/liutogo/archive//05/31/3110394.html

输出空心菱形是c语言初学者经常遇到的问题,由于涉及c语言的基础知识较多,也是经常在考试中出现的题型。

第一个程序是我自己想的,要是要找方便记忆的简便方法,请直接跳过前半部分,看后半部分的其他代码,我觉得这些代码的思想很好

在写程序之前要仔细观察空心菱形的规律。先分析,不要急于写程序。

将问题化整为零:

1、输入行数

printf("pleaseinputn:");

scanf("%d",&n);

3、在输出n行的空心菱形时,发现第一行和最后一行与其他行有些区别,可以使用单独的语句将此两行输出,为了使代码整洁,使用子函数完成。

voidstar_end(intn)

{

inti;

for(i=1;i<=(n-1)/2;i++)

printf("");

printf("*");

printf("\n");

}

传递参数:要完成的菱形行数n

使用循环输出空格数:(n-1)/2

2、以9行的空心菱形为例,讨论中间部分的情况:

上图中部黑色数列为中间每行的空格数,用右侧红色数列为表示黑色数列(见箭头)。

使用一数列a,将a初始化,使a为上图右侧的的红色数列形式。

inta[20];

for(i=1;i<=(m+1)/2;i++)

a[m-i+1]=a[i]=i;

例如:n=7时a[1]-a[7]为1234321

此时左侧的红色数列可表示为(m+1)/2-a[i]

3、使用循环输出每行的””与”*”

for(i=1;i<=m;i++)

{

for(j=1;j<=(m+1)/2-a[i];j++)

printf("");

printf("*");

for(j=1;j<=2*a[i]-1;j++)

printf("");

printf("*");

printf("\n");

}

对于每行,

先输出(m+1)/2-a[i]个””,

再输出一个”*”,

再输出2*a[i]-1个””,

再输出一个”*”

完整程序:

#include

void star_end(int n);

main()

{

int n,m,i,j,a[20];

printf("please input n:");

scanf("%d",&n);

m=n-2;

for(i=1;i<=(m+1)/2;i++)

a[m-i+1]=a[i]=i;

star_end(n);

for(i=1;i<=m;i++)

{

for(j=1;j<=(m+1)/2-a[i];j++)

printf(" ");

printf("*");

for(j=1;j<=2*a[i]-1;j++)

printf(" ");

printf("*");

printf("\n");

}

star_end(n);

}

void star_end(int n)

{

int i;

for(i=1;i<=(n-1)/2;i++)

printf(" ");

printf("*");

printf("\n");

}

其他算法:(这些思想很好)

一、//空心菱形图,原理是建立坐标系,原点为菱形中心

#include

void main()

{

int y,x,n,k;

printf("please input number of rows:");

scanf("%d",&n);

k=n/2;

for(y=-k;y<=k;y++)

{

for(x=-k;x<=k;x++)

{

if((x==y+k)||(x==y-k)||(x==k-y)||(x==-k-y))

printf("%c",'*');

else

printf(" ");

}

printf("\n");

}

}

二、以上程序可使用math.h中的abs()函数,用于求绝对值。

Abs函数描述返回数字的绝对值。语法Abs(number)

代码简化为

#include

#include

main()

{

int i,j,n,k;

printf("Please input the number of rows:");

scanf("%d",&n);

k=n/2;

for(i=-k;i<=k;i++)

{

for(j=-k;j<=k;j++)

{

if(abs(i)+abs(j)==k)

printf("*");

else

printf(" ");

}

printf("\n");

}

}

/************水平有限,仅供参考,欢迎批评指正****************/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。