找回密码
 欢迎注册
楼主: wayne

[讨论] C/C++,打印整数1到1000,不使用循环,条件语言

[复制链接]
 楼主| 发表于 2011-7-13 18:54:49 | 显示全部楼层
15# mathe try好像 是 C++里面的吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-7-13 18:56:00 | 显示全部楼层
Windows和Linux好像都有对应C扩展,可能语法有一点不同
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-7-13 20:03:06 | 显示全部楼层
22# mathe 再来一个:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. void main(int j) {
  4. printf("%d ", j);
  5. (main + (exit - main)*(j/1000))(j+1);
  6. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-7-13 20:05:00 | 显示全部楼层
  1. void func(int n)
  2. {
  3. int tmp = 1 / n;
  4. printf("%d ", 1001 - n);
  5. fflush(stdout);
  6. func(n - 1);
  7. }
  8. void sig_fpe(int signo)
  9. {
  10. printf("DONE.n");
  11. exit(0);
  12. }
  13. int main(void)
  14. {
  15. signal(SIGFPE, sig_fpe); /* 接收到除0的异常的信号后进行处理. */
  16. func(1000);
  17. return 0;
  18. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-7-13 20:05:33 | 显示全部楼层
http://icoder.cloudcontrolled.co ... ondition-statement/
  1. /* C, 推荐! */
  2. void yesprint(int i);
  3. void noprint(int i);
  4. typedef void(*fnPtr)(int);
  5. fnPtr dispatch[] = { yesprint, noprint }; /* 函数数组:
  6. dispatch[0] = yesprint,
  7. dispatch[1] = noprint. */
  8. void yesprint(int i) {
  9. printf("%dn", i);
  10. dispatch[i / 1000](i + 1); /* i < 1000时,i/1000==0, 因此继续递归,
  11. 当i==1000时i/1000==1, 因此noprint被调用. */
  12. }
  13. void noprint(int i) { /* do nothing. */ }
  14. int main() {
  15. yesprint(1);
  16. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-7-13 21:03:27 | 显示全部楼层
23#,24#,25# 构思巧妙,学习了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-7-13 21:28:52 | 显示全部楼层
25# wayne 也来一个。
  1. #include <stdio.h>
  2. void main(int j)
  3. {
  4. void (* f[])() = {main,getchar};
  5. printf("%d ", j);
  6. f[!(1000-j)](j+1);
  7. }
复制代码
  1. #include <stdio.h>
  2. int main(int j)
  3. {
  4. printf("%d ",j);
  5. return( !(1000-j) || main(j+1));
  6. }
复制代码

评分

参与人数 1威望 +6 经验 +6 鲜花 +6 收起 理由
wayne + 6 + 6 + 6

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-7-14 08:32:10 | 显示全部楼层
mathe 运用宏巧妙的简化了程序代码, 其他的则避开显式的“循环、判断”语句,但通过设计奇特的终止条件而达成目的。 都非常巧妙!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-7-14 10:16:49 | 显示全部楼层
27# G-Spider 利用 return 0 的终止 和main(n)的递归调用,妙!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-7-14 11:00:52 | 显示全部楼层
  1. #include <stdio.h>
  2. #define a printf("%d ",i++);
  3. #define b(x) x x x x x
  4. #define Print1000 b(b(b(a a a a a a a a))) //1000=5*5*5*8
  5. //#define b(x) x x x x x x x x x x
  6. //#define Print1000 b(b(b(a))) //1000=10*10*10
  7. void main ( int i )
  8. {
  9. Print1000;
  10. }
复制代码

评分

参与人数 1鲜花 +12 收起 理由
wayne + 12 有才阿!!!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-23 16:13 , Processed in 0.027345 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表