C 的面试题哦~(6)

2008-02-23 05:32:18来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


写出求每个Customer的Revenue总和的SQL语句。

建表
create table customer
(
ID int primary key,Name char(10)
)

go

create table [order]
(
ID int primary key,CustomerID int foreign key references customer(id) , Revenue float
)

go

--查询
select Customer.ID, sum( isnull([Order].Revenue,0) )
from customer full join [order]
on( [order].customerid=customer.id )
group by customer.id

--------------------------------------------------------------------------
34.请指出下列程式中的错误并且修改
void GetMemory(char *p){
p=(char *)malloc(100);
}
void Test(void){
char *str=NULL;
GetMemory=(str);
strcpy(str,"hello world");
printf(str);
}

A:错误--参数的值改变后,不会传回
GetMemory并不能传递动态内存,Test函数中的 str一直都是 NULL。
strcpy(str, "hello world");将使程式崩溃。

修改如下:
char *GetMemory(){
char *p=(char *)malloc(100);
return p;
}
void Test(void){
char *str=NULL;
str=GetMemory(){
strcpy(str,"hello world");
printf(str);
}

方法二:void GetMemory2(char **p)变为二级指针.
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}

--------------------------------------------------------------------------
35.程式改错
class mml
{
private:
static unsigned int x;
public:
mml(){ x ; }
mml(static unsigned int &) {x ;}
~mml{x--;}
pulic:
virtual mon() {} = 0;
static unsigned int mmc(){return x;}
......

};
class nnl:public mml
{
private:
static unsigned int y;
public:
nnl(){ x ; }
nnl(static unsigned int &) {x ;}
~nnl{x--;}
public:
virtual mon() {};
static unsigned int nnc(){return y;}
......
};

代码片断:
mml* pp = new nnl;
..........
delete pp;


A:
基类的析构函数应该为虚函数
virtual ~mml{x--;}

--------------------------------------------------------------------------
36.101个硬币100真、1假,真假区别在于重量。请用无砝码天平称两次给出真币重还是假币重的结论。

答:
101个先取出2堆,
33,33
第一次称,假如不相等,说明有一堆重或轻
那么把重的那堆拿下来,再放另外35个中的33
假如相等,说明假的重,假如不相等,新放上去的还是重的话,说明假的轻(不可能新放上去的轻)

第一次称,假如相等的话,这66个肯定都是真的,从这66个中取出35个来,和剩下的没称过的35个比
下面就不用说了

方法二:
第3题也能够拿A(50),B(50)比一下,相同的话拿剩下的一个和真的比一下。
假如不相同,就拿其中的一堆。比如A(50)再分成两堆25比一下,相同的话就在
B(50)中,不相同就在A(50)中,结合第一次的结果就知道了。

--------------------------------------------------------------------------
37.static变量和static 函数各有什么特点?

答:
static变量:在程式运行期内一直有效,假如定义在函数外,则在编译单元内可见,假如在函数内,在在定义的block内可见;
static函数:在编译单元内可见;

--------------------------------------------------------------------------
38.用C 写一个输入的整数,倒着输出整数的函数,需要用递归方法 ;

答:
void fun( int a )
{
printf( "%d", a );
a /= 10;
if( a <=0 )return;

fun( a );
}

--------------------------------------------------------------------------
39.写出程式结果:
void Func(char str[100])
{
printf("%d\n", sizeof(str));
}

答:
4
分析:
指针长度

--------------------------------------------------------------------------
40.int id[sizeof(unsigned long)];
这个对吗?为什么??

答:

这个 sizeof是编译时运算符,编译时就确定了
能够看成和机器有关的常量。


本文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,连同容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。

1、 sizeof应用在结构上的情况

请看下面的结构:

struct MyStruct

{

double dda1;

char dda;

int type

};

对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许您会这样求:

sizeof(MyStruct)=sizeof(double) sizeof(char) sizeof(int)=13

但是当在VC中测试上面结构的大小时,您会发现sizeof(MyStruct)为16。您知道为什么在VC中会得出这样一个结果吗?

其实,这是VC对变量存储的一个特别处理。为了提高CPU的存储速度,VC对一些变量的起始地址做了"对齐"处理。在默认情况下,VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。下面列出常用类型的对齐方式(vc6.0,32位系统)。

类型
对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)

Char
偏移量必须为sizeof(char)即1的倍数

int
偏移量必须为sizeof(int)即4的倍数

float
偏移量必须为sizeof(float)即4的倍数

double
偏移量必须为sizeof(double)即8的倍数

Short
偏移量必须为sizeof(short)即2的倍数


各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍?/textarea>


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C : BIG5到GB

下一篇: 经典C语言程式设计100例41-50