现在的位置: 首页 > 综合 > 正文

【C++程序设计笔试题】详细阐释

2014年07月25日 ⁄ 综合 ⁄ 共 1230字 ⁄ 字号 评论关闭

1、数组指针地址偏移了多少

main()
{int a[10]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf("%x\n",p);
printf("%x\n",p+9);
}  
该程序有两个printf语句,如果第一个printf语句输出的是194则第二个语句输出的结果是?

解析:

考察内容

数组地址连续分配;

每个连续的内存空间大小一样;

此题地址表示是16进制计算

解答

12和24是这样的出来的:
32位机中,int型2个字节,所以是2*9=18=12(十六进制)
64位机中,int型占4个字节,所以是4*9=36=24(十六进制)

所以最后:24+194=1 11 8=1B8

2、switch分支语句串联执行(default也是如此)

#include <stdio.h>
main()
{ int c=0,k;
for (k=1;k<3;k++)
switch (k)
{ default: c+=k;
case 2: c++;break;
case 4: c+=2;break;
}
printf("%d\n",c);
}

考察内容:

switch分支语句串联执行

default也是如此

解答:答案为3

default: c+=k;break;
   case 2: c++;break;
   case 4: c+=2;break;

答案为2

case 2: c++;break;
   case 4: c+=2;break;

default: c+=k;

答案为2

所以:

分支语句按顺序执行只在遇到break返回

           default放在最开始就执行default

          default放在最开始有break执行完返回

如果前一条满足且没有break将串联执行后一句

若都不满足,最后有default语句则执行default

 

3、关系表达式的顺序

 

#include  <stdio.h>
intmain ( )

 int  n=2,k=0;
while(k++&&n++>2);
printf(“%d  %d\n”,k,n);
}
考察内容:

关系表达式&&前面为假就不执行后面的了

while(k++&&n++>2);后面的分号表名与后面printf语句没有关联无论怎样都要执行printf的

解析

while(k++ && n++ >2); 执行这个的时候k=0
k++执行时,先取k的值是0,为假,所以&& n++ >2就不执行了,再将k的值加1

4、宏替换(直接换)

#define ADD(x)(x)+(x)
int main()
{
int a=4,b=6,c=7,d=ADD(a+b)*c;
printf(“d=%d”,d);
}

考察内容:

宏替换是直接换

解析:

#define宏是直接替换,不会先给你计算的

#define add(x)  x + x-----------------答案为56

#define add(x)  (x) + (x)-----答案为80

add(a+b) = a+b*a+b

d = add(a+b)*c = (a+b)+(a+b)*c =10+10*7= 10+70= 80

 

抱歉!评论已关闭.