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

这篇具有很好参考价值的文章主要介绍了C++学习之旅 第二章 printf与cout。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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 输出控制台的过程。看下面这幅图:

printf和cout,C++学习之旅,c++,学习,cout,printf,进制

根据表达式来看, 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++的高级数据结构栈,已经各种库函数,在新手篇里面做一个普及的作用.

最后,感谢大家的观看!文章来源地址https://www.toymoban.com/news/detail-717462.html

到了这里,关于C++学习之旅 第二章 printf与cout的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ 并发编程实战 第二章 线程管控

    线程通过构建 std::thread 对象而自动启动 ,该对象指明线程要运行的任务。 对应复杂的任务,可以使用函数对象。 一旦启动了线程,我们就需明确是要等待它结束(与之汇合 join() ),还是任由它独自运行(与之分离 detach() ) ❗❗❗ 同一个线程的 .join() 方法不能被重复调用

    2023年04月08日
    浏览(25)
  • 【C++】C++ primer plus第二章练习题

    c++程序的模块叫什么? 函数。 下面的预处理器编译指令是做什么用的? 包含头文件,将iostream文件的内容添加·到代码中 下面的语句是做什么用的? using namespace std; using是预编译器指令,让其使用std命名空间 什么语句可以用来打印短语“Hello, world”,然后开始新的一行? s

    2024年02月06日
    浏览(34)
  • C++ Primer Plus第二章编程练习答案

    答案仅供参考,实际运行效果取决于运行平台和运行软件 1.编写一个C++程序,它显示您的姓名和地址。 2.编写一个C程序它要求用户输入一个以 long 为单位的距离,然后将它转换为码(- ng等于220码) 3.编写1个C++程序它使用3个用户定义的函数(括mai()),并生成下面的输出Three blind

    2024年02月09日
    浏览(40)
  • 《Spring揭秘》-第二章- 学习记录

    IoC全称为Inversion of Control,中文翻译为控制反转,同时还有一个别名叫 依赖注入DI(Dependency Injection)。大多将IoC与DI看作同等概念,也有部分观点认为 依赖注入可以看作IoC的一种实现方式。 在没有Spring的时候,当我们需要依赖某个类或服务时,一般通过new创建一个对象(或者通

    2023年04月11日
    浏览(64)
  • SV学习——数据类型(第二章)

    verilog有1995和2001版本,而SV是verilog的延伸,SV发布的时候直接就是3.0,之后可能不再存在verilog,而是统一用SV。SV是完全兼容verilog的。verilog文件以.v结尾,SV文件以.sv结尾。语法是全部兼容的,SV是verilog的扩展和延伸。 verilog中有reg和wire两种数据类型,都是四值逻辑 0,1,x,

    2024年02月10日
    浏览(63)
  • JS深入学习笔记 - 第二章.类和对象

    3.1面向对象 这里顺带提一句学习JAVA时,老师说的面向对象和面向过程的区别: 面向过程:强调做什么事情,具体什么步骤。举个把大象放进冰箱的例子: 打开冰箱门 把大象放进冰箱 关上冰箱门 面向对象: 强调的是做动作的主体(称之为对象) 冰箱 :打开操作 冰箱 :放

    2024年02月08日
    浏览(34)
  • dx12 龙书第二章学习笔记 -- 矩阵代数

    1.矩阵及其运算 矩阵的运算 :①加②减③标量乘法 ④矩阵乘法: 矩阵乘法要有意义的条件是矩阵A的列数和矩阵B的行数必须相同,所以一般不满足交换律 ⑤转置矩阵: ⑥矩阵行列式:det A 学习行列式的主要目的是:利用它推导出求逆矩阵的公式 方阵A是可逆的,当且仅当det

    2024年02月11日
    浏览(37)
  • 云计算学习笔记——第二章 虚拟化与容器

    1.什么是虚拟化    一种计算机资源管理技术 ,将各种IT资源抽象、转换成平一种形式的技术都是虚拟化技术。 2.作用   通过该技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个计算机可运行不同的操作系统,并且应用程序都可以

    2024年01月22日
    浏览(36)
  • 云计算学习,第二章,私有企业网络构建运维

    ( 1 )通过组网设计,掌握小型交换网络的组建,对小型网络系统进行分析,提出建网 解决方案。 ( 2 )掌握 Trunk 接口和 VLAN 相关技术概念。 ( 3 )综合运用 VLAN 创建、 Access 和 Trunk 接口配置、 VLAN 划分,实现网络的互连 互通。 1. 架构分析 ( 1 )需求分析 本实验的目的

    2024年02月03日
    浏览(42)
  • 【UnityShader入门精要学习笔记】第二章(3)章节答疑

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (PS:章节答疑不是我答,是原作者对一些比较容易产生困惑的地

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包