初级c++问题 这个输出结果是代表什么?

inta[10]={0};for(inti=1;i<10;i++)a[i]=i;cout<<a[i]<<endl;1... int a[10]={0};
for(int i=1;i<10;i++)
a[i]=i;
cout<<a[i]<<endl;
1
展开
 我来答
o盘盘o
2011-01-20 · TA获得超过232个赞
知道答主
回答量:26
采纳率:0%
帮助的人:0
展开全部
不同意一楼的说法,循环结束后变量i依然存在。问题在于不存在a[i]的数组指针超出了a[]原先分配的内存长度。

按现在的代码这个输出应该一个无意义的乱码或者数字。
首先定义了一个数组,一共10个数,每个数都是0。
然后通过循环将第2个数赋值为1,第3个数赋值为2,一直到第10个数赋值为9。
问题来了,经过第9次循环后,i的值经过i++已经是10了,不满足i<10的条件,循环结束。这个时候输出a[i]也就是a[10],是没有意义的。因为这个数组只有10个数,只有a[0],a[1]....a[9]。不存在a[10],如果强行输出a[10],只会输出数组指针在内存中的下一个单元的内容,对于程序本身来说是无意义的。

如果将代码稍微修改一下,将a[i]=i;和cout<<a[i]<<endl;都作为循环的内容:
int a[10]={0};
for(int i=1;i<10;i++)
{
a[i]=i;
cout<<a[i]<<endl;
}
这样的话就有意义了,相当于每次循环的都输出一次,那么将依次输出a[1],a[2]...a[9].每个数字之间有个回车(因为有<<endl)。如下:
1
2
3
4
5
6
7
8
9

再来回答楼主最后一个问题,1245120代表什么?1245120代表的是你的内存中,a[]数组所占的内存空间的下一个单元里的内容,然后转换成int整型后是1245120。a[]数组所占的内存空间的下一个单元里的内容是什么?谁也不知道,对于这个程序来说已经没有意义了。而且不同的计算机运行这段程序得到的结果都不一样,我刚才试了一次,我的输出结果就是1365420。

另外2楼乱复制了段不知道从哪来的代码,疑惑。。。
善良柠檬小伙
2011-01-20 · TA获得超过997个赞
知道答主
回答量:364
采纳率:0%
帮助的人:298万
展开全部
有几个问题,改了一下,加了详细的注释,能输出结果:
#include <stdio.h>
#include <math.h>
void main()
{
double a=0,b=0,c=0,d=0,e=0,f=0,g=0,k=0,t=0,y1=0,y2=0,z1=0,z2=0,p=0,q=0,i=0,x1=0,x2=0,x3=0;//double改为float,并初始化
printf("Please enter a,b,c,d\n");//把输出操作移到计算之前
scanf("%lf,%lf,%lf,%lf",&a,&b,&c,&d);//把%f改为%lf,用于输入double数据
e=b*b-3*a*c;
f=b*c-9*a*d;
g=c*c-3*b*d;
t=f*f-4*e*g;
i=c*c-4*b*d;
e=k*k*k;
q=(2*b*e-3*a*f)/(2*k*k);
p=(acos(q))/3;
y1=(b*e+(3*a*(-f+sqrt(t))))/2;
y2=(b*e+(3*a*(-f-sqrt(t))))/2;
y1=z1*z1*z1;
y2=z2*z2*z2;
// printf("Please enter a,b,c,d\n");//去掉这2行,已经移到前面了
// scanf("%f,%f,%f,%f",&a,&b,&c,&d);
printf("The equation ");
if (a==0)//=改为==,下面还有几个相同的操作,这是你出问题的主要原因
{
if (i>0)
{
x1=(-c+sqrt(i))/(2*b);
x2=(-c-sqrt(i))/(2*b);
printf("has two real roots:%f and %f\n",x1,x2);
}
else if (i==0)//=改为==
printf("has a real root:%f\n",-c/(2*b));
else
printf("has no real root");
}
else if (e==f && e==0)//=改为==
printf("has a real root:%f\n",-c/b);
else if (t>0)
printf("has a real root:%f\n",(-b-z1-z2)/(3*a));
else if (t==0)//=改为==
printf("has two real roots:%f and %f\n",(-b/a)+(f/e),-f/(2*e));
else
{
x1=(-b-2*k*k*cos(p))/(3*a);
x2=(-b+k*(cos(p)+sqrt(3)*sin(p)))/(3*a);
x3=(-b+k*(cos(p)-sqrt(3)*sin(p)))/(3*a);
printf("has three real roots:%f and %f and %f\n",x1,x2,x3);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yashiro1204
2011-01-19 · 超过22用户采纳过TA的回答
知道答主
回答量:131
采纳率:0%
帮助的人:84.3万
展开全部
for循环执行完毕之后i就不存在了,a[i]无法引用。程序错误退出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式