主题:C語言 陣列發生超級問題
happy78323
[专家分:0] 发布于 2010-12-02 21:29:00
設計一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个回复)
沙发
Gooluckd [专家分:20] 发布于 2010-12-02 22:58:00
#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;
}
板凳
cfj469933485 [专家分:950] 发布于 2010-12-04 13:15:00
明天或者晚上搞完给你,现在有点事情!
3 楼
lukexc [专家分:50] 发布于 2010-12-04 14:44:00
[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 楼
cfj469933485 [专家分:950] 发布于 2010-12-05 21:52:00
//楼主,以下是我写的代码,请参考
#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 楼
singolang [专家分:0] 发布于 2010-12-06 16:19:00
WIN TC下没有问题呀。
我来回复