题目:编写一个C语言程序,输入一个自然数n,打印一个宽和高均为2*n+1的空心菱形,菱形的边界用 * 显示,其余部分使用 . 来填充。

分析:打印一个宽和高均为2n+1的空心菱形,我们可以先打印2n+1行,每一行再打印2*n+1个点或星。技巧:从n数到-n的值等于2×n+1。示例:
4×2+1=9.
接下来我们要思考每一行要做什么,技巧:从题目示范图可以看出(首尾行
需要在m+1的位置输出一个星号)但中间行就要输出两个星号,而且两个星号之间的距离从一开始逐次加二直到该值等于2×n-1,再依次递减2直到等于1。
具体细节请看代码:
#include<stdio.h>
int main() {
int n,m,b=0;//b是两个星号距离的增量
scanf("%d",&n);
for(int i=n; i>=(-n); i--) {//循环2*n+1行
m=i; //m的初始值是n ,会依次减到0
if(m<0) m=-m;//m是i的绝对值
for(int j=1; j<=2*n+1; j++) {//每一行要打印2*n+1个'.'或'*'
if(m<n) { //判断是否为中间行
if(j==m+1||j==m+1+b) {//中间行要做的事情
printf("*");
} else {
printf(".");
}
} else { //首尾行要做的事情
if(j==m+1) {//在首尾行的时候,位于n+1这个位置时打印'*'
printf("*");
} else {
printf(".");
}
}
}
if(i>0) { //判断b需要增加还是减少
b=b+2;
} else {
b=b-2;
}
printf("\n");//每行打印结束后注意要换行
}
return 0;
}
版权声明:本文为weixin_51387341原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。