| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6152 人关注过本帖
标题:求空心菱形程序
只看楼主 加入收藏
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
以下是引用回首依依在2012-11-9 14:48:46的发言:

可以考虑考虑用“平面坐标系”实现。
写出一个菱形的数学表达式,对你来说,不会有那难度的。


是不是这样实现的,如果不是,那是怎么实现?
#include<stdio.h>
#include<string.h>
#define CH_BACK ' '//背景填充符号
#define CH_LOZENGE '@'//菱形边框填充符号
#define MAX 100//存放菱形的二维数组(正方形)的边长,改变MAX可调整最大显示区域的大小
               //最好不要大过199(最大菱形边长为99),因为没必要,显示屏太小,此程序中也不支持
               //也不适宜过小
               //若要使MAX>199,则需要对程序进行修改
int show_lozenge(char str[MAX][MAX],int side)
{
    int i,j;
    int m,n;
    int high,wide;
    for(m=0;m<MAX;m++)
    for(n=0;n<MAX;n++)
    {
        if(m+n==side-1)
        {
            if(m==0&&n==side-1)
            {
                for(i=0;i<side;i++)
                {
                    str[m+i][n+i]=CH_LOZENGE;//右上方直线
                    wide=n+i+1;//确定菱形宽度
                }
            }
            if(m==side-1&&n==0)
            {
                for(i=0;i<side;i++)
                {
                    str[m+i][n+i]=CH_LOZENGE;//左下方直线
                    high=m+i+1;//确定菱形高高度
                }
            }
            str[m][n]=CH_LOZENGE;//左上方直线
            str[m+(side-1)][n+(side-1)]=CH_LOZENGE;//右下方直线
        }
        
    }
    for(i=0;i<high;i++)//根据高度和宽度打印菱形
    {
        for(j=0;j<wide;j++)
        {
            printf("%c",str[i][j]);
        }
        printf("\n");
    }
    return 0;
}
int main()
{
    char str[MAX][MAX];
    char side[3]="";
    int i,j,len;

    while(1)
    {
        memset(side,'\0',sizeof(side));
        printf("请输入菱形的边长(1到%d的整数):",MAX/2);
        //scanf("%s",side);//用scanf()函数,空格过滤不了
        gets(side);        //用gets()函数,gcc编译器会给出警告,可忽略,不影响执行
        len=strlen(side);
        //确定输入为1到9
        if(len==1\
           &&((MAX<20&&side[0]>'0'&&side[0]<=MAX/2+48)\
               ||(MAX>=20&&side[0]>'0'&&side[0]<='9')\
             )
          )
        {
            break;
        }
        else
        //确定输入为10到99
        if(len==2\
           &&MAX>=20\
           &&(((side[0]>'0'&&side[0]<MAX/2/10+48)&&(side[1]>='0'&&side[1]<='9'))\
              ||(side[0]==MAX/2/10+48&&(side[1]>='0'&&side[1]<=MAX/2%10+48))\
             )
          )
        {
            break;
        }
    }
    for(i=0;i<MAX;i++)//初始化二维数组显示背景
    {
        for(j=0;j<MAX;j++)
        {
            str[i][j]=CH_BACK;
        }
    }
    if(len==1)//打印边长小于10的菱形
    {
        show_lozenge(str,side[0]-48);
    }
    else
    if(len==2)//打印边长大于等于10的菱形
    {
        show_lozenge(str,(side[0]-48)*10+(side[1]-48));
    }
    return 0;
}

执行结果如下:

请输入菱形的边长(1到50的整数):10
           @         
          @ @        
         @   @      
        @     @      
       @       @     
      @         @   
     @           @   
    @             @  
   @               @
  @                 @
   @               @
    @             @  
     @           @   
      @         @   
       @       @     
        @     @      
         @   @      
          @ @        
           @

[ 本帖最后由 小小战士 于 2012-11-12 04:52 编辑 ]

小小战士,战士中的战斗机!
2012-11-12 02:14
虾B写
Rank: 8Rank: 8
来 自:湖北
等 级:蝙蝠侠
威 望:3
帖 子:395
专家分:922
注 册:2009-10-1
收藏
得分:0 
回复 11楼 小小战士
能写出这么长的代码已经很不错了,支持一下

其实用一个画线函数就能画出来,
判断x1==x2 || y1==y2 ||y1-y2==x1-x2, 就能判断是横是树是斜了,然后给x,y的向量定义(1,0,-1)的值,最后循环画出。

然后就可以画个六角星了。

还可以写的难点用勾股定理写,用*画出很丰富的图形,然后不断调用DOS命令CLS,形成动画。不然老在DOS下输入输出数字会很无聊的。

白娘故意下雨骗许仙的伞。祝英台十八里相送时装疯卖傻调戏梁山伯。七仙女挡住了董永的去路。牛郎趁织女洗澡时拿走了她的衣服。。。这些故事告诉我们;伟大爱情的开始,总归的有一个要先耍流氓!
2012-11-12 18:07
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:3 
程序代码:
#include <stdio.h>
#include <math.h>

int main()
{
    int i,j,n=0;
    printf("请输入一个大于0,小于等于20的正整数:");
    scanf("%d",&n);
    if(n<1||n>20)
        return 0;
    for(i=-n;i<=n;i++)
    {
        for(j=-n;j<=n;j++)
        {
            if(abs(i)+abs(j)==n)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    return 0;         
}
2012-11-12 20:49
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
以下是引用虾B写在2012-11-12 18:07:23的发言:

能写出这么长的代码已经很不错了,支持一下

其实用一个画线函数就能画出来,
判断x1==x2 || y1==y2 ||y1-y2==x1-x2, 就能判断是横是树是斜了,然后给x,y的向量定义(1,0,-1)的值,最后循环画出。

然后就可以画个六角星了。

还可以写的难点用勾股定理写,用*画出很丰富的图形,然后不断调用DOS命令CLS,形成动画。不然老在DOS下输入输出数字会很无聊的。


谢谢了!有点懂了,还是不知道怎么写!能不能给我写一个简单的实例,学习!

小小战士,战士中的战斗机!
2012-11-21 16:07
快速回复:求空心菱形程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019423 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved