
C/C++ 语法教程(1)——数据类型与输入输出
数据类型与输入输出
常用数据类型(变量类型)
变量由数据类型和值构成。这下面的都是可能用到的较常见的基础数据类型。
下面所说的位都是二进制位,也就是 $0/1$。
数值型
- 整型:
short:范围为 $-32768(-2^{15}) \sim 32767(2^{15}-1)$,占用 $16$ 位 $2$ 个字节。(较少使用)int:范围从 $-2147483648(-2^{31}) \sim 2147483647(2^{31}-1)$,占用 $32$ 位 $4$ 个字节。一般整型都采用int。long long:范围从 $-2^{63} \sim 2^{63} – 1$,占用 $64$ 位 $8$ 个字节。char:范围从 $-128 \sim 127$ 或者 $0 \sim 255$,占用 $8$ 位 $1$ 个字节,一般用于字符类型,大小代表字符的ASCII 码。- 除此之外,还有对应的
unsigned类型(无符号类型),占用内存不变,但范围下界变为 $0$,上界变为原来上下界的绝对值之和(比如 $2^{32}-1$)。一般signed的前缀(符号类型)不写,如果出现可以忽略。 bool:值为 $0(false)$ 或 $1(true)$,占用 $1$ 位 $1$ 个字节。- 理论上还有一种
long变量,但是因为 $32$ 位跟 $64$ 位电脑其范围占用字节不同,故一般不使用。
- 浮点型:
float:大概 $7$ 位有效数字,上下限大概 $\pm 3.4 \times 10^{38}$,占用 $32$ 位 $4$ 个字节。double:大概 $15$ 位有效数字,上下限大概 $\pm 1.7 \times 10^{308}$,占用 $64$ 位 $8$ 个字节。一般浮点型都采用double。long double:大概 $15$ 位有效数字,上下限大概 $\pm 1.2 \times 10^{4932}$,不同编译平台不同,有的是 $8$ 字节,有的是 $10$ 字节,有的是 $12$ 字节或 $16$ 字节。
非数值型
常用的就是 string 类型,用于储存字符串,某种意义上与 char 数组(不知道不急)相似,但又有区别之处。
获取类型信息
可以通过 sizeof(类型名) 获取一个数据类型占用字节数,比如 sizeof(int) 一般就是 $4$。
也可以用一些常数比如 INT_MIN、INT_MAX 获取某种整型类型的上下限。
输入输出
C 常用的输入输出
scanf:最常用的输入函数之一,基本格式形如scanf("%d",&n);,其中%d称为格式控制符(不用知道),表示输入的类型,&n用以获取变量 $n$ 的地址(如果输入的数组则可能不需要&),用于将输入的信息存储到对应的内存空间。常见的格式控制符与类型对应表如下:
| 格式控制符 | 类型和输出格式 |
|---|---|
%hd | short |
%d | int(d 改成 o 就是八进制,改成 x 就是十六进制) |
%lld | long long |
%c | char |
%f | float |
%lf | double、long double(有时需要 %Lf) |
%u | unsigned int |
%llu | unsigned long long |
%s | string、char 数组 |
%e | 指数形式的浮点数的格式输出,比如 1.235e+001 |
%g | 在满足输出精度的情况下,由系统决定用 %f还是用 %e输出;未指定,输出精度则默认 $6$ 位有效数字 |
%p | 指针型(输出变量内存地址) |
printf:最常用的输出函数之一,基本格式形如printf("%d",n);,前面的格式控制符与scanf相同,但注意后面不需要使用&获取地址。除此之外还有一些特殊符号比如:\n表示换行,\t表示制表符。使用形如printf("%d\n",n);即可。如果想要输出若干位小数(四舍五入),可以用如下形式
printf("%.5lf",a);表示输出 $a$ 保留 $5$ 位小数。一般来说,
printf("%m.nf",a);(%lf和%e、%g同理)表示输出浮点型小数点后(指数形式上面那个例子就是 $3$ 位)保留 $n$ 位,总输出占位长度不小于 $m$ 位,少的用空格在左侧补齐。除此之外,其他的格式控制符也可以写成大概形如
%md、%mc的形式,表示控制总输出占位不小于 $m$ 位,少的用空格在左侧补齐。特别地,如果想要左对齐,也就是空格补在右侧,只需在 $m$ 前加一个
-即可,对于浮点型同理,也就是%-md和%-m.nf。%0nd和%.nd均表示占 $n$ 位,右对齐,左侧补零。%ns跟第 5 条相同,%.ns则对于字符串长度大于 $n$ 的字符串只截取前 $n$ 个字符。在
%后面紧跟一个+用于表示总是显示符号(也就是+和-),比如%+d、%+-12.2f。如果想要将上述中的 $n$ 和 $m$ 由程序变量决定,可以使用
printf("%*.*lf",m,n,a);这种形式。如果想输出
%符号,需要使用%%。输入的时候也同样可以通过类似的方法确定输入的位数(不能用于
char变量,且不能规定小数点后位数)。如果使用
scanf("%d,%d,%d",&a,&b,&c);则必须在每一个输入的整型后紧跟一个逗号(通配符)(一般不建议使用)。getchar:一个字符输入函数(常用于输入优化),用于获取一个字符,获取的类型为char,可以用ch=getchar();这样子获取。特别的,还有
_getch()和_getche()和_ungetch()函数,用处极小,可以不用特别记忆。(需要再查就行)putchar:一个字符输出函数(常用于输出优化),用于打印一个字符,调用格式一般形如putchar('a');或者putchar(67);。puts:一个字符串输出函数,打印完一个字符串后自动换行,调用格式一般形如puts("Hello World!");。
注:这里的主要要知道 1、2、3、14、15、16、17 条即可。
C++ 常用输入输出
C++ 提供了输入输出流,用法十分多样,但这里只介绍最常用的几种(需要 iostream 库并 using namespace std;):
cin:最常用的输入函数之一,与 C 不同的是,它的运算符采用>>,调用形式是cin>>a>>b;表示输入 $a$ 和 $b$ 两个变量,而输入的类型自动由 $a$ 和 $b$ 的类型获得。cout:最常用的输出函数之一,它采用<<运算符,调用形式为cout<<a<<b<<endl;,其中变量部分与cin相同,而endl表示输出一个换行,但一般较慢,建议使用cout<<"\n";。cerr:格式与cout相同,但是其输出必定位于屏幕(如果有文件输出时,cout会输出到文件中),一般用于调试。- 对于因为各种考虑没有
using namespace std;的情况,可以采用std::cin这种方法调用cin、cout、endl和cerr。
常用的头文件
一般会写如下几种:
#include <iostream>,C++ 专用,C++ 输入输出相关#include <cstdio>,C++ 专用,C 输入输出相关,C 版本为#include <stdio.h>#include <cmath>,C++ 专用,数学函数相关,C 版本同理(去c加.h)#include <cstring>,C++ 专用,字符串函数相关,C 版本同理#include <algorithm>,C++ 专用,常用模板函数相关#include <bits/stdc++.h>,C++ 专用,包含了几乎全部会用到的头文件,包括以上 $5$ 种。
一般 C++ 会在头文件引入后加上一句 using namespace std;。
代码示例
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
scanf("%d",&a);
cin>>b;
printf("%d\n",a+b);
cout<<a-b<<endl;
return 0;
}
其他类型的输入输出请自行体验。



Comments: 2
long double应该用%Lf;代码示例printf里面少了一个\。感谢提醒