用C语言打印菱形图案的方法是什么?

用C语言打印菱形图案的方法是什么?,第1张

下面的程序是菱形打印的【终结者】,改变下设置,就基本可以满足所有菱形碧核打印的题目。程序主体 for 语句只裤滚有9行,简单而强大 */#include <stdio.h>#include <stdlib.h>#include <string.h>// 这个小函数用来输出 repeatTimes 个字符

#includevoid main(){printf(" *\n")printf(" ***\n")printf(" *****\n")printf("胡慧余 ***\n")printf(" *\n")} 这是最简单的。下面一个稍微复杂一点。#includevoid main(){int i=0,j=0,k=0for(i=0i{for(j=6-ij>=0j--){putchar(' ')...

手机党输入#include"stdio.h"main(){printf("   *\n")printf("  * *\n")printf(" *   *\n")printf("  * *\n")printf("    *\n")}

菱形,就是如下所示的图形,总行数与总列数相等:

写一个程序,根据用户输入的总行数,打印出菱形。

这个题目主要是找出规律,考察读者的逻辑思维。

你可以从第一行开始,遍历所有的列,也可以从第一列开始,遍历所有的行。

下面的程序从第一行开始,遍历所有的列。

设菱形的总行数为line,总列数为column,当前行为i,当前列为j。上半部分与下半部分的规律不一样,应该分开讨论。

我们着眼于星号(*),思考什么条件下输出星号,总宴雹结出如下的规律。

1) 对于上半部分(包括中间一行),当前行与当前列满足如下关系输出星号:

j>=(column+1)/2-(i-1)     (column+1)/2-(i-1)为第i行最左边的星号

j<=(column+1)/2+(i-1)    (column+1)/2+(i-1)为第i行最右边的星号

2) 对于下半部分,当前行与当前列满足如下关系输出星号:

j>=(column+1)/2-(line-i)     (column+1)/2-(line-i)为第i行最左边的星号

j<晌凯帆=(column+1)/2+(line-i)    (column+1)/2+(line-i)为第i行最右边的星号

不满足上述条件,则输出空格。

于是写出如下的代码:纯文本复制

#include <stdio.h>#include <stdlib.h>int main(){int line // 菱形总行数int column // 菱形总列数int i // 当前行int j // 当前列printf("请输入菱形的行数(奇数):")scanf("%d", &line)if(line%2==0){  // 判断是否是奇数printf("必须输入奇数!\n")exit(1)}column = line // 总行数和总列数相同for(i=1i<=linei++){  // 遍历所有行if(i<(line+1)/2+1){  // 上半部分(包括中间一行)for(j=1j<=columnj++){  // 遍历上半部分的所有列if( (column+1)/2-(i-1)<=j &&j<=(column+1)/2+(i-1) ){printf("*")}else{printf(" ")}}}else{  // 下半部分for(j=1j<=columnj++){  // 遍历下半部分孙唯的所有列if( (column+1)/2-(line-i)<=j &&j<=(column+1)/2+(line-i) ){printf("*")}else{printf(" ")}}}printf("\n")}return 0}

运行结果:请输入菱形的行数(奇数):11

*

***

*****

*******

*********

***********

*********

*******

*****

***

*

/*下面的程序是菱形打印的【终结者】,

改变下设置,就基本可以满足所有菱形打印的题目。

程序主体 for 语句只有9行,简单而强大

*/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

// 这个小函数用来输出 repeatTimes 个字符 c

void printChar(char c,int repeatTimes)

{

int i

for(i=0i<repeatTimesi++)

printf("%c",c)

}

/*

特别的函数,获取当前要打印的下一个菱形图案

height : 菱形的高

shapeVariantStep : 变化的步数

baseShape : 菱形的基本图案

row : 当前打印的菱形图案的行坐标。

col : 当前打印的菱形图案的列坐标。

*/

char _buffer_[2]={0}

char* getShape(int height,int shapeVariantStep,char baseShape[],int row,int col)

{

int first = baseShape[0],last = first +(height-1)/2*shapeVariantStep

if(shapeVariantStep==0 || strlen(baseShape)!=1)

return baseShape

else

{

if( first>='0'&&first<='9'&&last<='9' ||

first>='a'&&first<='z'&&last<='z' ||

first>='A'&&first<='Z'&&last<='Z'

)

{

_buffer_[0] = first + ((height-2*abs(row)-1)/2 - abs(col))*shapeVariantStep

_buffer_[1] = '\0'

return _buffer_

}

else

{

return baseShape

}

}

}

