第3章 程序设计基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.限制使用goto语句
3.1.2 结构化程序的基本结构与特点
采用结构化程序设计方法编写程序,目标是得到一 个良好结构的程序。 所谓好结构的程序就是该程序具有结构清晰、容易 阅读、容易理解、容易验证、容易维护等特点。 1996年,Boehm和Jacopini证明了程序设计语言仅 仅使用顺序、选择和重复(循环)三种基本控制结构, 就足以表达出各种其它复杂形式的程序结构。
第3章 程序设计基础
本章主要内容: 3.1 结构化程序设计概述 3.2 C的基本语句 3.3 顺序结构 3.4 分支结构 3.5 循环结构
3.1 结构化程序设计概述
随着计算机的应用日益广泛,计算机软件的规模和复杂 性不断增加,对软件的测试、维护越来越困难。
在20世纪60年代末期,“软件危机”这个词频繁出现, 为了解决由于软件危机带来的一系列问题,人们开始研究 程序设计方法,其中最受关注的是结构化程序设计方法。
3.1.2 结构化程序的基本结构与特点
顺序结构:一种简 单的程序设计,它是 最基本、最常用的结 构。
顺序结构就是按 照程序语句行的自然 顺序,一条语句一条 语句地执行程序。
3.1.2 结构化程序的基本结构与特点
选择结构:又称 为分支结构,它包括 简单分支结构和多分 支结构。
这种结构可以根 据设定的条件,判断 应该选择执行哪一条 分支的语句序列。
源程序清单如下:
#include <stdio.h> int main(void)
{
int a,b; printf("first number:"); scanf("%d",&a); printf("second number:"); scanf("%d",&b); printf("(a+b)*(a-b)=%d\n",(a+b)*(a-b)); return 0; } /*计算并输出结果*/ /*输入第二个数b*/ /*输入第一个数a*/
• 标识符:语句
例如:start:i=1;
3. continue语句
continue只能出现在循环语句中,continue语句的 执行将忽略它所在的循环体中该语句之后的所有语 句。 如果continue语句在while语句或do…while语句循 环体中,是控制转入对循环条件表达式的计算和测 试;如果在for循环语句的循环体中,则转向对控制 结构的表达式3的求值。 简单地说,continue语句提早结束当前轮次循环体 的执行,进入下一轮循环。 continue语句的格式为:
3.1.3 结构化程序设计的方法
在结构化程序设计的具体实施中,要注意把握以下方法: 1.使用程序设计语言中的顺序、选择、循环等有限的控制 结构表示程序的控制逻辑; 2.选用的控制结构只允许有一个入口和一个出口; 3.程序语句组成容易识别的语句序列块,每块只允许有一 个入口和一个出口;
4.复杂结构的程序设计时,仅用嵌套的基本控制结构进行 组合嵌套来实现;
5.严格控制GOTO语句的使用。
3.1.4 C语言程序的结构
在C语言中, 一个大的程序 可由多个源程 序文件组成, 而源程序文件 由预编译命令 和多个函数组 成,每个函数 实现某个特定 功能。
3.2 C的基本语句
C中主要由五种语句组成:
• • • • • 表达式语句 空语句 函数调用语句 控制语句 复合语句
• continue;
4. return语句
return语句只能出现在函数体中,return语句的执 行将结束函数的这次执行,将控制返回到函数调用 处。
return语句的格式为:
• return; 或 return 表达式;
return 表达式;用于函数有返回结果的函数体中。 程序执行(return 表达式;)时,函数在返回前计 算表达式的值,并以该表达式的值作为函数返回值, 待回到函数调用处继续计算。
下一条语句;
功能:首先判断表达式,当表达式 为真时,就执行语句1,然后执行 下一条语句;当表达式为假时,步 执行语句1,直接执行下一条语句。 if 形式属于单分支结构,只能判 断一种条件,满足条件就执行语句 1,否则就不执行语句1。
3.4.1
使用if形式需要注意以下几点:
if形式
(1)表达式必须用圆括号括起来,圆括号不能省略。 (2)表达式可以是关系表达式、逻辑表达式、变量、甚至 常量。如果是一个变量或常量时,表达式的值为非0,即为 真。 (3)语句1可以是一个简单语句,也可以是一个复合语句。 语句1如果是一条语句,即为简单语句,语句结束符分号 “;”必须写。语句1如果是多条语句,必须使用复合语句, 即使用花括号将多个带分号的语句括起来。
3.1.2 结构化程序的基本结构与特点
重复结构:
• 又称循环结构。它根据给定的条件,判断是否需 要重复执行同一相同的程序段,利用重复结构可 以简化大量的程序行。
在程序设计语言中,重复结构对应两类循环 语句,
• 当型循环结构:对先判断后执行循环体。 • 直到型循环结构:对先执行循环体后判断。
例如:printf(“a+b %d”,a+b); printf是函数名, “a+b %d”,a+b是实际参数。 函数名可以是C语言提供的库函数名,也可以 是用户自定义的函数名。
3.2.4 控制语句
控制语句是用于控制程序流程的语句,一般 指那些可以改变程序执行顺序的语句。 C语言的控制语句包括
3.2.1 表达式语句
在表达式之后加上分号即为表达式语句,其格式为:
表达式;
例如:
来自百度文库++j; m=n; x=y+2;
一般情况,有效的表达式语句都要有赋值运算,否则不 做任何赋值运算的表达式语句是无意义的。
3.2.2 空语句
空语句,顾名思义就是什么也不存在的语句,只有一个 分号,语句格式为:
;
尽管空语句不会执行任何命令,但仍然是一个很重要的 语句。通常用于循环语句中,使循环体为空。如果没有空语 句时,就无法表示了。
分支结构举例
【例3.2】从键盘输 入2个整数a和b,如 果a>b将2个数的位 置调换,即按从小 到大排列输出。
首先画程序流程图, 如图所示。
源程序清单如下: #include <stdio.h> int main(void) { int a,b,temp;
printf("please input two int number:");
if (表达式)
语句1; else
语句2;
下一条语句; if else语句功能:首先判断表达式, 当表达式为真时,就执行语句1,当 表达式为假时,执行语句2,然后再 执行下一条语句。
3.4.2 if else形式 【例3.4】输入两个 数,求两个数的商。 按照除法运算规则, 除数不能为零。如 果除数为零提示用 户输入有误,否则 计算、输出商。 程序流程图如图所 示。
if (d>0) { printf(“\nx1=%f”,(-b+sart(d))/(2*a)); printf(“\n x2=%f”,(-b-sart(d))/(2*a)); }
main()
{ float q,b,c,d; printf(“\n a=”); scanf(“%f”,&a); printf(“\n b=”); scanf(“%f”,&b); printf(“\n c=”); scanf(“%f”,&c); d=b*b-4*a*c; }
scanf("%d%d",&a,&b); if (a>b)
/*输入两个数a,b*/
{
temp=a; a=b; b=temp; } printf("%d,%d\n",a,b); } /*输出结果*/
【例3.3】编写求解一元二次方程Ax2 +Bx+C=0的实数解的程序,其中A、B、C 为任意实数。 这是一个数值计算问题,用计算机求解此类问题的步骤: 1.首先要抽出数学模型; 2.然后进行算法设计; 3.最后编写程序。
3.2.5 复合语句
用花括号“{”和“}”括起来的一系列说 明语句和可执行语句构成的。
• 其语句格式为:
{
[数据说明语句]; [可执行语句];
}
复合语句
复合语句在语法上相当于一个简单语句,在程序中 可以作为一个独立语句来看待,因此又称分程序。 在程序中,每个简单语句都可以用复合语句来代替, 而复合语句的每个执行语句又可以是控制语句或简 单语句,这样,C语言的语句就形成了一种层次结 构,原则上可以不断地扩大这种层次。 复合语句中,每个说明语句和执行语句都必须加分 号,花括号后面不用加分号。 用复合语句代替多个简单语句是C语言的特征之一。 它的优点是:使用灵活,并可以在分程序中说明局 部变量。
例如: for (sum=0,i=0; i<=5; i++) { } /*循环的初值,判断,增减量*/ /* 循环体 */
可以看出,该循环内无语句,是一个空循环,可表示为:
for (sum=0,i=0; i<=5; i++); 分号表示空语句
3.2.3 函数调用语句
函数调用语句由函数名、实际参数以及分号构成。
考虑全局目标,后考虑局部目标。不要一开始就过多追求众 多的细节,先从最上层总目标开始设计,逐步使问题具体化。 2.逐步求精:对复杂问题,应设计一些子目标作为过渡, 逐步细化。 3.模块化:一个复杂问题,肯定是由若干稍简单的问题构 成。模块化是把程序要解决的总目标分解为子目标,再进一 步分解为具体的小目标,把每一个小目标称为一个模块。
• 分支语句(if和switch) • 循环语句(do-while、while、for) • 转向语句(break、goto、continue、return)
1. break语句
break语句只能出现在多分支选择结构或循 环结构中。 break语句的执行强制结束它所在的控制结 构,让程序从这个结构的后继语句继续执行。
if(d==0) printf(“\n x1=x2%f”,(-b)/(2*a)); if(d<0) printf(“\n The equation has no real root!”);
3.4.2 if else形式 if 形式属于单分支结构,只允许条 件为真时执行指定的语句,即满足条 件就执行语句1,否则就不执行语句1。 if else形式是两分支语句。其语法 格式为:
3.3 顺序结构
顺序结构程序即自始至 终按照语句序列的排列 顺序,依次逐条执行的 简单程序。 顺序程序结构的流程图 如图所示。 顺序结构的程序是最简 单的程序,一行语句执 行完毕后,再接着执行 下一行语句,整个程序 中的语句逐条执行且只 有一个入口和出口。
【例3.1】从键盘输入2个整数a和b,计算并输出(a+b)*(a-b)。
break语句的格式为:
• break;
2. goto语句
将程序无条件地转移到指定的语句处执行。
• goto语句的语法格式为: goto 语句标号;
例如:
goto start;
执行这个语句,程序就转移到以start为标号的语句 执行。
任何语句都可以带语句标号,如果语句有标号,可 以写成如下形式:
20 世 纪 70 年 代 提 出 了 “ 结 构 化 程 序 设 计 ( structured programming)”的思想和方法。结构化程序设计方法引入 了工程思想和结构化思想,使大型软件的开发和编程得到 了极大的改善。
3.1.1 结构化程序设计的原则
1.自顶向下:程序设计时,应先考虑总体,后考虑细节;先
3.4 分支结构
C语言中的分支结构用条件语句实现。
如果我们希望计算机根据不同的情况采取不 同的动作,就要使用条件语句。 C语言中的if条件语句有三种形式:
• if形式、 • if else形式 • else if形式。
3.4.1 if形式
if语句的语法格式为:
if (表达式) 语句1;
抽出数学模型的过程: 根据初等数学知识,对本题可做如下讨论: 当A=0时,若B=0,方程无解;
若B≠0,方程只有一个单根X=―C/B;
当A≠0时,若B2―4AC≥0,方程有两个实根: X1,2 =(―B±√B2―4AC )/2A 若B2―4AC<0,方程无实数解。
程序流程图如图3-11所示:
源程序清单如下: #include <stdio.h> #include <math.h>