Pascal 转 C++ 教程2
转自 https://blog.wind-flower.cn/2018/08/07/%E6%95%99%E7%A8%8B2/
C++ 分支、循环、函数
C++ 中可以使用万能头文件 #include <\bits/stdc++.h>
分支
if语句
C++中if语句的用法和Pascal基本类似,但主要有三个不同点:进行判断的条件表达式一定要用圆括号包上、条件表达式后面没有then、else前单独的语句后要加分号。
if (a == b) // 这里没有then
printf("a equals b\n"); // 这里有分号
else
printf("a does not equal b\n");
和Pascal中一样,else子句是可选的,如果if子句或else子句中需要执行多条语句,需要用大括号包住。
if (a == b) printf("a equals b\n");
bool flag;
if (a == b) {
flag = true;
printf("a equals b\n");
} else {
flag = false;
printf("a does not equal b\n");
}
条件表达式
条件表达式中使用&&(and)、||(or)和!(not) 的方法和Pascal中基本类型。需要注意&&和||的优先级比<、>、<=、>=、==、!=都要低,因此可以直接这样写:
if (a <= b && b <= c)
在&&和||中,&&优先级较高,也就是说
(a <= b || b <= c && b <= d)
等价于
(a <= b || (b <= c && b <= d))
需要注意!运算符的优先级很高,要适当加入括号,例如if (! (a == b))
就等价于if (a != b)
。
还有bool
类型的变量可以直接用于条件判断,无需用==运算符
判断,例如flag是bool类型的变量时,直接就可以写if (flag)
或if (! flag)
。
C++中任何表达式都可以被转换成bool类型进行逻辑判断,只有0表示false,其他值都表示true。
这样的话,if (x)
就等价于if (x != 0)
习惯于写Pascal程序的话,开始写C++程序时常常会犯这样的错误:if (a = b)
。这样的语句是能够编译通过并执行的,它的逻辑是a=b
这样的赋值表达式是有返回值的,返回值为a(或b)的值,然后再转换成bool类型进行逻辑判断。也就是说,这个if语句等价于先将b赋值给a,再判断a是否等于0,不等于0的话执行if子句中的内容。在编译的时候加上-Wall参数,有的编译器会对这样的用法给出警告信息。
switch语句
switch语句类似Pascal中的case语句。被switch的类型只能是整数类型、字符型或枚举类型。
int x;
scanf("%d", &x);
switch (x) {
case 0:
printf("x is 0\n");
break;
case 1:
printf("x is 1\n");
break;
case 2:
printf("x is 2\n");
break;
default:
printf("x is other value\n"