1 条件语句
1.1 条件表达式
1.1.1 效率原则
若表达式的一部分已经能确定真值,则后续部分不再执行。如:
//for example
int main()
{
int a = 10, b = 0;
if (a >= 10 || b++ == 0) //(1)
……;
if (a > 10 || b++ == 0) //(2)
……;
}
(1)中b++不执行,因为a>=10已经使表达式为真。而(2)中b++执行。
1.2 if…else…
1.2.2 else的就近匹配原则
若不显示指明块,else能与多个if匹配,则匹配最近的if。如:
//for example
#include <iostream>
using namespace std;
int main()
{
int a = 10, b = 0;
if (a > 5)
if (a > 10)
cout << "if-if";
else
cout << "else";
}
其等效于:
//for example
#include <iostream>
using namespace std;
int main()
{
int a = 10, b = 0;
if (a > 5)
if (a > 10)
cout << "if-if";
else
cout << "else";
if (a > 5) //or
{
if (a > 10)
cout << "if-if";
else
cout << "else";
}
}
2 循环语句
3 简单输入
cin类连接标准输入流(默认键盘),一般地,我们使用以下几种语句
3.1 抽取运算符 >>
使用cin需要包含<iostream>头文件,并使用using语句,具体见例。
>>能适应各种基本数据类型,从缓冲区读取输入,格式化后赋值到相应的变量。如:
//for example
#include <iostream>
using namespace std;
int main()
{
char a;
int b;
double c;
string d;
cin >> a;
cin >> b;
cin >> c;
cin >> d;
}
或者可以连续使用:
//for example
#include <iostream>
using namespace std;
int main()
{
char a;
int b;
double c;
string d;
cin >> a >> b >> c >> d;
}
3.1.1 抽取运算符的工作细节
对于char类型的变量,假设如下代码:
char ch;
cin >> ch;
cin将缓冲区的第一个字符赋值给变量ch
对于int或double:
int x;
cin >> x;
//or
double y;
cin >> y;
cin将不断读取缓冲区,直至遇到第一个不属于int/double的字符。然后将之前读取的数字字符格式化为数字,赋值给变量x/y。其中,
属于int的字符包括:'+'、'-'、数字字符;
属于double的字符包括:'.'、int的字符;
对于char[]和string:
char cstr[10];
cin >> cstr;
//or
string str;
cin >> str;
cin将不断跳过,从第一个非空白开始不断读取,直至下一个空白。将读取的字符串赋值给str/cstr。
空白字符:' '、'\n'、'\t'等不显示的字符
3.1.2 getline
使用抽取运算符不能保证char数组有足够的空间来存储读取的字符,而使用geiline可以解决这个问题。
getline将不断读取字符,直至读取了n-1个字符,或下一个字符为指定字符(默认为'\n'),并抛弃下一个'\n'之前的所有字符。在字符串末尾添加'\0',并赋值给char数组。如:
char x[10];
cin.getline(x, 5);
cout << x;
输入:abcdabcd,
输出:abcd,
输入:a b c d a b c d,
输出:a b ,
若:
char x[10];
cin.getline(x, 5, 'c');
cout << x;
输入:abcdabcd,
输出:ab,