| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9618 人关注过本帖
标题:很有意思的小程序
只看楼主 加入收藏
初出茅庐MM
Rank: 2
等 级:论坛游民
帖 子:62
专家分:11
注 册:2013-9-28
结帖率:93.75%
收藏
已结贴  问题点数:5 回复次数:8 
很有意思的小程序
不用循环、递归,打印0-999这1000个数,我试了,行得通,求解释

#include <stdio.h>
   
    #define A(x) x;x;x;x;x;x;x;x;x;x;
     
    int main (void)
    {
        int n = 1;
       A(A(A(printf ("%d ", n++))));
        return 0;
   }
搜索更多相关主题的帖子: include return 
2014-02-08 20:37
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:1 
宏展开,等价于
printf ("%d ", n++);
写了1000次而已

[ 本帖最后由 yuccn 于 2014-2-8 21:16 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2014-02-08 21:13
初出茅庐MM
Rank: 2
等 级:论坛游民
帖 子:62
专家分:11
注 册:2013-9-28
收藏
得分:0 
回复 2楼 yuccn
还是不懂    能把具体过程写下来就好了
2014-02-08 22:23
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:1 
不会用这

编写的程序,不能改变世界,却可以改变自己...
2014-02-09 10:10
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
#define A(x) x;x;x;x;x;x;x;x;x;x;

A(printf ("%d ", n++));
就等价于
 printf ("%d ", n++);printf ("%d ", n++);printf ("%d ", n++);printf ("%d ", n++);printf ("%d ", n++);printf ("%d ", n++);printf ("%d ", n++);printf ("%d ",n++);printf ("%d ", n++);printf ("%d ", n++); (1)

A(A(printf ("%d ", n++))); 等价于 (1) 重复10遍。也就是100次的printf了,
A(A(printf ("%d ", n++)))); 也就是A(printf 100次)也就是printf 1000次了

如果不理解,说明对宏理解不透彻了

那些都是在编译时候做宏展开的。你可以试试

A(A(A(A(A(printf ("%d ", n++))))));

这就是print100000次了,不过如果这样用,编译可能就“卡死”了,宏展开耗掉大量的时间

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2014-02-09 10:16
冬冬123
Rank: 2
等 级:论坛游民
帖 子:80
专家分:67
注 册:2013-3-3
收藏
得分:1 
这有什么不懂得

天下寒士俱欢言!!!
2014-02-09 21:24
mhy9345ddy2
Rank: 2
等 级:论坛游民
帖 子:8
专家分:12
注 册:2013-12-15
收藏
得分:1 
这个确实很有意思
2014-02-12 01:25
fopen
Rank: 2
来 自:广东
等 级:论坛游民
帖 子:21
专家分:26
注 册:2014-2-11
收藏
得分:1 
"#define A(x) x*x*x*x*x*x*x*x*x*x"+"A(A(A(printf("%d",n++))));"="printf("%d",n++)"*1000

我只会一点C和HTML,叫我情何以堪!我要学php和java!
2014-02-13 00:59
初出茅庐MM
Rank: 2
等 级:论坛游民
帖 子:62
专家分:11
注 册:2013-9-28
收藏
得分:0 
回复 5楼 yuccn
我懂了  谢谢了   我又发了一个贴子  帮我看看吧

编写一个程序,允许输入一个用逗号分隔的单词表,然后提取出单词,删除单词前后的所有空格,每个单词用一行输出。例如,如果输入的是
   John , Jack , Jill

那么输出的是:

-------------------
John
Jack
Jill
-------------------
下面是编写的程序:
#include<stdio.h>
#include<string.h>
int main(void)
{
    char text[80];
    printf("enter a text: ");
    fgets(text,sizeof(text),stdin);
    int i=0;
    for(i=0;i<=80;i++)
    {
        if(text[i]!=',')
            continue;
        text[i]=' ';
    }
    i=0;
    int j=0,k=0;
    char words[20][15];
    char word[15];
    while(1)
    {
        while(text[i]==' ')
            i++;
        if(text[i]=='\0')
            break;
        j=0;
        while(text[i]!=' ')
            word[j++]=text[i++];
            word[j]='\0';
            strcpy(words[k++],word);
    }
    for(i=0;i<=k;i++)
        printf("%s\n",words[i]);
    return 0;
}
2014-02-26 09:16
快速回复:很有意思的小程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031248 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved