首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-04 
C语言考试的一些问题!!!急问要考试了,请各位强人帮忙做一些题目,并解释下为什么,谢谢.1.【】ER模型可以转换

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.


[解决办法]
2 B
因为 3 2 是两个int,先计算 3/2 =1
于是最后为2

3
char 1byte
32位系统 int 相当于 long 是4byte
加上#pragma pack(1) 1字节对齐,就没有附加
2字节对齐,这样char占用了2byte 于是就是 6byte了

4
内存
a1=5
a3 a2 a1
| |05
a3=6
06| |05
memset(a2,0x2,5) // 越出范围污染到a1了
06|02|02|02...

VC下debug,可以在watch窗写 &a1,m &a2,m &a3,m 来查看内存 :)


热点排行