C语言程序设计的三种基本结构.ppt

上传人:小飞机 文档编号:6504112 上传时间:2023-11-07 格式:PPT 页数:78 大小:240KB
返回 下载 相关 举报
C语言程序设计的三种基本结构.ppt_第1页
第1页 / 共78页
C语言程序设计的三种基本结构.ppt_第2页
第2页 / 共78页
C语言程序设计的三种基本结构.ppt_第3页
第3页 / 共78页
C语言程序设计的三种基本结构.ppt_第4页
第4页 / 共78页
C语言程序设计的三种基本结构.ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《C语言程序设计的三种基本结构.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计的三种基本结构.ppt(78页珍藏版)》请在三一办公上搜索。

1、1,第2章 C语言程序设计 的三种基本结构,C 语言程序设计,2,2.1 顺序结构程序设计2.2 选择结构程序设计2.3 循环结构程序设计,本章主要内容,3,2.1.1 C语句 2.1.2 字符数据的输入与输出 2.1.3 格式输入与输出 2.1.4 顺序结构程序设计应用举例,2.1 顺序结构程序设计,返回,4,2.1.1 C语句,一个C程序由若干个源程序文件组成,一个源文件由若干个函数和预处理命令及全局变量声明部分组成,一个函数由数据声明部分和执行语句部分组成,执行语句部分就是由C语句组成的。C程序结构如图2-1所示。,图2-1,5,C语句可分为以下5类:1表达式语句 表达式语句由一个表达式

2、加上分号“;”组成。执行表达式语句就是计算表达式的值。其一般形式为:在表达式语句中,最常用的是赋值语句。例如:a=7;将7赋给a。x=y+z;将y与z之和赋给x。,2.1.1 C语句,表达式;,6,2.1.1 C语言基本语句,赋值运算符“=”右边的表达式也可以是一个赋值表达式,一般形式为:展开为:例如:a=b=c=9;与赋值语句不同的是,在声明变量时,不允许连续给多个变量赋初值。以下声明变量的方式是错误的:int a=b=c=9;,变量=(变量=表达式);,变量=变量=表达式;,7,必须改为:int a=9,b=9,c=9;又如:i+;自增1语句,i值增1,相当于i=i+1。而a*b;因计算结

3、果不能保留,没有实际意义。说明:1)一个C语句必须在最后添加分号,分号是C语句中不可缺少的一部分。2)任何表达式都可以加一个分号成为语句。,8,2函数调用语句 函数调用语句由函数名、实际参数加上分号“;”组成。其一般形式为:例如:printf(This is a C Program);调用库函数,输出字符串This is a C Program。max(a,b);调用自定义的max函数。,函数名(实际参数表);,9,3控制语句 控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。语言有9种控制语句,可分成以下3类:条件判断语句:if语句、switch语句循环执行语

4、句:do-while、while和for语句转向语句:break语句、goto语句、continue语句、return语句例如:if(a0)printf(OK);,10,4复合语句 把多个C语句用花括号“”括起来组成一个语句,该语句为复合语句。例如下述是一个复合语句:z=x;x=y;y=z;,11,5空语句 只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。下面是一个空语句:;在程序中空语句可用来作空循环体,空循环体什么也不做。例如:while(getchar()!=n);语句的功能是,从键盘输入的字符如果不是回车则重新输入,直到输入回车为止。,12,2.1.2 字符数据的输入与

5、输出,输入/输出是以计算机为主体而言的。在语言中,所有的数据输入/输出都是由库函数完成的,因此都是函数语句。在使用语言库函数时,要用预编译命令#include将有关“头文件”包括到源文件中。#include 或#include stdio.h,13,2.1.2 字符数据的输入与输出,1putchar 函数(字符输出函数)putchar 函数是字符输出函数,其功能是向终端(如显示器)输出单个字符。其一般形式为:例如:putchar(A);输出大写字母A putchar(c);输出字符变量c的值也可以输出转义字符,如:putchar();输出字符“”,putchar(字符变量);,14,【例2-1

6、】编写程序,输出英文单词Good。#includevoid main()char a=G,b=o,c=o,d=d;putchar(a);putchar(b);putchar(c);putchar(d);putchar(n);,程序运行结果:Good,15,2.1.2 字符数据的输入与输出,2getchar函数(字符输入函数)getchar函数的功能是从终端(如键盘)输入一个字符。getchar函数没有参数,其一般形式为:getchar函数只能接收一个字符,通常把接收的字符赋给一个字符变量或整型变量。如:char ch;ch=getchar();,getchar();,16,2.1.2 字符数据

7、的输入与输出,getchar函数也可以作为函数语句的一个参数被使用。如:printf(%c,getchar();putchar(getchar();如果通过键盘输入小写字母a,则以上两个函数语句均输出小写字母a。,17,【例2-2】将输入的单个字符原样输出。#includevoid main()char ch;ch=getchar();putchar(ch);,程序运行情况如下:如果输入:A运行结果:A,18,2.1.3 格式输入与输出,1printf函数(格式输出函数)printf函数称为格式输出函数,其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上。printf函数调用的一般形式为

8、:,printf(“格式控制”,输出表列);,19,2.1.3 格式输入与输出,1)格式控制 格式控制字符串用于指定输出格式,它包括两种信息:格式说明和普通字符。格式说明:由“%”和格式字符组成,说明输出数据的类型、形式、宽度、小数位数等。printf函数中使用的格式字符主要包括:,20,2.1.3 格式输入与输出,d格式符:以十进制形式输出带符号整数(正数不输出符号)。有以下几种用法:%d:按十进制整型数据的实际长度输出。%md:m为指定的输出字段的宽度,即输出数据在输出设备上所占的列数。如果数据的位数小于m,则左端补以空格;如果大于m,数据则按实际位数输出。例如:int a=123,b=4

9、56;printf(%5d,%2d,a,b);%ld:输出长整型数据。,21,2.1.3 格式输入与输出,o格式符:以八进制整数形式输出(不输出前缀0),输出的数据不带符号。x或X格式符:以十六进制形式输出无符号整数(不输出前缀0 x)。例如:int a=-1;printf(%d,%o,%x,a,a,a);输出结果为:-1,177777,ffffu格式符:以十进制形式输出无符号整数,输出长整型时用lu。c格式符:用来输出一个字符,也可以指定输出字符的宽度。例如:printf(%c,%3c,a,b);,22,2.1.3 格式输入与输出,s格式符:用来输出指定的字符串。s格式符有几种用法:%s:原

10、样输出给定的字符串。例如:printf(%s,GOOD);%ms:m为输出字符串所占的列数。如果字符串的位数小于m,字符串左端补以空格;如果字符串的位数大于m,字符串将原样输出。例如:printf(%2s%6s,Good,Night);%-ms:如果字符串长度小于指定的宽度,字符串向左边靠,在字符串的右边补空格。例如:printf(%-6s,free);,23,2.1.3 格式输入与输出,%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,字符串的左侧补空格。%-m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的左侧,字符串的右侧补空格。如果n

11、大于m,将保证n个字符全部正常输出。例如:printf(%5.4s,%-5.3s,%2.4s,Shang,Shang,Shang);,24,2.1.3 格式输入与输出,f格式符:以小数形式输出单、双精度实数,小数位数为6位。有以下几种用法:%f:不指定字段宽度,由系统自动指定,使整数部分全部输出,并输出6位小数。单精度实数的有效数字位数一般为7位,双精度实数的有效数字位数一般为16位。例如:float x=11111.111;double y=22222222222222.2222;printf(%f,%fn,x*2,y*3);输出结果:22222.220000,66666666666666.

12、660000,25,2.1.3 格式输入与输出,%m.nf:指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,将在输出的数值左端补空格。%-m.nf:与%m.nf基本相同。不同的是,如果数值长度小于m,将在输出的数值右端补空格。例如:float a=345.6789;printf(%7.1f,%-7.2fn,a,a);输出结果为:345.7,345.68,26,2.1.3 格式输入与输出,e或E格式符:以指数形式输出实数,用e时指数以e表示,如1.2e3,用E时指数以E表示,如1.2E3。g或G格式符:用来输出实数,它根据数值的大小,自动选f格式或e格式,且不输出无意义的零。用G时,

13、若以指数形式输出,则指数以大写表示。p格式符:输出变量的内存地址。普通字符:在显示中起提示作用,输出时原样输出。例如:printf(a=%d,b=%dn,a,b);,27,2.1.3 格式输入与输出,使用printf函数时需要注意以下几点:(1)除了X、E、G外,其他格式字符必须用小写字母,如%d不能写成%D。(2)可以在“格式控制”字符串中包含转义字符,例如:printf(%dt%dn,123,789);(3)如果需要输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示。,28,2.1.3 格式输入与输出,2)输出表列 输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型

