数据结构 习题 求详解

#include<stdio.h>#include<malloc.h>intmain(void){inti,n;doubles=1.3;doublex;double*p;... #include <stdio.h>
#include <malloc.h>

int main(void)
{
int i, n;
double s = 1.3;
double x;
double *p;

p = (double *)malloc(sizeof(double) * 100);
for (n = 0; n < 50; n++)
{
*(p + n) = s;
s += 2.9;
}

scanf("%lf", &x); //第18行代码
//完成代码将x插入到该顺序有序线性表中,要求该线性表依然有序
//注:已经写入了50个元素,再插入1个,就是51个元素
//begin

//end

//插入x后,输出该顺序有序线性表的内容
for (i = 0; i < 51; i++)
{
printf("%5.1f, ", p[i]);
if ((i + 1) % 10 == 0)
{
printf("\n");
}
}
return 0;
}

1、代码执行到第18行时,指针变量p所占用的内存单元地址是_____,指针变量p内存单元里的值是_____,p+23表达式表示的地址是_____,*(p+31)表达式表示的内存单元里的值是_____。
2、在begin及end之间完成插入x的代码。

求老师详解 以前C语言没有学得很好 特别是对于指针这一类 。
展开
 我来答
方鸿晖09
2013-09-24 · TA获得超过1008个赞
知道小有建树答主
回答量:225
采纳率:66%
帮助的人:104万
展开全部
#include <stdio.h>
#include <malloc.h>

int main(void)
{
int i, n;
double s = 1.3;
double x;
double *p;

p = (double *)malloc(sizeof(double) * 100);
for (n = 0; n < 50; n++)
{
*(p + n) = s;
s += 2.9;
}

scanf("%lf", &x); //第18行代码
//完成代码将x插入到该顺序有序线性表中,要求该线性表依然有序
//注:已经写入了50个元素,再插入1个,就是51个元素
//begin
for (n = 0; n < 50; )
{
if(x>=*(p + n)) n++;
else{ for(int j=49;j>=n;j--)
*(p+j+1)=*(p+j);
*(p+n)=x;
break;
}
}
//end

//插入x后,输出该顺序有序线性表的内容
for (i = 0; i < 51; i++)
{
printf("%5.1f, ", p[i]);
if ((i + 1) % 10 == 0)
{
printf("\n");
}
}
return 0;
}

1、代码执行到第18行时,指针变量p所占用的内存单元地址是__&p___,指针变量p内存单元里的值是__1.3___,p+23表达式表示的地址是_&p[23]____,*(p+31)表达式表示的内存单元里的值是__91.2___。
追问
能解释一下吗?
追答
p = (double *)malloc(sizeof(double) * 100);//申请存放100个double类型数据的存储空间,空间首地址赋值给指针变量p
//p = (double *)malloc(sizeof(double) * 100);相当于double a[100]; double *p; p=a;区别是前者是在程序运行时申请空间,而后者是在编译阶段。
for (n = 0; n =*(p + n)) n++;//因为递增有序,如果x的值大于等于当前位置的值,就和下一个位置的元素比较
else{ //x的值小于当前位置的值,说明当前位置就是x要插入的位置
for(int j=49;j>=n;j--)//因为是顺序表,要将当前位置的元素到第50个位置的元素依次后移一个位置,空出当前位置给要插入的元素x,要从第50个开始向后移动。
*(p+j+1)=*(p+j);
*(p+n)=x;//将x插入
break;
}
}
//end
龙石数据
2024-08-26 广告
在选择数据中台时,有几个关键事项需要注意:需求分析与业务匹配:不同的企业在数据处理、分析和应用的需求上各有差异,因此需要深入了解企业当前和未来的业务需求,确定数据中台需要支持的业务场景。技术架构与可扩展性:当下,数据量增长和技术更新迅速,数... 点击进入详情页
本回答由龙石数据提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式