C语言考试的一些有关问题!问

C语言考试的一些问题!!!急问
要考试了,请各位强人帮忙做一些题目,并解释下为什么,谢谢.

1.                 【     】ER模型可以转换成关系模型。当两个实体间联系是   M:N   联系时,它通常可转换成多少各个关系模式:  
A.                 A.                 2  
B.                 3  
C.                 M+N  
D.                 M*N  
      2.                 【】若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是  

A、1  
  B、2  
C、2.0  
D、2.5  
3.                 【   】在32位的操作系统中,下面一段语句定义了两个结构  
#pragma   pack(1)  
typedef   struct  
{  
                char   a;  
                int   b;  
}fisrtstruc;  
#pragma   pack(2)  
typedef   struct  
{  
                char   a;  
                int   b;  
}secondstruc;  
则sizeof(fisrtstruc)和sizeof(secondstruc)分别为:      
A.   6,8  
B.   5,   6  
C.   5,   8  
D.   6,   5  


4.                 【     】在32位系统下,局部变量在堆栈上顺序排列,下面函数的执行结果为:  
int   func()  
{  
                int   a1;  
                char   a2[4];  
                int   a3;  
                a1   =   5;  
                a3   =   6;  
                memset(a2,0x2,   5);  
                return   (a1+a3);  
}  
A.                 0x8  
B.                 0x7  
C.                 0xb  
D.                 0x02000005  
E.                 0x02000006                                    


------解决方案--------------------
2 C
3 C

------解决方案--------------------
3题选B。
#pragma pack(1) 声明按一字节对齐,所以结构体fisrtstruc在内存空间是按字节连续存储的,不存在补齐的情况。
#pragma pack(1) 声明按二字节对齐,结构体secondstruc在内存空间的存储情况是:第一个char类型的占一个字节,紧接着补齐一个字节,而他的第二个成员为int,占4字节,故最终为6字节。
------解决方案--------------------
1D,属于数据库的知识,联系是多对多的,对每个实体1可以有N个实体2对应,而一共有M个实体1,故一共有M*N个关系。
2C,除法中有浮点型的时候除后的结果也是浮点型的。
3B,#pragma pack(n)定义的是对齐方式,#pragma pack(1)就是以1字节为单位对齐,那就是本来占用的字节,sizeof(char)=1,在32位系统中sizeof(int)=4,结果就为5;,#pragma pack(2)就是以两字节对齐,本来是占用5位,不过为了对齐要空出一位。
4A,在windows系统中,栈从高地址向低地址分配,因此这个程序中栈的结果是:a1,a2[3],a2[2],a2[1],a2[0],a3(从高地址到低地址),memset(a2,0x2, 5)是将a2的5个元素都赋值为2,但是a2就4个元素,这时a1就是实际上的a[4],故a1被改为2,所以a1+a3=8.