一、用菱形的行的总数打印
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int n;//n为一个奇数,是菱形的总行数
printf("请输入你要打印的菱形行数:");
scanf("%d", &n);
int row = 1;
for (row = 1; row <= n; row++)//从第一行开始循环,直到第n行。
{
int character = 0;//计算当前这一行打印多少字符了,是否需要换行
int num = 0;//表示想要打印的图案数量
if (row <= n / 2)
{
num = 2 * row - 1;//计算每行图案的个数
}
else
if (row == n / 2 + 1)//为了打印中间图案最多的一行,因为n是奇数,除于2向下取整,所以要加1
{
num = n;//包含了空格行,可以自己数数看
}
else
if (row > n / 2 + 1)
{
int line = row - n / 2 - 1;//line表示下面部分的打印
num = n - line * 2;
}//求出下部分打印的图案行
int blank = (n - num) / 2;//表示要打印的空格数量
int k = 1;//控制循环次数的变量
for (int k = 1; k <= blank; k++)
{
printf(" ");
character++;
}//打印出来星星前面的空格
int m = 1;//控制循环次数的变量
for (m = 1; m <= num; m++)
{
printf("*");//打印出来这一行的*图案,这可以改自己想要的图案
character++;//记录此行的字符数
}
for (int k = 1; k <= blank; k++)
{
printf(" ");
character++;//记录此行的字符数,空格也算
}//打印出来后面的空格
if (character == n)//字符数量与此行可容纳数相同即换行
{
printf("\n");
}
}
return 0;
}
二、用菱形的边长来打印
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i,j,k,t,n,x =0;//n表示菱形的行数,x表菱形的边长
printf("这个菱形的边长是:" );
scanf("%d", &x);//n的含义是菱形的总行数,n必须是奇数
n = 2*x - 1; //这是菱形边长x与总行数n的关系
for (i = 1; i <= n; i++)//这一步打印菱形的高度
{
if (i <= x)//打印上部分
{
for (j = 1; j <= x - i; j++)//打印上部分的空白行
{
printf(" ");
}
for (k = 1; k <= 2 * i - 1; k++)//打印上部分的图案行
{
printf("*");
}
}
else
{
for (j = 1; j <= i - x; j++)//打印下部分的空白行
{
printf(" ");
}
for (k = 1; k <= n - 2 * (i - x); k++)//打印下部分的图案行
{
printf("*");
}
}
printf("\n");//每循环一次,相当于打印了一行,高度增加1.
}
printf("\n");//每打印一个菱形,换行一次.
return 0;
}
两种方法各有特色:
第一种方法按每行字符个数来依次打印,比较清晰
第二种方法直接用行来打印,减少了计算字符来确定行的操作,更加简洁,第二种方法也可以改为输入行的总数来打印菱形(利用n与x的关系进行操作)自行摸索,不懂留言!