第11讲项目2-分离整数和小数部分

本文介绍了一个程序实现,用于从键盘输入一个浮点数(小数点后有三位数),并分别输出该数的整数部分和小数部分。通过强制数据类型转换和算术运算,展示了编程中处理浮点数的基本技巧。

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

任务和代码:

/*
*Copyright (c)2015 优快云学院
*All rights reserved
*文件名字:main.c
*作者:修红国
*完成日期:2015年11月5日
*版本号:V1.0
*
*编写一个程序,其功能为:从键盘上输入一个浮点数(小数点后有三位数),然后分别输出该数的整数部分和小数部分。
*样例输入:123.456
*样例输出:123 456
*/


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


int main()
{
    int b,c;
    float a;
    printf(" 输入一个浮点数:");
    scanf("%f",&a);
    b=(int)a;
    c=(int)(a*1000)%1000;

    printf(" 输出整数和小数: %d %d\n",b,c);
    printf(" 计算完毕!谢谢使用!\n");

    return 0;
}


运行结果:


知识点总结:

强制数据类型转换

心得:


### 正确读取DHT11温湿度传感器的小数部分数据 为了正确读取DHT11温湿度传感器的小数部分数据,需按照其通信协议解析接收到的40位数据。具体来说: #### 数据结构分析 DHT11返回的40位数据分为五个部分- **第1至8位**:湿度整数值 (Humidity Integer)[^1]。 - **第9至16位**:湿度小数值 (Humidity Decimal)[^1]。 - **第17至24位**:温度整数值 (Temperature Integer)[^1]。 - **第25至32位**:温度小数值 (Temperature Decimal)。 - **第33至40位**:校验 (Checksum),用于验证前面四个字节的准确性[^2]。 #### 校验方法 校验计算方式为前四个字节相加后的低8位应第五个字节一致。只有当校验通过时,才能认为本次读取的数据有效[^3]。 以下是基于C语言的一个简单示例程序来展示如何提取并显示湿度温度的小数部分: ```c #include <stdio.h> #include <stdint.h> // 假设已从DHT11接收到了如下40比特数据存储在一个数组里 uint8_t dht_data[5]; // 存储湿度整型、湿度小数、温度整型、温度小数、校验码 void read_dht11() { uint8_t checksum = dht_data[0] + dht_data[1] + dht_data[2] + dht_data[3]; if(checksum != dht_data[4]) { printf("Data error, checksum failed.\n"); return; } float humidity_decimal = ((float)dht_data[1])/10; // 计算湿度小数部分 float temperature_decimal = ((float)dht_data[3])/10; // 计算温度小数部分 printf("Humidity decimal part: %.1f\n", humidity_decimal); printf("Temperature decimal part: %.1f\n", temperature_decimal); } int main(){ // 示例数据填充 dht_data[0] = 50; // 湿度整数部分 dht_data[1] = 5; // 湿度小数部分 dht_data[2] = 25; // 温度整数部分 dht_data[3] = 3; // 温度小数部分 dht_data[4] = dht_data[0]+dht_data[1]+dht_data[2]+dht_data[3]; // 校验值 read_dht11(); } ``` 此代码片段展示了如何将湿度温度的小数部分小数字段中分离出来,并将其转换成浮点数形式以便于进一步处理或显示。 #### 注意事项 - 如果硬件平台不同,则可能需要调整具体的GPIO操作函数以适配实际使用的微控制器环境。 - 需要确保单总线信号采集逻辑无误,否则可能导致数据错误或者无法完成有效的握手过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值