第十五周—C语言 项目4 (矩阵运算)

(1)矩阵相加

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

int main()
{
    int i,j,a[4][3],b[4][3],c[4][3];
    for(i=0;i<4;i++)
        for(j=0;j<3;j++)
        scanf("%d %d",&a[i][j],&b[i][j]);
    for(i=0;i<4;i++)
        for(j=0;j<3;j++)
            {
                c[i][j]=a[i][j]+b[i][j];
                printf("%d",c[i][j]);
            }
    return 0;
}

(2)矩阵相乘

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

int main()
{
    int i, j, k;
    int temp;
    int a[2][3],b[3][4],c[2][4];
    for(i=0;i<2;i++)
        for(j=0;j<3;j++)
          scanf("%d",&a[i][j]);
    for(i=0;i<3;i++)
        for(j=0;j<4;j++)
        scanf("%d",&b[i][j]);
    for(i = 0; i < 4; i++)
    {
        for(j = 0; j < 3; j++)
        {
            temp = 0;
            for(k = 0; k < 3; k++)
            {
                temp += a[i][k] * b[k][j];
            }
            c[i][j] = temp;
            printf("%d/t", c[i][j]);
        }
        printf("\n");
    }
  return 0;
}



以下是一个简单的 51 单片机 C 语言矩阵键盘扫描、LED 显示器显示、简易计算程序代码示例: ``` #include <reg51.h> // 定义按键扫描函数 unsigned char keyScan() { unsigned char keyVal = 0xFF; // 初始化为无键按下状态 unsigned char i, j; for (i = 0; i < 4; i++) // 行扫描 { P1 = ~(1 << i); // P1 按位取反,使第 i 行输出低电平 for (j = 0; j < 4; j++) // 列检测 { if ((P1 & (1 << (j + 4))) == 0) // 判断第 j 列是否为低电平,即是否有键按下 { keyVal = i * 4 + j; // 计算键值 while ((P1 & (1 << (j + 4))) == 0); // 等待键松开 break; } } if (keyVal != 0xFF) // 如果有键按下,跳出循环 break; } return keyVal; // 返回键值,如果没有键按下,返回 0xFF } // 定义数码管显示函数 void ledDisplay(unsigned char num) { unsigned char ledCode[] = { // 数码管编码表 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F }; P2 = ledCode[num]; // 根据数字显示相应的编码 } void main() { unsigned char keyVal, num1 = 0, num2 = 0, op = 0, result = 0; while (1) { keyVal = keyScan(); // 扫描键盘,获取键值 if (keyVal != 0xFF) // 如果有键按下 { if (keyVal <= 9) // 如果按下的是数字键 { if (op == 0) // 如果还没有选择运算符,把数字存入 num1 num1 = keyVal; else // 如果已经选择了运算符,把数字存入 num2 num2 = keyVal; ledDisplay(keyVal); // 显示按下的数字 } else if (keyVal == 10) // 如果按下的是加号键 { op = 1; // 选择加法运算 ledDisplay('+'); // 显示加号 } else if (keyVal == 11) // 如果按下的是减号键 { op = 2; // 选择减法运算 ledDisplay('-'); // 显示减号 } else if (keyVal == 12) // 如果按下的是乘号键 { op = 3; // 选择乘法运算 ledDisplay('*'); // 显示乘号 } else if (keyVal == 13) // 如果按下的是除号键 { op = 4; // 选择除法运算 ledDisplay('/'); // 显示除号 } else if (keyVal == 14) // 如果按下的是等号键 { switch (op) // 根据选择的运算符进行计算 { case 1: // 加法 result = num1 + num2; break; case 2: // 减法 result = num1 - num2; break; case 3: // 乘法 result = num1 * num2; break; case 4: // 除法 result = num1 / num2; break; default: break; } ledDisplay(result); // 显示计算结果 num1 = result; // 把计算结果存入 num1,以便进行连续计算 num2 = 0; // 清零 num2 op = 0; // 清空运算符 } else if (keyVal == 15) // 如果按下的是清零键 { num1 = 0; // 清零 num1 num2 = 0; // 清零 num2 op = 0; // 清空运算符 ledDisplay(0); // 显示 0 } } } } ``` 这段代码实现了一个简单的计算器,可以通过矩阵键盘输入数字和选择运算符,然后在 LED 数码管上显示计算结果。在代码中,`keyScan()` 函数通过行扫描和列检测来实现键盘扫描,`ledDisplay()` 函数根据数码管编码表来显示数字和运算符,主函数则根据键值进行相应的处理,包括存储数字、选择运算符、进行计算、清零等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值