双精度C程序设计中的指针
好吧,这是我必须做的,但我不能让它工作: a) 更改为浮点而不是整数。并将0.3指定为“u”的起始值 b) 使用双精度而不是整数。将0.3x10^45作为“u”的起始值 c) 使用字符而不是整数。将“u”的起始值指定为“C”双精度C程序设计中的指针,c,pointers,double,precision,C,Pointers,Double,Precision,好吧,这是我必须做的,但我不能让它工作: a) 更改为浮点而不是整数。并将0.3指定为“u”的起始值 b) 使用双精度而不是整数。将0.3x10^45作为“u”的起始值 c) 使用字符而不是整数。将“u”的起始值指定为“C” #包括 主要() { INTU=3; INTV; int*pu; int*pv; pu=&u; v=*pu; pv=&v; printf(“\nu=%d&u=%X pu=%X*pu=%d”,u,&u,pu,*pu); printf(“\n\nv=%d&v=%X pv=%X*
#包括
主要()
{
INTU=3;
INTV;
int*pu;
int*pv;
pu=&u;
v=*pu;
pv=&v;
printf(“\nu=%d&u=%X pu=%X*pu=%d”,u,&u,pu,*pu);
printf(“\n\nv=%d&v=%X pv=%X*pv=%d”,v,&v,pv,*pv);
}
如果有人能修改我的代码来完成上述工作,我将不胜感激。谢谢这个问题正在测试一些东西。首先你知道你的类型吗?您应该知道浮点数字是用
float
声明的,双精度数字是用double
声明的,字符是用char
声明的
其次,您需要知道如何为这些不同的类型分配文字值。对于float literal,您可能需要使用0.3f
,因为如果没有该后缀,默认情况下它将是双精度的(尽管在本文中它不会有任何区别)。对于double,您需要知道如何使用科学记数法(文字值应为0.3e45
)。我希望这个字对你来说是相当明显的
最后,希望您了解printf
格式规范中使用的各种类型字符。单精度和双精度数字都使用相同的类型字符,但您可以根据需要选择%e
、%f
或%g
。我倾向于使用%g
作为一个很好的通用选择,但我的猜测是,他们迫使您使用%e
作为双精度(因为这迫使使用科学记数法),并且可能使用%f
作为浮点-这取决于您所学的内容。对于您使用的字符%c
另外,请注意,您应该只替换格式字符串中的
%d
类型字符。%X
值用于输出指针的十六进制表示形式(&u
和pu
)。指针不会仅仅因为所指向的类型已更改而更改为浮点值或字符-当您将其写入时,地址始终是整数。您期望的结果是什么?你得到了什么?这段代码会崩溃吗?我想修改它,不是为了期望某些结果,而是为了演示双精度的使用。如果没有预期的结果,那么如何评估代码的“正确性”?OP的教授/助教将评估代码的“正确性”。@MartinJames对于某种结果,一定还有一些预期的标准。“演示双精度的使用”不是一个精心设计的编程问题或作业<代码>双d=1.234代码>是使用双精度的演示
#include <stdio.h>
main ()
{
int u = 3;
int v;
int *pu;
int *pv;
pu = &u;
v = *pu;
pv = &v;
printf("\nu=%d &u=%X pu=%X *pu=%d", u, &u, pu, *pu);
printf("\n\nv=%d &v=%X pv=%X *pv=%d", v, &v, pv, *pv);
}