用计算器学习float、输入输出函数的格式化

news2024/11/15 15:49:06

上一篇介绍了C语言的一部分基础知识,今天我们来继续深入一点讲。

引入浮点数——float

做一个加减法计算器显然不能满足其他计算需求,比如我们生活中的东西并不总是用整数来衡量。我们有五毛钱,有半杯水,有随时都在变的速度,而且树苗也不是一下子从一个种子立马长到1,而是会经历中间一点一滴的成长。所以这个世界不是只有整数,还有小数,即C语言中的浮点数。延续之前的变量定义,我们在输入小数的时候,也需要先让机器明白数据的类型,所以我们需要显性地指出来:

float a;
float b;

这里假设我们要对两个数进行加法运算,同样地,我们需要输入函数scanf_s,但记不记得上一篇中我们说过对于整型类型的数据,scanf_s(“%d”,&a)里面是%d,那对于小数还是吗?显然不是,它有另外一个用%f,这里表示小数点后面有通常是6位的浮点数。其实整型和浮点数的类型还有很多,但我们不着急一个一个说,等到用到了自然会讲,因为就算讲了不用也会忘记。

scanf_s("%f",&a);
scanf_s("%f",&b);

像进行整数加减法一样,我们同样可以自己定义一个函数,不过这时候我们是对小数进行加减法。还记得函数名Add前面需要加返回类型吗?假如说我们要返回一个值给主调函数在这里通常指main函数,那么我们不妨将返回类型写上去。同样地,在函数名的后面需要对传入的参数先进行定义,如下:

float Add(float a,float b)
{
    float c=a+b;
    printf("%f\n",c);
}

但其实我们只是需要实现结果的打印,并不需要返回一个值给主调函数(main),所以我们可以直接用void,表示该函数没有返回值。即:

void Add(float a,float b)
{
    float c=a+b;
    printf("%f\n",c);
}

我们将上面的代码整合一下变成这样:

#include<stdio.h>//不要忘记包含头文件,不然scanf_s和printf函数都用不了
void Add(float a,float b)//该函数无返回值
{
    float c=a+b;//除了a和b,它们的和通常也是小数,也要定义成float
    printf("%f\n",c);
}
int main()
{
    float a;
    float b;
    scanf_s("%f",&a);
    scanf_s("%f",&b);
    Add(a,b);//调用Add函数,这里要传进去参数
    return 0;
}
    

注释符号://

如果足够细心,会发现这里我用了//这么个符号,是用来注释用的,注释方便自己以后和他人的阅读。

占位符:%d、%f

有没有发现scanf_s和printf函数的%后面跟着的d还是f也好基本都是一致的。其实这个叫占位符,不同的数据在输入也好输出也好都需要用到特定的占位符,就像数据需要分类一样,占位符也有区分。

下面是我在控制台输入1.1和1.2 之后它输出的结果,可以看到输出的结果2.3后面还有5个零,即6个小数点。

类似地,我们完善一下小数的减法:

 void Sub(float a,float b)//该函数无返回值
{
    float c=a-b;
    printf("%f\n",c);
}

跟上面的加法写在一块就是

#include<stdio.h>//不要忘记包含头文件,不然scanf_s和printf函数都用不了
void Add(float a,float b)//加法函数,void表示该函数无返回值
{
    float c=a+b;//除了a和b,它们的和通常也是小数,也要定义成float
    printf("%f\n",c);
}
void Sub(float a,float b)//减法函数,void表示该函数无返回值
{
    float c=a-b;
    printf("%f",c);
}
int main()
{
    float a;
    float b;
    scanf_s("%f",&a);
    scanf_s("%f",&b);
    Add(a,b);//调用Add函数,这里要传进去参数
    Sub(a,b);//调用Sub函数,这里同样也要传进去参数
    return 0;
}

来调试并运行一下:

printf格式化输出小数点后几位: .2f%

有时候这么多个0也不是办法,我们要是想要保留小数点后几位的话该如何做?既然printf函数都可以做到将整数和小数输出,保留小数这种小操作肯定不是什么大问题。这一步其实我们在对输出的数据进行格式化处理,让数据以我们想要的模样打印在控制台上,所以printf函数也叫格式化输出函数,它名字里的f其实就是format格式化的意思。那我们就选择保留两位小数吧。

printf("%.2f\n",c);

可以看到,只要在f的前面加一个小数点和我们想要保留的位数就可以实现,其实还挺好理解的,因为它刚好对应上"保留小数点后几位”好,话不多说,我们就来试一试:

#include<stdio.h>
void Add(float a, float b)
{
    float c = a + b;
    printf("%.2f\n", c);//格式化输出小数,保留小数点后两位

}
void Sub(float a, float b)
{
    float c = a - b;
    printf("%.2f\n", c);//格式化输出小数,保留小数点后两位
}
int main()
{
    float a;
    float b;
    scanf_s("%f", &a);
    scanf_s("%f", &b);
    Add(a, b);
    Sub(a, b);
    return 0;
}

控制台:

printf函数中的换行符:\n

在说过的例子中,我们有很多次都用到了printf函数:

printf("Hello world\n");
printf("%d\n",c);
printf("%f\n",c);
printf("%.2f\n",c);

让上面所示,我们都在后面加了\n,其实这是一个换行符,可以让输出的数据在控制台更加整洁,也能理解为是printf函数格式化输出其中的一个本领,而且换行符不是一定在尾巴那里加,还能在中间任意位置,如下面的演示:

printf("Hello\nworld");

字符'A'和字符串"Hello world"

在上面我们可以看到这个函数可以输出的东西还真不少,除了像第一条Hello world的普通文本,还有对数据的格式化输出,但是有没有发现它们都需要用一个双引号包裹起来,其实这跟头文件里stdio.h是如何定义printf函数有关,我们说过函数名后面括号内填写传进去的参数,而很显然,这里传进去的是带有引号且引号里面有内容的参数。而在C语言中通常来说:用双引号包裹起来的内容叫字符串,比如“Hello world”用单引号包裹的叫字符,比如'A',在书写过程中,printf函数名后面跟着的是用双引号包裹起来的字符串,如果双引号里边有占位符,就用逗号隔开,后面写要替代占位符格式化输出的数据。比如我们也可以将上面计算结果的输出再变个花样:

printf("a+b的值是:%d\n",c);
printf("a+b的值是:%f\n",c);
printf("a+b的值是:%.2f\n",c);

接着我们用第三个输出格式在VS2022上调试并运行一下:

输出格式可以这么变着花样,这时候输入函数scanf_s可不乐意了,它说我也会!

scanf_s("a=%f",&a);
scanf_s("b=%f",&b);

它真的行吗?当我们尝试过后会发现并不奏效,控制台会出现下面的情况:

所有都乱套了。这说明输入函数并不能添加提示信息,那它这个工作就只好留给printf函数来做咯,所以我们可以改进成下面这样:

printf("a=");
scanf_s("%f",&a);
printf("b=");
scanf_s("%f",&b);

但其实没多大必要,一般较为复杂的信息才需要提示,比如游戏界面中通常都会有的菜单:

printf函数打印游戏界面菜单

我们可以利用字符串来打印一下:

printf("**********************");
printf("********0.play********");
printf("********1.exit********");
printf("**********************");

这会提示用户点击或者输入0时表示要玩,而输入1表示用户要退出游戏。

注:在VS2022或2019版本中放在一行中的任意位置,无需选中,按住Ctrl+C,便可以复制该行所有内容。

小数加减法计算器总结

#include<stdio.h>
void Add(float a, float b)//加法函数
{
    float c = a + b;
    printf("%.2f\n", c);

}
void Sub(float a, float b)//减法函数
{
    float c = a - b;
    printf("%.2f\n", c);
}
int main()
{
    float a;
    float b;
    scanf_s("%f", &a);
    scanf_s("%f", &b);
    Add(a, b);
    Sub(a, b);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2163394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型面试百问百答

大家好&#xff0c;这里是 大模型八哥。今天分享大模型面试相关知识点&#xff0c;持续更新。 1. RAG技术体系的总体思路 数据预处理->分块&#xff08;这一步骤很关键&#xff0c;有时候也决定了模型的效果&#xff09;->文本向量化->query向量化->向量检索->重…

钰泰-ETA6964A 锂电池充电器IC

描述. ETA6964A 是一款高度集成的 3A 开关模式电池充电管理和系统电源路径管理器件&#xff0c;适用于单节锂离子和锂聚合物电池。它具有快速充电功能&#xff0c;支持高输入电压&#xff0c;适用于各种智能手机、平板电脑和便携式设备。其低阻抗电源路径优化了开关模式的运行…

第六次人口普查,人口前100姓氏

第六次人口普查中&#xff0c;人口前100的姓氏具体排名和分布情况如下&#xff1a; 人口前10的姓氏 李&#xff1a;约占全国汉族人口的7.94%&#xff0c;是人口最多的姓氏。 王&#xff1a;约占汉族人口的7.41%&#xff0c;仅次于李姓。 张&#xff1a;约占全国汉族人口总数的7…

视频汇聚/视频存储/安防视频监控EasyCVR平台RTMP推流显示离线是什么原因?

视频汇聚/视频存储/安防视频监控EasyCVR视频汇聚平台兼容性强、支持灵活拓展&#xff0c;平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 EasyCVR安防监控视频综合管理平台采用先进的网络传输技术&#xff0…

Goland的使用

一、安装Goland 一、Goland简介 Goland是由JetBrains公司旨在为go开发者提供的一个符合人体工程学的新的商业IDE。这个IDE整合了IntelliJ平台的有关go语言的编码辅助功能和工具集成特点 二、下载相应的安装包 1、官网下载地址 GoLand by JetBrains: More than just a Go IDE 三…

网络编程,端口号,网络字节序,udp

前面一篇我们讲了网络的基础&#xff0c;网络协议栈是什么样的&#xff0c;数据如何流动传输的&#xff1b;接下来这篇&#xff0c;我们将进行实践操作&#xff0c;真正的让数据跨网络进行传输&#xff1b; 1.网络编程储备知识 1.1 初步认识网络编程 首先我们需要知道我们的…

Facebook对现代社交互动的影响

自2004年成立以来&#xff0c;Facebook已经成为全球最大的社交媒体平台之一&#xff0c;改变了人们的交流方式和社交互动模式。作为一个数字平台&#xff0c;Facebook不仅为用户提供了分享生活点滴的空间&#xff0c;也深刻影响了现代社交互动的各个方面。本文将探讨Facebook如…

Ollama在Windows安装,使用,简单调用API

一、安装ollama 1、安装 在Windows本地安装ollama&#xff0c;官方网页&#xff1a;https://ollama.com/download/windows 下载完安装包&#xff0c;安装就好&#xff0c;默认应该是C盘。应该是没办法改&#xff0c;如果有小伙伴能改&#xff0c;也请告知一下。 2、验证安装…

华为OD机试 - 数据单元的变量替换 - 分治、递归(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

基于yolov8+deepsort+gradio实现目标追踪演示

【效果展示】 【测试环境】 ultralytics8.2.95 gradio4.26.0 torch1.9.0cu111 理论上支持最新ultralytics版本 【实现部分代码】 with gr.Blocks() as demo:with gr.Tab("追踪"):# 使用Markdown显示文本信息&#xff0c;介绍界面的功能gr.Markdown(""…

linux固定串口别名

最近项目功能要求&#xff0c;需要将插入设备的串口设备占用的端口号固定住&#xff0c;这里记录一下设置过程方便以后查阅。 linux固定串口别名 配置过程相关补充 配置过程 列出当前插入USB端口的设备&#xff1a; lsusb查看当前设备的端口号&#xff1a; ls dev/查看当前设…

无人机飞手培训及巡检、吊运等飞行服务一体化技术详解

在无人机行业日益兴起的背景下&#xff0c;培养专业、合格的无人机飞手成为首要任务。飞手培训基础涵盖理论学习与安全意识建立两大方面。理论学习包括无人机基础知识&#xff08;如无人机类型、结构、原理&#xff09;、航空法规&#xff08;如民用无人驾驶航空器实名制登记管…

旧衣回收小程序搭建,开发功能优势

随着人们生活水平、消费水平的提高&#xff0c;在日常生活中产生了大量的限制物品&#xff0c;为了减少浪费&#xff0c;越来越多的人开始重视环保回收。旧衣物作为一种新型的回收方式&#xff0c;也逐渐得到了大众的关注&#xff0c;旧衣物回收市场发展规模也在持续上升&#…

Certbot自动申请并续期https证书

Certbot自动申请并续期https证书 一、 安装 Certbot&#xff1a;使用命令安装 Certbot&#xff1a; dnf install certbot python3-certbot-nginx获取 SSL 证书&#xff1a;运行 Certbot 命令来获取并安装 SSL 证书。 示例命令&#xff0c;替换其中的域名和路径信息&#xff1a…

PHP API 框架:构建高效API的利器【电商API接口】

在当今快速发展的互联网时代&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为连接不同应用程序和服务的关键。PHP&#xff0c;作为一种流行的服务器端脚本语言&#xff0c;提供了多种强大的框架来简化API的开发。本文将介绍PHP API框架的重要性&#xff0c;以及…

java并发编程笔记 之 线程和进程

文章目录 前言线程线程优先级和时间片创建多线程及运行线程的状态 进程查看进程的命令进程的通信方式 线程和进程的区别从关系上疑问集锦 前言 并发 1、并发是指在同一时间段内&#xff0c;计算机系统能够处理多个任务的能力。 2、在并发编程中&#xff0c;我们可以理解为多个…

chapter17-多线程基础——(自定义泛型)——day20

580-程序进程线程 581-并发并行 并发和并行也可以同时进行 582-继承Thread创建线程 583-多线程机制 主线程和子线程交替执行 单核&#xff1a;两个线程并发 多核&#xff1a;两个线程并行 主线程结束&#xff0c;不是说进程就结束&#xff0c;进程要等所有线程结束 584-为什…

模型Alignment之RLHF与DPO

1. RLHF (Reinforcement Learning from Human Feedback) RLHF 是一种通过人类反馈来强化学习的训练方法&#xff0c;它能够让语言模型更好地理解和执行人类指令。 RLHF 的三个阶段 RLHF 的训练过程一般分为三个阶段&#xff1a; 监督微调&#xff08;Supervised Fine-Tuning,…

认知杂谈82《跳出信息茧房,持续精进》

内容摘要&#xff1a; 互联网时代&#xff0c;信息丰富&#xff0c;但便捷性削弱了我们的好奇心。互联网是双刃剑&#xff0c;快速获取知识的同时&#xff0c;也让我们陷入“信息茧房”&#xff0c;限制视野。 好奇心减少&#xff0c;部分原因是互联网的“懒惰效应”&#xff0…

国家标准和团体标准有什么区别?

国家标准和团体标准的区别主要体现在以下几个方面&#xff1a; 1. 制定标准的主体不同&#xff1a;国家标准是由国家机构通过并公开发布的标准&#xff1b;团体标准是由学会、协会、商会、联合会、产业技术联盟等社会团体协调相关市场主体共同制…