int main(int argc, char *argv[])

{

//棚含扮 菱形的图案

char shape[]="*"

// 菱形图案间的空白图案

char space=' '

// 每个图案之间的最小间隔(以一个字符为单位,不足用空白图案填充)

int interval=5

// 菱形的高(要求是奇数)

int height=7

// 菱形是否空心(只有边上的图案)。是:1,否 0

int isHollow=0

/* 特别的参数:设定菱形的图案是变化。

只有指定 shape 为 :

"0","1",...,"9",

或者 "a","b",...,"z",

或者 "老宴A","B",...,"Z" 其中之一,

并且要保证从指定图形开始,后面至少还有连续的:

(height-1)/2*shapevariantStep

个可选的图形,菱形的图形才会是可变的。

*/

int shapeVariantStep = 0

int i,j,k,n

interval = interval <strlen(shape)?strlen(shape):interval

for(i=-(height-1)/2i<=(height-1)/2i++)

{

// 用来输出每行前的空白

printChar(space,abs(i)*interval)

// 这个 for(j) 语句用来输出每行的菱形图案

for(j=-(height-2*abs(i)-1)/2j<=(height-2*abs(i)-1)/2j++)

{

// 如果是非空心,输出所有图案;否则只输出两端的图案。

if(!isHollow || (isHollow &&(j==0 || j==height-2*abs(i)-1)))

{

n=printf("%s",getShape(height,shapeVariantStep,shape,i,j))

//链灶 补齐为到宽度为 interval

printChar(space,interval-n)

}

// 对于空心的菱形,在本应该输出图案的地方,输出空白。

else

{

printChar(space,interval)

}

}

// 这个 for(j) 语句用来输出每行后的空白

printChar(space,abs(i)*interval)

printf("\n")

}

return 0

}

/*

运行结果:

shape[]="*"

space[]=" "

interval=5

height=7

isHollow=0

shapevariantStep = 0

*

***

*****

*******

*****

***

*

shape[]="**"

space[]=" "

interval=5

height=7

isHollow=0

shapevariantStep = 0

**

** ** **

** ** ** ** **

** ** ** ** ** ** **

** ** ** ** **

** ** **

**

shape[]="*"

space[]=" "

interval=5

height=7

isHollow=0

shapevariantStep = 0

...............*...................

..........*....*....*..............

.....*....*....*....*....*.........

*....*....*....*....*....*....*....

.....*....*....*....*....*.........

..........*....*....*..............

...............*...................

shape[]="*"

space[]=" "

interval=0

height=7

isHollow=0

shapevariantStep = 0

*

***

*****

*******

*****

***

*

shape[]="*"

space[]=" "

interval=5

height=11

isHollow=0

shapevariantStep = 0

*

***

*****

*******

*********

***********

*********

*******

*****

***

*

shape[]="*"

space[]=" "

interval=5

height=7

isHollow=1

shapevariantStep = 0

*

* *

* *

* *

* *

* *

*

shape[]="A"

space[]=" "

interval=5

height=17

isHollow=0

shapevariantStep = 1

A

ABA

ABCBA

ABCDCBA

ABCDEDCBA

ABCDEFEDCBA

ABCDEFGFEDCBA

ABCDEFGHGFEDCBA

ABCDEFGHIHGFEDCBA

ABCDEFGHGFEDCBA

ABCDEFGFEDCBA

ABCDEFEDCBA

ABCDEDCBA

ABCDCBA

ABCBA

ABA

A

shape[]="a"

space[]=" "

interval=5

height=17

isHollow=0

shapevariantStep = 1

a

aba

abcba

abcdcba

abcdedcba

abcdefedcba

abcdefgfedcba

abcdefghgfedcba

abcdefghihgfedcba

abcdefghgfedcba

abcdefgfedcba

abcdefedcba

abcdedcba

abcdcba

abcba

aba

a

shape[]="1"

space[]=" "

interval=5

height=9

isHollow=0

shapevariantStep = 2

1

131

13531

1357531

135797531

1357531

13531

131

1

*/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12547116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存