C语言 数组元素 强制类型转换

各位前辈好,本人是C语言初学者,最近碰到一道习题,代码如下:
#include <stdio.h>
int main(void){ double amounts[5]={1.1, 2.2, 3.3, 4.4, 5.5}; long dollars[5]; long cents[5]; for(unsigned int i=0;i<5;i++) dollars[i]=((long)(amounts[i]*1))/1; //此处一直显示不正确的数值,但是将1改成100后,结果却正常。

for(unsigned int i=0;i<5;i++) cents[i]=((long)(amounts[i]*100))%100;

for(unsigned int i=0;i<5;i++) printf("%c%ld.%ld\n",'$',dollars[i],cents[i]);

return 0;}

dollars数组,本来是打算直接强制类型转换来取整的,但是结果却是不正常的数字(见下图),请问是不是本人的类型转换的用法有误?

/*

$1.10

$2.20

$3.30

$4.40

$5.50

Press any key to continue

*/

#include <stdio.h>
int main(void) {
double amounts[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
long dollars[5];
long i,cents[5];
for(i = 0;i < 5;i++)
dollars[i] = amounts[i]; // 利用系统功能进行自动转换
for(i = 0;i < 5;i++)
cents[i] = ((long)(amounts[i]*100))%100;
for(i = 0;i < 5;i++)
printf("$%ld.%ld\n",dollars[i],cents[i]);
return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-12-30

C语言中如何把数组强制类型转换
在C语言中,若要将数组进行强制类型转换,关键在于明确定义数组元素的类型。例如,定义了两个数组a和b,分别作为字符数组和整型数组。通过循环赋值,可以将字符数组a的元素复制至整型数组b中。具体实现如下:首先,定义字符数组a和整型数组b,均为长度为10的数组。接着,使用for循环对数组元素进行赋值操作。

c语言的数组是如何进行强制转换的?
主要考察的是 强制类型转换 一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。在使用强制转换时应注意以下问题:1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。...

C语言 数组元素 强制类型转换
3.3, 4.4, 5.5};long dollars[5];long i,cents[5];for(i = 0;i < 5;i++)dollars[i] = amounts[i]; \/\/ 利用系统功能进行自动转换for(i = 0;i < 5;i++)cents[i] = ((long)(amounts[i]*100))%100;for(i = 0;i...

C语言中的sumint+=(int)xx[i]是什么意思?
把数组元素xx[i]内容强制转换为int类型后累加到sumint中。

c语言中为了精度把int强制转化为什么类型?
填50刚好循环25次 ..sum+=1\/___ 这里填 (float)i 类型不同会发生隐式转换牺牲精度 ..所以使用z(float)i,把int强制转换成float。int main(){ int i=2;float sum=1.0;while(i<=50){ bai sum+=1\/(float)i;i+=2;} printf("sum=%f\\n",sum);return 0;} ...

C语言的一个问题,求高手解
+ 1 ) = 1; 0000 0001 short类型是两个字节的,你强转成unsigned char *类型,地址加1则,则地址增加1个字节,所以 你打印的结果应该是这两个合起来的就是 0000 0001 0000 0000,结果应该这个256吧,学C语言不要太纠结于类型什么的,你要知道你真正操纵的是地址。

p = (int *)&a[0]; t = (int *)&a[9]; 这是什么意思,c语言中的。
p = (int *)&a[0];a是一个数组,a[0]表示数组第一个元素,&a[0]表示数组第一个元素在内存中的地址。(int *)是强制转换成int型指针类型。所以这个赋值语句是取a[0]在内存中的地址,并且把这个地址强制转换成int型指针值,赋给p。t = (int *)&a[9];和上面的完全类似。

c语言中的(int)x%3是什么意思?
先计算x%3,也就是x除以3后的余数..(int)是强制类型转换的意思..也就是说把这个整个表达式得出的值强制转换到int类型

c语言 强制类型转换 (unsigned char(*)(unsigned int))(PGM) 其中PGM...
函数指针类型,该指针能指向一个函数, 该函数返回值是unsigned char, 且带有一个unsigned int的参数。

C语言中char * arr[ ]和(char *)arr[ ]的区别
(char *)是把指针(无论是什么类型的,例如:int)强制转换成char类型的指针;char * arr[ ]是定义一个char类型的指针数组,数组里存的指针是指向char类型数据的;(char *)arr[ ] 没有这么写的吧;(char *)arr[ 0]、(char *)arr[1 ]等,是把数组arr的第0、第1个元素强制转换成char *...

相似回答