14、上应该一一对应。如:printf(max=%d,min=%d,a,b);双引号中的两个“%d”是格式说明,表示指定的变量a和b按十进制整型输出,双引号中其余内容是普通字符,原样输出。“a,b”为输出表列,变量之间用逗号隔开。假设a和b的值分别是10和7,则输出为:max=10,min=7,29,【例2-3】分析下面程序的输出结果。#include void main()int a=65,b=66;printf(%d%dn,a,b);printf(a=%d,b=%dn,a,b);printf(%c,%cn,a,b);,程序运行结果:6566a=65,b=66A,B,30,【例2-4】格式字符应用

15、实例。#include void main()int a=65;float b=12.1234567;double c=12345.1234567;char d=A;printf(a=%d,%4d,%-4d,%o,%x,%cn,a,a,a,a,a,a);printf(b=%f,%lf,%3.4f,%-6.1f,%en,b,b,b,b,b);printf(c=%lf,%f,%8.4lfn,c,c,c);printf(d=%c,%3c,%-4c,%dn,d,d,d,d);,运行结果:a=65,65,65,101,41,Ab=12.123457,12.123457,12.1235,12.1,1.21

16、235e+01c=12345.123457,12345.123457,12345.1235d=A,A,A,65,31,2.1.3 格式输入与输出,使用printf函数时要注意输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。Turbo C是按从右到左进行的。【例2-5】分析输出表列中的求值顺序。#include void main()int i=6;printf(%d,%d,%d,%dn,-i,+i,i+,i-);,程序运行结果:6,7,5,6,32,2.1.3 格式输入与输出,2scanf函数(格式输入函数)scanf函数的功能是按指定的格式从终端输入数据,并将输入

17、的数据存放到指定的变量中。scanf函数的一般形式为:如:scanf(%d%d,“%d%d”表示输入整型数据,&a,&b分别表示变量a和变量b 的地址。,scanf(格式控制,地址表列);,33,2.1.3 格式输入与输出,1)格式控制 格式控制字符串用于说明数据的类型及格式。其中包括两部分内容:格式说明和输入数据分隔符。常用的格式字符如下:d,i:输入有符号的十进制整数。u:输入无符号的十进制整数。o:输入无符号的八进制整数。X,x:输入无符号的十六进制整数。f:输入实型数c:输入单个字符。s:输入字符串。,34,2.1.3 格式输入与输出,可用的附加字符有:l:用于输入长整型数据(如%ld

18、,%lo,%lx)及double型数据(如%lf或%le)。h:用于输入短整型数据(如%hd,%ho,%hx)。m:指定输入数据所占宽度。例如:scanf(%3d%2d,若输入10 11 12,将把10赋给变量a,11被跳过,12赋给变量b。“%*d”表示读入整数但不赋给任何变量。,35,2.1.3 格式输入与输出,2)地址表列 地址表列中给出各变量的地址,地址是由地址运算符“,36,2.1.3 格式输入与输出,【例2-6】格式输入与格式输出函数的应用示例。#include void main()int a,b,c;char ch1,ch2;float d,e;scanf(%d%d%d,程序运

19、行情况如下:101612AB3.56a=10,b=161,c=2ch1=A,ch2=Bd=3.500000,e=6.000000,37,2.1.4 顺序结构程序设计应用举例,【例2-7】输入两个小写字母,输出其ASCII码和对应的大写字母。#include void main()char ch1,ch2;printf(input character ch1,ch2:);scanf(%c%c,程序运行结果:input character ch1,ch2:ab97,98A,B,38,2.1.4 顺序结构程序设计应用举例,【例2-8】已知圆的半径r10,试用C语言编程求圆的周长p=2r和圆的面积s=

20、r2。#include void main()float pi,r,p,s;r=10;pi=3.14;p=2*pi*r;s=pi*r*r;printf(p=%.2fn,p);printf(s=%.2fn,s);,程序运行结果:p=62.80s=314.00,39,2.1.4 顺序结构程序设计应用举例,【例2-9】计算任意两个整数的和、差。#incldue void main()int a,b,c,d;scanf(%d%d,程序运行情况如下:12912+9=21,12-9=3,40,2.2 选择结构程序设计,2.2.1 关系运算符与关系表达式 2.2.2 逻辑运算符与逻辑表达式 2.2.3 if

