C 和指针第一次考试(改正)

来源:互联网 发布:淘宝质量好点的aj高仿 编辑:程序博客网 时间:2024/06/01 20:30

C和指针第一次考试(改正)

4、下面程序,求count的值:A

int func(int x)

{

int count=0;

x=9999;

While(x)

{

count++;

x=x&(x-1);

}

return count;

}

A.8

B.10

C.5

D.11

解答:x&(x-1)是将x的二进制中的最后一个1变成0,

      9999的二进制:1001100110011001,总共有8个1

      所以count的值是8。

6、以下代码打印的结果是(假设运行在i386系列计算机上):C

struct st_t

{

int status;//4

short *pdata;//4

char errstr[32];//32

};//40字节

struct st_t st[16];

char *p=(char *)(st[2],errstr+32);

printf(%d,p-(char *)(st)));

A.32

B.114

C.120

D.1112

7、以下代码执行后,val的值是:B

unsigned long val=0;

char a=0x48;

char b=0x52;

Val=b<<8|a;

A.20992

B.21064

C.72

D.0

解答:b:0x52=01010010 共32位前面有24个0

b<<8 (b左移8位):0101001000000000

a:0x48=01001000

b<<8|a=0101001001001000 =0x5248//16进制

0x5248=5*16^3+2*16^2+4*16^1+8*16^0=21064

8、设有定义:char *p,以下选项中不能正确将字符串赋值给字符串指针p的语句是:A B D

A.p=getchar();获取1个字符

B.scanf(“%s”,p);p指针在定义时没有分配内存,属于野指针错误

C.char s[]=china;p=s;

D.*p=china;应该是p=“china”

11、用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有14个0

解答:将30中3的倍数找出来,计算出其中3的个数。

3,6,9,12,15,18,21,24,27,30

3=3*1;6=3*2;9=3*3;12=3*4;15=3*5;18=3*3*2;21=3*7;24=3*8;27=3*3*3;30=3*10。

19、假设在n进制下,下面的等式成立,567*456=150216,则n的值是:18

解答:假设在n进制下,则有

 5*n^2+6*n^1+7*n^0)*(4*n^2+5^n^1+6*n^0)=

1*n^5+5*n^4+0*n^3+2*n^2+1*n^1+6*n^0

化简得:15*n^4+49*n^3+86*n^2+70n=n^5

等号两边同时除以n^5得到:15/n+49/n^2+86/n^3+70/n^4=1

由此等式可以知道:要使此等式成立n一定要大于15,所以选18进制。

25、有如下程序

int Fun(int x,int y)

{

return (x&y)+((x^y)>>1);

}

则运行Fun(729,271);的结果是500

解答:(x&y)+((x^y)>>1)其实就是求两个数的平均值。

32、表达式X=A+B*(C-D)/E的后缀表达形式是:D

A.XAB+CDE/-*=

B.XA+BC-DE/*=

C.XABCDE+*/=

D.XABCD-*E/+=

解答:第一步先加括号(X=(A+((B*(C-D))/E)))

E.第二步:去掉括号把运算符移到括号后面是XABCD-*E/+=

给大家普及一下小知识:前缀表达式也叫波兰式,后缀表达式就叫异波兰式。

 


原创粉丝点击