C语言面试题---float值的对比

C语言---浮点数之间的比较规则 在C语言中,浮点数之间是怎么比较的?浮点数和 0 怎么比较? 你认为这段代码输出什么? int main() { float f1 = 1.1; float f2 = 2.2; if (f2 - 1.1 == f1) printf("等于"); else printf("不等于"); return 0; } 答案是不等于。 为什么不等于呢? 因为在C语言中浮点数是存在精度损失的,有可能比原来的数大,也有可能小。 在下图所示,f1在打印小数点后30位时就能很明显的看出存在. 阅读详情

版本声明:本文转载于公众号TeachPlus

C语言面试题---float值的对比

请写出float x 与“零值”比较的if语句

答案:

const float EPSINON = 0.00001;

if((x>=-EPSINON)&&(x<=EPSINON));

本题解析

许多人看到这道题目的时候都会嗤之以鼻,觉得非常简单,于是就写下下面的代码:

if(x==0.0);
if(x!=0.0);

偶尔可能还有个别人,会因为自己注意了写的是0.0,而不是0而沾沾自喜,不过这样的写法均为

错误的写法,为什么呢?因为float的表示方法的问题,float本身就是不精确的,精确度在小数点

后6~7位,再往后的就不能保证数据的精确度了。


C语言常见面试题 堆在内存中的管理由程序员自行管理,使用完毕后必须手动释放,否则会导致内存泄漏,堆的空间容量相对较大,可以动态扩展空间,访问堆需要通过指针间接访问,响应速度相对较慢。扩展:函数调用开销在C++中可以用内联函数规避,内联函数是在编译阶段进行函数体替换,但缺点是函数体内必须简洁,不能使用循环以及开关语句。栈在数据结构中分为顺序栈与链式栈,为顺序存储结构,存储数据要求先进后出,堆在数据结构中主要使用二叉树实现,分为大顶堆与小顶堆。//常量指针,不能通过指针p去修改变量a的值,但可以改变p的指向。 阅读详情

相关推荐

C语言经典面试题目(一)

C语言中的关键字是一些具有特殊含义的保留字,它们用于表示语言的结构、控制流程、数据类型等。double:用于声明双精度浮点型变量,表示更大范围和更高精度的小数。void:用于声明无类型的指针或函数,表示没有返回值的函数。if:用于定义条件判断语句,根据条件的真假执行不同的语句。结构体:用于定义不同数据类型的组合,成为一个新的数据类型。do:用于定义循环体,先执行一次循环,再判断循环条件。auto:用于声明自动变量,即在函数内部定义的变量。while:用于定义循环体,根据条件的真假重复执行。

eason22的博客 536

深入理解int转float:从IEEE 754到精度丢失的完整转换过程

浮点数是计算机系统表示实数的基础数据类型,其存储遵循IEEE 754标准,由符号位、指数位和尾数位组成。整数与浮点数的转换本质上是将二进制科学计数法编码为标准化格式,这一过程涉及舍入规则与精度极限。理解这一转换原理对C语言开发者尤为重要,因为隐式类型转换可能导致大整数出现难以察觉的精度丢失。在图形学、数据分析、嵌入式开发等场景中,掌握int转float的底层行为可有效规避数据失真风险。本文结合2017年统考真题,系统拆解了从二进制拆解到IEEE 754存储结构,再到舍入规则与精度丢失的完整链路,并给出了常见

weixin_34056162的博客 386

C语言面试笔试题01

C语言面试笔试题01

weixin_48102054的博客 2039

C语言04-浮点编码、switch...case中的跳转表

文章目录浮点编码float类型的面试题中,还常常有这样的bug堆代码:浮点编码科学计数法float中的浮点编码方案(IEEE)浮点编码常见问题switch...case中的跳转表 浮点编码 C语言中的数值类型变量,除了整型,还有浮点型。 小数是如何在内存中存放的 浮点别用补码求。 float fltValue = 5.0; 与0x05相差很远 float类型的面试题中,还常常有这样的bug堆代码...

KarlingNans's Blog 829

C语言复习

1.指针与数组数组是同类型的变量的集合,各元素按下标的特定顺序占据一段连续的内存,各元素的地址也连续,指针对数组元素非常方便。 通过指针引用数组元素可以分以下三个步骤: (1):说明指针和数组 (2):指针指向数组 (3):通过指针引用数组元素 引用数组元素可以有三种方法: 下标法: a[ i ] 指针法: *(p+i) 数组名法:*(a+i)2.内存动态分配malloc

kaka的博客 845

C语言开发环境搭建与核心语法精要

C语言作为系统编程的基础语言,其核心在于对内存和硬件的精确控制。通过指针操作和手动内存管理,开发者可以直接操作内存地址,实现高效的系统级编程。在开发环境搭建方面,现代工具链如VSCode配合GCC编译器,为C语言开发提供了强大的支持。理解数据类型、指针运算和内存管理等基础概念,是掌握C语言的关键。这些技术广泛应用于嵌入式系统、操作系统开发和高性能计算等领域。通过配置MinGW-w64和优化VSCode设置,可以快速搭建高效的C语言开发环境,为学习数据结构和算法打下坚实基础。

