无心人 发表于 2008-9-5 20:43:38

呵呵
mathe的C学的很精妙啊
什么书上这种细节多?

mathe 发表于 2008-9-6 06:33:03

我不是从书上学的,基本上都是网络上看的。主要是我接触c语言的时间比较长。

无心人 发表于 2008-9-6 08:59:47


超过13年了么?

:lol

如果没超过,就不叫长

不过,你学的真不错

mathe 发表于 2008-9-6 10:42:12

为什么13年?
超过了

无心人 发表于 2008-9-6 14:05:28

呵呵
92年试图学C
没学成
学的Pascal
工作后,95年学会的
所以说这个

看来你高中就学了C了

mathe 发表于 2008-9-6 15:52:06

大学才学的。
看来你开始试图学C比我早。
我高中开始学过BASIC,然后大学开始学过FORTRAN,8086汇编,PASCAL.
反而C语言稍微迟一些。

无心人 发表于 2008-9-6 17:35:48

一样的顺序
呵呵
C的逻辑不如Pascal清晰
语法不如Basic简单
趣味性不如汇编
呵呵

反正一开始看不懂

风云剑 发表于 2008-9-8 09:22:27

呵呵,大家学的都差不多嘛,而且顺序也都一样,我没学pascal,而是51汇编。

liangbch 发表于 2008-9-9 09:30:29

按照以前的思路,将代码重写了一遍,虽然代码数量依然不及楼主,但是不失为一种很好的算法。#include "stdio.h"
#define N 8
int main(int argc, char* argv[])
{
        int inc[]={1,0,0,1,-1,0,0,-1};
       
        //inc:表示向右方向x增量
        //inc:表示向右方向y增量
       
        //inc:表示向下方向x增量
        //inc:表示向下方向y增量
       
        //inc:表示向左方向x增量
        //inc:表示向左方向y增量
       
        //inc:表示向上方向x增量
        //inc:表示向上方向y增量

        int        s={0};
        int        i,x,y,d;
        for (i=1;i<=N;i++)
        {
                s=1;   //上边加围墙
                s=1; //底边加围墙
                s=1;   //左边加围墙
                s=1; //右边加围墙
        }
       
        x=1;
        y=1;
        d=0;        //d表示方向,0:表示向右走,2:表示向下走,4:表示向左走 6:表示向上走
        for (i=1;i<=N*N;i++)
        {
                s=i;
                if (s]]>0) //下一个位置已填充或者是围墙
                {
                        d+=2;        //改变前进方向
                        d&=7;   //if d>=8,d-=8
                }
                x+=inc;
                y+=inc;
       
        }
        for (y=1;y<=N;y++)
        {
                for (x=1;x<=N;x++)
                {
                        printf("%3d",s);
                }
                printf("\n");
        }
        return 0;
}

liangbch 发表于 2008-9-9 09:31:43

// 以下代码重新编排的格式,主要有
// 1.简化了main函数的定义,并且不用return 语句,如在VC中编译,必须保存为c文件,而不是cpp
// 2.采用单字母变量名
// 3.使用等号,将多个赋值语句改为一个赋值语句
// 4.将多个变量定义语句改为1个变量定义语句。
// 5.去掉了对头文件的包含。
// 6.将for语句中的printf("\n")移动for语句括号内,并去除了“{}”
// 7.重新进行了排版,将多行语句排在同一行
// 如果将“#define N 8”去掉,还可以节省几个字符,但失去了灵活性#define N 8
main()
{
int i=1,x=1,y=1,d=0,s={0},u[]={1,0,0,1,-1,0,0,-1};
for (;i<=N;i++) s=s=s=s=1;
for (i=1;i<=N*N;i++) { s=i; if (s]]>0) d=(d+2)&7;        x+=u; y+=u;        }
for (y=1;y<=N;y++,printf("\n"))        for (x=1;x<=N;x++) printf("%3d",s);
}
页: 1 2 [3] 4 5
查看完整版本: 打印螺旋方阵