回 帖 发 新 帖 刷新版面

主题:C語言 陣列發生超級問題

設計一C 程式,要求使用者於畫面上先後輸入A、B 兩個4*4 矩陣之數值,輸入錯誤則要求重新輸入;並提供如下操作:
當使用者輸入“+”鍵時,顯示兩矩陣相加結果;若按”-”鍵時,則顯示兩矩陣相減結果;
又若按”*”鍵,則顯示兩矩陣點對點相乘結果;按下字母”q”鍵或”Q”鍵,
則結束程式。又當所按之鍵均非上述鍵之ㄧ,則要求重新輸入。
A、B 兩矩陣的內容請以行為主(Column major)的方式輸入( 例如:A 矩陣的輸入值依序為1、5、9、4、2、…、8、5、7;B 矩陣的輸入值則依序為3、4、9、4、4、…、7、5、1)。
執行後之列印結果表示如下:

註:
(1) 運算子(OP)指:加法(+)、減法(-)、與乘法(*)三種矩陣運算。
(2) 運算符號之判斷,請利用switch…case 指令。
(3) 相加、相減、或相乘請由電腦運算(相乘運算並非真正的矩陣相乘,相乘方式跟矩陣相加一樣)。
(4) 檔案格式為C

下圖為執行樣式:
[img]http://img253.imageshack.us/img253/259/66790396.jpg[/img]

以下是我盡力打出來的殘缺程式

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
    int i,j;
    int A[4][4];
    int B[4][4];
    char word;


    for(i=0;i<4;i++)
     for(j=0;j<4;j++)
     {
        printf("輸入A:");
        scanf("%d",A[i][j]);
        printf("\n");
        printf("輸入B");
        scanf("%d",B[i][j]);
        printf("\n");
     } 
        printf("i輸入運算符號(加減乘) :");
        scanf("%c",word);


        switch(word)
        {
           case '+'
             printf("%d+%d=%d\n",A[i][j],B[i][j],A[i][j]+B[i][j]);
             break;
           case '-'
             printf("%d-%d=%d\n",A[i][j],B[i][j],A[i][j]-B[i][j]);
             break;
           case '*'
             printf("%d*%d=%d\n",A[i][j],B[i][j],A[i][j]*B[i][j]);
             break;
           case 'Q"  
           case 'q'  
              printf("the program is ending\n"),    
        }            


  system("PAUSE");

  return 0;
}

幫我吧 我已經搞了5天了 各位英雄好漢 淚求幫忙

回复列表 (共5个回复)

沙发

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
    int i,j;
    int A[4][4];
    int B[4][4];
    char word;


    for(i=0;i<4;i++)
     for(j=0;j<4;j++)
     {
        printf("輸入A:");
        scanf("%d",A[i][j]);
        printf("\n");
        printf("輸入B");
        scanf("%d",B[i][j]);
        printf("\n");
     } 
        printf("i輸入運算符號(加減乘) :");
        scanf("%c",word);


        switch(word)
        {
        case '+':      //case后面需要接冒号
             printf("%d+%d=%d\n",A[i][j],B[i][j],A[i][j]+B[i][j]);
             break;
        case '-':
             printf("%d-%d=%d\n",A[i][j],B[i][j],A[i][j]-B[i][j]);
             break;
        case '*':
             printf("%d*%d=%d\n",A[i][j],B[i][j],A[i][j]*B[i][j]);
             break;
        case 'Q':       //符号打错了
             printf("the program is ending\n");
             break;     //不能少
        case 'q':
             printf("the program is ending\n");  
             break;
        }            


  system("PAUSE");
  
  return 0;        
}

板凳

明天或者晚上搞完给你,现在有点事情!

3 楼


[code=c]
// vc6.0下有问题,求指教!
#include<stdio.h>

