Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1575327
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: LINUX

2010-08-23 14:00:10

1、下面这个程序输出什么?
enum {false,true};
int main()
{
        int i=1;
        do
        {
                printf("%d\n",i);
                i++;
                if(i < 15)
                        continue;
        }while(false);
        return 0;
}
2、你相信么?下面这个程序输出的两行东西不一样!
  #include
  #define f(a,b) a##b
  #define g(a)   #a
  #define h(a) g(a)
  int main()
  {
          printf("%s\n",h(f(1,2)));
          printf("%s\n",g(f(1,2)));
          return 0;
  }
3、下面的程序看似完全正确。你能看出它为什么通不过编译吗?
看出问题前不要去试着编译,不然你会后悔你没看出来这个低级的语法错误。
#include
void OS_Solaris_print()
{
        printf("Solaris - Sun Microsystems\n");
}
void OS_Windows_print()
{
        printf("Windows - Microsoft\n");
}
void OS_HP-UX_print()
{
        printf("HP-UX - Hewlett Packard\n");
}
int main()
{
        int num;
        printf("Enter the number (1-3):\n");
        scanf("%d",&num);
        switch(num)
        {
                case 1:
                        OS_Solaris_print();
                        break;
                case 2:
                        OS_Windows_print();
                        break;
                case 3:
                        OS_HP-UX_print();
                        break;
                default:
                        printf("Hmm! only 1-3 :-)\n");
                        break;
        }
        return 0;
}
4、为什么下面这个程序的输出不是NONE?看你多久才能看出来。
  #include
  int main()
  {
          int a=10;
          switch(a)
          {
                  case '1':
                      printf("ONE\n");
                      break;
                  case '2':
                      printf("TWO\n");
                      break;
                  defa1ut:
                      printf("NONE\n");
          }
          return 0;
  }
5、下面这个程序输出什么?
#include
int main()
{
        int i=43;
        printf("%d\n",printf("%d",printf("%d",i)));
        return 0;
}
6、下面这个程序输出什么?
  #include
  int main()
  {
      int a=1;
      switch(a)
      {   int b=20;
          case 1: printf("b is %d\n",b);
                  break;
          default:printf("b is %d\n",b);
                  break;
      }
      return 0;
  }
7、下面这个程序输出什么?
  #include
  int main()
  {
      int i;
      i = 10;
      printf("i : %d\n",i);
      printf("sizeof(i++) is: %d\n",sizeof(i++));
      printf("i : %d\n",i);
      return 0;
  }
8、下面这个程序输出什么?
  #include
  #include
  #define SIZEOF(arr) (sizeof(arr)/sizeof(arr[0]))
  #define PrintInt(expr) printf("%s:%d\n",#expr,(expr))
  int main()
  {
      /* The powers of 10 */
      int pot[] = {
          0001,
          0010,
          0100,
          1000
      };
      int i;
      for(i=0;i          PrintInt(pot[i]);
      return 0;
  }
9、下面这个程序输出什么?
  #include
  int main()
  {
    int a=3, b = 5;
    printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);
    printf(&a["WHAT%c%c%c  %c%c  %c !\n"], 1["this"],
       2["beauty"],0["tool"],0["is"],3["sensitive"],4["CCCCCC"]);
    return 0;
  }
10、下面这个程序输出什么?
#include
int main()
{
        int i=23;
        printf("%d %d\n",i++,i++);
        return 0;
}
11、为什么下面这个程序的输出不是10?我故意取消了语法高亮:)
  #include
  #define PrintInt(expr) printf("%s : %d\n",#expr,(expr))
  int main()
  {
      int y = 100;
      int *p;
      p = malloc(sizeof(int));
      *p = 10;
      y = y/*p; /*dividing y by *p */;
      PrintInt(y);
      return 0;
  }
12、下面这个程序输出什么?
  #include
  int main()
  {
      int i = 6;
      if( ((++i < 7) && ( i++/6)) || (++i <= 9))
          ;
      printf("%d\n",i);
      return 0;
  }
13、下面这段代码是否合法?
  #include
  #define PrintInt(expr) printf("%s : %d\n",#expr,(expr))
  int max(int x, int y)
  {
      (x > y) ? return x : return y;
  }
  int main()
  {
      int a = 10, b = 20;
      PrintInt(a);
      PrintInt(b);
      PrintInt(max(a,b));
  }
14、这是什么意思?有什么潜在的问题?
  #define SWAP(a,b) ((a) ^= (b) ^= (a) ^= (b))
这是什么意思?
  #define ROUNDUP(x,n) ((x+n-1)&(~(n-1)))
一些C语言的教材上会给出一个很经典的宏定义
  #define isupper(c) (((c) >= 'A') && ((c) <= 'Z'))
但这种宏定义的方法存在不足之处,一旦遇到下面这种情况就出问题了:
  char c;
  /* ... */
  if(isupper(c++))
  {
      /* ... */
  }
为了避免这种问题,应该怎样来定义isupper?

15、怎样用printf函数打印"I can print %"?别忘了百分号是用于格式化输出的。
16、不用任何比较运算符,写一个程序找出三个数中的最小数。
17、不用+号,(用位运算)实现加法运算。
18、最有趣的一个问题:不用分号,写一个Hello World程序。
这是有可能的,而且办法非常简单,只用到了最基本的语法规则。
实在想不出来再看答案吧(白色的):
#include
int main()
{
    if (printf("Hello World")){}
}
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/davelv/archive/2010/01/26/5256261.aspx
阅读(757) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~