淘宝的一道面试题

淘宝的一道面试题是这样的:
写一个函数: int print_num(int k){}; 要求函数功能为打印k的降序,直到0结束,即如果k=5,即打印: 5 4 3 2 1 0
要求: 不能用 if , if else, switch, ?: , while, for , do while, goto 语句

#include <conio.h>

#include <stdio.h>

Int print_num(int k)

{

    printf("%d ",k);

    k&&print_num(k-1);  

/*短路,&&运算符在左侧能够确定最终结果时不会对右侧操作求值 也就是说:当左侧判断k=0时,就不会再做右侧的判断,也就不会执行右侧的判断,就返回就OK了!不会再递归了!*/ 

    Return k;  

}

intmain()

{   

    inti;

    Char c;

    scanf("%d",&i); 

    print_num(i);

    c=getchar();     

 /*GETCHAR读取的是在输入数字时所敲的回车,返回的ASCII值为10,无法停留DOS窗口 */ 

    printf("%d",c);

    getchar();

}

### MPU6050 传感器的技术资料与代码示例 #### I2C 地址解释 MPU6050 的默认 I2C 地址为 `0x68` 或者 `0x69`,具体取决于 AD0 引脚的状态。当 AD0 接地时,默认地址为 `0x68`; 当 AD0 连接到 VCC,则地址变为 `0x69`[^1]。 在实际通信过程中,发送指令时使用的地址会加上读写标志位。因此,在向 MPU6050 发送命令时,如果要写入数据则使用 `0xD0` (即 `0x68 << 1`);如果是读取操作,则使用 `0xD1` (即 `(0x68 << 1) | 1`)。这同样适用于 `0x69` 地址的情况,此时分别为 `0xD2` 和 `0xD3`。 #### 示例代码结构概述 为了实现 STM32 对 MPU6050 的控制,通常需要创建几个主要的源文件: - **mpu6050.h**: 定义了所有必要的宏定义、枚举类型以及函数声明。 - **mpu6050.c**: 实现了针对 MPU6050 寄存器的具体操作方法,比如初始化、配置工作模式、获取原始传感数据等功能。 - **main.c**: 主程序逻辑所在之处,负责调用上述库中的接口完成特定的任务流程,如周期性的采集运动姿态信息并处理显示等。 以下是部分简化后的 C 文件片段展示如何构建这些组件之间的交互关系: ```c // mpu6050.h #ifndef __MPU6050_H__ #define __MPU6050_H__ #include "stm32f4xx_hal.h" void MPU6050_Init(I2C_HandleTypeDef *hi2c); uint8_t MPU6050_ReadReg(uint8_t regAddr, uint8_t* data, uint16_t length); uint8_t MPU6050_WriteReg(uint8_t regAddr, uint8_t* data, uint16_t length); #endif /* __MPU6050_H__ */ ``` ```c // mpu6050.c #include "mpu6050.h" #include <string.h> #define MPU6050_ADDRESS_AD0_LOW ((uint8_t)0x68<<1) #define MPU6050_ADDRESS_AD0_HIGH ((uint8_t)0x69<<1) static void MPU6050_Reset(void){ // Reset code here... } void MPU6050_Init(I2C_HandleTypeDef *hi2c){ HAL_I2C_Mem_Write(hi2c, MPU6050_ADDRESS_AD0_LOW, WHO_AM_I_REG, 1, &resetValue, sizeof(resetValue), HAL_MAX_DELAY); MPU6050_Reset(); } ``` ```c // main.c int main(){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_I2C1_Init(); MPU6050_Init(&hi2c1); while (1){ // Read sensor values periodically and process them. } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值