#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h> //Sleep()的头文件
int main()
{
char arr1[] = "*************";
char arr2[] = " * ";
char arr3[] = " ";
printf("%s\n", arr2);
int j = strlen(arr1)/2; //strlen()字符串长度
int left = j - 1;
int right =j + 1 ;
int i = 0;
for (i = 0; i < j; i++)
{
Sleep(1000); //可省略,Sleep()睡眠函数,“S"需大写,()内为间隔显示时间,单位ms
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left--;
right++;
printf("%s\n", arr2); //字符串形式打印
}
for (i = 0; i < j+1; i++)
{
left++;
right--;
Sleep(1000); //同上
arr2[left] = arr3[left];
arr2[right] = arr3[right];
printf("%s\n", arr2);
}
system("pause");
return 0;
}
方法2(任意行数):将菱形图案一分为二,依次打印上面的内容和下面的内容
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int line = 0;
printf("打印几行:");
scanf("%d", &line);
int i = 0;
for (i = 0; i < line; i++) //上部分打印
{
int j = 0;
for (j = 0; j < line - 1 - i; j++) //打印空格
{
printf(" ");
}
for (j = 0; j < 2 * i + 1; j++) //打印*
{
printf("*");
}
printf("\n");
}
for (i = 0; i < line - 1; i++) //下部分打印
{
int j = 0;
for (j = 0; j <= i; j++)//打印空格
{
printf(" ");
}
for (j = 0; j < 2 * (line - 1 - i) - 1; j++)// 打印*
{
printf("*");
}
printf("\n");
}
system("pause");
return 0;
}
方法3:把菱形抽象化,当做正方形去处理,可以发现对角线的距离是一样长的。于是乎我们以中心点(即就是对角线的交点)为坐标原点,建立二维平面直角坐标系,这里定义各个顶点到原点的距离为D,那么四个顶点的坐标分别是:A(-D,0)、B(D,0)、C(0,-D)、D(0,D)。连接这四个顶点,就是一个菱形(对角线垂直平分)。分别求出AB、BC、CD、DA这四条直线的方程(用截距式方程 x/a+y/b=1),可以发现横纵坐标的绝对值之和不超过D。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
void PrintfPattern(int num)
{
int i = 0;
int j = 0;
for (i = -num; i <= num; i++)
{
for (j = -num; j <= num; j++)
{
Sleep(200);
if (abs(i) + abs(j) <= num)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
int main(void)
{
int line = 0;
int distance = 0;
printf("请输入您想要打印菱形图案的行数:\n");
scanf("%d", &line);
distance = (line - 1) / 2;
PrintfPattern(distance);
system("pause");
return 0;
}