C/C++ 语法教程(1)——数据类型与输入输出

C/C++ 语法教程(1)——数据类型与输入输出

Contents

数据类型与输入输出

常用数据类型(变量类型)

变量由数据类型和值构成。这下面的都是可能用到的较常见的基础数据类型。

下面所说的位都是二进制位,也就是 $0/1$。

数值型

  1. 整型
    1. short:范围为 $-32768(-2^{15}) \sim 32767(2^{15}-1)$,占用 $16$ 位 $2$ 个字节。(较少使用)
    2. int:范围从 $-2147483648(-2^{31}) \sim 2147483647(2^{31}-1)$,占用 $32$ 位 $4$ 个字节。一般整型都采用 int
    3. long long:范围从 $-2^{63} \sim 2^{63} - 1$,占用 $64$ 位 $8$ 个字节。
    4. char:范围从 $-128 \sim 127$ 或者 $0 \sim 255$,占用 $8$ 位 $1$ 个字节,一般用于字符类型,大小代表字符的ASCII 码。
    5. 除此之外,还有对应的 unsigned 类型(无符号类型),占用内存不变,但范围下界变为 $0$,上界变为原来上下界的绝对值之和(比如 $2^{32}-1$)。一般 signed 的前缀(符号类型)不写,如果出现可以忽略。
    6. bool:值为 $0(false)$ 或 $1(true)$,占用 $1$ 位 $1$ 个字节。
    7. 理论上还有一种 long 变量,但是因为 $32$ 位跟 $64$ 位电脑其范围占用字节不同,故一般不使用。
  2. 浮点型
    1. float:大概 $7$ 位有效数字,上下限大概 $\pm 3.4 \times 10^{38}$,占用 $32$ 位 $4$ 个字节。
    2. double:大概 $15$ 位有效数字,上下限大概 $\pm 1.7 \times 10^{308}$,占用 $64$ 位 $8$ 个字节。一般浮点型都采用 double
    3. long double:大概 $15$ 位有效数字,上下限大概 $\pm 1.2 \times 10^{4932}$,不同编译平台不同,有的是 $8$ 字节,有的是 $10$ 字节,有的是 $12$ 字节或 $16$ 字节。

非数值型

常用的就是 string 类型,用于储存字符串,某种意义上与 char 数组(不知道不急)相似,但又有区别之处。

获取类型信息

可以通过 sizeof(类型名) 获取一个数据类型占用字节数,比如 sizeof(int) 一般就是 $4$。

也可以用一些常数比如 INT_MININT_MAX 获取某种整型类型的上下限。

输入输出

C 常用的输入输出

  1. scanf:最常用的输入函数之一,基本格式形如 scanf("%d",&n);,其中 %d 称为格式控制符(不用知道),表示输入的类型,&n 用以获取变量 $n$ 的地址(如果输入的数组则可能不需要 &),用于将输入的信息存储到对应的内存空间。常见的格式控制符与类型对应表如下:
格式控制符类型和输出格式
%hdshort
%dintd 改成 o 就是八进制,改成 x 就是十六进制)
%lldlong long
%cchar
%ffloat
%lfdoublelong double(有时需要 %Lf
%uunsigned int
%lluunsigned long long
%sstringchar 数组
%e指数形式的浮点数的格式输出,比如 1.235e+001
%g在满足输出精度的情况下,由系统决定用 %f还是用 %e输出;未指定,输出精度则默认 $6$ 位有效数字
%p指针型(输出变量内存地址)
  1. printf:最常用的输出函数之一,基本格式形如 printf("%d",n);,前面的格式控制符与 scanf 相同,但注意后面不需要使用 & 获取地址。除此之外还有一些特殊符号比如:\n 表示换行,\t 表示制表符。使用形如 printf("%d\n",n); 即可。

  2. 如果想要输出若干位小数(四舍五入),可以用如下形式 printf("%.5lf",a); 表示输出 $a$ 保留 $5$ 位小数。

  3. 一般来说,printf("%m.nf",a);%lf%e%g 同理)表示输出浮点型小数点后(指数形式上面那个例子就是 $3$ 位)保留 $n$ 位,总输出占位长度不小于 $m$ 位,少的用空格在左侧补齐。

  4. 除此之外,其他的格式控制符也可以写成大概形如 %md%mc 的形式,表示控制总输出占位不小于 $m$ 位,少的用空格在左侧补齐。

  5. 特别地,如果想要左对齐,也就是空格补在右侧,只需在 $m$ 前加一个 - 即可,对于浮点型同理,也就是 %-md%-m.nf

  6. %0nd%.nd 均表示占 $n$ 位,右对齐,左侧补零。

  7. %ns 跟第 5 条相同,%.ns 则对于字符串长度大于 $n$ 的字符串只截取前 $n$ 个字符。

  8. % 后面紧跟一个 + 用于表示总是显示符号(也就是 +-),比如 %+d%+-12.2f

  9. 如果想要将上述中的 $n$ 和 $m$ 由程序变量决定,可以使用 printf("%*.*lf",m,n,a); 这种形式。

  10. 如果想输出 % 符号,需要使用 %%

  11. 输入的时候也同样可以通过类似的方法确定输入的位数(不能用于 char 变量,且不能规定小数点后位数)。

  12. 如果使用 scanf("%d,%d,%d",&a,&b,&c); 则必须在每一个输入的整型后紧跟一个逗号(通配符)(一般不建议使用)。

  13. getchar:一个字符输入函数(常用于输入优化),用于获取一个字符,获取的类型为 char,可以用 ch=getchar(); 这样子获取。

  14. 特别的,还有 _getch()_getche()_ungetch() 函数,用处极小,可以不用特别记忆。(需要再查就行)

  15. putchar:一个字符输出函数(常用于输出优化),用于打印一个字符,调用格式一般形如 putchar('a'); 或者 putchar(67);

  16. puts:一个字符串输出函数,打印完一个字符串后自动换行,调用格式一般形如 puts("Hello World!");

注:这里的主要要知道 1、2、3、14、15、16、17 条即可。

C++ 常用输入输出

C++ 提供了输入输出流,用法十分多样,但这里只介绍最常用的几种(需要 iostream 库并 using namespace std;):

  1. cin:最常用的输入函数之一,与 C 不同的是,它的运算符采用 >>,调用形式是 cin>>a>>b; 表示输入 $a$ 和 $b$ 两个变量,而输入的类型自动由 $a$ 和 $b$ 的类型获得。
  2. cout:最常用的输出函数之一,它采用 << 运算符,调用形式为 cout<<a<<b<<endl;,其中变量部分与 cin 相同,而 endl 表示输出一个换行,但一般较慢,建议使用 cout<<"\n";
  3. cerr:格式与 cout 相同,但是其输出必定位于屏幕(如果有文件输出时,cout 会输出到文件中),一般用于调试。
  4. 对于因为各种考虑没有 using namespace std; 的情况,可以采用 std::cin 这种方法调用 cincoutendlcerr

常用的头文件

一般会写如下几种:

  1. #include <iostream>,C++ 专用,C++ 输入输出相关
  2. #include <cstdio>,C++ 专用,C 输入输出相关,C 版本为 #include <stdio.h>
  3. #include <cmath>,C++ 专用,数学函数相关,C 版本同理(去 c.h
  4. #include <cstring>,C++ 专用,字符串函数相关,C 版本同理
  5. #include <algorithm>,C++ 专用,常用模板函数相关
  6. #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;
}

其他类型的输入输出请自行体验。

 

点赞 3

Comments: 2

  1. skylee03说道:

    long double 应该用 %Lf;代码示例printf里面少了一个\

Add your comment