动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息



本月文章推荐
.拷屏代码.
.数据库设计指南(1).
.如何去掉MDI子窗体的标题栏.
.图形与动画-03.
.使用epoll进行高性能网络编程.
.C++程序中导出Word文档简易方法.
.上海黑暗之龙--麻将原代码.
.C语言递归.
.C语言嵌入系统编程修炼-性能优化.
.简单飘雪程序.
.C语言库函数(T类字母).
.解析C语言中的sizeof.
.C语言基础教程(四)指针、结构、.
.C++中用赋值形式op=取代单独形式.
.C语言数组排序小结.
.C语言图形编程(三、绘图函数-02).
.C++箴言:防止异常离开析构函数.
.卖桃子.
.深入理解C语言指针的奥秘.
.玩转BCB的IDE,体验ToolsAPI.

实例讲解

发表日期:2008-3-8 |



  既然是实例分析,当然要有例子。好吧,先给出一个实验题:输入一个百分制成绩,要求输出该成绩是及及格。

  很显然,应该使用分支结构将及格及不及格两种情况分别打印。给出解答程序如下:
/* 例1 */ #include void main() { int n; printf("Please input the score: "); scanf("%d", &n); if (n < 60) { printf("不及格\n"); } else { printf("及格了\n"); } }
  这样一个程序非常简单,但它展示了 if 分支结构最基本的用法:

if (条件) {语句1} else {语句2}

  当条件为真时执行语句1,条件为假时执行语句2。在 C 语言中,所有非 0 值表示真,0 表示假。if 结构中的括号并不是必须的,当你的大括号中只包含一个语句时,可以将大括号省略。如例1中的 if 语句,可以改写为:

if (a < 60) printf("不及格\n");
else printf("及格了\n");

  这样,程序似乎简洁了不少。但假如以后需要添加语句时,就可能因为忘了添加大括号而造成错误。所以,推荐使用不省略大括号的写法。
  基本 if 语句还可以简化——省略 else 分支。如例1,我们还可写成:
/* 例2 */ #include void main() { int n; printf("Please input the score: "); scanf("%d", &n); if (n < 60) { printf("不及格\n"); return; } printf("及格了\n"); }
  例2 描述的是:假如分值小于 60 分,打印出“不及格”,并且结束 main() 函数。假如分值不小于 60 分的情况,if 分支中的所有语句都没有执行,直接执行了 printf("及格了\n"),打印出 “及格了”。

  想一想,假如在 if 语句中不使用 return; 语句强制结束 main() 函数,会怎样?结果是在分值小于 60 分的情况下,将“不及格”及“及格了”都打印出来了。原因是显而易见的:因为打印“及格了”的语句不在 else 分支中,更不在 if 结构中,无论什么情况都要执行。

  if 语句可以变得更复杂——嵌套,即 if 结构中再套 if 结构。如上题中,我们再加上一点点容错处理,先判定输入的分值是否在 0 到 100 之间:
#include void main() { int n; printf("Please input the score: "); scanf("%d", &n); if (n >= 0 && n <= 100) { if (n < 60) { printf("不及格\n"); return; } printf("及格了\n"); } else { printf("输入分值错误!"); } }   例3 描述:假如 n 在 0 到 100 之间,再进行及格和不及格的判定,否则打印错误信息。

  这样以来,或许就有点糊涂了:这个 else 到底是哪一个 if 的呢?每一个 if 或者 else 后面,都应该跟一个语句或者由一对大括号括起来的一组语句。而且也只能跟一个语句或者一组由大括号括起来的语句。由大括号的成对关系,便轻易判定了。

  例3 是在 if 分支中嵌套 if 结构,else 分支中同样可以嵌套 if 结构,请看例4:
/* 例4 */ #include void main() { int n; printf("Please input the score: "); scanf("%d", &n); if (n < 0 n > 100) { printf("输入分值错误!"); } else { if (n < 60) { printf("不及格\n"); return; } printf("及格了\n"); } }
  当然,if 分支和 else 分支在较复杂的程序中,也可能同时嵌套 if 结构,希望读者能够举一反三,这里就不多说了。

  现在我们把实验题改一改,不是要求输入是否及格,而是要求输入百分制成绩对应的 A-E 等级。怎么办?对,用一个再一个的嵌套——多重嵌套:
