k为什么会变(C语言)

[复制链接]
查看11 | 回复0 | 2009-1-30 06:28:38 | 显示全部楼层 |阅读模式
计算定积分x*x+x+1在(1,2)上的值,‘k’在其中一直是为1,为什么最后边为7了#include <stdio.h.>void main(){        int i;        double j,s=0,k=1;        double a[800];        for(i=0;i<=800;i++)                a=(k/800*i+1)*(k/800*i+1)+(k/800*i+1)+1;        for(i=0;i<800;i++){                j=(a+a[i+1])/2;                s=k/800*j+s;        }        printf("%lf",s);}

                                                                                                你定义了a[800],就是a[0]-a[799],但是在第一个循环里修改了a[800]的值,在内存里正好是k...把第一句for(i=0;i<=800;i++)里的<=改成<这么粗心                                       
提问者对答案的评价:

                                                                                                数组越界了 你最后的 k的地址可能与a数组中的元素地址一样了                                       

                                                                                                两个循环的数组下标都越界了;定义了a[800],就是a[0]~a[799],任何时候下标都不能超过0~799这个范围,否则下标就越界了(当然某些特殊情况除外)。比如:for(i=0;i<800;i++){ j=(a+a[i+1])/2当i=799时,a[i+1]就越界了。                                       

                                                                                                你传上去的程序有误,我运行了,搞不了。在说你的k不可能会变啊 ,你的k根本就没有被第二次赋值!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行