第三章C语言程序设计控制结构课件_第1页
第三章C语言程序设计控制结构课件_第2页
第三章C语言程序设计控制结构课件_第3页
第三章C语言程序设计控制结构课件_第4页
第三章C语言程序设计控制结构课件_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

第三章控制结构

【教学目标】理解面向过程的概念,理解结构化程序设计思想,掌握结构化程序设计基本方法。掌握C语句的5种类型,能熟练应用C语句中的9种控制语句。能熟练运用“顺序”、“选择”、“循环”三种基本结构解决程序设计中具体问题。

【教学内容】 C程序的逻辑结构 C语句的5大类型 选择结构语句系列 循环结构语句系列

【重点与难点】

重点 程序结构的概念 “选择”结构、“循环”结构中的8种控制语句

复合语句的概念及使用方法

难点

多分支语句的使用方法

三种循环语句的差异及使用方法

循环嵌套的使用方法

复合语句的正确使用方法第三章控制结构

3.1 程序的三种基本控制结构

3.1.1C语言概述 第二章介绍程序中用到的一些基本要素:常量、变量、运算符、表达式、基本输入输出方式等,它们是构成C程序的基本成分。第三章控制结构 一个C程序是由多个函数组成的,每个函数又分为

声明部分、可执行部分;声明部分是对变量的定义,不产生机器操作;可执行部分由各种语句组成,语句将产

生机器操作。一个完整的C程序的构成如图所示:第三章控制结构C程序源程序文件1源程序文件2源程序文件n预处理命令全局变量声称明函数1函数n……局部变量声明执行部分语句2……语句n语句1……一个c程序可以有若干个源程序文件组成一个源文件可以有若干个函数和预处理命令以及全局变量声明部分组成一个函数有函数首部和函数体组成函数体由数据声明和执行语句组成C语句分为5类控制语句函数调用语句表达式语句空语句复合语句第三章控制结构3.1程序的三种基本控制结构3.1.1 C语句概述C语句是函数的主体,共分五类:(1)控制语句(2)函数调用语句(函数调用加上分号)(3)表达式语句(各种表达式加上分号)(4)空语句(只有一个分号)(5)复合语句(组成逻辑上的一条语句)

1、控制语句

控制语句完成一定的控制功能 1if()~else条件语句6break间断语句 2for()~循环语句7switch()开关语句 3while()~循环语句8goto转向语句 4do~while();循环语句9return返回语句 5continue继续语句

2、函数调用语句 该语句由函数调用语句及分号组成。如:sanf(); printf(); getchar();等。

3、表达式语句 表达式后加分号形成。

由表达式加上分号的语句,是构成C程序最主要的形式,如赋值语句、自加、自减等。表达式语句说明A=100A=100;赋值表达式语句X+=(a+2)/bX+=(a+2)/b;复合赋值表达式语句i++i++;自加表达式语句X+yX+y;算术表达式语句

4、空语句 只有一个分号的语句。 main() { inta=100; ; printf(“%d”,a); }

