关于网络选择结构程序设计_第1页
关于网络选择结构程序设计_第2页
关于网络选择结构程序设计_第3页
关于网络选择结构程序设计_第4页
关于网络选择结构程序设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4第四章选择结构程序设计

12/26/20231重庆理工大学计算机学院基础教研室第四章选择结构程序设计

4.1语句的分类

C语言将语句(statement)分成以下几类:控制语句函数调用语句空语句表达式语句复合语句12/26/20232重庆理工大学计算机学院基础教研室if()…else… (条件语句)switch (多分支选择语句)for()… (循环语句)while()… (循环语句)do…while()… (循环语句)1.控制语句12/26/20233重庆理工大学计算机学院基础教研室1.控制语句continue (结束本次循环语句)break (中止执行switch或循环语句)goto (转向语句)return (从函数返回语句)12/26/20234重庆理工大学计算机学院基础教研室2.函数调用语句函数调用语句由一个函数调用加上一个分号(;)构成。例如:

printf(“Hello!”);3.空语句只有一个分号(;)的语句。空语句不执行任何操作。例如:

;12/26/20235重庆理工大学计算机学院基础教研室4.表达式语句由C语言的任意合法表达式加上一个分号(;)构成。例如:函数调用属于表达式的一种,而空语句则是没有任何表达式的语句i++; (使变量的值加1)x+y; (完成x+y操作,但不将其结果赋给 某一变量,所以该语句无实际意义); (空语句)printf(“Hello!”);(函数调用语句) 12/26/20236重庆理工大学计算机学院基础教研室5.复合语句包含在由左花括号{开始,右花括号}结束的一组语句,在逻辑上构成一个整体,称为复合语句。例如: {

x=k+t; y=x%5; printf(“yis%d”,y); }任何可以放置语句的地方,都可以放置复合语句

12/26/20237重庆理工大学计算机学院基础教研室4.2关系运算符、逻辑运算符、条件运算符本章将着重讨论利用选择控制实现选择结构程序设计。选择控制是指根据指定的条件是否满足,选择下一步要执行的语句。满足为真,不满足为假。对于条件的描述,最为常见的就是关系表达式。其一般形式:

4.2.1关系运算符和关系表达式操作数关系运算符 操作数每个操作数可以是变量、常量或者是任意有效的C语言表达式。12/26/20238重庆理工大学计算机学院基础教研室大于 a>b大于等于 a>=b小于a<b小于等于 a<=b等于 a==b不等于 a!=b6种关系运算符:

关系表达式只能产生两个数值之一:0或1。一个判定为真的关系表达式的值为1;一个判定为假的关系表达式的值为0。

C语言中,逻辑值真为1;逻辑值假为0。

12/26/20239重庆理工大学计算机学院基础教研室关系运算符的优先级低于算术运算符的优先级,但高于赋值运算符的优先级。其结合性是左结合性。

例如: a=20,b=70,c=50,d=90,有下列表达式:a<b>d

相当于(a<b)>d,a<b的值为1,1>d为假,整个表达式的值为0k=a+b<c+d

相当于k=((a+b)<(c+d)),即k=(90<140),即k=1,为变量k赋值1,整个表达式的值为1。12/26/202310重庆理工大学计算机学院基础教研室字符数据同样可以用关系运算符比较,比较的依据是其所用代码的数值。

例如比较ASCII码的字符: 表达式‘a’==‘A’的值为0 表达式‘A’>‘C’的值为0 表达式‘C’<‘a’的值为112/26/202311重庆理工大学计算机学院基础教研室逻辑运算符将其操作数视为逻辑值,即“真”或“假”。而C语言对于操作数真假的判定采取了如下原则:

4.2.2逻辑运算符和逻辑表达式三种逻辑运算符:逻辑非 !a逻辑与 a&&b逻辑或 a||b高低C语言中,任意非零值为逻辑值真;零为逻辑值假。

12/26/202312重庆理工大学计算机学院基础教研室逻辑表达式!(5<10)的值为0逻辑表达式(5>10)&&(8<10)的值为0;逻辑表达式(5>10)||(8<10)的值为1。逻辑表达式(5<10)&&(—10)的值为1逻辑表达式!’a’的值为0例如:12/26/202313重庆理工大学计算机学院基础教研室条件运算符(?)是C语言中惟一的一个三目运算符,其表达式的一般形式:

4.2.2条件运算符和条件表达式操作数1?操作数2:操作数3条件表达式的执行过程为:先求解操作数1的逻辑值,如果为非零值——“真”,再求解操作数2,并将操作数2的值作为该条件表达式的值;如果为零值——“假”,则求解操作数3,并将操作数3的值作为该条件表达式的值。12/26/202314重庆理工大学计算机学院基础教研室条件运算符的优先级高于赋值运算符,但低于算术运算符、关系运算符及逻辑运算符。我们来看一个例子:

y=x>=60?‘P’:‘F’ 如果x大于或等于60,则y被赋值‘P’,该表达式的值为‘P’;如果x小于60,则y被赋值‘F’,该表达式的值为‘F’。12/26/202315重庆理工大学计算机学院基础教研室C语言提供两种选择控制语句:if语句switch语句。

