无心人
发表于 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);
}