设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1514|回复: 6
打印 上一主题 下一主题

[求助一个有关数组当作函数参数的问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 04:02:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请帮我看看这个程序问题在哪?
题:5个学生,4门课,要求主函数分别调用各函数实现:
(1)找出成绩最高的学生序号和课程;
(2)找出不及格课程的学生序号及其各门课的全部成绩;
(3)求全部学生各门课程的平均分数,并输出;
程序:
#include <iostream.h>
void findMax(int a[][4], int row,int col);
void findBad(int a[][4], int row,int col);
void average(int a[][4], int row,int col);
void main()
{
int array[5][4]={{88,67,48,91},
{61,65,37,77},
{92,81,73,60},
{51,55,60,60},
{77,63,70,80}};
findMax(array,5,4);
findBad(array,5,4);
average(array,5,4);
}
void findMax(int a[][4], int row,int col)
{
int r=0,c=0;
for(int i=0; i<row; i++)
for(int j=0; j<col; j++)
if(a[i][j]>a[r][c])
r=i,c=j;
cout <<"成绩最高的学生序号: " <<(r+1) <<" ";
for(int i=0; i<col; i++)
cout <<a[r][i]<<" ";
cout <<endl;
}
void findBad(int a[][4], int row,int col)
{
for(int i=0; i<row; i++)
for(int j=0; j<col; j++)
if(a[i][j]<60){
cout <<"有不及格课程的学生序号: " <<(i+1) <<" ";
for(int k=0; k<col; k++)
cout <<a[i][k] <<" ";
cout <<endl;
break;
}
}
void average(int a[][4], int row,int col)
{
double sum=0;
for(int i=0; i<row; i++)
for(int j=0; j<col; j++)
sum+=a[i][j];
cout <<"所有课程平均分数为: " <<sum/row/col <<endl;
}
2#
发表于 2009-11-3 04:02:59 | 只看该作者
以下是引用dachaoqichao在2006-8-3 22:52:28的发言:

请帮我看看这个程序问题在哪?
题:5个学生,4门课,要求主函数分别调用各函数实现:
(1)找出成绩最高的学生序号和课程;
(2)找出不及格课程的学生序号及其各门课的全部成绩;
(3)求全部学生各门课程的平均分数,并输出;
程序:
#include <iostream.h>
void findMax(int a[][4], int row,int col);
void findBad(int a[][4], int row,int col);
void average(int a[][4], int row,int col);
void main()
{
int array[5][4]={{88,67,48,91},
{61,65,37,77},
{92,81,73,60},
{51,55,60,60},
{77,63,70,80}};
findMax(array,5,4);
findBad(array,5,4);
average(array,5,4);
}
void findMax(int a[][4], int row,int col)
{
int r=0,c=0;
for(int i=0; i<row; i++)
for(int j=0; j<col; j++)
if(a[i][j]>a[r][c])
r=i,c=j;
cout <<"成绩最高的学生序号: " <<(r+1) <<" ";
for(int i=0; i<col; i++) //定义了i两次在同一的函数中只需去掉int
cout <<a[r][i]<<" ";
cout <<endl;
}
void findBad(int a[][4], int row,int col)
{
for(int i=0; i<row; i++)
for(int j=0; j<col; j++)
if(a[i][j]<60){
cout <<"有不及格课程的学生序号: " <<(i+1) <<" ";
for(int k=0; k<col; k++)
cout <<a[i][k] <<" ";
cout <<endl;
break;
}
}
void average(int a[][4], int row,int col)
{
double sum=0;
for(int i=0; i<row; i++)
for(int j=0; j<col; j++)
sum+=a[i][j];
cout <<"所有课程平均分数为: " <<sum/row/col <<endl;
}

如果你自己运行一下的话,很容易就能发现啊
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 04:03:01 | 只看该作者
谢谢2楼的朋友的帮忙,这个程序编出来我也运行过了,只是出现了错误提示error C2374: 'i' : redefinition; multiple initialization和see declaration of 'i'。不太清楚是什么意思。现在在你的提示下,知道了。在这里谢谢了!
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 04:03:02 | 只看该作者
恩,在vc++6.0中编译确实有这样的问题
但在标准c++中这样是可以的呀
两个i都是各自for循环中的局部变量
所以没什么问题啊
这是为什么啊?
难道vc++6.0是标准c++前的产品?
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 04:03:03 | 只看该作者
用DEV C++不会有这种问题
估计是编译器做过优化了
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-3 04:03:04 | 只看该作者
不用管他
估计是BUG
就这个有这样情况
VC++ BUG很多
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-3 04:03:05 | 只看该作者
是編譯器判斷 {} 作用域的問題

對於 for 循環
for(......)
{
}

這個大括弧並不包括循環變數 int i, VC 就是根據這個來判斷變數作用域的,

對於樓主的問題, 在
for 前後加上 {} 就可以了
-----------------------------------------------------------------------------------------------------
for(int i=0..........)
.......;

{
for(int i=0......)
.......;
}
這樣就可以明確作用域了
回复 支持 反对

使用道具 举报

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

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 12:28 , Processed in 0.066138 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表