《基本结构正式》PPT课件.ppt

上传人:wuy****n92 文档编号:77645879 上传时间:2023-03-15 格式:PPT 页数:65 大小:412.50KB
返回 下载 相关 举报
《基本结构正式》PPT课件.ppt_第1页
第1页 / 共65页
《基本结构正式》PPT课件.ppt_第2页
第2页 / 共65页
点击查看更多>>
资源描述

《《基本结构正式》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《基本结构正式》PPT课件.ppt(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 第第3 3章章 基本结构程序设计基本结构程序设计主要内容:C C语言的基本语句、程序的基本结构。3.1 3.1 基本程序结构和结构化程序设计基本程序结构和结构化程序设计科学家沃思(Nikiklaus WirthNikiklaus Wirth)提出一个公式:数据结构数据结构+算法算法=程序程序数据结构:指对数据(操作对象)的描述。算法:指对操作步骤的描述。编写程序的本质:对哪些数据进行什么样的一系列加工就可以达到目标。13.1.1 3.1.1 算法算法1算法:是解决问题的一系列操作步骤的集合。例例3.1 3.1 求解一元二次方程axax2 2+bx+c=0(a0)+bx+c=0(a0)的两个根

2、。s1s1:输入数据 a,b,ca,b,c s2 s2:求根x1,x2x1,x2 s3 s3:输出结果 可以将求解算法(s2s2)进行细化设计如下:s2_1s2_1:输入数据 a,b,ca,b,c s2_2 s2_2:求判别式d的值,d=b*b-4*a*cd=b*b-4*a*c s2_3 s2_3:判断:如果d=0d=0,则按实根求法计算:x1=(-b+sqrt(d)/(2*a)x1=(-b+sqrt(d)/(2*a)x2=(-b-sqrt(d)/(2*a)x2=(-b-sqrt(d)/(2*a)否则,按复根求法计算:实部 r=-b/(2*a)r=-b/(2*a)虚部 p=sqrt(-d)/(

3、2*a)p=sqrt(-d)/(2*a)2 依次读入30个学生成绩,输出平均成绩及最高成绩具体算法描述:具体算法描述:s1s1:0=i0=i s2 s2:0=sum0=sum,0=max0=max s3 s3:读入一个学生成绩存入读入一个学生成绩存入scorescore s4 s4:i+1=ii+1=i s5 s5;sum+score=sumsum+score=sum s6 s6:如果如果scorescore大于大于maxmax,则则score=maxscore=max s7 s7:如果如果i i小于小于3030,转移至,转移至s3s3 s8 s8:sum/30=average sum/30=

4、average s9 s9:打印打印averageaverage,maxmaxs3,s4,s5,s6,s7s3,s4,s5,s6,s7这些步骤会被重复执行3030次,变量i i用于统计已处理的学生人数 当i i值小于3030时,流程转至s3s3读下一个学生成绩 当i i值等于3030时,所有学生成绩处理完毕,到s8,s9s8,s9输出结果。33.3.算法的特性算法的特性算法是解决问题逻辑思路的表述。同一个问题有不同的解题方法和步骤,设计出不同的算法。正确的算法应该具备以下特性。有穷性:有穷性:包含有限的操作步骤,不能无限制地执行下去;确定性:确定性:算法中所描述的每个步骤都应该是明确的;有若干

5、个输入数据(有若干个输入数据(0 0 n n)输入是指在算法执行过程中需要用户输入的信息;有若干个输出数据(有若干个输出数据(1 1 n n)一般地,算法都有一个或多个输出数据,因为设计算法的目的就是进行数值运算或进行某种数据处理,给用户输出处理结果是必然的要求。有效性有效性在一个算法中,要求每个步骤都能被有效地执行43.1.2 算法的表示 流程图起止框 处理框判断框 输入输出框流程线5l 程序的三种基本结构结构化程序设计l基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto)l结构化程序:由三种基本结构反复嵌套构成的程序叫l优点:结构清晰,易读,提高程序设计质量和效率

6、三种基本结构l顺序结构ABAB流程图N-S图6v选择结构PAB真假PBA真假l二分支选择结构l多分支选择结构A1A2AiAnk=k2k=k1k=knk=ki.7v循环结构l当型循环结构PA假真当P为真Al直到型循环结构AP真假A直到P为真注:A,B,A1.An可以是一个简单语句,也可以是一个基本结构83.2 3.2 顺序结构程序设计顺序结构程序设计3.2.1 3.2.1 顺序执行语句概述顺序执行语句概述C程序是由语句组成,每个语句以分号结束。顺序结构的程序会按照语句书写的顺序执行;语句分类:控制语句:控制程序执行流程控制程序执行流程 表达式语句 a=b+c+d;函数调用语句:调用函数调用函数

7、空语句:执行空操作执行空操作 (只有一个分号)(只有一个分号)复合语句:执行一组语句执行一组语句 用用把一些语句括起来,相当于一个语句把一些语句括起来,相当于一个语句 如:x1=-(-b+sqrt(d)/(2*a);x2=-(-b-sqrt(d)/(2*a);93.2.2 3.2.2 数据的输入输出数据的输入输出输入:指将数据送入计算机输出:指将计算机处理的结果数据送出保存或显示出来。语言中,数据输入输出是由库函数完成。使用库函数时,用预编译命令将有关“头文件”包括到源文件中。标准输入输出库函数:“”文件 源文件开头应有以下预编译命令:#include include#include incl

8、ude (p219)101.putchar 函数(字符输出函数)格式:putchar(c)参数:c为字符常量、变量或表达式功能:把单个字符c输出到显示器上#include main()int c;char a;c=65;a=B;putchar(c);putchar(n);putchar(a);运行结果:A B例11输出表:要输出的数据(可以没有,多个时以“,”分隔)格式控制串:包含两种信息 格式说明:%修饰符格式字符,用于指定输出格式 普通字符或转义序列:原样输出格式字符 d格式符:按十进制格式输出 f格式符:按实数格式输出 c格式符:以字符形式输出一个字符格式:printf(“格式控制串”,

9、输出表)功能:按指定格式向显示器输出数据返值:正常,返回输出字节数;出错,返回EOF(-1)说明:标准库函数,函数原型在头文件“”中例 char a=3,b=4;printf(“%c%cn”,a,b);printf(“a=%c,b=%cn”,a,b);输出结果:3 4 a=3,b=4输出结果:3 4 a=3,b=4例 int a=3,b=4;printf(“%d%dn”,a,b);printf(“a=%d,b=%dn”,a,b);例 float a=3.14,b=2.1828;printf(“%f%fn”,a,b);printf(“a=%f,b=%cf”,a,b);输出结果:3.140000

10、2.182800 a=3.140000,b=2.182800 2.printf函数(格式输出函数)121.d格式符格式符%d:按整形数据的实际长度输出;按整形数据的实际长度输出;%md:m为指定的输出字段的宽度,如数据的位数小于为指定的输出字段的宽度,如数据的位数小于m,则左端则左端补以空格,如大于补以空格,如大于 m,则按实际位数输出;则按实际位数输出;%ld:对长整形数据进行输出;对长整形数据进行输出;2.s格式符格式符%ms:输出的字符串占输出的字符串占m列,如字符串本身长度大于列,如字符串本身长度大于m,则突则突破破m的限制,将字符串全部输出,如串长小于的限制,将字符串全部输出,如串长

11、小于m,则左补空格;则左补空格;%m.ns:输出占输出占m列,但仅取字符串中左端列,但仅取字符串中左端n个字符,这个字符,这n个字个字符输出在符输出在m列的右侧,左补空格;列的右侧,左补空格;%-3 f格式符格式符%f:整数部分全部输出,并输出整数部分全部输出,并输出6位小数;位小数;%:指定占指定占m列,其列,其中有中有n位小数,如数值长度小于位小数,如数值长度小于m,则左补空格。则左补空格。13格式:getchar()功能:从键盘读一字符返值:正常,返回读取的代码值;出错,返回EOF(-1)3.getchar函数(字符输入函数)例/*ch3_4.c*/#include main()int

12、c;printf(Enter a character:);c=getchar();printf(%c-hex%xn,c,c);运行结果:Enter a character:AA-hex4114格式:scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束返值:正常,返回输入数据个数说明:标准库函数,函数原型在头文件“”中地址表:变量的地址,用取地址运算符&格式字符:d,c,f例 int a scanf(“%d”,&a);输入:10 则 a=10例 char a;scanf(“%c”,&a);输入:m 则 a=m例 float a scanf

13、(“%f”,&a);输入:则 函数(格式输入函数)15输入分隔符的指定格式串中两个格式符间有分隔符;格式串两个格式符无间隔字符,以空格、TAB或回车键作为分隔例 scanf(“%d:%d:%d”,&h,&m,&s);输入 12:30:45 则12 h,30 m,45 s例 scanf(“%d,%d”,&a,&b)输入 3,4 则3a,4 b例 scanf(“%d%d%d”,&a,&b,&c);输入 12 24 36 16#include#includevoidmain()floata,b,c,s,area;printf(inputa,b,c:);scanf(%f,%f,%f,&a,&b,&c)

14、;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%7.2fn,area);输入三角形边长,求面积输入三角形边长,求面积inputa,b,c:3,4,6 17 从键盘上输入一个字符,求出它的前导与后继字符,然后按由小到大的顺序输出这些字符及ASCIIASCII字符。注意:字符的输入/输出函数,在程序包含头文件.C C语言中字符型和整型数据可以互通#include include void main()void main()char c;char c;int c1,c2;int c1,c2;c=getchar();c=getchar()

15、;c1=c-1;c2=c+1;c1=c-1;c2=c+1;printf(%c,%c,%cn,c1,c,c2);printf(%c,%c,%cn,c1,c,c2);printf(%d,%d,%dn,c1,c,c2);printf(%d,%d,%dn,c1,c,c2);183.3 3.3 选择结构选择结构选择结构:根据条件决定执行两组或多组操作中的一组。二路分支 if if else else 语句语句多路分支 switchswitch语句语句3.3.1 3.3.1 关系运算和逻辑运算关系运算和逻辑运算条件:是一个关系表达式或者逻辑表达式 结果是逻辑值:真或假,用整数1 1表示“真真”,用整数0

16、0表示“假假”。1.关系运算关系运算是一种比较运算,有六个用于进行比较的运算符,大于 =大于等于 小于 =小于等于 =等于 !=!=不等于19说明:说明:(1)六个关系运算符都是双目运算符,(2)如:intint a=2,b=3;a=2,b=3;ab a100i*i+j*j100 结果为假。关系运算运算对象为字符数据,比较按其ASCIIASCII码进行 如:表达式:abab 值为假20与数学表达式的区别=!=优先级高优先级低算术运算赋值运算 关系运算(3)(3)运算符的优先级问题运算符的优先级问题z=i*i+j*j100z=i*i+j*j100 结果为0z变量的值为0 如:33x100 x10

17、0 数学解释 判断x是否在区间(3,100)之内 C语言解释 按从左向右的次序进行计算 如 x=0 关系运算(33x x)的结果取得值0 0 0100的运算结果为1 整个表达式结果为1212.2.逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式由逻辑运算符连接两个(可为一个)运算对象而形成的式子称为逻辑表达式。在C C语言中有三个逻辑运算符&逻辑与|逻辑或 !逻辑非意义:a&ba&b 当a和b同时为真时,该逻辑表达式的值为真。a|b a|b 当a 和 b之一为真时,该逻辑表达式的值为真。!a a 当a的值为真,则表达式的值为假。ab!a!ba&ba|b真真假假真真假假假假假假真真真真真真假假假假假

18、假假假假假真真真真假假假假真真真真真真假假真真真真22说明:说明:(1 1)&和|是双目运算符 !是单目运算符 逻辑表达式与关系表达式的运算结果都是逻辑值真或假 注意:在进行判别时,“非0”作为“真”,“0”作为“假”(2 2)&和|的运算级别低于关系运算符,!的运算级别高于关系运算符,也高于算术运算符,注意:&和|的结合方向是从左向右,!的结合方向是从右向左。(3 3)不能确定的情况下,添加括号保证运算次序。尽量避免复杂烦琐的逻辑表达式。23关系运算注意:例 若a=0;b=0.5;x=0.3;则 a=x0 结果为 A100 结果为10A 65a 97附录一243.3.2 3.3.2 if/e

19、lseif/else语句形式:if (if (表达式表达式)语句语句1 1else else 语句语句2 2执行流程:表达式值真(非0)时,执行语句1;否则,执行语句2,无论执行了哪一路分支之后,都执行if的下一条语句;例 if(xy)max=x;else max=y;251不带elseelse的ifif语句形式:if (if (表达式表达式)语句语句执行过程:表达式为真(非0)时,执行其后的语句,然后执行ifif的下一个语句,否则直接执行ifif的下一个语句。例:if(xy)printf(“%d”,x);26vif语句嵌套:l一般形式:if(expr1)if(expr2)statement1

20、 else statement2else if(expr3)statement3 else statement4内嵌if内嵌ifif(expr1)if(expr2)statement1 else statement2内嵌ifif(expr1)if(expr2)statement1else statement3 内嵌ifif(expr1)statement1else if(expr3)statement3 else statement4内嵌if27例 输入两数并判断其大小关系/*ch4_4.c*/#include void main()int x,y;printf(Enter integer x

21、,y:);scanf(%d,%d,&x,&y);if(x!=y)if(xy)printf(XYn);else printf(XYn);else printf(X=Yn);运行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Y28if else 配对原则:缺省 时,else总是和它上面离它最近的未配对的if配对if()if()if()else.else.else.293.3.4 3.3.4 条件运算符与条件表达式条件运算符与条件表达式条件表达式:实现简单的二路分支结构。格式:表达式1?表达式2:表达式3是C语言中唯一的三目运算符,它要求

22、三个运算对象。表达式1:一般为逻辑表达式意义:如果表达式1为真(非0),条件表达式取表达式2的值 如果表达式1为假(0),条件表达式取表达式3的值。如:max=(ab)?a:b例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a&c60n”);break;.32/*ch4_5.c*/#include void main()int c;printf(Enter m or n or h or other:);c=getchar();switch(c)case m:printf(nGood morning!n);break;case n:printf(nGood night

23、!n);break;case h:printf(nHello!n);break;default:printf(n?n);break;例 根据输入字母输出字符串33例 switch(score)case 5:printf(“Very good!”);case 4:printf(“Good!”);case 3:printf(“Pass!”);case 2:printf(“Fail!”);default :printf(“data error!”);运行结果:score为5时,输出:Very good!Good!Pass!Fail!data error!34例#include void main()

24、int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(na=%d,b=%dn,a,b);运行结果:a=2,b=1353.4 3.4 循环结构程序设计循环结构程序设计循环结构是重要的程序结构,它是指对某段程序的重复执行。C C语言中提供了三种循环控制语句 whilewhile语句语句 do-whiledo-while语句语句 for for 语句语句363.4.1 3.4.1 whilewhile语句语句while语句用

25、来实现当某个条件满足时,对一段程序进行重复执行的操作(当型循环)。while语句的一般格式:while(表达式)表达式)语句语句 当表达式的值为真(非零)时,重复执行语句,直到表达式的值为假,跳出循环。说明:如果需要重复执行的部分(循环体)为多条语句,则需要构成一个复合语句。37例用while循环求1100的和#include void main()int i,sum=0;i=1;while(i=100)sum+=i;i+;printf(%dn,sum);sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循环初值循环终值循环变量增值循环条件循环体

26、38例 计算并输出,lnx,其中x=1,2,10。39例例3.16 3.16 输入若干个学生成绩,输入输入若干个学生成绩,输入-1-1表示结束,表示结束,求平均成绩。求平均成绩。用whilewhile语句书写的程序如下#include void main()int i,score,sum=0;i=0;printf(please input score:n);scanf(%d,&score);while(score!=-1)sum=sum+score;i+;scanf(%d,&score);printf(average=%fn,(float)sum/i);40在在whilewhile循环中特别需

27、要循环中特别需要注意注意:1 1、防止、防止“死循环死循环”的发生的发生在循环体中一定要有使得循环逐渐趋向于结束的语句。例如,在上面的例中,x+x+;2 2、正确使用复合语句正确使用复合语句当循环体中包含两个以上的语句时,需要用花括号将这些语句括起来,如例中所示,构成一个复合语句。如果丢掉了这个花括号,编译系统也不会检查出语法错误,因为它可以认为:y=exp(x);y=exp(x);这一个语句是需要重复执行的,这样,就客观上造成了“死循环”。41例 显示110的平方/*#include void main()int i=1;while(i=10)printf(%d*%d=%dn,i,i,i*i

28、);i+;运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100423.4.2 3.4.2 do-whiledo-while语句语句一般形式是:do do 语句语句while(while(表达式表达式)执行语句,当表达式为真时执行语句,当表达式为真时(直到直到型循环型循环)。具体的执行过程是:先。具体的执行过程是:先执行执行dodo之后的语句,然后判断之后的语句,然后判断whilewhile中的表达式是否为真,若为中的表达式是否为真,若为真,则继续循环,否则,跳出循环真,则继续循环,否则,跳出循环(whilewhile

29、下面的语句)。下面的语句)。43例 用dowhile循环求 1100 的和#include void main()int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(%dn,sum);44v特点:先执行循环体,后判断表达式v说明:l至少执行一次循环体ldowhile可转化成while结构expr循环体假假(0 0)真(非0)循环体While循环45例例 while和和dowhile比较比较#include void main()int i,sum=0;scanf(%d,&i);do sum+=i;i+;while(i=10);printf(%dn,

30、sum);#include void main()int i,sum=0;scanf(%d,&i);while(i=10)sum+=i;i+;printf(%dn,sum);463.4.3 3.4.3 for for 语句语句forfor语句是应用最为广泛的循环语句,for 语句的一般形式为:for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3)3)语句语句 表达式1:循环进行初始化,即给循环的控制变量赋初值。表达式2:一个逻辑表达式,其作用是给出是否继续循环的条件,如果该表达式为真,则循环继续进行;否则跳出循环。表达式3:对于循环控制变量进行增量或减量运算的表达式,它使

31、得在有限次数内,循环可以正常结束。语句:需要重复执行的部分,称为循环体。47for语句v一般形式:for(expr1;expr2;expr3)循环体语句;v执行流程:expr2循环体假(0)真(非0)forexpr1expr348v说明:lfor中expr1,expr2,expr3 类型任意可省略,分号;不可省l无限循环:for(;)lfor语句可以转换成while结构expr1;while(expr2)循环体语句;expr3;例 用for循环求1100和#include void main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(%dn,sum

32、);for(expr1;expr2;expr3)循环体语句;49例 循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281.ij#include void main()int i,j;for(i=1;i10;i+)printf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);3.4.4 3.4.4 循环嵌套循环嵌套循环嵌套是在一个循环的循环体中又包含另一个循环语句。50i10printf假(0)真(非

33、0)i=1j+j=1j10真(非0)假(0)i+for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);外循环内循环51循环的嵌套v三种循环可互相嵌套,层数不限v外层循环可包含两个以上内循环,但不能相互交叉v嵌套循环的执行流程(1)while()while().(2)do do while();.while();(3)while()do while();.(4)for(;)do while();while().内循环内循环外循环外循环内循环内循环v嵌套循环的跳转从外层跳入内层l跳入同层的另一循环l向上跳转523.4.5break语句和语句

34、和continue语句语句1.1.breakbreak语句breakbreak语句在C C程序中只能出现在两种场合其一:用于switch语句中,其作用是跳出switch语句;其二:是用于循环语句,作用是提前结束循环的执行53例例3.21 3.21 打印出打印出31003100之间的所有素数。之间的所有素数。#include include#include#include void main()void main()int m,i,k,n=0,flag;int m,i,k,n=0,flag;for(m=3;m=100;m=m+2)for(m=3;m=100;m=m+2)k=sqrt(m);fla

35、g=1;k=sqrt(m);flag=1;for(i=2;i=k;i+)for(i=2;i=k;i+)if(m%i=0)if(m%i=0)flag=0;flag=0;break;break;if(flag=1)if(flag=1)printf(%5d,m);n=n+1;printf(%5d,m);n=n+1;if(n%10=0)printf(n);if(n%10=0)printf(n);printf(n);printf(n);542.continue语句形式:continue;只能用于循环语句的循环体中作用是使执行流程跳过循环体中continuecontinue下面的语句,即提前结束本次循环,

36、开始下一次循环。在whilewhile 和do-whiledo-while语句中,执行continuecontinue语句就立即测试是否继续循环的条件。在forfor语句中,执行continuecontinue语句后,先执行递增表达式3 3,然后测试继续循环的条件。一般地,continuecontinue语句都会位于一个ifif语句中,即可能对于满足某一条件的某次循环起作用。55例 打印出除5之外的10以内的自然数。main()main()int x;int x;for(x=1;x=10;x+)for(x=1;x=10;x+)if(x=5)continue;if(x=5)continue;pr

37、intf(“%3d”,x);printf(“%3d”,x);56例 break举例:输出圆面积,面积大于100时停止#main()int r;float area;for(r=1;r100)break;printf(r=%d,area=%.2fn,r,area);57例 break举例:小写字母转换成大写字母,直至输入非字母字符#include main()int i,j;char c;while(1)c=getchar();if(c=a&c=z)putchar(c-a+A);else break;58例 求输入的十个整数中正数的个数及其平均值#include main()int i,num=

38、0,a;float sum=0;for(i=0;i10;i+)scanf(%d,&a);if(a=0)continue;num+;sum+=a;printf(%d plus integers sum:%6.0fn,num,sum);printf(Mean value:%6.2fn,sum/num);59作业:作业:1.2.实验实验 2、360例 输入一行字符,分别统计其中的字母、空格、数字及其他字符的个数#includemain()int letter=0,space=0,digit=0,other=0;char c;printf(“input”);While(c=getchar()!=nIf

39、(c=A&c=a&c=0&c=9)ldigit+;lelsel other+;lprintf(“letter=%d,space=%d,digit=%d,other=%dn”,letter,space,digit,other);ll 62l例3.24 打印出21000之间的所有完数,所谓完数,是指这样的数,该数的各因子之和正好等于该数本身。lmain()l int m,i,s;l for(m=2;m=1000;m+)l s=0;l for(i=1;i=m/2;i+)l if(m%i=0)s=s+i;l if(m=s)l printf(“%6d”,m);ll63l#includelvoid main()lint i;l for(i=2;i=2&i=10&i=100&i=999)l if(i*i%1000=i)l printf(%4d,i);l l printf(n);l 65

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