4.3选择结构的程序设计所有程序的正常执行次序通常都是顺序的。然而,在许多问题的解决方案中,常会根据情况的不同,采取不同的处理方式。12/26/202316重庆理工大学计算机学院基础教研室

if(表达式) 语句A

else 语句B

4.3.1if语句if语句的一般形式:

表达式?语句A语句B真(非0)假(0)12/26/202317重庆理工大学计算机学院基础教研室else子句,是可选的。当无else子句时的if语句形式为:

if(表达式) 语句表达式?语句真(非0)假(0)12/26/202318重庆理工大学计算机学院基础教研室当if语句的目标块中又出现if语句时,C语言有如下规定:else子句总与距它最近的if配套。例如:if(k){ if(h)do1();

if(i)do2(); /*这个if*/

elsedo3();/*和这个else组合*/ if(t)do4();}elsedo5(); /*这个else和if(k)组合*/12/26/202319重庆理工大学计算机学院基础教研室基于上述规则,一个常用的嵌套if语言构成多分支选择结构,也称为if-else-if阶梯,其

一般形式如下:

if(表达式1) 语句1;elseif(表达式2) 语句2;elseif(表达式3) 语句3;......else语句n;12/26/202320重庆理工大学计算机学院基础教研室C语言中,switch语句同样可以实现多分支选择。switch语句的一般形式是:

4.3.1switch语句switch(表达式){

case常量1:语句序列1

break;

case常量2:语句序列2

break;

case常量3:语句序列3

break;......

default:语句序列n}可选

可选

12/26/202321重庆理工大学计算机学院基础教研室switch语句可以作为另一个switch语句中语句序列的一部份,形成嵌套switch语句。这时,即使内外层的常量相同,也不会引起冲突。例如:switch(x){case1:printf(“process(x,y)\n”); switch(y)

{ case0: printf(“Dividedby0error!\n”); break; case1: process(x,y);

} break;case2: ……}12/26/202322重庆理工大学计算机学院基础教研室例4.1从键盘读入两个整数,然后显示这两个数的商。4.3选择结构的程序设计举例

#include<stdio.h>voidmain(){ inta,b; printf("Entertwonumbers(separateby,):"); scanf("%d,%d",&a,&b); if(b)

printf("a/b=%d\n",a/b); else printf("Cannotdividebyzero.\n");}12/26/202323重庆理工大学计算机学院基础教研室例4.2从键盘读入年份,然后判断该年是否为闰年。符合下列条件之一的年份都是闰年:能被400整除的年份;不能被100整除,但可以被4整除的年份。12/26/202324重庆理工大学计算机学院基础教研室#include<stdio.h>voidmain(){ intyear,leap; printf("Enteryear:"); scanf("%d",&year); /*判断是不是闰年*/ if(year%400==0||(year%4==0&&year%100!=0)) leap=1; /*是闰年*/ else leap=0; if(leap) printf("%disaleapyear.\n",year); else printf("%disnotaleapyear.\n",year);}12/26/202325重庆理工大学计算机学院基础教研室例4.3企业发放的奖金根据利润提成。利润(I)不超过10万元时,奖金可提10%;利润不超过20万元时,其中的10万元按10%提成,高于10万元的部分提成7.5%;20万到40万元,其中的20万元按前述b方法提成,高于20万元的部分提成5%;40万到60万元,其中的40万元按前述c方法提成,高于40万元的部分提成3%;60万到100万元,其中的60万元按前述d方法提成,高于60万元的部分提成1.5%;高于100万元时,其中的100万元按前述e方法提成,超过100万元的部分提成1%。从键盘输入当月利润I,求应发放奖金总数?12/26/202326重庆理工大学计算机学院基础教研室#include<stdio.h>voidmain(){ longinti; intbonus1,bonus2,bonus4,bonus6,bonus10,bonus; printf("Enterprofitearned:"); scanf("%ld",&i);

bonus1=100000*0.1; bonus2=bonus1+100000*0.075;

bonus4=bonus2+200000*0.05; bonus6=bonus4+200000*0.03; bonus10=bonus6+400000*0.015;12/26/202327重庆理工大学计算机学院基础教研室if(i<=100000) bonus=i*0.1; elseif(i<=200000) bonus=bonus1+(i-100000)*0.075; elseif(i<=400000) bonus=bonus2+(i-200000)*0.05; elseif(i<=600000) bonus=bonus4+(i-400000)*0.03; elseif(i<=1000000) bonus=bonus6+(i-600000)*0.015;

else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d\n",bonus);}12/26/202328重庆理工大学计算机学院基础教研室例4.4输入某年某月某日,判断这一天是这一年的第几天?解析:以2000年4月8日为例,应该先把前三个月的天数加起来,然后再加上8天即本年的第几天。遇闰年情况,且输入月份大于3时需要多加一天。12/26/202329重庆理工大学计算机学院基础教研室#include<stdio.h>voidmain(){ intday,month,year,sum,leap; printf("\npleaseinputyear,month,day\n"); scanf("%d,%d,%d",&year,&month,&day); switch(month)/*先计算某月以前月份的总天数*/ { case1:sum=0;break; case2:sum=31;break; case3:sum=59;break; case4:sum=90;break; case5:sum=120;break; case6:sum=151;break; case7:sum=181;break; case8:sum=212;break;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论