没有合适的资源?快使用搜索试试~ 我知道了~
Kernighan和 Ritchie的《The C Programming Language》(中译名《C程序设计语言》)堪称经典中的经典,不过旧版的很多内容都已过时,和现在的标准C语言相去甚远,大家一定要看最新的版本
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-gzip](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![iso](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![iso](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/235156/bg1.jpg)
下载
第3章 控 制 流
一个语言的控制流语句用于指定各个计算执行的次序。在前面的例子中我们已经见到了一
些最常用的控制流结构。本章将全面讨论控制流语句,更精确、更全面地对它们进行介绍。
3.1 语句与分程序
在诸如x =0、i + +或printf (...)之类的表达式之后加上一个分号( ;),就使它们变成了语句 :
x = 0;
i++;
printf(……);
在C语言中,分号是语句终结符,而不是像 P a s c a l等语言那样把分号用做语句之间的分隔符。
可以用一对花括号 {与}把一组说明和语句括在一起构成一个复合语句(也叫分程序),复合
语句在语法上等价于单个语句,即可以用在单个语句可以出现的所有地方。一个明显的例子是
在函数说明中用花括号括住的语句,其他的例子有在 i f、e l s e 、w h i l e 与f o r 之后用花括号括住的多
个语句。(在任何分程序中都可以说明变量,第 4章将对此进行讨论。)在用于终止分程序的右花
括号之后不能有分号。
3.2 if-else语句
i f - e l s e语句用于表示判定。其语法形式如下:
if (表达式)
语句
1
else
语句
2
其中e l s e部分是任选的。在 i f语句执行时,首先计算表达式的值,如果其值为真(即,如果表达
式的值非0),那么就执行语句
1
;如果其值为假(即,如果表达式的值为0),并且包含e l s e 部分,
那么就执行语句
2
。
由于i f语句只是测试表达式的数值,故表达式可以采用比较简捷的形式。最明显的例子是用
if (表达式)
代替
if (表达式 != 0 )
有时这样既自然又清楚,但有时又显得比较隐秘。
由于i f - e l s e语句的e l s e 部分是任选的,当在嵌套的 i f语句序列中缺省某个 e l s e部分时会引起歧
在表达式后加上分号构成的语句叫做表达式语句。
—
译者注
![](https://csdnimg.cn/release/download_crawler_static/235156/bg2.jpg)
义。这个问题可以通过使每一个 e l s e 与最近的还无e l s e 匹配的i f匹配。例如,在如下语句中:
if ( n > 0 )
if ( a > b )
z = a;
else
z = b;
e l s e部分与嵌套在里面的 i f 匹配,正如缩入结构所表示的那样。如果这不是我们所希望的,那么
可以用花括号来使该e l s e部分与所希望的i f 强制结合:
if ( n > 0 ) {
if ( a > b )
z = a;
}
else
z = b;
歧义性在有些情况下特别有害,例如,在如下程序段中:
if ( n >= 0 )
for ( i = 0; i < n; i++ )
if ( s[i] > 0) {
printf ( "…" );
return i;
}
else /* 错 */
printf ( "error -- n is negative\n" );
其中的缩入结构明确地给出了我们所希望的结果,但编译程序无法得到这一信息,它会使 e l s e部
分与嵌套在里面的 i f 匹配。这种错误很难发现,因此我们建议在 i f语句嵌套的情况下尽可能使用
花括号。
顺便请读者注意,在语句
if ( a > b )
z = a;
else
z = b;
中,在z = a后有一个分号。这是因为,从语法上讲,跟在 i f后面的语句总是以一个分号终结,诸
如z = a之类的表达式语句也不例外。
3.3 else-if 语句
在C程序经常使用如下结构:
if ( 表达式 )
语句
else if ( 表达式 )
语句
else if ( 表达式 )
语句
第3章 控 制 流计计45
下载
![](https://csdnimg.cn/release/download_crawler_static/235156/bg3.jpg)
else if ( 表达式 )
语句
else
语句
由于这种结构经常要用到,值得单独对之进行简要讨论。这种嵌套的 i f 语句构成的序列是编写多
路判定的最一般的方法。各个表达式依次求值,一旦某个表达式为真,那么就执行与之相关的
语句,从而终止整个语句序列的执行。每一个语句可以是单个语句,也可以是用花括号括住的
一组语句。
最后一个e l s e 部分用于处理“上述条件均不成立”的情况或缺省情况,此时,上面的各个条
件均不满足。有时对缺省情况不需要采取明显的动作,在这种情况下,可以把该结构末尾的
else
语句
省略掉,也可以用它来检查错误,捕获“不可能”的条件。
可以通过一个二分查找函数来说明三路判定的用法。这个函数用于判定在数组 v中是否有某
个特定的值x。数组 v的元素必须以升序排列。如果在 v中包含x,那么该函数返回 x在v中的位置
(介于0 ~ n -1 之间的一个整数);否则,该函数返回- 1。
在二分查找时,首先将输入值 x与数组v的中间元素进行比较。如果 x小于中间元素的值,那
么在该数组的前半部查找;否则,在该数组的后半部查找。在这两种情况下,下一步都是将 x与
所选一半的中间元素进行比较。这一二分过程一直进行下去,直到找到指定的值,或查找范围
为空。
/* binsearch:在v[0]<=v[1]<=v[2]<=……<=v[n-1]中查找x */
int binsearch ( int x, int v[ ], int n )
{
int low, high, mid;
low = 0;
high = n - 1;
while ( low <= high ) {
mid = ( low + high ) / 2;
if ( x < v[mid] )
high = mid - 1;
else if ( x > v[mid] )
low = mid + 1;
else /* 找到了匹配的值 */
return mid;
}
return -1; /* 没有查到 */
}
这个函数的基本判定是,在每一步 x是小于、大于还是等于中间元素 v [ m i d ],这自然就用到
了e l s e - i f结构。
练习3-1 在上面有关二分查找的例子中,在 w h i l e 循环语句内共作了两次测试,其实只要一
46计计C 程序设计语言
下载
剩余10页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/1ec23786ccd34603ba6489017be118c3_blesswave.jpg!1)
blesswave
- 粉丝: 2
- 资源: 4
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- PyTorch 开源的机器学习框架结合了动态计算图的灵活性和深度学习库的强大功能
- Python高分毕设-基于深度学习的水果识别系统的+源代码+文档说明+数据集+模型.zip
- TensorFlow 开源的机器学习框架支持大规模的机器学习
- cocosCreator-js动态生成二维码
- STM3232位ARM Cortex-M微控制器
- 基于jsp+servlet+mysql宠物店购物商城系统+源代码+文档说明+数据库(毕业设计).zip
- sdgsApp.apk
- IMG_0042.JPG
- 基于Vue+Nodejs+MongoDB实现的超市后台商品的订单管理系统+源代码+文档说明+数据库 .zip
- Bible快速检索查看器
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)