//创建两个8元素的double数组,使用一个循环来让用户键入第一个数组的8个元素的值。
//程序把第二个数组的元素设置为第一个数组元素的累积和。
//使用一个循环来显示两个数组中的内容。
#include <stdio.h>
#define SIZE 8
int main (void)
{
int i;
double arr1[SIZE];
double arr2[SIZE];
//完成第一个数组的输入
for (i=0;i<SIZE;i++)
{
printf("please enter a number:");
scanf("%lf",&arr1[i]);
}
//完成第二个数组的元素设置
arr2[0]=arr1[0];
for (i=1;i<SIZE;i++)
arr2[i]=arr2[i-1]+arr1[i];
//输出第一个数组的内容
for (i=0;i<SIZE;i++)
{
printf("%8.2lf",arr1[i]);
}
printf("/n");
//输出第二个数组的内容
for (i=0;i<SIZE;i++)
{
printf("% 8.2f ",arr2[i]);
}
printf("/n");
return 0;
}
对于该程序,有两个问题:(一个已解决,一个未解决)
1、关于double数据类型的说明符:是%lf而不是%f(我以前一直都以为是后者)。Scanf()是根据语句中给出的转义字符来对输入的内容进行转换的。用%f,已经把它说成是float型的,而却把输入的数据放到double类型里。它们的字节长度是不一样的,就会出现剩余字节没有数了,所以造成程序运行结果相当紊乱。而在输出时仍然可以写%f(在不影响精度的情况下),因为输出时会把double截断成float型,所以最好还是使用%lf。
2、关于题目中要求用一个循环输出两个数组的内容。我想了很久,不知道怎么弄。难道是题目理解错了?