weixin_30765577的博客 359

嵌入式C语言面试:指针、数组与野指针考点全解析

在嵌入式开发中,内存管理是系统稳定性的基石,而C语言指针直接暴露了内存地址的底层操作逻辑。理解指针的类型、步长与内存模型,是编写可靠驱动代码的前提。数组与指针的纠缠关系、野指针的隐患,以及C++引用的语义差异,都是嵌入式工程师在实际项目中的高频难题。无论是寄存器访问、DMA缓冲处理,还是多任务数据共享,这些基础知识都直接影响代码在恶劣硬件环境下的表现。本文从面试官视角出发,系统拆解指针、数组、野指针、引用等核心考点的底层原理与实战技巧,帮助开发者建立清晰的内存模型思维,提升嵌入式场景下的排错能力与代码质量。

weixin_33858485的博客 381

C语言指针传参原理:值传递本质与嵌入式开发实战解析

在C语言编程中,函数参数传递的核心机制是值传递,这是理解指针操作和内存管理的基础。值传递意味着实参值的副本被传递给形参,对于指针类型,传递的是地址值的副本。这一原理决定了在函数内部修改指针形参本身(如自增)不会影响外部实参指针,但通过解引用可以修改指针所指向的内存数据。理解这一机制对于编写稳健的嵌入式系统代码、驱动程序和进行系统优化至关重要,它能有效避免内存操作错误和资源泄漏。在实际的嵌入式开发场景中,掌握指针传参有助于优化栈空间使用、提升程序效率,并是进行链表操作、动态内存管理等高级编程的基石。本文通过经

weixin_30335353的博客 364

选择排序算法详解:从C语言实现到时间复杂度分析

排序算法是计算机科学中处理数据组织的基础技术,其核心原理是通过特定规则重新排列数据元素。选择排序作为一种基于比较的原地排序算法,其工作原理直观体现了“查找极值-交换位置”的朴素思想。该算法的技术价值在于其实现简单,是理解算法复杂度和循环控制的绝佳教学工具,尤其适合C语言程序设计和数据结构入门学习。在应用场景上,虽然其O(n²)的时间复杂度限制了在大规模数据中的使用,但在小规模数据、交换成本极高或作为教学演示的场景下仍有其价值。本文通过C语言代码示例和“挑西瓜”的类比,深入解析了选择排序的不稳定性、时间复杂度

weixin_34150830的博客 442

C语言链表实现与核心操作详解

链表作为基础数据结构,通过指针实现非连续内存的动态管理,在嵌入式系统和操作系统内核中广泛应用。其核心原理是通过自引用结构体将数据域与指针域分离,支持高效的内存动态分配与回收。从技术实现来看,链表操作包含创建、插入、删除、遍历和反转等核心方法,每种操作都需要处理指针关系和边界条件。在实际工程中,链表常用于实现文件系统目录、网络协议栈队列等场景,其变体如双向链表和循环链表进一步扩展了应用范围。理解链表的内存模型和指针操作,是掌握动态数据结构的关键一步。

weixin_33693070的博客 456

C语言操作符深度解析:从语法基石到高效编程实践

在编程语言中,操作符是构成表达式和语句的基本元素,它们定义了数据如何进行计算、比较和操作。理解操作符的底层原理,特别是优先级、结合性和求值顺序,是编写正确、高效代码的关键。从编译器的视角看,操作符直接对应着CPU的指令,如算术运算、位操作和逻辑判断,这赋予了C语言贴近硬件、高效执行的技术价值。在嵌入式开发、系统编程和性能优化等应用场景中,熟练运用位操作符和逻辑操作符的短路求值特性,能显著提升代码的效率和可靠性。本文基于【嵌入式开发】和【性能优化】的热点需求,系统梳理了C语言各类操作符的核心机制、常见陷阱与工

weixin_34345753的博客 505

C语言2024学习指南:从零基础到系统编程实战

编程语言作为计算机科学的基础工具,其核心价值在于帮助开发者理解计算机底层工作原理。C语言作为系统级编程的基石,通过指针、内存管理等核心概念,让程序员直面计算机硬件层面的操作机制。这种底层理解能力在当今AI和云计算时代愈发重要,特别是在高性能计算、嵌入式开发和操作系统内核等场景中,C语言的高效性和控制力无可替代。学习C语言不仅能掌握语法知识,更能培养扎实的编程思维和调试能力,为后续学习Python、Java等高级语言打下坚实基础。本文基于清华教学团队实践经验,系统讲解C语言指针操作、内存管理、数据结构等热词概

505

C语言入门:从内存模型到嵌入式开发的核心思维

