目录
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++的高级数据结构栈,已经各种库函数,在新手篇里面做一个普及的作用.
最后,感谢大家的观看!