| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 506 人关注过本帖
标题:一起来看c循环
只看楼主 加入收藏
☆网★杰☆
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2009-5-1
结帖率:100%
收藏
 问题点数:0 回复次数:3 
一起来看c循环
各位,我真的弄了好长时间也没有做出来....
我想实现任何两个矩阵的相乘(当然两矩阵满足相乘条件...)
先谢谢各位了...................
2009-10-23 12:35
farss
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2008-6-9
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int main()
{
    int *A,*B,*C;
    int M,N,P;
    int i,j,k,Temp;
    printf("请输入矩阵A的维数(M,N): \n");
    printf("M= ");
    scanf("%d",&M);
    printf("N= ");
    scanf("%d",&N);
    A = (int*)malloc(M*N*sizeof(int));/* 动态配置一维数组 */  
    printf("[请输入矩阵A的各个元素]\n");
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
        {
            printf("a%d%d=",i,j);
            scanf("%d",&A[i*N+j]);
      }
    printf("请输入矩阵B的维数(N,P): ");
    printf("\nN= ");
    scanf("%d",&N);
    printf("P= ");
    scanf("%d",&P);
    B = (int*)malloc(N*P*sizeof(int));/* 动态配置一维数组 */  
    printf("[请输入矩阵B的各个元素]\n");
    for(i=0;i<N;i++)
        for(j=0;j<P;j++)
        {
            printf("b%d%d=",i,j);
            scanf("%d",&B[i*P+j]);
        }
    C = (int*)malloc(M*P*sizeof(int));/* 动态配置一维数组 */   
    if(M<=0||N<=0||P<=0)
    {
        printf("[错误:维数M,N,P必须大于0]\n");
        return;
    }
    for(i=0;i<M;i++)
        for(j=0;j<P;j++)
        {
            Temp = 0;
            for(k=0;k<N;k++)
                Temp = Temp + A[i*N+k]*B[k*P+j];
            C[i*P+j] = Temp;
        }
    printf("[AxB的结果是]\n");
    for(i=0;i<M;i++)
    {
        for(j=0;j<P;j++)
            printf("%d\t",C[i*P+j]);/* 打印出C矩阵内容 */  
        printf("\n");
    }
    system("pause");
    return  0;
}
2009-10-24 20:20
yangxiaochao
Rank: 2
等 级:论坛游民
帖 子:34
专家分:34
注 册:2009-10-9
收藏
得分:0 
for(i=1;i<=n;i++)
 for(j=1;j<n;j++){
  c[i][j]=0;
   for(k=1;k<=n;k++)
    c[i][j]+=a[i][k]*b[k][j];
}
给你个核心代码!
2009-10-24 20:29
apwh7550
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:106
注 册:2009-10-17
收藏
得分:0 
#include <iostream>
using namespace std;
#include <stdio.h>
/*
*    任意两个矩阵相乘
*    数组采用静态分配,暂定为小于100维的矩阵相乘!
*/
int main()
{
    double a[100][100]={0};
    double b[100][100]={0};
    double res[100][100]={0};
    int line1,col1,line2,col2;//矩阵的行和列
    cout<<"请顺序输入您要相乘的矩阵的行数和列数:"<<endl;
    cout<<"顺序:矩阵1的行数,列数;矩阵2的行数,列数。"<<endl;
    cin>>line1>>col1>>line2>>col2;
    if(line1>100||col1>100)
    {
        cout<<"输入的维数过大!"<<endl;
        return 0;
    }
        if(line1==0||col1==0)
    {
        cout<<"矩阵不能为0维!"<<endl;
        return 0;
    }
    if(line2!=col1)
    {
        cout<<"输入的两个矩阵无法相乘!"<<endl;
        return 0;
    }
    cout<<"请输入待乘的矩阵a,b"<<endl;
    cout<<"矩阵a"<<"*****"<<line1<<"行"<<col1<<"列:"<<endl;
    //输入待乘矩阵a,b
    for(int i=0;i<line1;i++)
        for(int j=0;j<col1;j++)
            cin>>a[i][j];
    cout<<"您输入的矩阵a如下:"<<endl;
    for(i=0;i<line1;i++)
    {
        for(int j=0;j<col1;j++)
            cout<<a[i][j]<<' ';
        cout<<endl;
    }
    cout<<"矩阵b"<<"*****"<<line2<<"行"<<col2<<"列:"<<endl;
    for(i=0;i<line2;i++)
        for(int j=0;j<col2;j++)
            cin>>b[i][j];
 
    cout<<"您输入的矩阵b如下:"<<endl;
    for(i=0;i<line2;i++)
    {
        for(int j=0;j<col2;j++)
            cout<<b[i][j]<<' ';
        cout<<endl;
    }
    //输出结果
    cout<<"相乘结果为"<<line1<<"行"<<col2<<"列"<<"的矩阵!"<<endl;
    cout<<"计算结果如下:"<<endl;
    for(i=0;i<line1;i++)
    {
        for(int j=0;j<col2;j++)
        {
            for(int k=0;k<col1;k++)
            {
                res[i][j]=res[i][j]+a[i][k]*b[k][j];
            }
            cout<<res[i][j]<<' ';
        }
        cout<<endl;
    }
    return 1;
}
2009-10-24 21:43
快速回复:一起来看c循环
数据加载中...
 
   



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

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