引言
众所周知,在C++中有两个几乎是每个程序都会使用的函数:cout和cin,但是它们并不能满足我们的所有需求,时间复杂度也比较高,所以我们就需要两个更好的函数:scanf()和printf()。
目录
printf()的使用
cout和printf()的作用基本一样,只是cout需要用流输出运算符,而printf()只需要括号里的第一个参数,比如输出"Hello world":
//cout写法
cout << "Hello world";
//printf()写法
printf("Hello world");
接下来,我们讲讲printf()的用法:printf()函数的主要用法是这样的:printf(content,var);(别忘记加分号哦)其中,content参数为必选参数,表示输出的内容;而var参数为可选参数,传进需要带入进格式化占位符的变量。同时,printf()函数还能使用转义字符输出特殊字符(想了解转义字符的可以点击蓝色文字查看详细内容)。
而格式化占位符主要有以下7种:%p,%s,%f,%d,%c,%lf,%ld。它们分别表示指针地址,字符串,单精度浮点数,整型,字符,双精度浮点数和长整型(注意区分单精度浮点数类型和双精度浮点数类型、整型和长整型)。同时,部分格式化占位符还可以添加修饰符,例如:
- %(n)d:输出宽度为n的整数;
- %-(n)d:输出宽度为n的左对齐整数;
- %.(n)f:输出保留n位小数的浮点数。
需要注意的是,该函数被封装在cstdio库中(bits/stdc++.h万能头中有),不添加#include<cstdio>会导致错误。
以下为cout和printf()函数的区别:
cout | printf() | |
---|---|---|
头文件 | iostream | cstdio |
用法 | cout << content; | printf(content,var); |
作用 | 普通输出 | 格式化输出 |
时间复杂度(参考资料) | 高 | 低 |
scanf()的使用
有输出就大概率有输入,而cin和scanf()的主要作用就是输入。与printf()的学习一样,我们先从下面这段获取输入的代码说起:
//cin写法
cin >> a;
//scanf()写法
scanf("%d",&a);
我们不难发现,scanf()的用法如下:scanf(content,&var);其中,content和var均为必选参数。而content参数意为输入进的格式,var参数意为传入的参数(多个变量需要用逗号隔开)。例如对加法算式进行运算,就可以通过scanf("%f %f",&a,&b);代码输入进两个浮点数a和b。
在content参数中,也需要格式化占位符,表示输入内容的该部分传入变量,而其余未传入内容则不做特殊处理;在var参数中,可以有多个传入进的变量,而每个变量前都需要有取地址符(即&号),否则会传入错误。
该函数也被封装在cstdio库中,在使用printf()和scanf()函数前需要写#include<cstdio>或#include<bits/stdc++.h>。
以下为cin和scanf()函数的区别:
cin | scanf() | |
---|---|---|
头文件 | iostream | cstdio |
用法 | cin >> content; | scanf(content,var); |
作用 | 普通输入 | 格式化输入 |
时间复杂度(参考资料) | 高 | 低 |
例题:成绩
思路 这道题很简单,只需要输入进三个变量(这里定义成a,b,c),并输出a*0.2+b*0.3+c*0.5的值即可(以整数类型输出,但是直接%d结果错误,因此我们使用printf("%.0f",a*0.2+b*0.3+c*0.5);输出)。(建议使用printf()和scanf()函数编写)
题解
#include<bits/stdc++.h> //也可以写成#include<cstdio>
using namespace std;
int main(){
int a,b,c; //定义a,b,c三个变量
scanf("%d %d %d",&a,&b,&c); //输入进a,b,c
printf("%.0f",a * 0.2 + b * 0.3 + c * 0.5); //printf()格式化输出
return 0;
}