C++学习之旅 第二章 printf与cout

news2024/12/23 22:26:42

目录

1.printf简介

 2.printf的四种用法

2.1 printf("字符串");

2.2 printf("输出控制符",输出参数);

2.3 printf("输出控制符1 输出控制符2  ,,,,,,,, ", 输出参数1, 输出参数2,....... );

2.4 printf("输出控制符 非输出控制符 ",输出参数);

3.printf为什么需要输出控制符

4.cout简介

cout的三种用法

5.1 std::cout

5.2 加上using namespace std;可不用在前面加上std::

5.3 在using namespace std; std后面加上::cout

 6.cout和i/i++/++i的组合使用

 7.iomanip库用法总结

8.结尾


1.printf简介

      printf函数是格式化输出函 ,数,一般用于向标准输出设备按规定格式输出信息。在C++中产生格式化输出的函数。其向终端输出字符。printf中的f的意思是format,它的作用是按照指定的格式输出数据。printf也是C++中很重要的一个函数,它能让用户可以与程序交流,是一个多才多艺的函数。                                                                                                                                                     printf 将变量的内容输出到显示器上。

 函数原型;                                     int     (    const   char  *  format,       ...   );

 2.printf的四种用法

2.1 printf("字符串");

这是我们最开始接触用法 hallo world就这种用法

#include<iostream>
int main()
{
	printf("hallo world!\n");  //\n是换行
	return 0;
}

其中的hallo world可以用任意字符代替 比如THE WORLD 白金之星之类的

2.2 printf("输出控制符",输出参数);

#include<iostream>
int main()
{
    int i = 5;
    printf("%d", i);  //d是十进制
    return 0;
}

假设这里我写的是5,也就是把5的二进制代码用十进制表示出来。所以在这里的 i 指的不是5而是5的二进制代码,不同的格式所表现的不一样,如

#include<iostream>
int main()
{
    int i = 100;
    printf("%X", i);  //X是十六进制
    return 0;
}

  这里是把100的二进制代码用十六进制表现出来,结果是64,因此可以体现输出控制符的重要性。它决定了把二进制代码以什么形式输出的。

2.3 printf("输出控制符1 输出控制符2  ,,,,,,,, ", 输出参数1, 输出参数2,....... );

当然了这其中输出控制符1对应输出参数1,2对应2,依此类推。

#include<iostream>
int main()
{
    int j = 6;
    int k = 9;
    printf("%d %d\n", j, k);
    return 0;
} 

  这里我们不能用一个%d表示两个参数,因为语法不是这样规定的(创始人这样规定的没办法)。同时输出控制符与输出参数的个数必须匹配,一一对应。

2.4 printf("输出控制符 非输出控制符 ",输出参数);

这里我们需要了解的是什么是输出控制符,什么是非输出控制符。作为初学者,我认为带%的大部分应该都是。比如 %d %f %x %c之类的。

#include<iostream>
int main()
{
    int f =47;  //100是十进制
    printf("%x" ,f)         //输出结果是2f
    printf("%X" ,f)         //输出结果是2F
    printf("%#X" ,f);       //输出结果是0x2F
    printf("%#x" ,f);       //输出结果是0x2f
    return 0;
}

这里%#X的优势就体现出来了,有了0x可以体系这是十六进制。

     输出控制符包括如下

                                  %d        --    int

                                  %ld       --    long int

                                  %c        --    char

                                  %f         --    float

                                  %lf        --    double

                                  %x        --    int 或 long int 或 short int

                                  %o        --    同上

                                  %s        --    字符串

我们运用非输出控制符可以使程序更美观,比如这样:

#include<iostream>
int main()
{
    int j = 6;
    int k = 9;
    printf("j = %d, k = %d\n", j, k);  //输出结果j = 6,k = 9
    return 0;
}

这么一看,这不漂亮多了,这样让人看得也很舒服明了!

然后,我给大家解释一下程序后面写的"\n"是什么意思,\n,就是换行一下,写\n可以让屏幕换一个行,接下来输出的都会在下一行!

3.printf为什么需要输出控制符

  

首先,01组成的代码可以表示数据也可以表示指令,打个比方,010101010111000这一串它表示的是一个数字还是一个字符还是一个电影或图片,这我们无法知道。这01本身没有含义,取决我们如何来解读。所以必须要有有输出控制符来解读,要不然谁知道这是啥意思。

