如何实现C语言编程输出空心菱形

 我来答
百度网友e096309
2017-04-27 · TA获得超过1327个赞
知道小有建树答主
回答量:501
采纳率:96%
帮助的人:415万
展开全部
#include <stdio.h>
/*
其实打印三角形啦,菱形啦,思路都是一样一样的,
都是按行找规律,然后按照每行的规律按行打印就好了。。。
比如以下是每条边有n=4个*的菱形(边长是4)。
c语言都是按行输出的,我们只要分析第i行要输出些什么就好了:
 0123456
0   *
1  * *
2 *   *
3*     *
4 *   *
5  * *
6   *
从上图可以看出来,
第0行要输出3个空格,1个*
第1行要输出2个空格,1个*,1个空格,1个*
第2行要输出1个空格,1个*,3个空格,1个*
第3行要输出0个空格,1个*,5个空格,1个*
第4行要输出1个空格,1个*,3个空格,1个*
第5行要输出2个空格,1个*,1个空格,1个*
第6行要输出3个空格,1个*
再看上面得出的规律,除了第0行和第6行,其他的都是同一个模式:
对于第i行,打印k1个空格,1个*,k2个空格,1个*。
而且从第4行开始就跟上面对称了,我们完全可以只分析0~3行:
在第i = [0, 3]行内:
对于第i行,打印k1=n-i-1个空格,1个*,k2=2*i-1个空格,1个*。
例外:第0行得到的k2=-1小于0,此时不打印空格也不打印第二个*。
然后我们就可以弄一个小函数啦:
*/
void printline(int i, int n) {
    int k1 = n - 1 - i;
    int k2 = 2 * i - 1;
    int j;
    //打印k1个空格
    for(j=0; j<k1; j++)
        printf(" ");
    //打印一个*
    printf("*");
    //如果k2小于0就不用打印空格和后面的*啦
    if (k2 > 0) {
        //打印k2个空格
        for(j=0; j<k2; j++)
            printf(" ");
        printf("*");
    }
    printf("\n");
}
int main()
{
    const int n = 4;
    int i;
    // 先打印0~n-1
    for(i=0; i<n; i++)
        printline(i, n);
    // 然后打印n-2~0
    for(i=n-2; i>=0; i--)
        printline(i, n);
    return 0;
}
想不到好名字02
2017-04-27 · TA获得超过175个赞
知道小有建树答主
回答量:226
采纳率:0%
帮助的人:81.8万
展开全部
风格充满ntuj6sxrtdhxdf
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式