21、语句的3种形式 2.2.4 if语句的嵌套 2.2.5 条件运算 2.2.6 switch语句 2.2.7 选择结构程序设计举例,返回,41,2.2.1 关系运算符与关系表达式,1.关系运算符 关系运算符是双目运算符,用来比较两个运算量之间的关系。关系运算的结果是“真”或“假”,且只能是二者之一。C语言提供6种关系运算符,它们分别是:(大于)=(大于或等于)=(等于)!=(不等于)前四种关系运算符(、=)的优先级高于后两种(=、!=)。关系运算符的优先级低于算术运算符。,42,关系运算符与关系表达式,2.关系表达式 关系表达式就是指用关系运算符将两个表达式连接起来的式子。例如:1020、A+1

22、2为“真”,其值为1;表达式A+1D的值是1(因为字符A的ASCII码值加1之后小于字符D的ASCII码值);表达式13=9的值为0。,43,2.2.2 逻辑运算符与逻辑表达式,1.逻辑运算符&(逻辑与):是双目运算符,当两个运算量都为真(非0值)时,运算结果才为真,其他情况运算结果均为假(0)。|(逻辑或):是双目运算符,当两个运算量都为假时,运算结果才为假,其他情况运算结果均为真。!(逻辑非):是单目运算符,在非0值前加逻辑非,运算结果为假,在0前加逻辑非,运算结果为真。,44,2.2.2 逻辑运算符与逻辑表达式,逻辑运算符说明如下:逻辑运算符的优先级次序为:!&|。逻辑与、逻辑或的结合性

23、为自左至右,逻辑非的结合性为自右至左。逻辑运算符与前面介绍过的运算符的优先次序(由高到低)为:逻辑非(!)算术运算符关系运算符逻辑与(&)运算符逻辑或(|)运算符赋值运算符。,45,2.2.2 逻辑运算符与逻辑表达式,2.逻辑表达式 逻辑表达式是用逻辑运算符将关系表达式或逻辑量连接起来的符合C语法的式子。例如:(ab)&(34)、!a|(dc)都是合法的逻辑表达式。与关系运算符和算术运算符相比较,逻辑非的优先级高于算术运算符,逻辑与和逻辑或的优先级低于关系运算符。例如:表达式(!b)=c)|(da)等价于!b=c|da。,46,2.2.2 逻辑运算符与逻辑表达式,逻辑运算规则,47,2.2.2

24、 逻辑运算符与逻辑表达式,【例2-10】逻辑运算应用示例。#incldue void main()int i=1,j=2,k=3;int n1,n2,n3;float x=3.0,y=0.85;n1=x,程序运行结果:0,1,48,2.2.3 if语句的3种形式,1if语句if语句的一般形式:其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。if语句的执行过程如图3-2所示,if(表达式)语句,图3-2,49,【例2-11】随机输入两个整数,输出其中的小数。#include void main()int a,b,min;scanf(%d%d,程序运行情况如下:17119min=

25、17,50,2.2.3 if语句的3种形式,2if-else语句 if-else语句的一般形式:其语义是:如果表达式的值为真,则执行语句1,否则执行语句2。if-else语句的执行过程如图3-3所示。,if(表达式)语句1 else 语句2,图3-3,51,【例2-12】将例2-11输出两个整数中的小数,改用if-else语句来完成。#include void main()int a,b;scanf(%d%d,52,2.2.3 if语句的3种形式,3if-else-if语句 其一般形式为:其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行后续

26、语句。如果所有的表达式均为假,则执行语句n。然后继续执行后续语句。,if(表达式1)语句1else if(表达式2)语句2 else if(表达式3)语句3 else if(表达式m)语句m else 语句n,53,执行过程如图2-4所示。,图2-4,54,【例2-13】随机输入一个字符,判别该字符的类别。#include void main()char c;printf(input a character:);c=getchar();if(c=0,55,2.2.4 if语句的嵌套,下面列举常见的两种嵌套形式:形式一:形式二:if(表达式1)if(表达式1)if(表达式2)语句1 if(表达式

27、2)语句1 else 语句2 else 语句2else 语句3,56,形式三:形式四:if(表达式1)if(表达式1)if(表达式2)语句1 if(表达式2)语句1 else 语句2 else 语句2 else if(表达式3)语句3 else 语句4,57,【例2-14】比较两个字符型数据的大小关系。#include void main()char a,b;scanf(%c%c,58,条件运算,在if语句中,当判断表达式的值为“真”或“假”时,都只执行单个的赋值语句且给同一个变量赋值,此时,可使用简单的条件运算来实现。条件运算符是一个三目运算符,它有3个参与运算的量。由条件运算符组成条件表达

