方法1:将菱形图案一分为二,依次打印上面的内容和下面的内容。
源代码:
int main(void) { int i = 0; int j = 0; int line = 0; printf("请输入你想要打印菱形的行数:\n"); scanf("%d", &line); //打印上面的图案 for (i=0; i<line; i++) { //打印空格 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++) { //打印空格 for (j=0; j<=i; j++) { printf(" "); } //打印* for (j=0; j<2*(line-1-i)-1; j++) { printf("*"); } printf("\n"); } return 0; }
这种方法有点繁琐,不推荐使用,对于打印图案的问题,其实有规律可循,见方法2。
方法2:把菱形抽象化,当做正方形去处理,可以发现对角线的距离是一样长的。于是乎我们以中心点(即就是对角线的交点)为坐标原点,建立二维平面直角坐标系,这里定义各个顶点到原点的距离为D,那么四个顶点的坐标分别是:A(-D,0)、B(D,0)、C(0,-D)、D(0,D)。连接这四个顶点,就是一个菱形(对角线垂直平分)。分别求出AC、CB、BD、DA这四条直线的方程(用截距式直线方程 x/a + y/b = 1),通过画出四条直线相交所构成的区域,就可以发现横纵坐标的绝对值之和不超过D。
源代码:
#define _CRT_SECURE_NO_WARNINGS 1 /* * Copyright (c) 2018, code farmer from sust * All rights reserved. * * 文件名称:OutputPattern.c * 功能:输出菱形图案 * * 当前版本:V1.0 * 作者:sustzc * 完成日期:2018年3月27日13:19:19 */ # include <stdio.h> # include <stdlib.h> # include <math.h> # include <windows.h> /* * 函数名称:PrintfPattern * * 函数功能:打印菱形图案 * * 入口参数:num * * 出口参数:空 * * 返回类型:void */ 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"); } return; } int main(void) { int line = 0; int distance = 0; printf("请输入您想要打印菱形图案的行数:\n"); scanf("%d", &line); distance = (line - 1) / 2; PrintfPattern(distance); system("pause"); return 0; }
输出结果: