| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 662 人关注过本帖
标题:for循环的应用
只看楼主 加入收藏
御茗天香
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-22
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
for循环的应用
题目 求矩阵的笛卡尔积
要求:通过文件读取两个矩阵,计算笛卡尔乘积,并存入另一个文件中。
怎样用for循环解决这个问题
搜索更多相关主题的帖子: 笛卡尔 
2011-05-22 22:17
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:4 
楼主,帮你找了个,看看
#include <stdio.h>
#include <stdlib.h>
 
/* 给 int 类型定义别名 datatype */
typedef int datatype;
 
/* 函数声明部分 */
datatype** Create(int m, int n);
void Reset(datatype**, int, int);
void Input(datatype**, int, int);
void Output(datatype**, int, int);
void MatrixMutiply(datatype**, datatype**, datatype**);
void MatrixFree(datatype** , int);
 
/* 定义三个矩阵的行列大小 */
int row_a, col_a;
int row_b, col_b;
int row_c, col_c;
 
/* 定义文件指针 */
FILE *fp;
 
int main()
{
        int i;
        datatype **a, **b, **c;
 
        /* 以只读方式打开输入文件 in.txt */
        if((fp = fopen("in.txt","r")) == NULL)
        {
                printf("Cannot open this file.\n");
                exit(0);
        }
 
        /* 创建并读入矩阵a */
        fscanf(fp,"%d%d", &row_a, &col_a);
        a=Create(row_a, col_a);
        Input(a,row_a, col_a);
 
        /* 创建并读入矩阵b */
        fscanf(fp,"%d%d", &row_b, &col_b);
        b = Create(row_b, col_b);
        Input(b,row_b, col_b);
 
        /* 关闭输入文件 */
        fclose(fp);
 
        /* 以写入方式打开输出文件 out.txt */
        if((fp = fopen("out.txt","w")) == NULL)
        {
                printf("Cannot open this file.\n");
                exit(0);
        }
 
        /* 判断两个矩阵能否相乘 */
        if(col_a == row_b)
        {
                row_c = row_a;
                col_c = col_b;
        }
        else
        {
                fprintf(fp,"Matrix Can't Mutiply !\n");
                exit(0);
        }
 
        /* 创建并初始化结果矩阵c */
        c = Create(row_c, col_c);
        Reset(c, row_c, col_c);
 
        /* 进行矩阵乘法运算 */
        MatrixMutiply(a, b, c);
 
        /* 输出结果矩阵C */
        Output(c, row_c, col_c);
 
        /* 关闭输出文件 */
        fclose(fp);
 
        /* 释放矩阵内存 */
        MatrixFree(a,row_a);
        MatrixFree(b,row_b);
        MatrixFree(c,row_c);
 
        //system("pause");
        return 0;
}
 
/* 为矩阵动态分配内存的函数 */
datatype** Create(int m, int n)
{
        int i;
        datatype **Matrix;
        Matrix = (datatype **) malloc(sizeof(datatype *) * m);
        for(i = 0; i < m; i++)
        {
                Matrix[i] = (datatype *) malloc(sizeof(datatype) * n);
        }
        return Matrix;
}
 
/* 初始化矩阵函数 */
void Reset(datatype** Matrix, int m, int n)
{
        int i,j;
        for(i = 0; i < m; i++)
        {
                for(j = 0; j < n; j++)
                {
                        Matrix[i][j] = 0;
                }
        }
}
 
/* 读入数据函数 */
void Input(datatype** Matrix, int m, int n)
{
        int i,j;
        for(i = 0; i < m; i++)
        {
                for(j = 0; j < n; j++)
                {
                        fscanf(fp,"%d", &Matrix[i][j]);
                }
        }
}
 
/* 输出数据函数 */
void Output(datatype** Matrix, int m, int n)
{
        int i,j;
        for(i = 0; i < m; i++)
        {
                for(j = 0; j < n; j++)
                {
                        fprintf(fp,"%d ", Matrix[i][j]);
                }
                fprintf(fp,"\n");
        }
}
 
/* 矩阵乘法运算函数 */
void MatrixMutiply(datatype** a, datatype** b, datatype** c)
{
        int i,j,k;
        for(i = 0; i < row_c; i++)
        {
                for(j = 0; j < col_c; j++)
                {
                        for(k = 0; k < col_a; k++)
                        {
                                c[i][j] += a[i][k] * b[k][j];
                        }
                }
        }
}
 
/* 释放矩阵内存函数 */
void MatrixFree(datatype** Matrix, int m)
{
        int i;
        for(i = 0; i < m; i++)
        {
                free(Matrix[i]);
        }
        free(Matrix);
}
2011-05-24 12:12
江南烟雨0590
Rank: 2
等 级:论坛游民
帖 子:21
专家分:42
注 册:2011-5-22
收藏
得分:4 
#include<stdio.h>
int main()
{
    int a[3],b[3],i,j;
    for(i=1;i<3;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);
    }
    for(j=1;j<=3;j++)
    {
        printf("b[%d]=",j);
        scanf("%d",&b[j]);
    }
    printf("I={");
    for(i=1;i<3;i++)
    {
        for(j=1;j<=3;j++)
        {
            printf("<%d,%d>",a[i],b[j]);
        }
    }
    printf("}");
   return0;
}
2011-05-24 15:06
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:4 
不懂。。
2011-05-24 17:03
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:4 
2楼文件用的不错

                                         
===========深入<----------------->浅出============
2011-05-24 17:09
qianyou
Rank: 3Rank: 3
来 自:江西南昌
等 级:论坛游侠
帖 子:76
专家分:189
注 册:2011-3-25
收藏
得分:4 
我的天啊!矩阵的笛卡尔积是什么东西啊?不懂!麻烦楼主解释下吧...
2011-05-24 20:56
御茗天香
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-22
收藏
得分:0 
6楼 这就是个数学概念 百度一下吧!
2011-05-24 21:12
御茗天香
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-22
收藏
得分:0 
多谢2楼3楼的同志了
2011-05-24 21:13
御茗天香
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-22
收藏
得分:0 
2  楼我运行程序,  //system("pause");这个地方提示错误expression syntax in function main知道要怎么改吗?
2011-05-24 21:56
快速回复:for循环的应用
数据加载中...
 
   



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

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