郑州个人网站建设,wordpress导入文件格式,网站关键词优化培训,关于酒店网站规划建设方案书参考资料#xff1a;
《C Primer》第5版《C Primer 习题集》第5版
5.1 简单语句#xff08;P154#xff09;
在一个表达式的末尾加上 ; 就构成了表达式语句#xff0c;其作用是执行表达式并丢弃结果。
空语句
由单独的 ; 构成的语句为空语句。空语句常用于语法上需要一…参考资料
《C Primer》第5版《C Primer 习题集》第5版
5.1 简单语句P154
在一个表达式的末尾加上 ; 就构成了表达式语句其作用是执行表达式并丢弃结果。
空语句
由单独的 ; 构成的语句为空语句。空语句常用于语法上需要一条语句但逻辑上不需要的场景
while(cina); // 空语句使用空语句时应加上注释 别漏写分号也别多写分号
while(iter ! svec.end()); // 有害空语句iter;复合语句
复合语句指用 {} 括起来的语句序列也称作块。一个块就是一个作用域。 块不以分号结束 如果语法上需要一条语句而逻辑上需要多条语句就需要使用复合语句。例如while 和 for 的循环体必须是一条语句所以我们常常使用复合语句。
空块是没有任何语句的 {} 其作用等价于空语句。
5.2 语句作用域P155
可以在 if 、switch 、while 、for 语句的控制结构内部定义变量作用域仅限于该条语句。
while(int i get_num()){couti; // 合法i在while语句内部有效
}
couti; // 错误奇怪了上述语句的控制结构里也不是语句啊 5.3 条件语句P156
5.3.1 if语句P156
if 语句包括两种格式简单 if 语句和 if else 语句
// 简单if语句
if(condition)statement// if else语句
if(condition)statement1
elsestatement2其中condition 可以是条件表达式也可以是初始化了的变量声明。
嵌套if语句
悬垂else
如何知道某个 else 和哪个 if 匹配这个问题称作悬垂 else 。C 规定else 与离它最近的尚未匹配的 if 语句。
5.3.2 switch语句P159
例子
switch(ch){case a:aCnt;break;case e:eCnt;break;default:cnt;
}switch 语句首先对括号里的表达式求值也可以是初始化的变量声明表达式的值转化为整数类型然后与 case 中的每个标签比较如果和某个 case 匹配成功则从该标签后的直到 switch 语句结尾或者遇到 break 语句。如果没有匹配成功则会执行 switch 语句后的第一条语句。
case 标签必须是整型的常量表达式。
switch内部的控制流
switch(ch){case a: case e: case i: case o: case u:cnt;
}default标签
如果 switch 想以一个空的 default 标签作为结束则必须在 default 标签后跟上空语句或空块。
switch(ch){case a:couta;default: // default标签不是必须也在最后coutb;case c:coutc;
}switch内部的变量定义
如果某处一个带有初值的变量位于作用域之外在另一处该变量位于作用于之内则从前一处条跳转到后一处是非法行为因为 C 不允许跨过变量的初始化语句直接跳转到该变量的作用域内。
case true:int i;int j 0; // 错误string str; // 错误str被隐式初始化了
case false:;需要注意的是即使后面并没有用到前面初始化的变量这种跳转也是不合法的。
5.4 迭代语句P165
5.4.1 while语句P165
while(condition)statementcondition 不能为空只要 condition 的求值结果为真就重复执行循环体。
5.4.2 传统for语句P166
for(init-statement;condition;expression)statementinit-statement 必须是声明语句、表达式语句或空语句。
for语句头中的多重定义
init-statement 中可以声明多个对象但只能有一条声明语句所以所有对象的类型必须相同
省略for语句头中的某些部分
省略 condition 等价于在条件部分写了一个 true 。
5.4.3 范围for语句P168
for (declaration : expression)statementexpression 必须是一个序列如用花括号括起来的初始值列表、数组、vector 对象这些类型的共同特点是有能返回迭代器的 begin 或 end 成员。
declaration 定义一个变量且每次循环都会重新定义循环控制变量并将其初始化为序列中的下一个值。
范围 for 语句中预存了序列 end() 的值如果在循环中添加或删除序列元素可能会导致 end 函数的值失效。
5.4.4 do while语句P169
dostatement
while(condition);do while 语句允许在 condition 内定义变量conditon 使用的变量必须定义在循环体之外。
5.5 跳转语句P170
5.5.1 break语句P170
break 负责终止离它最近的迭代语句和 switch 语句。
5.5.2 continue语句P171
continue 语句可以在迭代语句中使用负责终止当前迭代并立即开始下一次迭代。
5.5.3 goto语句P172
goto label;
label: statementlabel 是标识一条语句的标识符可以与程序中的其他实体重名。goto 语句和目标标签的语句必须位于同一个函数之内。
5.6 try语句块和异常处理P172
当程序某部分检测到一个无法处理的问题时应该发出某种信号表明程序遇到了故障然后交由异常处理部分处理。
5.6.1 throw表达式P173
throw 表达式能引发一个异常如
throw runtime_error(Date must refer to same ISBN);runtime_error 时标准库异常类型的一种定义在 stdexcept 头文件中runtime_error 对象必须初始化方式是提供 string 对象或者 C 风格字符串。
5.6.2 try语句块
try{program-statements
} catch(exception-declaration){handler-statements
} catch(exception-declaration){handler-statements
}catch 子句包括三部分关键字 catch 、括号一个对象的声明、一个块。当某个 catch 子句处理异常后执行其块完成后跳转到最后一个 catch 子句的之后的语句执行。
try 语句块组成程序的正常逻辑其中定义的变量无法在 catch 子句中访问。
int i 0;
try{cin i;if(i 0) throw runtime_error(i must be positive);
} catch(runtime_error err){cout err.what() endl;
}what() 时 runtime_error 类的一个成员函数每个标准库异常类都定义了 what() 成员这些函数都没有参数返回值为 C 风格字符串。
函数在寻找处理代码的过程中退出
当异常抛出时首先检查抛出该异常的函数如果没找到匹配的 catch 子句则终止该函数然后在调用该函数的函数中继续寻找以此类推。特别地那些没有包含在 try 语句块中的异常认为在当前函数没有 catch 子句与之匹配。如果最终也没能找到匹配的 catch 程序将转到名为 terminate 的标准库函数执行该函数通常会导致程序非正常退出。
5.6.3 标准异常P176
C 定义了一组类用于报告程序遇到的问题。 exception 、bad_alloc 和 bad_cast 对象只能默认初始化其他对象则必须提供初始值。
异常类型只定义了一个 what() 成员函数对于没有初始值的对象what() 函数的返回值由编译器决定。