wayne
发表于 2011-7-13 18:54:49
15# mathe
try好像 是 C++里面的吧
mathe
发表于 2011-7-13 18:56:00
Windows和Linux好像都有对应C扩展,可能语法有一点不同
wayne
发表于 2011-7-13 20:03:06
22# mathe
再来一个:#include<stdio.h>
#include<stdlib.h>
void main(int j) {
printf("%d", j);
(main + (exit - main)*(j/1000))(j+1);
}
wayne
发表于 2011-7-13 20:05:00
void func(int n)
{
int tmp = 1 / n;
printf("%d ", 1001 - n);
fflush(stdout);
func(n - 1);
}
void sig_fpe(int signo)
{
printf("DONE.n");
exit(0);
}
int main(void)
{
signal(SIGFPE, sig_fpe); /* 接收到除0的异常的信号后进行处理. */
func(1000);
return 0;
}
wayne
发表于 2011-7-13 20:05:33
http://icoder.cloudcontrolled.com/index.php/2011/02/09/print-1-to-1000-without-loop-and-condition-statement//* C, 推荐! */
void yesprint(int i);
void noprint(int i);
typedef void(*fnPtr)(int);
fnPtr dispatch[] = { yesprint, noprint }; /* 函数数组:
dispatch = yesprint,
dispatch = noprint. */
void yesprint(int i) {
printf("%dn", i);
dispatch(i + 1); /* i < 1000时,i/1000==0, 因此继续递归,
当i==1000时i/1000==1, 因此noprint被调用. */
}
void noprint(int i) { /* do nothing. */ }
int main() {
yesprint(1);
}
liangbch
发表于 2011-7-13 21:03:27
23#,24#,25# 构思巧妙,学习了
G-Spider
发表于 2011-7-13 21:28:52
25# wayne
也来一个。#include <stdio.h>
void main(int j)
{
void (* f[])() = {main,getchar};
printf("%d ", j);
f[!(1000-j)](j+1);
} #include <stdio.h>
int main(int j)
{
printf("%d ",j);
return( !(1000-j) || main(j+1));
}
gxqcn
发表于 2011-7-14 08:32:10
mathe 运用宏巧妙的简化了程序代码,
其他的则避开显式的“循环、判断”语句,但通过设计奇特的终止条件而达成目的。
都非常巧妙!
wayne
发表于 2011-7-14 10:16:49
27# G-Spider
利用 return 0 的终止 和main(n)的递归调用,妙!
G-Spider
发表于 2011-7-14 11:00:52
#include <stdio.h>
#define a printf("%d ",i++);
#define b(x) x x x x x
#define Print1000 b(b(b(a a a a a a a a))) //1000=5*5*5*8
//#define b(x) x x x x x x x x x x
//#define Print1000 b(b(b(a))) //1000=10*10*10
void main ( int i )
{
Print1000;
}