关于数组的问题
本帖最后由 1b1n1m 于 2017-3-25 19:16 编辑我要编写一个程序,创建两个包含8个元素的double数组,先手动输入第一个数组的全部元素,然后第二个数组的第一个元素等于第一个数组的第一个元素,第二个数组的第二个元素等于第一个数组的前两个元素之和,以此类推。在实现的时候为啥非要声明一个中间变量先把数组一对应的元素之和赋给中间变量,再把中间变量的值赋给数组二对应的元素。如果直接将数组一的元素相加后赋给数组二对应的元素就会出现类似越界的问题?我数组已经初始化了。 把代码贴出来,这样说根本无法分析你的问题出来哪里 不用临时变量的话,是如何做到的,求教 单步调试,看在哪步出现问题。 本帖最后由 1b1n1m 于 2017-3-25 19:27 编辑
#include <stdio.h>
int main()
{
double ar_d1={0},ar_d2 = {0},temp = 0;
int i,j;
printf("please enter the numbers:\n");
for(i = 0; i < 8; i++)
{
printf("Enter ar_d1[%d]:\n",i);
scanf("%lf",&ar_d1);
}
for(i = 0; i < 8; i++)
{
for(j = i;j <= 0; j--)
{
temp += ar_d1;
}
ar_d2 = temp;
}
for(i = 0; i < 8; i++)
printf("%lf ",ar_d1);
printf("\n");
for(i = 0; i < 8; i++)
printf("%lf ",ar_d2);
for(i = 0; i < 8; i++)
{
for(j = i;j <= 0; j--)
{
ar_d2 += ar_d1;
}
}
for(i = 0; i < 8; i++)
printf("%lf ",ar_d1);
printf("\n");
for(i = 0; i < 8; i++)
printf("%lf ",ar_d2);
printf("\n");
return 0;
} 1、第12行是否少一个“&”;
2、第17到21行这个循环有问题; //不知道对不对 ,偶也是小白 这个是我改正之后的代码,出问题的地方我都写到注释里面了
int main()
{
double ar_d1={0},ar_d2 = {0},temp = 0;
int i,j;
printf("please enter the numbers:\n");
for(i = 0; i < 8; i++)
{
printf("Enter ar_d1[%d]:\n",i);
scanf("%lf",&ar_d1); //这个位置应该传入地址
}
for(i = 0; i < 8; i++)
{
//这个时候的temp已经等于前面几个的和了,这样再加前面几个会造成重复加
//可以先将temp清0 或者直接该一下
//for(j = i;j <= 0; j--) //如果要前几项想加,这块j 应该 >= 0
//{
// temp += ar_d1;
//}
temp += ar_d1;
ar_d2 = temp;
}
for(i = 0; i < 8; i++)
printf("%lf ",ar_d1);
printf("\n");
for(i = 0; i < 8; i++)
printf("%lf ",ar_d2);
//进行下次循环之前先清空一下内存
for(i = 0; i < 8; i++)
{
// for(j = i;j <= 0; j--) //还是这个问题应该是 j>=0
for(j = i;j >= 0; j--)
{
ar_d2 += ar_d1;
}
}
for(i = 0; i < 8; i++)
printf("%lf ",ar_d1);
printf("\n");
for(i = 0; i < 8; i++)
printf("%lf ",ar_d2);
printf("\n");
return 0;
} language 发表于 2017-3-22 14:48
这个是我改正之后的代码,出问题的地方我都写到注释里面了
int main()
{
/*创建两个包含8个元素的int类型的数组,让用户输入第一个数组的元素,然后将第二个数组的第一个元素赋值为第一> 个数组的第一个元素,将第二个数组的第2个元素赋值为第一个数组前两个元素的和,第二个数组的第三个元素赋值为第
一个数组前3个元素之和以此类推*/
2
3
4 #include<stdio.h>
5
6 int main()
7 {
8 int ar1 = {0},ar2 = {0},i,j,temp;
9
10 for(i = 0; i < 8; i++)
11 {
12 printf("Please enter the ar1[%d]:\n",i);
13 scanf("%d",&ar1);
14 }
15 //第一种直接相加后赋值给ar2
16 for(i = 0; i < 8; i++)
17 {
18 for(j = i; j >= 0; j--)
19 ar2 += ar1;
20 }
21 //输出第一种赋值的结果;
22 for(i = 0; i < 8; i++)
23 printf("%d ",ar1);
24 printf("\n");
25 for(i = 0; i < 8; i++)
26 printf("%d ",ar2);
27 printf("\n");
28 //第二种通过中间变量temp给ar2赋值
29
30 for(i = 0; i < 8; i++)
31 {
32 temp = 0;
33 for(j = i; j >= 0; j--)
34 {
35 temp += ar1;
36 }
37 ar2 = temp;
38 }
39 //输出第二种赋值方式的结果
40 for(i = 0; i < 8; i++)
41 printf("%d ",ar1);
42 printf("\n");
for(i = 0; i < 8; i++)
26 printf("%d ",ar2);
27 printf("\n");
我之前是在vc++6.0上面编译的,出现了两种不同的结果,后来使用vim+gcc编译就是一样的了。这个可能和编译器有关系吧。 你确定两种是一样的?还是说你分两次执行,每次都注释另外一种?
在执行第二种的时候,第一种得到的数组没有清0,这样执行第二中方法的时候是在第一的到的基础之上的结果,这样两次输出的结果肯定是不一样的。
而且你这段代码是没有报错的代码吗?
我在编译的时候发现了这样几处错误:
13行:改为scanf("%d",&ar1);
23行:改为printf("%d ",ar1);
26行:改为printf("%d ",ar2);
37行:改为ar2 = temp
41行:改为printf("%d ",ar1);
44行:改为printf("%d ",ar2); 不好意思啊,这个我看错了,两次确实是一样的,第二次有一个对每个元素重新赋值的过程,我没有注意到{:10_269:}
页:
[1]