卡了一晚上了,好痛苦。

根据输入的行数输出钻石图案
目前只打印了四分之一。代码如下

#include<stdio.h>

int main()
{
    int a,i,b=0;
    printf("请输入一个整数:");
    scanf("%d",&a);
    for(i=1;i<=a;i++)
    {
        for(b=0;b<=i;b++)
        {
            if(i>b)
            {
                printf("*\t");
            }
            else
            {
                printf("\n");
            }
        }
        
    }
}

img

钻石图案是啥样啊???贴个图看看

int main()
{
    int n,i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        for(j=(n-1);j>i;j--)
            printf("   ");
        for(j=0;j<=2*i;j++)
            printf("*  ");
        printf("\n");
    }
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<=i;j++)
            printf("   ");
        for(j=2*(n-1);j>=2*(i+1);j--)
            printf("*  ");
        printf("\n");
    }
    return 0;
}

跑了一下这段代码,你说的钻石图形应该就是打印一个菱形吧,这道题的思路其实和打印沙漏差不多,关键在于合理计算每层输出的空格和字符的数量,打印偶数和奇数分别是不同的情况,但是可以确定的一点是
(int)((行数 / 2)+1) 这一行是最长的一行,于是计算排列规律,偶数最后一行不输出即可
在最长一行前,每行字符长为( 2 * i - 1)
最长行字符长(总行数为奇数)=行数
最长行字符长(总行数为偶数)=行数+1
每行空格数=(最长行字符长-每行字符长)/ 2
在最长一行后,相反

具体算法csdn有几个帖子可参考
https://blog.csdn.net/yasenRK/article/details/103624056
https://howard2005.blog.csdn.net/article/details/79409408

如果是要偶数行数去掉顶部,反着来就行

程序思路及注释如下,题主可做参考:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int line;  // 菱形总行数
    int column;  // 菱形总列数
    int i;  // 当前行
    int j;  // 当前列

    printf("请输入你要打印的行数:");
    scanf("%d", &line);
    column = line;  // 总行数和总列数相同

    for(i=1; i<=line; i++){  // 遍历所有行
        if(i<(line+1)/2+1){  // 上半部分(包括中间一行)
            for(j=1; j<=column; j++){  // 遍历上半部分的所有列
                if( (column+1)/2-(i-1)<=j && j<=(column+1)/2+(i-1) ){
                    printf("*");
                }else{
                    printf(" ");
                }
            }
        }else{  // 下半部分
            for(j=1; j<=column; j++){  // 遍历下半部分的所有列
                if( (column+1)/2-(line-i)<=j && j<=(column+1)/2+(line-i) ){
                    printf("*");
                }else{
                    printf(" ");
                }
            }
        }
        printf("\n");
    }

    return 0;
}

测试图:

img

如有帮助,还请采纳!谢谢!

什么样的钻石图案?


int main()
{
    int a, i, b = 0;
    printf("请输入一个整数:");
    scanf("%d", &a);
    for (i = 0; i <= a; i++)
    {
        for (b = 0; b < a - i; b++)
            putchar('\t');
        for (b = 0; b < 2 * i - 1; b++)
            printf("*\t");

        printf("\n");
    }
    for (i = a - 1; i > 0; i--)
    {
        for (b = 0; b < a - i; b++)
            putchar('\t');
        for (b = 0; b < 2 * i - 1; b++)
            printf("*\t");

        printf("\n");
    }
}