Pascal 转 C++ 教程1

这篇教程介绍了如何从Pascal转向C++,涵盖C++程序的基本结构、语法、数据类型和函数。文章详细讲解了C++中的基本类型,如整型、实型、字符型、布尔型及其转换规则,还涉及了指针、引用、常量和类型别名的概念。此外,教程还讨论了运算符、输入输出、数据结构如数组、字符串的使用以及C++特有的cin和cout流操作。文章最后提到了C++中的数据结构和一些常用函数,如数组、指针和字符串的处理函数。
摘要由CSDN通过智能技术生成

Pascal 转 C++ 教程1

转自 https://blog.wind-flower.cn/2018/08/06/%E6%95%99%E7%A8%8B1/

C++ 程序结构、数据结构、语法、函数

一个标准的C++程序:
    #include <cstdio>
    #define maxn 1000   // 预处理指令
    using namespace std;
    int a[maxn];        // maxn被替换为1000
    int main() {        // 主函数
       int n;
       scanf("%d", &n);
       for (int i = 0; i < n; i ++)
           scanf("%d", &a[i]);
       for (int i = 0; i < n; i ++)
           printf("%d\n", a[i]);
       return 0;
    }

语法

花括号和分号

{ 相当于Pascal中的begin,}相当于Pascal中的end,语句和Pascal语言一样用;分隔,一般一行写一条语句。

注释

C++中有两种方法使用注释(不编译的内容)。
//后到行尾的内容为注释(和Pascal中的//一样)。
/**/中间的内容为注释,相当于Pascal中的{和}。

预处理指令(#开头)

头文件(#include)
宏定义(#define)

头文件

OI竞赛中会用到的标准头文件有两类:继承自C的头文件STL头文件。C的头文件一般以c开头,例如前面的cstdio

OI竞赛中可能会用到的头文件
  • cstdio:包含读入输出相关函数,可以记为c+std(standard)+io(input&output)。一般来说这个头文件必然要包含。
  • cstring:包含C-style字符串相关的函数。
  • cmath:包含数学相关的函数。
  • cstdlib:包括随机函数等。
  • ctime:获取时间当做随机函数的种子。
  • STL头文件:后面会详细介绍STL。
主函数

和Pascal中的主程序一样,是程序开始执行的地方。不同的地方是C++的主函数有返回值,类型为int,并且正常结束时应该返回0。
在其他函数中,也可以用cstdlib头文件中的函数exit(0)直接退出整个程序,其中的参数0表示的就是主函数返回值。

基本类型
  • 整型
  • 实型
  • 字符型
  • 布尔型
带符号整型

int、short、long、long long

  • intlong为32位带符号整型(Pascal中的longint),范围是-2^31~2^31-1
  • short为16位带符号整型(Pascal中的integer),范围是-2^15~2^15-1
  • long long为64位带符号整型(Pascal中的int64),范围是-2^63~2^63-1
  • int的最大值约为2.1×109,为首选整型类型。
无符号整型

在对应的带符号整型前面加上unsigned,也就是unsigned int、unsigned short、unsigned long、unsigned long long。其中unsigned int可以直接写为unsigned
无符号整型不能存储负数,但存储的最大值可以扩大一倍,例如unsigned的范围就是0~2^32-1。

实型、字符型和布尔型
  • C++中有floatdoublelong double三种实型,精度依次递增,一般使用double
  • char类型只能存储字符,计算机内部是用ASCII码表示字符的,实际的范围是0~255。字符常量使用单引号包围的。
  • bool型只能为truefalse
各种类型占用的字节数
  • 1字节:char、bool
  • 2字节:short、unsigned short
  • 4字节:int、unsigned、long、unsigned long、float
  • 8字节:long long、unsigned long long、double
  • 12字节:long double
各种类型的常量
  • int类型的常量:2、100等(不需要任何后缀)
  • double类型的常量:0.0、1.5、1e50等
  • char类型的常量:’a’、’d’等(将字符夹在单引号间)
  • bool类型的常量:true和false
  • unsigned类型的常量:50u、50U(在非负整数后加上u或U后缀)
  • long long类型的常量:1000ll、1000LL
其他进制的整型常量
  • 十六进制前加0x前缀,例如0x100f、0x100F(大写小写均可)。
  • 八进制前加0前缀,例如0144,它表示八进制的144,十进制的值是100。因此不要随便加多余的零,防止被当做八进制处理。
转义字符

某些特殊的字符可以用转义的方法表示。转义字符以反斜杠()开头,例如\n。下面是比较常见的五种转义字符:

  • \n 换行
  • \\ 反斜杠
  • \? 问号
  • \' 单引号
  • \" 双引号
定义基本类型的变量
  • 定义变量的方式为类型名+变量名:
    • int x1, y1;
    • char x2, y2;
    • double x3, y3;
    • bool x4, y4;
  • 定义变量时也可以直接指定初值:
    • int a = 10;
    • char b = ‘p’;
    • double c = 1.2;
    • long long d = 1000LL;
    • bool e = true;
  • 定义基本类型的变量
    • C++语言几乎可以在程序的任何地方定义变量,但定义的变量只有在定义之后才能使用,如果在定义处之前就使用会给出编译错误。
隐式类型转换
  • 假如将A类型的变量或常量赋值给B类型的变量,A类型就会被隐式地转换为B类型。
  • 两个不同类型进行二元运算时,小类型也会被隐式转换成大类型以便运算。
    int a = 100;
    long long b = a;
    // int类型的a被隐式转换为long long类型后赋值给b
    double x = 1.5;
    int y = 10;
    double z = x * y;
    // int类型的y被隐式转换为double类型后和x相乘
显式类型转换
  • 除了隐式类型转换,在需要的时候,我们也可以显式地对变量的类型进行转换。其实我也比较推荐大家尽量使用显式类型转换,这样可以避免某些可能的错误。显示转换的方法是(type)x,其中type是要转换成的类型。假如后面要转换的是一个表达式,需要加上括号,即(type)(a+b),这是由于运算符优先级的问题,后面会再次提到。
    int a = 1000000000;
    long long b = (long long)a * a;
  • 这里int类型的a被显式转换成long long类型后和int类型的a相乘,由于相乘的两个类型不同,后面int类型的a会被隐式转换成long long类型后再与前面的a相乘。这里不进行显式类型转换的话,由于相乘的两个类型都是int,就会发生溢出,不过溢出这种错误运行时并不会报错。
基本类型间的转换
  • 实型->整型:去除小数部分,仅保留整数部分
  • 整型->实型:无变化,精度可能会损失
  • 整型<->字符型:ASCII码
  • 布尔型->整型:true变成1,false变成0
  • 整型->布尔型:0变成false,其他变成true
注意有些转换可能会溢出,例如unsigned->int,long long->int等
  • 由于有隐式类型转换,将数字字符转换成数字可以直接写成ch-‘0’,类似的还有ch-‘a’,其中ch表示数字字符或小写字母字符。
  • 假如要从大类型转换为小类型(如long long转换为int、double转换为int),因为精度可能会损失,建议使用显式类型转换提示自己。
指针类型

指针是指向特定类型内存地址的类型。C++中的&运算符可以取出某个变量在内存中的地址,以便赋值给相应的指针类型。后面讲运算符时还会介绍通过new的方式给指针赋值。空指针的值为0(也可以用NULL表示)。

    int a = 100;
    int *b = &a;
    // b是一个指向int类型的指针
    // 并且将它初始化为a变量的地址
    *b = *b * 2;
    // 相当于a变量被乘2int *c = 0; // c是一个空指针
    *c = *c * 2; // 运行到这条时会错误
引用类型

引用和指针有相似的地方,但更恰当的理解是给变量取别名。引用在定义时必须被恰当地初始化,并且之后就不能再修改成其他变量的别名。

    int a = 100;
    int &b = a;
    // b是一个int的引用类型
    // 并且它被初始化指向a
    b = b * 2;
    // 相当于a变量被乘2了
注意点
  • 引用指针类型指向的地址时,需要在指针变量名前加*,但引用是和普通变量一样直接使用。
  • 定义指针和引用变量时需注意,每一个指针或引用变量前都要加*&
    int *a, b, &c = b;
    // a是指向int的指针类型
    // b是普通的int类型
    // c是指向int的引用类型
const类型

和Pascal中一样,C++里也可以定义常量,适当地定义常量不仅方便编程,也能够使程序意义更明确

    const double pi = 3.141592653;
    const 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值