标题:编程计算两个矩阵的乘积输入后没反应
只看楼主
胡文涛
Rank: 1
来 自:北京 朝阳
等 级:新手上路
帖 子:29
专家分:0
注 册:2016-6-30
结帖率:87.5%
 问题点数:0 回复次数:6 
编程计算两个矩阵的乘积输入后没反应
编写了一个程序计算两个3*3矩阵的乘积,想让它有MATLAB的显示风格。代码如下:
#include<stdio.h>
char x,y;       //定义全局变量,分别表示参与运算的两个矩阵的矩阵名
int main()
{
    int product(int (*p)[3],int (*q)[3]);       //声明计算两个3*3矩阵乘积的函数
    int a[3][3],b[3][3];        //定义两个矩阵
    int i,j;
    int (*p)[3]=a,(*q)[3]=b;        //定义两个指针变量,分别指向两个矩阵的首行地址
    printf("Please input the first matrix:\n");
    scanf("%c=",&x);
    for (i=0;i<9;i++)       //输入第一个矩阵的元素
        scanf("%d ",*p+i);
    printf("\n");
    printf("%c=\n",x);
    for (i=0;i<3;i++)       //将数组以矩阵的形式显示出来
    {
        for (j=0;j<3;j++)
            printf("%d\t",a[i][j]);
        printf("\n\n");
    }
    printf("Please input the second matrix:\n");
    scanf("%c=",&y);
    for (i=0;i<9;i++)       //输入第二个矩阵的元素
        scanf("%d ",*q+i);
    printf("\n");
    printf("%c=\n",y);
    for (i=0;i<3;i++)       //将数组以矩阵的形式显示出来
    {
        for (j=0;j<3;j++)
            printf("%d\t",b[i][j]);
        printf("\n\n");
    }
    product(p,q);       //调用函数计算两个矩阵的乘积
    return 0;
}
int product(int (*p)[3],int (*q)[3])        //函数定义
{
    int c[3][3];
    int i,j;
    char z;
    scanf("%c=%c%c",&z,&x,&y);
    printf("\n%c=\n",z);
    for (i=0;i<3;i++)       //计算两个矩阵的乘积
        for (j=0;j<3;j++)
            c[i][j]=*(*(p+i)) * *(*q+j) + *(*(p+i)+1) * *(*q+j+3) + *(*(p+i)+2) * *(*q+6);
    for (i=0;i<3;i++)       //输出两个矩阵的乘积
    {
        for (j=0;j<3;j++)
            printf("%d\t",c[i][j]);
        printf("\n\n");
    }
    return 0;
}
输入第一个矩阵(命名为A)后无法进行下一步,就像下面这样

这是怎么回事呢?
搜索更多相关主题的帖子: include product matrix 风格 
2016-09-23 20:45
胡文涛
Rank: 1
来 自:北京 朝阳
等 级:新手上路
帖 子:29
专家分:0
注 册:2016-6-30
得分:0 
第八行的注释说错了,是“分别指向两个二维数组的首行”,见谅。
2016-09-23 20:57
胡文涛
Rank: 1
来 自:北京 朝阳
等 级:新手上路
帖 子:29
专家分:0
注 册:2016-6-30
得分:0 
明白了,输入完“A=”后没有摁回车
2016-09-23 22:29
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
得分:0 
回复 3楼 胡文涛
scanf("%c=",&..)//这个用法有点不是很人情味,因为未来用户使用的时候就不能漏了这个等号,也必须保证这个等号是半角字符的等号。如非必须,这个规则尽量不要这样子


[此贴子已经被作者于2016-9-23 22:57编辑过]


φ(゜▽゜*)♪
2016-09-23 22:53
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
for (i=0;i<9;i++)       //输入第一个矩阵的元素
        scanf("%d",*p+i);    //这里多个了空格。导致没办确认回车。



[此贴子已经被作者于2016-9-23 23:20编辑过]

2016-09-23 23:04
微生固
Rank: 2
来 自:湖北-武汉
等 级:论坛游民
帖 子:13
专家分:35
注 册:2016-9-22
得分:0 
你这样输入就可以了
A=1 2 3 4 5 6 7 8 9 (任意字符)换行   
2016-09-24 08:43
微生固
Rank: 2
来 自:湖北-武汉
等 级:论坛游民
帖 子:13
专家分:35
注 册:2016-9-22
得分:0 
修改了一下你的代码,第一个问题是在第二个scanf前加fflush(stdin),清除缓存区。第二个是在这句”c[i][j]=*(*(p+i)) * *(*q+j) + *(*(p+i)+1) * *(*q+j+3) + *(*(p+i)+2) * *(*q+j+6);最后的(*q+j+6)少一个j.
输入格式A=1 2 3 4 5 6 7 8 9 a(任意字符) B=1 2 3 4 5 6 7 8 9 a
#include<stdio.h>
#include<stdlib.h>
char x,y;       //定义全局变量,分别表示参与运算的两个矩阵的矩阵名
int main()
{
    int product(int (*p)[3],int (*q)[3]);       //声明计算两个3*3矩阵乘积的函数
    int a[3][3],b[3][3];        //定义两个矩阵
    int i,j;
    int (*p)[3]=a,(*q)[3]=b;        //定义两个指针变量,分别指向两个矩阵的首行地址
    printf("Please input the first matrix:\n");
    scanf("%c=",&x);
    for (i=0;i<9;i++)       //输入第一个矩阵的元素
    {
        scanf("%d ",*p+i);
    }        
    printf("\n");
    printf("%c=\n",x);
    for (i=0;i<3;i++)       //将数组以矩阵的形式显示出来
    {
        for (j=0;j<3;j++)
            printf("%d\t",a[i][j]);
        printf("\n\n");
    }
    printf("Please input the second matrix:\n");
    fflush(stdin);          //清除缓存区
    scanf("%c=",&y);
    for (i=0;i<9;i++)       //输入第二个矩阵的元素
        scanf("%d ",*q+i);
    printf("\n");
    printf("%c=\n",y);
    for (i=0;i<3;i++)       //将数组以矩阵的形式显示出来
    {
        for (j=0;j<3;j++)
            printf("%d\t",b[i][j]);
        printf("\n\n");
    }
    product(p,q);       //调用函数计算两个矩阵的乘积
    system("pause");
    return 0;
}
int product(int (*p)[3],int (*q)[3])        //函数定义
{
    int c[3][3];
    int i,j;
   
    printf("C=\n");
    for (i=0;i<3;i++)       //计算两个矩阵的乘积
        for (j=0;j<3;j++)
            c[i][j]=*(*(p+i)) * *(*q+j) + *(*(p+i)+1) * *(*q+j+3) + *(*(p+i)+2) * *(*q+j+6);
    for (i=0;i<3;i++)       //输出两个矩阵的乘积
    {
        for (j=0;j<3;j++)
            printf("%d\t",c[i][j]);
        printf("\n\n");
    }
    return 0;
}
2016-09-24 09:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-469121-1-1.html




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

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