void main()
{
    int i, j, a[4][4] = {1}, b[4][4] = {1}, c[4][4] = {0};
    char  word;
    for(i = 0; i < 4; i ++)
    {
        for(j = 0; j < 4; j ++)
        {
            printf("输入a阵列:");
            scanf("%d" ,&a[i][j]);
            printf("输入b阵列:");
            scanf("%d" ,&a[i][j]);
        }
    }
    printf("输入运算符号:");
    scanf("%c" ,&word);
    getchar();
    for(i = 0; i < 4; i ++)
    {
        for( j = 0; j < 4; j ++)
        {
            switch(word)
            {
            case '+':
                c[i][j] = a[i][j] + b[i][j];
                break;
            case '-':
                c[i][j] = a[i][j] - b[i][j];
                break;
            case '*':
                c[i][j] = a[i][j] * b[i][j];
                break;
            default :
                printf("Error!\n");
            }
            printf("%d " ,c[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}[/code]

4 楼

//楼主,以下是我写的代码,请参考
#include <stdio.h>
#include <stdlib.h>

void JZ(int rows, int cols, int M[4][4]);//矩阵
void Jia(int rows, int cols, int M[4][4], int N[4][4]);//矩阵的加法
void Jian(int rows, int cols, int M[4][4], int N[4][4]);//矩阵的减法
void Cheng(int rows, int cols, int M[4][4], int N[4][4]);//矩阵的乘法

int main()
{
    int A[4][4];
    int B[4][4];
    int c;
    printf("==================\n");
    printf("+   矩阵加法\n");
    printf("-   矩阵减法\n");
    printf("*   矩阵乘法\n");
    printf("Q   退出程序\n");
    printf("==================\n");
    printf("请输入矩阵A:\n");
    JZ(4, 4, A);
    printf("请输入矩阵B:\n");
    JZ(4, 4, B);
flag:
    printf("请输入需要运算的符号:");
    fflush(stdin);
    c = getchar();
    c = toupper(c);
    switch(c)
    {
    case '+':
        Jia(4, 4, A, B);
        break;
    case '-':
        Jian(4, 4, A, B);
        break;
    case '*':
        Cheng(4, 4, A, B);
        break;
    case 'Q':
        printf("退出成功!\n");
        exit(1);
    default:
        printf("输入有误!\n");
        goto flag;
    }

    system("pause");
    return 0;
}

void JZ(int rows, int cols, int M[4][4])//矩阵
{
    int i, j;
    
    for(i = 0; i < rows; i ++)//矩阵0的输入
    {
        for(j = 0; j < cols; j ++)
        {
            scanf("%d", &M[i][j]);
        }
    }

    for(i = 0; i < rows; i ++)//矩阵的输出
    {
        for(j = 0; j < cols; j ++)
        {
            printf("%2d ", M[i][j]);
        }
        printf("\n");
    }
}

void Jia(int rows, int cols, int M[4][4], int N[4][4])//矩阵的加法
{
    int X[4][4];
    int i, j;
    for(i = 0; i < rows; i ++)//矩阵的加法
    {
        for(j = 0; j < cols; j ++)
        {
            X[i][j] = M[i][j] + N[i][j];
        }
    }

    printf("相加后的矩阵C为:\n");
    for(i = 0; i < rows; i ++)//矩阵的输出
    {
        for(j = 0; j < cols; j ++)
        {
            printf("%2d ", X[i][j]);
        }
        printf("\n");
    }
}

void Jian(int rows, int cols, int M[4][4], int N[4][4])//矩阵的减法
{
    int X[4][4];
    int i, j;
    for(i = 0; i < rows; i ++)//矩阵的减法
    {
        for(j = 0; j < cols; j ++)
        {
            X[i][j] = M[i][j] - N[i][j];
        }
    }

    printf("相减后的矩阵C为:\n");
    for(i = 0; i < rows; i ++)//矩阵的输出
    {
        for(j = 0; j < cols; j ++)
        {
            printf("%2d ", X[i][j]);
        }
        printf("\n");
    }
}

void Cheng(int rows, int cols, int M[4][4], int N[4][4])//矩阵的乘法
{
    int X[4][4] = {0};
    int i, j, k;
    for(i = 0; i < rows; i ++)//矩阵的乘法
    {
        for(j = 0; j < cols; j ++)
        {
            for(k = 0; k < rows && k < cols; k ++)
            {
                X[i][j] += M[i][k] * N[k][j];
            }
        }
    }

    printf("相乘后的矩阵C为:\n");
    for(i = 0; i < rows; i ++)//矩阵的输出
    {
        for(j = 0; j < cols; j ++)
        {
            printf("%2d ", X[i][j]);
        }
        printf("\n");
    }
}

5 楼


WIN TC下没有问题呀。

我来回复

您尚未登录,请登录后再回复。点此登录或注册