测试对C的掌握程度

 

下面这个程序输出什么?
enum {false,true};
int main()
{
int i=1;
do
{
printf("%d/n",i);
i++;
if(i < 15)
continue;
}while(false);
return 0;
}

你相信么?下面这个程序输出的两行东西不一样!
#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;
}

下面的程序看似完全正确。你能看出它为什么通不过编译吗?
看出问题前不要去试着编译,不然你会后悔你没看出来这个低级的语法错误。
#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;
}

为什么下面这个程序的输出不是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;
}

下面这个程序输出什么?
#include
int main()
{
int i=43;
printf("%d/n",printf("%d",printf("%d",i)));
return 0;
}

下面这个程序输出什么?
#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;
}

下面这个程序输出什么?
#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;
}

下面这个程序输出什么?
#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;
}

下面这个程序输出什么?
#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;
}

下面这个程序输出什么?
#include
int main()
{
int i=23;
printf("%d %d/n",i++,i++);
return 0;
}

为什么下面这个程序的输出不是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;
}

下面这个程序输出什么?
#include
int main()
{
int i = 6;
if( ((++i < 7) && ( i++/6)) || (++i <= 9))
;
printf("%d/n",i);
return 0;
}

下面这段代码是否合法?
#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));
}

这是什么意思?有什么潜在的问题?
#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?


怎样用printf函数打印"I can print %"?别忘了百分号是用于格式化输出的。
不用任何比较运算符,写一个程序找出三个数中的最小数。
不用+号,(用位运算)实现加法运算。

最有趣的一个问题:不用分号,写一个Hello World程序。
这是有可能的,而且办法非常简单,只用到了最基本的语法规则。
实在想不出来再看答案吧(白色的):
#include
int main()
{
if (printf("Hello World")){}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值