6-24 实验8_3_设计函数 (100 分)

本文介绍了一个函数,该函数用于从二维数组中提取每列的最小值,并将其存储在一维数组中。提供了完整的代码实现及示例,帮助读者理解算法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计函数将二维数组M中每列的最小元素,依次放入一维数组x中,二维数组M的行数为n,列数为m。

输入第一行为两个整数n、m,代表二维数组M的行数与列数,n、m的范围均是1—100。然后是n*m个整数,即二维数组M的元素。输出x数组中的元素,每个元素用空格分隔。

函数接口定义:

void findMin(int M[][MAX],int x[],int n,int m);

其中 M , x, n 和 m 都是用户传入的参数。 M 代表二维数组;x为保存结果的一维数组;n 和 m 为二维数组的行数和列数;MAX 为常量,本题中为100 ;函数没有返回值。

裁判测试程序样例:

#include<stdio.h>

#define        MAX        100

void findMin(int M[][MAX],int x[],int n,int m);

int main()
{
    int        matrix[MAX][MAX] ; 
    int        x[MAX] ;
    int        n, m, i, j ;


    scanf( "%d%d" , &n , &m );
    for( i = 0 ; i < n ; i++ )
    {    
        for( j = 0 ; j < m ; j++ )
        {
            scanf("%d", &matrix[i][j]) ;
        }
    }
    
    findMin(matrix,x,n,m);
    
    for( i = 0 ; i < m - 1 ; i++ )
        printf( "%d " , x[i] ) ;
    printf( "%d\n" , x[i] ) ;
    
    return 0 ;
}

/* 请在这里填写答案 */

输入样例:

3 4
22 45 56 30
19 33 45 38
20 22 66 40

输出样例:

在这里给出相应的输出。例如:

19 22 45 30

代码如下:

void findMin(int M[][MAX], int x[], int n, int m)
{
	int i, j, min;
	for (i = 0; i < m; i++)
	{
		min = M[0][i];
		for (j = 1; j < n; j++)
			if (M[j][i] < min)
				min = M[j][i];
		x[i] = min;
	}
}

### 关于IIC (I2C) 协议与AT24C02 EEPROM芯片 IIC(Inter-Integrated Circuit),即两线制串行总线,是一种用于短距离通信的同步串行协议。它通过SDA(数据线)和SCL(时钟线)两条信号线完成设备间的通信[^1]。 #### AT24C02 EEPROM芯片简介 AT24C02是一款基于I2C协议的小型EEPROM存储器,具有2K位的存储容量,为256字节页面模式写入功能。其设备地址由硬件引脚决定,通常可以通过更改A0-A2引脚电平来设置不同的从设备地址[^1]。 以下是使用STM8微控制器通过软件模拟I2C方式访问AT24C02的一个代码示: ```c #include "stm8s.h" #define SDA_PIN GPIO_Pin_6 #define SCL_PIN GPIO_Pin_7 #define GPIO_PORT GPIOB void I2C_Start(void) { GPIO_WriteLow(GPIO_PORT, SDA_PIN); GPIO_WriteLow(GPIO_PORT, SCL_PIN); } void I2C_Stop(void) { GPIO_WriteHigh(GPIO_PORT, SDA_PIN); GPIO_WriteHigh(GPIO_PORT, SCL_PIN); } void I2C_SendByte(uint8_t data) { uint8_t i; for(i = 0; i < 8; i++) { if(data & 0x80) GPIO_WriteHigh(GPIO_PORT, SDA_PIN); else GPIO_WriteLow(GPIO_PORT, SDA_PIN); GPIO_WriteHigh(GPIO_PORT, SCL_PIN); GPIO_WriteLow(GPIO_PORT, SCL_PIN); data <<= 1; } } uint8_t I2C_ReadByte(void) { uint8_t i, byte = 0; GPIO_SetMode(GPIO_PORT, SDA_PIN, GPIO_Mode_In_FLOATING); // 设置为输入模式 for(i = 0; i < 8; i++) { byte <<= 1; if(GPIO_ReadInputPin(GPIO_PORT, SDA_PIN)) byte |= 0x01; GPIO_WriteHigh(GPIO_PORT, SCL_PIN); GPIO_WriteLow(GPIO_PORT, SCL_PIN); } return byte; } // 写入单个字节到指定地址 void WriteToAT24C02(uint16_t address, uint8_t data) { I2C_Start(); I2C_SendByte(0xA0 | ((address >> 8) & 0x07)); // 设备地址 + 写操作标志 I2C_SendByte(address & 0xFF); // 存储位置 I2C_SendByte(data); // 数据 I2C_Stop(); } // 从指定地址读取单个字节 uint8_t ReadFromAT24C02(uint16_t address) { I2C_Start(); I2C_SendByte(0xA0 | ((address >> 8) & 0x07)); // 设备地址 + 写操作标志 I2C_SendByte(address & 0xFF); // 存储位置 I2C_Start(); // 重新启动 I2C_SendByte(0xA1 | ((address >> 8) & 0x07)); // 设备地址 + 读操作标志 uint8_t result = I2C_ReadByte(); I2C_Stop(); return result; } ``` 此代码实现了基本的I2C通信逻辑,包括起始条件、停止条件、发送字节和接收字节等功能[^3]。 --- ### 蜂鸣器实验的相关说明 蜂鸣器实验通常是嵌入式开发中的基础项目之一,主要用于验证GPIO端口的功能或者配合其他传感器实现报警提示。对于结合I2C协议的应用场景,可以设计如下方案:当某个特定事件发生时(如温度超过阈值或按键触发),通过I2C读取AT24C02中预存的数据并驱动蜂鸣器发声。 以下是一个简单的蜂鸣器控制代码示: ```c #include "stm8s.h" #define BUZZER_PIN GPIO_Pin_5 #define GPIO_PORT GPIOC void Buzzer_Init(void) { GPIO_Init(GPIO_PORT, BUZZER_PIN, GPIO_MODE_OUT_PP_LOW_FAST); } void Buzzer_On(void) { GPIO_WriteHigh(GPIO_PORT, BUZZER_PIN); } void Buzzer_Off(void) { GPIO_WriteLow(GPIO_PORT, BUZZER_PIN); } int main(void) { Buzzer_Init(); while(1) { uint8_t value = ReadFromAT24C02(0x00); // 假设从AT24C02第0字节读取状态 if(value == 0xAA) { // 如果读取到特殊标记,则开启蜂鸣器 Buzzer_On(); } else { Buzzer_Off(); } Delay_ms(100); // 添加适当延迟防止过快切换 } } ``` 在此程序中,`ReadFromAT24C02()` 函数负责从AT24C02中获取配置信息,并据此判断是否激活蜂鸣器[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值