您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第4章程序的控制结构
第4章程序的控制结构4.1语句及程序框架4.1.1语句的基本分类语句是程序的基本组成部分,一段程序或者一个函数就是由若干语句按照算法规定的逻辑关系组成的。各种表达式都要以语句的形式出现在程序中。C语言中的语句有如下类型:(1)变量定义语句;(2)表达式语句;(3)复合语句;(4)函数调用语句;(5)控制语句;1.变量定义语句语法格式如下:类型标识符变量表;其含义是:告诉系统,变量表中列出的一个或多个变量的存在,同时要求系统为每个变量分配存储空间,其大小和类型与类型标识符所规定的一致。变量定义语句不需要与操作步骤对应。例如:charaChar;inttotal=0;//用于累计素数的总数intscore;doublex,y;2.表达式语句语法格式如下:表达式;从上述语法格式可以看出,表达式语句是由前面章节提及的各种表达式及后缀的分号构成。其作用是:一旦表达式语句被执行时,就要按照表达式的求值顺序计算出表达式的值。例如:i++;3.复合语句语法格式如下:{语句1语句2…语句n}其作用是:告诉编译系统,将多个语句看成是一个整体,在语法要求上相当于一个语句。因此,在分支和循环结构中经常使用,函数的定义体也是一个复合语句。例如:{intx,y=20;x=y+10;printf(“%d;%d”,x,y);}4.函数调用语句语法格式如下:函数名(实际参数表);函数调用语句的作用是:将执行控制流程转移到与此语句完全匹配的函数定义体的第一条语句处,开始执行;函数体执行结束后,返回到此语句的下一条语句处继续执行。执行流程如教材图4-1.5.控制语句就是用于控制程序执行路径的相关语句,可以实现程序的各种控制结构。C语言中包含有九种控制语句。分成三类介绍如下:(1)分支语句:if语句、switch语句;(2)循环语句:do-while语句、while语句、for语句;(3)跳转语句:break语句、continue语句、goto语句、return语句。分支和循环语句是程序中经常使用的,灵活熟练掌握其用法是本章的主要任务,后面会详细讲解。4.1.2C程序框架一个C程序由若干源文件和头文件组成,称之为一个工程。头文件包括用户自定义的和系统定义的,这两种都是由若干函数及全局量的声明和编译预处理组成,文件名一般是*.h。系统定义的如stdio.h,stdlib.h,string.h,math.h,limits.h等,其内容可以在本地安装有C编译器的机器中找到。一般在安装路径的包含文件夹内,如:\ProgramFiles\MicrosoftVisualStudio\VC98\Include。4.2分支结构分支结构与顺序结构相对应,可以称之为判断结构或选择结构,也就是有选择地执行某些语句,改变了完全顺序执行的程序结构。在日常生活中的表达方式是:如果…;那么…。在计算机领域的基本表达方式是:如果条件成立,则执行操作1;否则条件不成立,则执行操作2。其中,操作1,操作2可以是一条或多条语句。分支结构包含if和switch两个语句.4.2.1if语句的基本格式语法格式如下:if(条件表达式)复合语句1else复合语句2if语句基本格式的语义是:如果条件表达式的值为真,则执行复合语句1,否则,即条件表达式的值不为真,则执行复合语句2。格式中“(条件表达式)”写法与“(条件表达式!=0)”写法等价。【例4.1】任意输入两个不同的整数,输出其中较大的一个。#includestdio.hvoidmain(){c4:intx,y;c5:printf(\nInputtwonumbers:\n);c6:scanf(%d%d,&x,&y);c7:if(xy)c8:{printf(max=%d\n,x);}elsec10:{printf(max=%d\n,y);}return;}使用if语句需要注意如下内容:(1)从if关键词开始到复合语句2结束,在语法上就是一条语句,虽然其中包含着两个复合语句,这并不矛盾。(2)if语句中的两个复合语句都可以由空语句,一个语句或者多个语句构成。仅包含空语句或一个语句时,一对大括号可以省略。此处增加大括号的好处是可以减少不必要的语法错误。(3)if语句中的条件表达式必需使用一对匹配的圆括号括起来。(4)条件表达式可以是逻辑表达式,关系表达式,算术表达式及赋值表达式等,单个变量构成的表达式也是正确的。只要表达式的值不是0值,条件即为成立。【例4.2】判断某年份是否是闰年。满足以下两个条件之一的年份均是闰年:一是年份能够被4整除,但不能被100整除;二是能被400整除的年份。4.2.2if语句的第二种格式语法格式如下:if(条件表达式)复合语句if语句第二种格式的语义是:如果条件表达式的值不为真,则直接执行此if语句的下一条语句,否则,条件表达式的值为真,则执行其后的复合语句,复合语句执行完成后同样要执行if语句的下一条语句。【例4.3】任意输入两个不同的整数,输出其中较大的一个。#includestdio.hvoidmain(){c4:intx,y,max;c5:printf(\nInputtwonumbers:\n);c6:scanf(%d%d,&x,&y);c7:max=x;c8:if(yx)c9:{max=y;}c10:printf(max=%d\n,max);c11:return;}4.2.3if语句的嵌套形式可以写出如下几种嵌套形式的if语句:(1)在第二种格式的复合语句处嵌套第二种格式,形如:if(条件表达式1){其它语句1if(条件表达式2)复合语句2其它语句2}(2)第二种格式嵌套第一种格式,形如:if(条件表达式1){if(条件表达式2)复合语句21else复合语句22}(3)第一种格式嵌套第二种格式,形如:if(条件表达式1){if(条件表达式2)复合语句2}else{if(条件表达式3)复合语句3}(4)第一种格式嵌套第一种格式,形如:if(条件表达式1){if(条件表达式2)复合语句21else复合语句22}else{if(条件表达式3)复合语句31else复合语句32}【例4.4】要求按任意顺序从键盘输入三个整数,编写程序完成输出最大值和最小值的算法。基本思路:首先任取其中两个数,判断最大和最小;使用例4.3的方法。其次,用第三个数分别与刚刚得到的最大和最小数再次比较,就可以得到三个数中的最大和最小。4.2.4if语句的第三种格式其语法格式如下:if(条件表达式1)复合语句1elseif(条件表达式2)复合语句2elseif(条件表达式3)复合语句3……elseif(条件表达式m)复合语句melse复合语句m+1【例4.5】设计程序完成将百分制成绩转换成五分制表示。#includestdio.hvoidmain(){charchscore;intnscore;printf(\npleaseinputScore(0~~100):\n);scanf(%d,&nscore);if(nscore60){chscore='E';}elseif(nscore70){chscore='D';}elseif(nscore80){chscore='C';}elseif(nscore90){chscore='B';}else{chscore='A';}printf(\nYourScoreis%c!!!\n,chscore);return;}【例4.6】从键盘读取一个字符数据,判断其类型是:控制类字符,数字字符,大写字符,小写字符,其他字符等类别中的哪一类?设计程序完成。基本思路:读入字符数据,依据字符的ASCII值判断所属范围。4.2.5switch语句及break语句switch语句的语法格式:switch(表达式){case常值1:复合语句1case常值2:复合语句2……case常值n:复合语句ndefault:复合语句n+1}下面使用switch语句改写例题【例4.5】。【例4.7】设计程序完成将百分制成绩转换成五分制表示。#includestdio.hvoidmain(){c4:intnscore;c5:charchscore;c6:printf(\ninputScore(0~~100):\n);c7:scanf(%d,&nscore);c8:nscore/=10;//变换后,nscore的值是0~10之间的整数c9:switch(nscore)c10:{c11:case0:c12:case1:c13:case2:c14:case3:c15:case4:c16:case5:{chscore='E';}c17:case6:{chscore='D';}c18:case7:{chscore='C';}c19:case8:{chscore='B';}c20:case9:c21:case10:{chscore='A';}}c23:printf(\nYourScoreis%c!!!\n,chscore);c24:return;}c23句输出chscore变量的当前值。编译运行此段程序应该是正确的。但是程序运行后,不管百分制成绩是多少,输出结果总是如下:YourScoreisA!!!程序一定是存在问题。这里说的流程控制语句,就是指跳转语句break。break语句的作用之一就是从某个case子句处跳出switch语句,继续执行switch的下一条语句。break语句还用于循环语句当中,后面介绍。例4.7的正确写法需要break与switch语句配合使用,程序如下:#includestdio.hvoidmain(){c4:intnscore;c5:charchscore;c6:printf(\ninputScore(0~~100):\n);c7:scanf(%d,&nscore);c8:nscore/=10;//变换后,nscore的值是0~10之间的整数c9:switch(nscore)c10:{c11:case0:c12:case1:c13:case2:c14:case3:c15:case4:c16:case5:{chscore='E';}c16_1:break;c17:case6:{chscore='D';}c17_1:break;c18:case7:{chscore='C';}c18_1:break;c19:case8:{chscore='B';}c19_1:break;c20:case9:c21:case10:{chscore='A';}c21_1:break;}c23:printf(\nYourScoreis%c!!!\n,chscore);return;}【例4.8】设计能够完成单步四则运算的简易运算器,输出运算结果。4.3循环结构C语言中的循环结构主要包括三个语句,分别是:while语句,do-while语句,for语句。每个语句各有自身的特点,学习时注意它们在构成循环结构时的异同。4.3.1while语句while语句也可以称之为“当语句”。表达的含义是:当条件表达式的值为真(非0值)时,就执行循环体,之后重新判断条件表达式的值;如此重复多次执行循环体,直到条件表达式的值为假(0值)时,while语句结束,顺序执行其后的下一条语句。使用流程框图表示如教材图4-8。while语句的语法格式如下:while(条件表达式)复合语句其语义是:1.计算条件表达式的值;2.如果值为真(或者称为成立,或者非0),则按顺序执行复合语句;返回步骤1;3.如果值为假(或者称为不成立,或者0值),则执行while语句的下一条语句。【例4.9】输出ASCII表的可见字符,字符之间用逗号分隔。可见字符的ASCII值在32~126之间。#includestdio.hvoidmain(){c4:intch=32;c5:while(ch127)c6:{c7:printf(%c,,ch
本文标题:第4章程序的控制结构
链接地址:https://www.777doc.com/doc-599425 .html