其次,如果01组成的代码表示的是数据的话,那么同样的01代码以不同的格式输出就会有不同的输出结果。所以我们就需要一个输出控制符。


4.cout简介

  cout 是C++中 ostream 类型的对象,该类被封装在 < iostream > 库中,该库定义的名字都在命名空间 std 中,所以 cout 全称是 std::cout 。

  在cout这个类里面,有着非常重要的函数,可以用里面的函数输出(由于是新手篇,这里就不多讲了),还有一个,而已cout<<数字/字符串;大家可能不知道,"<<"是左移运算符的意思,作用是将一个二进制数的值左移一位,但是在cout上面意思就不好说通了,如果是数字那还好说,但是是字符串的话,怎么转化为二进制,怎么左移?

  所以这个<<并不是左移运算符的意思,在这里,我给大家普及一下知识:这是运算符重载,重载是什么意思呢?就是一个函数,名称相同,类型相同,但是里面的参数不相同,编译器是允许运行的,这就形成了重载关系,在这个otream类里面,将<<运算符重载了一遍,这样就可以进行输出了(新手篇,具体内容不细讲).

如果大家想要了解运算符重载的知识,可以看一下我的这篇文章:

C++运算符重载总结_龙星尘的博客-CSDN博客一定要自定义一个拷贝构造函数,这样在重载运算符返回对象副本的时候,编译器会自动调用拷贝构造函数,否则会出现结果错误。把‘=’运算符重载为类成员变量,并且将返回值设计成为该类的引用。除了‘=’运算符以外,其他的运算符重载最好设计成为友元函数。这就是我们今天要讲的运算符重载的总结.友元关系不会被派生类继承。https://blog.csdn.net/wo_ai_luo_/article/details/127791616

cout的三种用法

前提:如果程序中想使用 cout ,需要包含库 < iostream > 。

5.1 std::cout

因为 cout 是 std 库中的一个类的对象,所以使用的方法是 std::cout ,如下:

#include <iostream>
int main(){
	int i;
	std::cin >> i;
	std::cout << i << std::endl;
	return 0;
}

这样子比较麻烦,所有的都要加std::,个人建议不要这种输出.

5.2 加上using namespace std;可不用在前面加上std::

  在C++里面,有一个std的命名空间,使用了之后,就方便很多了,不用在前面加上std::了!

使用 std 命名空间:

#include <iostream>
using namespace std;
int main(){
	int i;
	cin >> i;
	cout << i << endl;
	return 0;
}

这样,后面程序中可以直接使用 cout ,而且std中的其他名字也可以直接使用,如 cin 、 endl 等。

5.3 在using namespace std; std后面加上::cout

#include <iostream>
using namespace std::cout;
int main(){
	int i;
	std::cin >> i;
	cout << i << std::endl;
	return 0;
}

这样,后面程序中只可以直接使用 cout ,而 std 中的其他名字不可以可以直接使用(这种方式一般情况下不建议使用,但是有些题很特殊,可能需要这样来办)。

 6.cout和i/i++/++i的组合使用

i++ 和 ++i 是有着不同的含义,和 cout 组合使用也会得到不同的结果,下面给出一段代码:

#include <iostream>
using namespace std;
int main(){
	int i = 1;
	cout << ++i << i++ << i << i++ << ++i << endl;
	return 0;
}

这段代码的结果是多少呢?
A.23345
B.22335
C.54535
D.53525

我们不妨先理解一下 cout 输出控制台的过程。看下面这幅图:

根据表达式来看, endl 会作为一个可以供 cout 接收的对象往前传,而 ++i 和 endl 结合起来作为一个可以供 cout 接收的对象往前传,依次递推下去。物理实现上需要一个栈来保存可以供 cout 接收的对象,然后从右向左放到这个栈里,然后依次弹出输出在屏幕上。其中, i 和 ++i 会在栈里面保存 i 的引用,而 i++ 会在栈里面保存数字,过程如下:

第一步:将 endl 压入栈中, i 值不变;
第二步:将 i 的引用压入栈中, i 的值加 1 变成 2(因为是 ++i );
第三步:将 2 压入栈中, i 的值加 1 变成 3(因为是 i++ );
第四步:将 i 的引用压入栈中, i 的值不变(因为是 i );
第五步:将 3 压入栈中, i 的值加 1 变成 4(因为是 i++ );
第六步:将 i 的引用压入栈中, i 的值加 1 变成 5(因为是 ++i );
第七步:将栈里的数据依次弹出,即可得到 53525 。(因为i的值是 5 ,所以所有 i 的引用都是 5 )

 7.iomanip库用法总结

iomanip是cout里面的头文件库,给大家讲一下:

< iomanip > 库封装了很多对输入输出流的操作,常见用法总结如下:

控制符    作用
setbase(n)    以n进制方式输出(n=8,10,16)
setfill(ch)    设置字符填充,ch可以是字符常量或字符变量
setprecision(n)    设置输出有效位数为n位
setw(n)    设置字符宽度为n位,只对后一个有影响
setiosflags(ios::uppercase)    以大写字母显示
setiosflags(ios::fixed)    实现对小数点后的数字的控制
setiosflags(ios::scientific)    以科学计数法显示
setiosflags(ios::showpoint)    强制显示小数点
setiosflags(ios::showpos)    强制显示正号
setiosflags(ios::left)    设置输出左对齐
setiosflags(ios::right)    设置输出右对齐
resetiosflags(…)    终止括号中的输出格式

8.结尾

  第6点和第7点比较难理解,里面设计到了C++的高级数据结构栈,已经各种库函数,在新手篇里面做一个普及的作用.

最后,感谢大家的观看!

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

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

相关文章

化妆品展示网页设计作业 静态HTML化妆品网站 DW美妆网站模板下载 大学生简单网页作品代码 个人网页制作 学生个人网页设计作业

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

C++11【智能指针详解】

智能指针&#x1f3de;️1. 为什么引入智能指针&#xff1f;&#x1f301;2. 智能指针的使用及原理&#x1f4d6;2.1 RAII思想&#x1f4d6;2.2 智能指针的原理&#x1f320;3. 常见智能指针&#x1f4d6;3.1 auto_ptr&#x1f4d6;3.2 unique_ptr&#x1f4d6;3.3 shared_ptr&…

基于深度学习的宋词生成

《自然语言处理》课程报告 摘 要 宋词是一种相对于古体诗的新体诗歌之一&#xff0c;为宋代儒客文人智慧精华&#xff0c;标志宋代文学的最高成就。宋词生成属于自然语言处理领域的文本生成模块&#xff0c;当前文本生成领域主要包括基于语言模型的自然语言生成和使用深度学习…

RK3568平台开发系列讲解(安卓适配篇)Android 源码的 device 目录

🚀返回专栏总目录 文章目录 一、device 目录简介二、Android 产品配置各种变量沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 Android 源码的 device 目录。 一、device 目录简介 Android 源码下的 device 目录是 Android 源码中对产品的描述文件夹,各…

STM32个人笔记-CAN总线通讯

笔记来源于STM32F103VET6&#xff0c;野火指南者&#xff0c;中文参考手册&#xff0c;HAL库开发手册和b站的野火指南者视频。观看过好多次了&#xff0c;但往往理解得不够全面&#xff0c;现记下小笔记&#xff0c;用来回顾。属于个人笔记。​​​​​ 大四实习那年记忆颇深…

基于Java+Springboot+Vue+elememt宠物用品商城系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取联系&#x1f345;精彩专栏推荐订阅&#x1f447;&#x1f…

K线形态识别_空方尖兵

写在前面&#xff1a; 1. 本文中提到的“K线形态查看工具”的具体使用操作请查看该博文&#xff1b; 2. K线形体所处背景&#xff0c;诸如处在上升趋势、下降趋势、盘整等&#xff0c;背景内容在K线形态策略代码中没有体现&#xff1b; 3. 文中知识内容来自书籍《K线技术分析》…

第九章 内置模块

目录 第九章 内置模块 1.math模块 1.查看&#xff1a; 2.常用方法&#xff1a; 2.random模块 1.查看&#xff1a; ​2.例&#xff1a; 3.random(a,b) 4.random.sample(range(0,20),10) 3.os模块与os.path模块 1.作用 2.目录 3.os模块与操作系统的关系 4.路径 5.判…

自我实现tcmalloc的项目简化版本

项目介绍 该项目是基于现代多核多线程的开发环境和谷歌项目原型tcmalloc的自我实现的简化版本,相比于本身就比较优秀的malloc来说,能够略胜一筹,因为其考虑了 性能,多线程环境,锁竞争和内存碎片的问题,主要利用了池化思想来管理内存分配,对于每个线程&#xff0c;都有自己的私…

鸿蒙开发套件全面升级,助力鸿蒙生态蓬勃发展

目录 1. 全场景分布式系统 2. HarmonyOS的超能力&#xff1a;ArkTS API万箭齐发 3.解锁“鸿蒙开发套件”的新技能 &#xff08;1&#xff09; 智能代码编辑器 &#xff08;2&#xff09;Hvigor编译构建 &#xff08;3&#xff09;热重载&#xff1a;向看直播一样查看运行…

MySQL : 彻底搞懂一条SQL的执行过程

整体流程 组件介绍 连接器 处理客户端的连接&#xff0c;一般处理我们这个命令&#xff0c;判断是否满足接入server的条件 mysql ‐h host[数据库地址] ‐u root[用户] ‐p root[密码] ‐P root查询缓存 在8.0之前&#xff0c;如果用户开启了查询缓存的开关&#xff0c;那么…

vue2.6 + ts 使用vuex

目录vue2.6 ts 使用vuex安装01&#xff1a;直接使用 store / index.ts的数据store / index.tsmain.ts001&#xff1a;同步mutation操作vuex数据与获取getters001&#xff1a;效果002&#xff1a;异步action、mutation操作vuex数据002&#xff1a;效果02&#xff1a;引入其他模…

CANoe 简介

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

Go 语言项目源码解析:定时任务库 cron

环境准备 首先我们将源码克隆&#xff08;Fork&#xff09;为自己的个人仓库&#xff0c;只需要在 GitHub 项目主页点击 Fork 按钮&#xff0c;然后输入项目名称点击确认即可。克隆完毕后&#xff0c;可以下载到本地&#xff0c;或者直接在科隆后的 GitHub 仓库主页上点击 Cre…

RabbitMQ

RabbitMQ 1.MQ引言 MessageQueue: 消息队列 模块之间的耦合度多高&#xff0c;导致一个模块宕机后&#xff0c;全部功能都不能用了&#xff0c;并且同步通讯的成本过高&#xff0c;用户体验差。 1.1什么是MQ MQ&#xff08;Message Queue&#xff09;消息队列&#xff0c;是基…

Android Studio App开发实战项目之广告轮播(附源码 可用于大作业)

需要图片集和源码请点赞关注收藏后评论区留言即可~~~ 电商App的首页上方&#xff0c;都在明显位置放了一栏广告条&#xff0c;并且广告条会轮播&#xff0c;非常吸引眼球&#xff0c;这种广告轮播的功能&#xff0c;为推广热门事物出力甚大。 轮播视频已上传至我的主页&#x…

【云原生】docker 搭建ElasticSearch7

前言 本篇演示如何基于docker环境快速搭建起es7的环境 安装es7.6 1、拉取镜像 docker pull elasticsearch:7.6.2 2、执行下面的命令进行安装 docker run -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms512m -Xmx512m"…

Android Studio App开发实战项目之计时器(附源码 简单易懂,适合新手学习)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、Handler的延迟机制 活动页面的Java代码通常是串行工作的&#xff0c;而且App界面很快就加载完成容不得半点延迟&#xff0c;不过偶尔也需要某些控件时不时的动一下&#xff0c;好让界面呈现动画效果更加活泼&#xff0…

shiro框架04会话管理+缓存管理+Ehcache使用

目录 一、会话管理 1.基础组件 1.1 SessionManager 1.2 SessionListener 1.3 SessionDao 1.4 会话验证 1.5 案例 二、缓存管理 1、为什么要使用缓存 2、什么是ehcache 3、ehcache特点 4、ehcache入门 5、shiro与ehcache整合 1&#xff09;导入相关依赖&#xff0…

2019银川F,ccpc威海D - Sternhalma 2022

1401D - Maximum Distributed Tree 求每个边经过的次数&#xff0c;假设求u,v这条边的次数&#xff0c;边的左端是u这个集合一共有n-siz[v]个点&#xff0c;右端是v这个集合有siz[v]个端点&#xff0c;经过这条边的次数就是siz[v]*(n-siz[v]),然后再按照次数多的乘以大的质因数…