求解c语言程序题!

输入111222333,下面程序输出的结果是什么?#include<stdio.h>intf(intk){return++k;}intmain(){inta[3][3],... 输入1 1 1 2 2 2 3 3 3,下面程序输出的结果是什么?
# include <stdio.h>
int f(int k )
{ return ++k; }
int main()
{ int a[3][3],sum=0;
int i,j;
printf("please enrer data:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf("%d",&a[i][j]);}
for(i=1;i<4;i++)
sum=sum+a[i][i-1];
printf("sum=%d\n",f(sum));
return 0; }
希望能有大神帮忙解释一下整个程序的运行原则,为什么输出的结果是sum=11呢?
展开
 我来答
White_MouseYBZ
2018-07-01 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6528万
展开全部
错题——for(i=1;i<4;i++) sum=sum+a[i][i-1];这里当i==3时数组越界了,所以你得到的11是不确定的,换一台机器可能就不是11了。
追问
我们好几台电脑运行出来都是11,老师还给了一个答案是6,请问可以解释一下么
追答

我解释不了。因为越界后不同的机器有不同的表现,正确的代码结果只一种,错误代码的结果五花八门,最好的解释就是不确定。下面我运行一下看看是什么结果——

如果你有兴趣,可以把int a[3][3],sum=0;  int i,j;两行的前后顺序调换一下,一般会得出不同结果……

百度网友242a91c7f
2018-07-01 · 超过11用户采纳过TA的回答
知道答主
回答量:69
采纳率:44%
帮助的人:11.8万
展开全部
私信我私信我
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式