sosonemo 发表于 2010-11-11 19:58:43

独立自主画出菱形,小小地纪念一下

Nisy的编程教学第五集看了个开头,看到群里有人讨论说里边有个打印菱形的设计作业,我在没看Nisy讲到这部分的前提下自己想出了打印菱形的方法,这也算是我除hello world外第一个真正的程序了。虽然说这对很多人来说不算什么,但对我来说毕竟是第一次,特此纪念一下,嘻嘻:loveliness:
顺便说一下我的思路吧。
画菱形有点像十字绣,把“*”填充到该放的地方,其它打空格就好了
既然是十字绣,就需要横竖两个坐标,所以定义i,j两个变量分别代表行和列
首先需要确定最上边点的位置,i=1时,“*”所在的列数即为用户输入的长度数,i每加一,“*”便要向两边各加减一,直到最大的宽度。
我把菱形分为上半部分和下半部分,上半部分画对了,下半部分只需要反过来就行。
下面是我的实现代码,有什么不足请大家指点!main ()
{
int c;
int i;
int j;

printf("input the length please\n"); //输入菱形长度
scanf("%d",&c);

for (i=1;i<=c;i++)                   //用tc编译,变量必须在main中申明,否则报错
{for (j=1;j<=2*c;j++)
    {if (j==c-i+1||j==c+i-1)
        printf("*");
   else
        printf(" ");
   if (j==2*c)
        printf("\n");
    }                        
}                                    //上半部分菱形
for (i=c-1;i>=1;i--)
{for (j=1;j<=2*c;j++)
    {if (j==c-i+1||j==c+i-1)
        printf("*");
   else
        printf(" ");
   if (j==2*c)
        printf("\n");
    }
}                                    //下半部分菱形
printf("Thank you for using.Coded by SoSoNemo.\n");
}

风卷 发表于 2010-11-12 05:57:58

新人,赞一个,我想其实可不可以把上半部分再看成两个左右对称的,这样在算法实现上可否会有进步~

sosonemo 发表于 2010-11-12 14:30:53

回复 2# 风卷


    上半部分我就是按对称做的啊,判断j==c-i+1 || j==c+i-1这样不就是对称的吗?

Nisy 发表于 2010-11-13 11:46:02

不错哦 没看第五课就了解for的使用 看来不是0基础 呵呵

写完这个之后又什么感受么 对编程上的感受 可以写一下

sosonemo 发表于 2010-11-14 16:52:47

回复 4# Nisy


嘿嘿,被发现了,以前自己零星看过点这方面的书,但是感觉理解不是那么透彻。
我觉得看Nisy编程教学最大的感受就是,对内存有了更深的理解,不再拘泥什么变量类型之类的“虚名”,也觉得编程并不是那么困难的,关键是人自己要有逻辑,把这个逻辑用相应的编程语言告诉电脑就可以了。
这段时间自己在看王爽的《汇编语言》,确实是一本非常好的书,我对计算机的理解也逐步加深了。
呵呵,希望更多的朋友加入编程学习的大军,假以时日,写出自己满意的程序!!

jianshi 发表于 2010-11-15 11:57:14

NISY的教材很不错,看了较多的这个很新颖,采用一种新的教学方式

hnynes 发表于 2010-11-16 02:01:35

不错,赞一个。
页: [1]
查看完整版本: 独立自主画出菱形,小小地纪念一下