注册 登录
编程论坛 C++教室

怎样改,才能打出菱形来啊。

xiao92010 发布于 2010-08-19 21:30, 1882 次点击
#include "stdio.h"
void main()
{
    int i,j,k,x,y;
   
    for(i=1;i<=20;i++)
    {
        if(i<=10)
        {
            for(j=1;j<=20-i;j++)
            {
                printf(" ");
            }
            for(k=1;k<2*i;k++)
            {
                printf("*");
            }
        }
        if(i>10)
        {
            for(x=1;x<=i;x++)
            {
                printf(" ");
            }
            for(y=1;y<=20-2*i;y++)
            {
                printf("*");
            }
        }
        printf("\n");
    }
   
   
   
}


最好把空心的也教一下我啊,,谢谢。。
9 回复
#2
carmeloyin2010-08-19 23:28
#include "stdio.h"
void main()
{
    int i,j,k,x,y;
   
    for(i=1;i<=20;i++)
    {
        if(i<=10)
        {
            for(j=1;j<=20-i;j++)
            {
                printf(" ");
            }
            for(k=1;k<2*i;k++)
            {
                printf("*");
            }
        }
        if(i>10)
        {
            for(x=1;x<=i;x++)
            {
                printf(" ");
            }
            for(y=1;y<=20-2*i;y++)   //逻辑错误
            {
                printf("*");
            }
        }
        printf("\n");
    }
   
正确如下
#include "stdio.h"
void main()
{
    int i,j,k,x,y;
   
    for(i=1;i<=20;i++)
    {
        if(i<=10)
        {
            for(j=1;j<=20-i;j++)
            {
                printf(" ");
            }
            for(k=1;k<2*i;k++)
            {
                printf("*");
            }
        
        }
        else if(i>10)
        {
            for(x=1;x<=i;x++)
            {
                printf(" ");
            }
            for(y=1;y<=2*(20-i);y++)    //改成这样
            {
                printf("*");
            }
            
        }
        printf("\n");
        
    }
   
   
   
}
#3
pangding2010-08-19 23:32
你去 C 区搜一下“菱形”这个关键字,相关的帖子多的是。这是入门的循环题,讨论过很多了。
#4
xishui7772010-08-21 00:59
这个问题太简单了
#5
holychild2010-08-22 17:50
楼主给的这个代码是三角形啊
#6
holychild2010-08-22 18:44
#include<stdio.h>
void main()
{
    int i,j,x,y,k,h,num; // num是行数, h是右移距离
    char change;
   
    for(;;)
    {
        printf("请依次输入菱形的行数、右移距离.注意行数一般为奇数,偶数自动加一行:\n");
        scanf("%d%d",&num,&h);
        printf("是否为空心y or n:\t");
        fflush(stdin);
        scanf("%c",&change);
        if(num+h>79||num<=1||change!='y'&&change!='n')
            printf("输入有误!![行数+右移距离不能大于79,只识别y/n]请重新输入!\n");
        else break;
    }
   
    x=num/2+1;
    y=num/2;   
   
    for(i=0;i<=x-1;i++)
    {
        
        for(j=1;j<=x-1-i+h;j++)
        {
            printf(" ");
        }
        if(change=='y')
        {
            printf("*");
            for(k=3;k<=2*i+1;k++)
            {
                printf(" ");
            }
            if(i!=0)
                printf("*\n");
            else
                printf("\n");
        }
        if(change=='n')
        {
            for(k=1;k<=2*i+1;k++)
            {
                printf("*");
            }
            printf("\n");
        }
    }
   
    for(i=0;i<=y-1;i++)
    {
        
        for(j=0;j<=i+h;j++)
        {
            printf(" ");
        }
        if(change=='y')
        {
            printf("*");
            for(k=3;k<=2*(y-1)+1-2*i;k++)
            {
                printf(" ");
            }
            if(i!=y-1)
                printf("*\n");
            else
                printf("\n");
        }
        if(change=='n')
        {
            for(k=1;k<=2*(y-1)+1-2*i;k++)
            {
                printf("*");
            }
            printf("\n");
        }
    }
   
}

这个既能够打印实心菱形,还能够打印空心菱形,能够自选行数和右移距离(以中间那行为准)。编译过,正确的。
#7
holychild2010-08-24 18:59
回复 2楼 carmeloyin
你这样的打印出来的不是标准菱形啊。上下都不对称啊!
#8
holychild2010-08-24 19:00
回复 2楼 carmeloyin
菱形的右下方多了一斜行下来啊。
#9
carmeloyin2010-08-24 20:16
额··没有注意
那再-1吧
就可以了
 for(y=1;y<=2*(20-i)-1;y++)
#10
寒风中的细雨2010-08-25 01:56
温暖
1