计算机编程的本质是与硬件进行高效交互,而理解内存模型是掌握这一能力的关键。在底层开发中,程序通过直接操作内存地址、管理数据存储来实现对硬件的精准控制,这种能力在高性能计算、嵌入式系统等领域尤为重要。C语言作为接近硬件的编程语言,其指针、结构体等特性正是这种直接内存操作的体现,例如在嵌入式开发中常用结构体映射寄存器来配置外设。通过深入理解变量、数据类型与内存的映射关系,开发者能够编写出高效、可靠的系统级代码,为学习操作系统、驱动开发乃至物联网应用打下坚实基础。本文将从内存视角解析C语言的核心概念,探讨其在ST

weixin_30613343的博客 414

C语言运算符全解析:从基础概念到实战避坑指南

在编程语言中,运算符是实现数据计算、逻辑判断和位级操作的核心工具,其本质是连接数据与逻辑的桥梁。理解运算符的分类、优先级和结合性是掌握表达式求值的基础,这直接关系到程序的正确性和效率。从基础的算术、赋值运算符,到实现程序决策的关系与逻辑运算符,再到直接操作二进制位的位运算符,每一种类型都在特定场景下发挥着关键作用。例如,自增/自减运算符的前置与后置区别、逻辑运算符的短路求值特性,以及位运算符在底层开发和性能优化中的应用,都是工程师必须掌握的核心概念。本文聚焦C语言,深入剖析这些基础运算符的原理、常见“坑点”

weixin_30335353的博客 388

Windows下飞桨PaddlePaddle 2.6.1 GPU版环境搭建全攻略(含CUDA 11.7配置避坑指南)

本文详细介绍了在Windows系统下搭建飞桨PaddlePaddle 2.6.1 GPU版环境的完整流程,特别针对CUDA 11.7和cuDNN的安装提供了避坑指南。从Anaconda环境配置、CUDA Toolkit安装到飞桨GPU版的验证,手把手帮助开发者高效完成深度学习环境搭建,解决常见问题并优化性能。

x8y9z0的博客 1094

USB-Blaster在Win11报错?3分钟搞定驱动兼容性问题(Quartus 21.4实测)

本文针对Windows 11系统下USB-Blaster驱动安装问题,提供了一套快速解决方案。通过优化驱动安装流程、绕过签名验证及设备管理器高级技巧,帮助开发者在3分钟内解决Quartus 21.4的兼容性问题,提升FPGA调试效率。

weixin_30772105的博客 289

PySpark 本地开发环境搭建与实践

本文详细介绍了 PySpark 本地开发环境的搭建过程,包括 JDK、Hadoop、Anaconda、PySpark 的安装以及 Pycharm 工程的创建。同时,深入讲解了代码编写、本地开发案例(如 WordCount、处理特殊分隔符、读取 hdfs 数据、获取外部变量)、Spark 程序的监控和 local 模式下结果文件数量问题等内容。通过掌握这些知识和技能,读者可以在 Windows 本地环境中高效地进行 PySpark 开发,处理大规模数据,解决实际业务中的数据分析和处理问题。

天冬忘忧的博客 3011

【亲测有效】OpenClaw Gateway 出现 “(no output)“ 卡死问题完整解决指南:从手动重启到 systemd Watchdog 自动恢复

最近在使用 OpenClaw(自托管 AI 助手框架,前身 Clawdbot/Moltbot)时,遇到了一个非常常见的顽疾:TUI(终端界面)或 Telegram 等通道经常显示 "(no output)",消息发出去后机器人完全没反应,看起来像是卡死了。

hampeter的博客 8607

LeetCode 热题 100 回顾

力扣最受刷题发烧友欢迎的 100 道题 LeetCode 热题 100 : 题目回顾、解题思路、复杂度分析、代码实现、验证算法

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 9万+

群晖、飞牛NAS容器进入终端失败?一步步教你解决Docker Bash错误!(OCI runtime exec failed: exec failed)

群晖、飞牛NAS容器进入终端失败?一步步教你解决Docker Bash错误!(OCI runtime exec failed: exec failed)

XiaoqiangClub的博客 2988

基于 51 单片机的智能手势控制小车设计与实现

智能手势控制小车以STC89C52RC 单片机为控制核心,通过手势识别模块采集用户手势指令,经单片机处理后驱动电机执行前进、后退、左转、右转等动作。该项目融合了传感器技术、单片机编程和电机驱动技术,具有成本低、易实现、互动性强的特点,适合作为嵌入式系统入门实践案例。本项目成功实现了基于 51 单片机的智能手势控制小车,通过 APDS-9960 模块采集手势信号,经单片机处理后驱动电机完成基本动作,验证了 “传感器 + 单片机 + 执行器” 的嵌入式系统设计思路。

weixin_42300449的博客 177

真格量化——GFTD策略

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import numpy as np import math #开始时间,用于初始化一些参数 def OnStart(context) : print "I\'m starting..." #设置全局变量 g.signalcount = 0 g.signal_list = [] g.buysignal = 0 .

qq_26742269的博客 1284

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: C语言面试题----printf()的参数
下一篇: HR教你如何判断一个公司的好坏?
study_plus
博客等级 码龄9年 132粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值