5、复合语句 用一对花括号将一系列语句括起来组成逻辑上的一条语句,又称分程序。 main() { inta=100,b=11,c; c=fmod(a,b);

{ inta=200; c=fmod(a,b); printf(“%d”,c

}

printf(“%d”,c); }3.1.2C程序的逻辑结构C语言是一种面向过程的结构化语言,一个良好算法的3种基本结构:(1)顺序结构:按先后顺序依次执行语句1语句23.1.2C程序的逻辑结构(2)选择结构:根据变量和表达式满足的条件决定 要执行的语句;if,elseif,switch表达式为真为假语句系列1语句系列23.1.2C程序的逻辑结构(3)循环结构:根据一定条件的反复地执行一组语句:for,while语句系列表达式非00

do-while

直到循环语句系列表达式非003.2if语句(选择结构)3.2.1、简单

if语句1、形式:if(表达式)语句2、流程图:语句系列表达式非00单分技选择结构:3.2if语句(选择结构)

例:比较三个数据大小并由小到大输出。(算法)

注:若有1000或10000个数据排序!?t=aa=cc=tt=bb=cc=t定义数据a,b,c,t

输入数据a,b,ca>b?非0t=aa=bb=t;0a>c?非0……b>c?输出a,b,c非000main(){ inta,b,c,t; printf("\nInputthreenums\n"); 3-A.C scanf("%d%d%d",&a,&b,&c); if(a>b) { t=a;a=b;b=t;} /*复合语句*/ if(a>c) { t=a;a=c;c=t;} /*复合语句*/ if(b>c) { t=b;b=c;c=t;}/*复合语句*/ printf("a=%db=%dc=%d",a,b,c); }3.2if语句(选择结构)3.2.2、if-else语句1、形式:if(表达式)语句1

else语句22、流程图:语句2语句10非0表达式双分技选择结构:3.2if语句(选择结构)

例1:任意输入一数据,判定其能否被3整除 (如要对多个数据进行判断呢?或者需反复输入数据进行判断呢?)

定义数据a输入数据aa%3==0?输出数据a非00输出NO(3-2-2.c)3.2if语句(选择结构)3.2.3、elseif语句1、形式:if(表达式1)语句1elseif

(表达式2)语句2elseif

(表达式3)语句3 ……elseif

(表达式n)语句nelse

语句n+12、流程图:语句1真假表达式1表达式2语句2真表达式3语句3真假语句4假多分技选择结构:3.2if语句(选择结构)例(3-2-4-1.c)

例:分段函数(多分技)Fx=-1

(x<0)0

(x=0)1

(x>0)3.2if语句(选择结构)

例:输入成绩,输出该成绩所属等级,(A、B、C、 D等)

。(3-2-3)3.2if语句(选择结构)3.2.4、if语句的嵌套1、形式:if()if()语句1[else语句2]elseif()语句3[else语句4]内嵌if语句内嵌if语句2、注意:if总是与它最近的else配对3.2if语句(选择结构)表达式1表达式2表达式3非00非0语句系列1语句系列20语句系列4语句系列3非00

例:分段函数Fx=(x>=0)

(x<0)

-1X>0 1X=003-2-4-2.c3.3switch语句(开关)用于处理多路分支选择1、形式:(3-3)swithch(表达式){case常量表达式1:语句1;[break;]case常量表达式2:语句1;[break;]case常量表达式3:语句1;[break;]……case常量表达式n:语句1;[break;]default :语句n+1;}常量表达式1表达式语句系列1break?非0

0常量表达式2语句系列2语句系列nbreak?非0非000非0....default结束0

例:输入成绩等级(A,B,C,E,D),根据等级输出其所属分数段。(3-3.C)循环语句什么是循环?为什么要使用循环?问题1:问题2:求学生平均成绩分数相加后除以课数

在许多问题中需要用到循环控制。循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。3.4while语句(当循环)当满足某一条件,需要反复执行一组语句时用循环语句:while,do-while,for1、形式:while(表达式)语句2、流程图语句表达式非003、例求: 1+2+3+……+100之和。(算法?)#include<stdio.h>

voidmain()

{inti,sum=0;

i=1;

while(i<=100)

{sum=sum+i;

i++;

}

printf(″%d\\n″,sum);

} 例:求任意两个整数M、N之间自然数之和;注意:循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。在循环体中应有使循环趋向于结束的语句。如果无此语句,则i的值始终不改变,循环永不结束。3.5do-while语句(直到循环)1、形式:do 循环体语句while(表达式);2、流程图循环体语句表达式非00执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。

3、例求:1+2+3+……+100之和。#include<stdio.h>

voidmain()

{

inti,sum=0;

i=1;

do

{

sum=sum+i;

i++;

}

while(i<=100);

printf("%d\\n″,sum);

}

3、例3、5while语句和用do-while语句的比较while语句和用do-while语句的比较:在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。例while和do-while循环的比较

(1)#include<stdio.h>(2)#include<stdio.h>

voidmain()voidmain()

{intsum=0,i;{intsum=0,i;

scanf(“%d″,&i);scanf(”%d

while(i<=10)do

{sum=sum+I;{sum=sum+i;

i++;}i++;}

printf(“sum=%d\\n″,sum);while(I<=10)

printf((“sum=%d\\n″,sum);

}

}运行结果:1↙sum=55再运行一次:11↙sum=0运行结果:1↙sum=55再运行一次:11↙sum=11说明:(1)当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。3.6for语句(步长循环)1、形式:for(表达式1;表达式2;表达式3)语句2、流程图3、例(3-6-1)for(i=0;i<100;i++)sum=sum+i;求解表达式1表达式2非00语句求解表达式3for语句的执行过程:(1)先求解表达式1。(2)求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。(3)求解表达式3。(4)转回上面第(2)步骤继续执行。(5)循环结束,执行for语句下面的一个语句

3.6for语句(步长循环)表达式2?执行语句成立不成立执行for循环之后的语句执行表达式3执行表达式1循环初始条件循环控制条件循环体for语句等价于下列语句:表达式1;while(表达式2){语句;表达式3;}

for语句最简单的应用形式、最易理解的如下形式:

for(循环变量赋初值;循环条件;循环变量增值)3.6for语句4、表达式的省略:for(i=0;i<100;i++)sum=sum+i;(1)省略表达式1(应在for前给循环变量赋初值)i=1;for(;i<100;i++)sum=sum+i;(2)省略表达式2(应在循环体内加入结束循环的条件)for(i=1;;i++){sum=sum+i;if(i>100)break;}3.6for语句4、表达式的省略:for(i=0;i<100;i++)sum=sum+i;(3)省略表达式3(应在for循环体内加入循环变量的变化语句以结束循环)for(i=1;i<100;){sum=sum+i;i++;}(4)省略表达式1、3i=1;for(;i<=100;){sum=sum+i;i++;}3.6for语句4、表达式的省略:for(i=0;i<100;i++)sum=sum+i;(5)3个表达式都可以省略i=1;for(;;){sum=sum+i;i++;if(i>100)break;}i=1;for(sum=0;i<=100;i++){sum=sum+i;}6)表达式1可以是给循环变量赋初值,还可以是其它的任意无关表达式3.6for语句4、表达式的省略:for(i=0;i<100;i++)sum=sum+i;(7)表达式2可以是关系表达式,也可以是逻辑表达式for(;(c=getchar())!=‘\n’;){printf(“%c”,c);}3.7循环语句的比较和嵌套1、几种循环的比较:(1)4种循环可以用来处理同一问题,一般可以相互替代(2)for语句功能较强,while循环能完成的,for都能实现。(3)while、do-while循环的循环变量初始化放在循环语句 之前,for循环放在表达式1中。(4)可以用break跳出循环,用continue结束本次循环。3.7循环语句的比较和嵌套2、循环嵌套:

一个循环体内又包含另一个完整的循环结构。内嵌的循环中还可以嵌套循环,即多层循环。(1)while(){……while(){……}}(2)do{……do{……}while();}while();(3)for(;;){for(;;){……}}(4)for(;;){……while(){……}}下面几种都是合法的形式:(1)

while()(2)do(3)for(;;){…{…{while()dofor(;;){…}{…}{…}}while();}}while();

3.7循环语句的比较和嵌套(4)

while()(5)for(;;)(6)do{…{…{…do{…}while()for(;;){}while(){}…{…}…}}}while()

3.7循环语句的比较和嵌套(4)while循环、do-while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环(break语句和continue语句见下节)。而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制.

3.8break语句和continue语句3.8break语句和continue语句1、break语句break用于跳出switch结构。break还用于跳出循环,即提前结束循环。形式:break;

while(表达式1)

{…if(表达式2)break;…}1、break语句#include<stdio.h>#include<math.h>voidmain(){intm,k,I;printf(“Pleaseinputaninteger:”);scanf(“%d”,&m);k=sqrt(m);for(i=2;i<=k;i++) if(m%i==0)break;If(i>=k+1) printf(“%4disaprimenumber!\n”,m)elseprintf(“%4disnotaprimenumber!\n”,m)}问题:输入一个数,判断是否为素数。3.8break语句和continue语句2、continue语句continue用于结束本次循环。形式:continue;while(表达式1)

{…

if(表达式2)continue;

…}1、continue语句#include<stdio.h>voidmain(){Intn;For(n=100;n<=200;n++){ if(n%9!=0) continue; printf(“%5d”,n);}}问题:输出100-200之间9的倍数的自然数。3.10程序举例例3.13:用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到最后一项的绝对值小于10-6为止。分析:定义数据s=1,pi=0,n=1.0,t=1fabs(t)<10-6npi=pi+ts=-sn=n+2t=s/npi=pi*4输出y(3-10-4.c)#include<stdio.h>

#include<math.h>main(){doublet=1,pi=0,n=1,eps=1.0e-6;ints=1;while(fabs(t)>=eps){ pi+=t; n+=2; s*=-1; t=s/n;

}pi*=4;printf(“\nPI=%lf\n”,pi);}§程序举例

例求Fibonacci数列前40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:F(1)=1(n=1)F(2)=1(n=2)F(n)=F(n-1)+F(n-2)(n≥3)例求Fibonacci数列前40个数。

#include<stdio.h>

voidmain()

{longintf1,f2;

inti;

f1=1;f2=1;

for(i=1;i<=20;i++)

{printf(″%12ld%12ld″,f1,f2);

if(i%2==0)printf(″\n″);

f1=f1+f2;

f2=f2+f1;

}

}

运行结果:11235813213455891442333776109871597258441816765109461771128657463687502512139319641831781151422983204013462692178309352457857022887922746514930352241578173908816963245986102334155

例1:判断m是否素数。分析(1)如果m能被2~m之中任何一个整数整除,则提前结束循环;(2)如果m不能被2~m之间的任一整数整除,输出“是素数”。推广例2:判断1—m的全部素数。例3:判断

温馨提示

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

评论

0/150

提交评论