题目描述:
从键盘输入一个奇数(n),则输出对应行数(n行)的菱形
解题思路:
根据常识可知,若要输出符合题意中n行的菱形,我们需要将每行最中间的*
对齐,那么必然就需要在不同行的前面输出不同个数的空格,保证菱形的形状正确。
因此我们可以定义三个变量(我用的i,j,k),其中 i 用于控制输出的行数,j 用于控制在*
前面输出的空格数,k用于控制输出的*
个数。
我们可以用i 变量控制先输出(n/2+1)
行的上三角形,再输出(n/2)
行的下三角形,从而组成菱形;
菱形中每一行输出空格的个数用j 控制,数学推理得j 在上三角形的每行中最大为(n/2+1-i)
,在下三角形的每行中最大为 i
;
菱形中每一行输出*
的个数用k 控制,数学推理得k 在上三角形的每行中最大为(2 * i -1)
,在下三角形的每行中最大为(n - 2 * i)
;
完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
int main()
{
int n=0;
int i, j,k;
printf("你想输出菱形的行数是奇数几:");
scanf("%d",&n );
printf("你想要的菱形如下:\n");
for (i = 1; i <= (n / 2 + 1); i++) //上三角
{
for (j = 1; j <= (n/2+1-i); j++)
printf(" "); //输出*前面的空格
for (k = 1; k <= (2 * i -1); k++)
printf("*"); //输出*
printf("\n");
}
for (i = 1 ; i <= n / 2; i++) //下三角
{
for (j = 1; j <= i; j++)
printf(" "); //输出*前面的空格
for (k = 1; k <= (n - 2 * i); k++)
printf("*"); //输出*
printf("\n");
}
system("pause");
return 0;
}
运行结果:
这里示例我注释掉了手动输入的操作scanf("%d",&n );
,直接将n定义成了5。小伙伴在使用时可以自行选择用什么方法哦