数组,哪儿出错了

javaer_007 2013-05-23 03:21:01
#include<iostream>
#include<iomanip>
using namespace std;
int const N=100;
void calculate(int a[N][N],int b[N][N],int c[N][N],int,int,int);
int main(){
int a[N][N],b[N][N],c[N][N]={0};
int m,n,p;
cin>>m>>n;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
cin>>n>>p;
for(i=0;i<n;i++)
for(int j=0;j<p;j++)
cin>>a[i][j];
calculate(a,b,c,m,n,p);
for(i=0;i<m;i++){
for(int j=0;j<p;j++)
cout<<setw(5)<<c[i][j];
cout<<endl;
}
return 0;
}
void calculate(int a[N][N],int b[N][N],int c[N][N],int M,int N,int P){
for(int i=0;i<M;i++){
for(int j=0;j<P;j++)
for(int k=0;k<N;k++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
}
...全文
197 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-05-24
  • 打赏
  • 举报
回复
关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
lm_whales 2013-05-24
  • 打赏
  • 举报
回复
1) 这个函数里的N到底是常量还是变量???? void calculate(int a[N][N],int b[N][N],int c[N][N],int M,int N,int P){ for(int i=0;i<M;i++){ for(int j=0;j<P;j++) for(int k=0;k<N;k++) c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } 改成 void calculate(int a[N][N],int b[N][N],int c[N][N],int m,int n,int p){ for(int i=0;i<m;i++){ for(int j=0;j<p;j++) for(int k=0;k<n;k++) c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } int main(){ int a[N][N],b[N][N],c[N][N]={0}; int m,n,p; //cin>>m>>n; 矩阵的乘积,要求A的列数B的行数,必须相等。所以不能分两次输入。 cin>>m>>n>>p; for(int i=0;i<m;i++) for(int j=0;j<n;j++) cin>>a[i][j]; //cin>>n>>p; for(i=0;i<n;i++) for(int j=0;j<p;j++) //cin>>a[i][j]; 这次应该输入矩阵B了。 cin>>b[i][j]; calculate(a,b,c,m,n,p); for(i=0;i<m;i++){ for(int j=0;j<p;j++) cout<<setw(5)<<c[i][j]; cout<<endl; } return 0; } PS: 第一,过与粗心大意。 第二,函数参数和常量不应该同名。 第三,当m,n,p 不等于N时,很多空间没有利用,你这个只是表面的矩阵相乘 , 第四, 输入的m,n,p必须小于N,不然会出错。 第五,二维数组,作为参数传递,列数是固定的,行数可以不受限制。 第六,固定大小的数组作为矩阵,计算并不合适。
无事所所 2013-05-23
  • 打赏
  • 举报
回复
c数组没有初始化吧....
lunat 2013-05-23
  • 打赏
  • 举报
回复
看这种没有格式凌乱的代码……浪费脑细胞。
hugett 2013-05-23
  • 打赏
  • 举报
回复

#include<iostream>
#include<iomanip>
using namespace std;
int const N=100;
void calculate(int a[N][N],int b[N][N],int c[N][N],int,int,int);
int main(){
	int a[N][N],b[N][N],c[N][N]={0};
	int m,n,p, i, j;//把i,j的定义放到前边。。
	cin>>m>>n;
	for(i=0;i<m;i++)
		for(j=0;j<n;j++)
			cin>>a[i][j];
	cin>>n>>p;
	for(i=0;i<n;i++)
		for(int j=0;j<p;j++)
			cin>>a[i][j];
	calculate(a,b,c,m,n,p);
	for(i=0;i<m;i++){
		for(int j=0;j<p;j++)
			cout<<setw(5)<<c[i][j];
		cout<<endl;
	}
	return 0;
}
void calculate(int a[N][N],int b[N][N],int c[N][N],int M,int N,int P){
	for(int i=0;i<M;i++){
		for(int j=0;j<P;j++)
			for(int k=0;k<N;k++)
				c[i][j]=c[i][j]+a[i][k]*b[k][j];
	}	
}
Shana2013 2013-05-23
  • 打赏
  • 举报
回复
cin>>n>>p;
for(i=0;i<n;i++)
for(int j=0;j<p;j++)
cin>>a[i][j];//这里是不是要改成b[i][j]呀
赵4老师 2013-05-23
  • 打赏
  • 举报
回复
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