请教C语言二级习题~~

来源:百度知道 编辑:UC知道 时间:2024/05/11 13:54:25
这几道题目我都做错了,但不知道错在哪里。请高手指教!

第一题:
main()
{ int a=4,b=5,c=0,d;
d=!a&&!b||!c;
printf("%d\n",d);
}
标答是1

第二题:
struct test
{int m1;char m2;float m3;
union uu{char u1[5]; int u2[2]; }ua;
}myaa;
则sizeof(struct test)的值是?
标答是20

第三题:
#include "string.h"
fun(char *w,int n)
{ char t,*s1,*s2;
s1=w; s2=w+n-1;
while(s1<s2)
{ t=*s1++;
*s1=*s2--;
*s2=t;
}
}
main()
{ static char p[]="1234567";
fun(p,strlen(p));
printf("%s",p)
}
标答是1711717

第四题:
main()
int p[7]={11,13,14,15,16,17,18};
int i=0,j=0;
while(i<7&&p[i]%2!=1) j+=p[i++];
printf("%d\n",j);
}
标答是0

第一题:
逻辑与的优先级比逻辑或的优先级高,所以!a&&!b为假,!c真,结果为真。
第二题:
int m1占4个字节,char m2占1个字节,float m3占4个字节,但是由于float是4字节对齐的,char m2之后的3个字节是空的,所以他们3个加一起共占12字节。union uu{char u1[5]; int u2[2]; }ua; 占8字节,这是union的性质,它占用的字节数为8,区域的取值大小为该结构中长度最大的变量的值。
第三题:
t=*s1++;
*s1=*s2--;
*s2=t;
这3句是核心,要注意的是在第1句之后,s1已经向后移动了一位,在第2句之后,s2也已经向前移动了一位,但是w未动。具体的你可以调试一下,就都明白了。F5调试,F10单步执行。
第四题:
while(i<7&&p[i]%2!=1)由于i=0,所以i<7成立,但是p[0]%2==1,即第二个条件不成立,所以循环体不会执行,直接跳出,j仍然是0。

第一题 运算符!最高 ((!b=0)||(!c=1))=1
然后 &&!a=0 结果是 一