28、式的一般形式为:求值规则是:如果表达式1的值为真,则以表达式2 的值作为整个条件表达式的值,如果表达式1的值为假,则以表达式3的值作为整个条件表达式的值。,表达式1?表达式2:表达式3,59,图2-5 条件表达式的执行过程,60,例如:if(ab)max=a;else max=b;可用条件表达式写成:max=(ab)?a:b;其执行语义是:若ab为真,则把a赋给max,否则把b 赋给max。,61,【例2-15】用条件表达式实现:输出a、b、c三个变量中的最大值。#include void main()int a,b,c,max;scanf(%d%d%d,如果输入:291679运行结果:max

29、=79,62,2.2.6 switch语句,语言提供了另一种用于直接处理多分支选择的switch语句,其一般形式为:,switch(表达式)case常量表达式1:语句1;case常量表达式2:语句2;case常量表达式n:语句n;default:语句n+1;,63,2.2.6 switch语句,其语义是:计算switch后面表达式的值,将该值与逐个case后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,就执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句和default后的语句。如果表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句

30、。,64,【例2-16】,在每一个case语句之后增加一个break 语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。程序如下:,#incdlue void main()int a;printf(please input 1-7 number:);scanf(%d,65,2.2.7 选择结构程序设计举例,【例2-11】输入3个整数,将它们按由小到大的顺序输出。请见教材中的实例。【例2-12】请见教材中的实例。【例2-13】请见教材中的实例。【例2-14】请见教材中的实例。,66,2.3 循环结构程序设计,2.3.1 while语句2.3.2 do-while语句2.3

31、.3 for语句2.3.4 循环的嵌套2.3.5 break语句和continue语句2.3.6 循环结构程序设计举例,返回,67,2.3.1 while语句,while语句用来实现“当型”循环结构,其特点是:先判断循环条件,后执行循环体语句。其一般形式为:其语义是:先判断循环条件,如果循环条件成立(值为非0),执行循环体语句。当循环条件不成立(值为0)时,退出循环体,执行后继语句。,while(循环条件)循环体语句,68,2.3.1 while语句,while语句的流程图如图2-6所示。,图2-6,69,【例2-20】编写程序,输出1100之间所有能被6整除的数。#include void

32、main()int i=1;while(i=100)if(i%6=0)printf(%d,i);i+;,程序运行结果:6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,70,2.3.2 do-while语句,do-while语句用来实现“直到型”循环结构,其特点是:先执行一次循环体语句,然后判断循环条件是否成立。do-while语句的一般形式:其语义:先执行一次循环体语句,再判断循环条件,如果循环条件成立(值为非0),将返回继续执行循环体语句,如此反复,直到循环条件不再成立(值为0),此时退出循环体,执行循环后面的语句。,do 循环体语句while(

33、循环条件);,71,do-while语句的执行流程图如图2-7所示。,图2-7,72,【例2-21】用do-while语句改写【例2-20】。#include void main()int i=1;do if(i%6=0)printf(%4d,i);i+;while(i=100);,73,2.3.3 for语句,for语句是循环控制结构中使用最广泛的一种循环控制语句。for语句的一般形式:下面用便于理解的方式表示for语句:,for(表达式1;表达式2;表达式3)循环体语句,for(初始表达式;循环条件;增值表达式)循环体语句,74,2.3.3 for语句,其语义是:求解初始表达式,判断循环条

34、件,如果循环条件成立(值为非0),执行循环体语句,然后求解增值表达式,再判断循环条件,如此反复,直到循环条件不再成立(值为0),此时退出循环结构,执行循环语句后面的语句。for语句流程图如图2-8所示。,图2-8,75,【例2-22】用for循环语句改写例2-19。#include void main()int i;for(i=1;i=100;i+)if(i%6=0)printf(%4d,i);,76,2.3.4 循环的嵌套,下面列举其中的三种嵌套样式:样式1:样式2:样式3:while()while()for(;)while()do for(;)while();,77,2.3.5 break语句和continue语句,1break语句 break语句可以使程序流程从循环体内跳到循环体外,接着执行循环结构后面的语句。break语句的一般形式:2continue语句 continue语句的作用是结束本次循环,即跳过循环体中尚未执行的语句,提前进入下一次循环条件的的判定。continue语句的一般形式:,break;,continue;,78,2.3.6 循环结构程序设计举例,【例】编写程序,请见教材。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号