/* 例5 */ #include void main() { int n; printf("Please input the score: "); scanf("%d", &n); if (n < 0 n > 100) { printf("输入分值错误!"); } else { if (n < 60) { printf("E\n"); } else { if (n < 70) { printf("D\n");
} else { if (n < 80) { printf("C\n"); } else { if (n < 90) { printf("B\n"); } else { printf("A\n"); } } } } } }   天啊!我头晕。可不可以简洁一点?当然,你知道 elseif 语句吗?Sorry, C 语言没有。不过,C 语言可以实现类似于 elseif 语句的结构,因为——每个 if 结构都只是一个语句,else 后面不是可以接一个语句吗?看我的:
/* 例6 */ #include void main() { int n; printf("Please input the score: "); scanf("%d", &n); if (n < 0 n > 100) { printf("输入分值错误!"); } else { if (n < 60) { printf("E\n"); } else if (n < 70) { printf("D\n"); } else if (n < 80) { printf("C\n"); } else if (n < 90) { printf("B\n"); } else { printf("A\n"); } } }
  啊,现在清楚多了,不过用那么多 else if 真是麻烦。为什么不用 switch 呢?C 语言的 switch 分支就是常说的 case 分支,也即多分支。if 结构最多只能有两条分支,而 switch 最多可以有……数不清条分支!先看看它是怎么用的:
/* 例7 */ #include void main() { int n; printf("Please input the score: "); scanf("%d", &n); if (n < 0 n > 100) { printf("输入分值错误!"); } switch (n / 10) { case 9: printf("A\n"); break; case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; default: if (n == 100) { printf("A\n"); } else { printf("E\n"); } } }   是不是没搞懂为什么有 n / 10 一句?这个语句是取 n 除以 10 的整数商,舍弃余数。之所以要这样作,是因为 case 后面只能接一个常数(或者常量),我没办法像在 Foxbase 中一样使用 case n > 90。

  那为什么要用那么多 break 呢?break 的意思就是跳出该 switch 语句。每一个 case 实际上只是一个标号,就似乎使用 goto 语句跳到该标号一样,它会从该标号批示的位置开始,一直执行下去。假如不用 break,你试试,哈哈,除非是满分,否则都是 E。

  哦,还有 default 忘了告诉你。假如所有 case 条件都不匹配的时候,就执行 default 后面的部分。当然 default 分支是可以省略的,这样的话,找不到匹配条件就不做任何处理。

  有趣吧!不过居然还用了两个 if 分支,惭愧。既然 switch 分支是多分支,应该能够包含所有的 if 分支才对啊!再试试:
/* 例8 */ #include void main() { int n; printf("Please input the score: "); scanf("%d", &n); switch (n / 10) { case 10: case 9: printf("A\n"); break; case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; case 5: case 4: case 3: case 2: case 1: case 0: printf("E\n"); break; default: printf("输入分值错误!"); } }
  现在简洁了不少耶!不过连续用两个 case 是什么意思呢?

  case 不只是一个标号吗,连续用两个 case 也不过就是让两个标号表示同一个位置而已。这个技巧很好用的哦!

  不过从 case 5 到 case 0,写了这么长一串,假如我用一个 if 分支,就可以少写一些代码了。所以,使用 switch 的时候并不是不能使用 if,要视情况而定,让你的代码最简洁!switch 结构同样是可以多重嵌套的——当然套在某个 case 后面,例子我就不用举了吧,学编程的人怎能不会举一反三?!

  说白了,C 语言的分支结构也就两种,但只要你灵活运用,这分支可就层出不穷了!

  独孤九剑,重在剑意,不在剑招…… “啪!”在想什么,该打!

上一篇:C++程序设计之四书五经 人气:282
下一篇:乌托邦式的接口和实现分离技术 人气:259
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-25 WikyBlog v1.7.0.1 多国语言版
2008-7-25 乐彼网上开店系统(56770 Eshop)
2008-7-25 赛特网站管理系统sitecms v3.6.0
2008-7-25 Modoer多功能点评系统 v1.0.1 Bu
2008-7-25 Shangducms Teamsuit! v1.1.0 开
2008-7-25 幻影动漫网视频系统(Ppdong) v1.
2008-7-25 acteecompany企业网站建设系统 v
2008-7-25 恒浪整合管理系统 ims v4.1 ACCE
2008-7-25 艺术图库系统 v1.0 beta
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号