找回密码
 欢迎注册
楼主: 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-3-29 05:41 , Processed in 0.073178 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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