| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1028 人关注过本帖
标题:[求助]大家看看这个C程序错在哪里?
只看楼主 加入收藏
hepgcy
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-1-4
收藏
 问题点数:0 回复次数:13 
[求助]大家看看这个C程序错在哪里?
最近刚学C语言,一个关于2维数组靠边之和,

#include<stdio.h>
main()
{int a[3][3],sum=0;
int i,j;
printf("enter:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
if(i==0||i==2||j==0||j==2)
sum+=a[i][j];
printf("sum=%6d\n",sum);
}

语法没有错误,结果错误,大家帮忙看看!
搜索更多相关主题的帖子: include C语言 
2007-04-26 17:56
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}

在for的循环当中,只要有2个以上分号,就要加大括号

for()括号中的分号也算是语句

注意:过去在旧的C语言编译器可以通过这样的代码:

for(;;)
for(;;)

它会认为第二个for是嵌在第一个for里

但是新的C标准是不允许的(老谭的书用的for不是标准的结构)

for(;;)
for(;;)

被认为顺序结构,而不是循环结构

自我放逐。。。
2007-04-26 18:04
hepgcy
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-1-4
收藏
得分:0 
谢LS兄弟,可是结果为0
我把if(i==0||i==2||j==0||j==2)
换成for(i=0;i<3;i++)求对角线之和,
输入1 2 3 4 5 6 7 8 9
结果15,对的
是不是if(i==0||i==2||j==0||j==2)
不对啊?
2007-04-26 18:17
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
以下是引用hepgcy在2007-4-26 18:17:25的发言:
谢LS兄弟,可是结果为0
我把if(i==0||i==2||j==0||j==2)
换成for(i=0;i<3;i++)求对角线之和,
输入1 2 3 4 5 6 7 8 9
结果15,对的
是不是if(i==0||i==2||j==0||j==2)
不对啊?

没明白你的意思

你把题目给帖出来看看


自我放逐。。。
2007-04-26 18:21
vistayulei
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-4-24
收藏
得分:0 

我也认为是那里不对
因为我们所学的 C语言没有在一个括号中同时对两个变量赋予条件表达式的(for 语句除外,for 语句那也是赋初值,而不是两个条件表达式)
if(i==0||i==2||j==0||j==2)
sum+=a[i][j];
printf("sum=%6d\n",sum);你把题目弄出来让大家看看

2007-04-26 18:35
vistayulei
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-4-24
收藏
得分:0 
说的清楚些,就是i和j好像不能同时出现在一个if()的括号内
2007-04-26 18:37
hepgcy
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-1-4
收藏
得分:0 
题目:求3*3二维数组的靠边之和,方法其实有比较多,不过不知道上面的错哪里了!
[QUOTE]
这个是求3*3矩形对角线元素之和,程序正确
#include<stdio.h>
main()
{int a[3][3],sum=0;
int i,j;
printf("enter:\n");
{
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<3;i++)
sum+=a[i][i];
printf("sum=%6d\n",sum);
}

运行:输入1 2 3 4 5 6 7 8 9 sum=15
[/QUOTE]

怎么用简便的方法求3*3二维数组的靠边之和
我把for(i=0;i<3;i++)换成if(i==0||i==2||j==0||j==2),求的结果为sum=0

2007-04-26 18:57
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 

我明白了

现在跟你说为什么你用if(i==0||i==2||j==0||j==2)是错的

我们先写一个3*3的矩阵

a b c
d e f
g h k

我们假设i==0 那么结果是 a+b+c

i==2 g+h+k

j==0 a+d+g

j==2 c+f+k

看起来没有错
但是你下边的语句就出问题了
if(i==0||i==2||j==0||j==2)
sum+=a[i][j];

你用的方法是确定了单个的i或者j的值
换句话说是
你只确定了
sum+=a[0][j]

你没有确定它的列!结果肯定就不是你想要的值了!


自我放逐。。。
2007-04-26 19:10
fengyunwu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-4-26
收藏
得分:0 
楼上的都在乱说,可不要误导了楼主啊。if(i==0||i==2||j==0||j==2)这一句根本没错,不论是在语法还是逻辑上。楼主的程序是想求一个三维数组的在边上的各元素之和。也就是数组中的元素a[i][j]只要满足i=0或j=2,就是边上的元素。再求和就得到结果。楼主的原程序错在哪呢?错在两个for后面少一个{ },这样就对了。
#include<stdio.h>
main()
{int a[3][3],sum=0;
int i,j;
printf("enter:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{ scanf("%d",&a[i][j]);
if(i==0||i==2||j==0||j==2)
sum+=a[i][j];}
printf("sum=%6d\n",sum);
}
我调试了,输入1至9,求得的是40。就是数组边上元素之和。
2007-04-26 21:38
fengyunwu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-4-26
收藏
得分:0 
我QQ312374585,欢迎大家一起探讨交流。
2007-04-26 21:41
快速回复:[求助]大家看看这个C程序错在哪里?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042430 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved