前言
菱形是一种特殊的平行四边形,定义见百度百科
本文主要是写关于菱形的练习题,在屏幕上打印菱形。
1、打印菱形——中间对齐版
上一篇练习过打印上三角、下三角,因此,将打印上三角中间版、下三角中间版的代码合并可打印出菱形:
int main()
{
int n = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j < n - 1 - i; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
//打印下半部分
for (int i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j <= i; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < (2*n - 1 - i* 2 ); j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
结果见下图,中间两行有错位:
因此不能简单的合并,对下三角的代码进行修改:
//打印菱形,没有空格版
int main()
{
int n = 0;
scanf("%d", &n);
//打印上半部分 n
for (int i = 0; i < n; i++)
{
//打印一行
//打印空格
int j = 0;
for (j = 0; j < n - 1 - i; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
//打印下半部分 n-1
for (int i = 0; i < n - 1; i++)
{
//打印一行
//打印空格
int j = 0;
for (j = 0; j <= i; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < (n - 1 - i) * 2 - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
结果见下图:
2、打印菱形——上左下左对齐版
//打印菱形,上左 下左版
int main()
{
int n = 0;
scanf("%d", &n);
//打印上半部分
for (int i = 0; i < n; i++)
{
int j = 0;
//打印*
for (j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
//打印下半部分
for (int i = 0; i < n - 1; i++)
{
int j = 0;
//打印*
for (j = 0; j < (n - 1 - i) * 2 - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
结果见下图,上下三角都是左对齐,实际就是一个三角形了:
3、打印菱形——上右下右对齐版
//打印菱形, 上右下右对齐版
int main()
{
int n = 0;
scanf("%d", &n);
//打印上半部分 n
for (int i = 0; i < n; i++)//一共n行
{
int j = 0;
for (j = 0; j < (2 * n - 1) - (2 * i + 1); j++)//每一行开始打印几个空格
{
printf(" ");
}
//打印*
for (j = 0; j < 2 * i + 1; j++)//每一行打印几个 *
{
printf("*");
}
printf("\n");//换行
}
//打印下半部分
for (int i = 0; i < n-1; i++)
{
//打印一行
//打印空格
int j = 0;
for (j = 0; j <= 2*i+1; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < (n - 1 - i) * 2 - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
结果见下图,上下三角都是右对齐,实际也是一个三角形了:
4、打印菱形——上左下右对齐版
//打印菱形, 上左下右对齐版
int main()
{
int n = 0;
scanf("%d", &n);
//打印上半部分
for (int i = 0; i < n; i++)
{
int j = 0;
//打印*
for (j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
//打印下半部分 n-1
for (int i = 0; i < n - 1; i++)
{
//打印一行
//打印空格
int j = 0;
for (j = 0; j <= 2 * i + 1; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < (n - 1 - i) * 2 - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
结果见下图:
5、打印菱形——上右下左对齐版
//打印菱形, 上右下左对齐版
int main()
{
int n = 0;
scanf("%d", &n);
//打印上半部分 n
for (int i = 0; i < n; i++)//一共n行
{
//打印一行
//打印空格
int j = 0;
for (j = 0; j < (2 * n - 1) - (2 * i + 1); j++)//每一行开始打印几个空格
{
printf(" ");
}
//打印*
for (j = 0; j < 2 * i + 1; j++)//每一行打印几个 *
{
printf("*");
}
printf("\n");//换行
}
//打印下半部分 n-1
for (int i = 0; i < n-1; i++)
{
//打印一行
//打印空格
int j = 0;
//打印*
for (j = 0; j < (n - 1 - i) * 2 - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
结果见下图:
总结
本文练习打印菱形及其变形,主要练习了:
- 外循环、内循环的应用
- 注意行数、空格数、符号*数之间的数学关系式