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

100分求解简单c语言题(1),该如何处理

2012-03-05 
100分求解简单c语言题(1)1)谁指点下,书上的习题(要步骤,人工计算)设有两个算法在同一机器上运行,其执行时

100分求解简单c语言题(1)
1)谁指点下,书上的习题(要步骤,人工计算)
设有两个算法在同一机器上运行,其执行时间分别为100n^2和2^n,要使前者快于后者,n至少要多大?
100n^2   <   2^n,   可这怎么解啊?
(to   ammana_babi(郑诤):
      不好意思,浪费你宝贵时间,能写出步骤(具体演算)(不要用程序解)?我这也有答案,但我需要的是步骤哦。)


2.1)malloc函数问题,malloc(0)分配0字节后,指针会指向哪里呢?谁解释下,可以这样用吗,因为数据结构中有空表,空栈的定义,所以才这样问。
#include   <stdio.h>
#include   <stdlib.h>


int   main(void)
{
int   *p;

printf( "%d\n ",   p);
if   ((p   =   (int   *)malloc(0))   ==   NULL)
{
exit(1);
}
printf( "%d\n ",   p);

return   0;
}


2.2)用malloc(0)分配0个字节,为什么该函数还返回了一个地址?
#include   <stdio.h>
#include   <stdlib.h>

int   main(void)
{
int   *p   =   NULL;

printf( "First:   %d\n ",   p);
if   ((p   =   (int   *)malloc(0))   ==   NULL)
{
printf( "内存不足\n ");
exit(1);
}
printf( "Second:   %d\n ",   p);

return   0;
}


2.3)详细介绍malloc和free的资料,书籍,教程,或个人经验,建议也行。

3)
#include   <stdio.h>
#include   <stdlib.h>

struct   MyStruct  
{  
char       ch;
double   di;
float     fj;
};


int   main(void)
{
//下面那句换成   (vc6.0)
//struct   MyStruct   stu   =   { 'A ',   12.34,   45.67};
//就会有警告,是不是又跟数据在内存中的存储形式有关?
struct   MyStruct   stu   =   { 'A ',   12.34,   45.67f};

return   0;
}

4)创建空链表,下面哪些方法是正确的呢?如果错,错在哪?(后面这个问题是重点,要回答哈)或者你认为应该怎么创建才是正确的?
1)
#include   <stdio.h>
#include   <stdlib.h>

struct   alist
{
int   data;
struct   alist   *next;
};
typedef   struct   alist   *link;


int   main(void)
{
link   L   =   NULL;//第一种,直接置为   NULL

return   0;
}

2)
#include   <stdio.h>
#include   <stdlib.h>

struct   alist
{
int   data;
struct   alist   *next;
};
typedef   struct   alist   *link;


int   main(void)
{
int   size;
link   L;

scanf( "%d ",   &size);//这里假设输入是   零

if   ((L   =   (link)malloc(size   *   sizeof(struct   alist)))   ==   NULL)
{
printf( "内存不足\n ");
exit(1);
}

return   0;
}

[解决办法]
malloc(0)返回一个地址,对应的内存大小是1个字节,这是特殊规定
[解决办法]


1) 一下子没想到有什么好方法,过会看看


2)

C99标准(ISO/IEC 9899:1999 (E))上说:

If the size of the space requested is zero, the behavior is implementationdefined:
either a null pointer is returned, or the behavior is as if the size were some
nonzero value, except that the returned pointer shall not be used to access an object.

如果所请求的空间大小为0,其行为由库的实现者定义:可以返回空指针,也可以让效果跟申请某个非0大小的空间一样,所不同的是返回的指针不可以被用来访问一个对象。




在vs2005上

void * p = malloc(0);

p得到一个地址,但不能用来存储任何东西,因为它大小为 0

至于上面有人说是 1,那就不知道了,或许某些编译器上是吧

在vs2005 大小是 0

void * p1 = malloc(0);
cout < <_msize(p1) < <endl;

返回大小 0

void * p1 = malloc(1);
cout < <_msize(p1) < <endl;

返回大小 1


一篇关于malloc free 的文章


3)

45.67 后面不带f的话,在vc中是 dobule 所以你把它赋给float会有警告

45.67f 就好了


4)

空连表,这样就可以了

link L = NULL;


.2

改改


int main(void)
{
int size;
link L = NULL;

scanf( "%d ", &size);//这里假设输入是 零

if (size > 0)
{
if ((L = (link)malloc(size * sizeof(struct alist))) == NULL)
{
printf( "内存不足\n ");
exit(1);
}
}
else
{
printf( "输入错误,连表大小必须大于0 ")
}

return 0;
}



[解决办法]
#include <stdio.h>
#include <stdlib.h>

struct MyStruct
{
char ch;
double di;
float fj;
};


int main(void)
{
//下面那句换成 (vc6.0)
//struct MyStruct stu = { 'A ', 12.34, 45.67};
//就会有警告,是不是又跟数据在内存中的存储形式有关?
struct MyStruct stu = { 'A ', 12.34, 45.67f};

return 0;
}


我一直都使用VC6.0
你的这个程序在VC6.0上应该这样写才行

#include <stdio.h>
#include <stdlib.h>

struct MyStruct
{
char ch;
double di;
float fj;
};


int main(void)
{
//下面那句换成 (vc6.0)
//struct MyStruct stu = { 'A ', 12.34, 45.67};
//就会有警告,是不是又跟数据在内存中的存储形式有关?
struct MyStruct stu = { 'A ', 12.34, (float)45.67};

return 0;
}

45.67这么写是默认的double类型
VC6.0里 带小数点的数字
没有严格声明的
都是默认的double类型

热点排行