谭浩强c语言教程结构性程序的开发

上传人:汽*** 文档编号:591920944 上传时间:2024-09-18 格式:PPT 页数:72 大小:293KB
返回 下载 相关 举报
谭浩强c语言教程结构性程序的开发_第1页
第1页 / 共72页
谭浩强c语言教程结构性程序的开发_第2页
第2页 / 共72页
谭浩强c语言教程结构性程序的开发_第3页
第3页 / 共72页
谭浩强c语言教程结构性程序的开发_第4页
第4页 / 共72页
谭浩强c语言教程结构性程序的开发_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《谭浩强c语言教程结构性程序的开发》由会员分享,可在线阅读,更多相关《谭浩强c语言教程结构性程序的开发(72页珍藏版)》请在金锄头文库上搜索。

1、第三章第三章 结构化程序的开发结构化程序的开发1. 1. 理解解决问题的基本方法理解解决问题的基本方法2. 2. 学会制定简单程序的算法学会制定简单程序的算法3. 3. 掌握一种选择结构掌握一种选择结构(if/else)(if/else)4. 4. 掌握一种循环结构掌握一种循环结构(while)(while)5. 5. 掌握自增、自减的运算掌握自增、自减的运算本章目标:本章目标:3.1 C3.1 C程序结构和语句程序结构和语句一、一、C程序结构程序结构每一个源文件由预编译命令和若干函数组成每一个源文件由预编译命令和若干函数组成(对每个文件分别编译,然后连接对每个文件分别编译,然后连接)一般地,

2、一般地, 一个一个C程序可由多个源文件组成程序可由多个源文件组成每一个函数由说明部分和语句部分组成每一个函数由说明部分和语句部分组成C程序结构:C 程 序源程序文件1源程序文件i源程序文件n预编译命令函 数1函 数n说 明 部 分执行部分(语句)函数调用语句函数调用语句:如: printf ();二、二、C C 程序程序语句1. 表达式语句表达式语句赋值语句赋值语句: 如: i=i+1; i+; x+y;空语句空语句: 任何事情都不做。任何事情都不做。C程序语句可分为五大类: 如: ;2. 控制语句控制语句改变语句的执行顺序改变语句的执行顺序 if ( ) else (条件) for ( )

3、(循环) while ( ) (循环) do while (循环) switch (多分支选择)( )表示条件表示条件, 表示语句表示语句 continue (结束本次循环结束本次循环) break (中止整个循环中止整个循环) return ( 函数返回函数返回)3. 限定转向限定转向(无条件转向无条件转向)语句语句5. 终止程序运行语句终止程序运行语句4.无条件转移语句无条件转移语句goto exit6. 复合语句复合语句(语句体语句体)用用 括起来的一系列语句。括起来的一系列语句。 如如: z=x+y; t=z/100; printf (%f, t); 三、结构化程序设计概念 从从结构化

4、程序设计角度出发,程序只有三种结构结构化程序设计角度出发,程序只有三种结构:顺序结构顺序结构选择结构选择结构循环结构循环结构1. 顺序结构顺序结构表示ABAB先执行A, 再执行B.2. 选择结构选择结构表示为ABPTFB TPFA存在某条件存在某条件P, 若若P为真为真,则执行则执行A, 否则执行否则执行B。 另一种另一种选择结构选择结构多分支结构多分支结构.KK=K1A1A2AiAnK=K2K=Kn3. 循环结构循环结构表示为PFTAAP为T(1) 当型结构当型结构 当当P条件成立时条件成立时(T),反复执行反复执行A,直到直到P为为“ 假假”时才停止循环时才停止循环.有两种结构有两种结构:

5、当型当型和和直到型直到型(2) 直到型直到型APTFA直到直到P为为F 先执行先执行A, 再判断再判断P,若为若为F,再执行再执行A,如此反复如此反复,直到直到P为为F. 已证明已证明: 上述三种结构组成的程序可以解决全部上述三种结构组成的程序可以解决全部的问题的问题,所以任何一种高级语言都具备上述三种结构。所以任何一种高级语言都具备上述三种结构。3 3 . .2 2 算算 法法1. 按指定的语句和顺序来解决问题的过程称按指定的语句和顺序来解决问题的过程称为算法。为算法。2. 算法的两个重要方面:算法的两个重要方面: 顺序顺序 语句语句3. 算法的图形表示:流程图算法的图形表示:流程图4. 流

6、程图符号:流程图符号: 椭图椭图 矩形矩形 判断框判断框 小圆圈小圆圈代表程序的开始或结束代表程序的开始或结束代表程序所执行的动作代表程序所执行的动作代表程序的分支代表程序的分支代表程序的连接代表程序的连接所有的流程图用一带箭头的线(流线)相连,就构成了程序的流程(顺序)如:如:3.3 if 3.3 if 选择结构选择结构条件判条件判断断一、一、ifif的三种形式的三种形式 功能功能: 当表达式值非当表达式值非0时时, 执行语句体执行语句体A, 否否则不执行则不执行 语句体语句体A.形式形式1 if (表达式表达式)语句体语句体 A表达式表达式语句体语句体A00例如例如:if (xy); x=

7、x%2; printf( %d, x); 其流程图其流程图:形式形式2 if(表达式表达式)功能功能: 表达式为非表达式为非0,执行语句体执行语句体A 表达式为表达式为0,执行语句体执行语句体Belse语句体语句体B语句体语句体A表达式语句体A语句体B 0= 0例例: : if(xy) printf(%d, x);else printf( %d, y);形式形式3 if(表达式表达式1)else if (表达式表达式2)else if (表达式表达式3) else if(表达式表达式n)else语句体语句体1语句体语句体2语句体语句体3语句体语句体n语句体语句体n +1流程:表达1表达2表达3

8、表达n语句体2语句体3语句体n语句n+1语句体1 0= 0= 0 0 0 0如如: if (3) prinf (o.k); if (a) 1. 表达式可以是逻辑、关系,甚至是算术表达式。表达式可以是逻辑、关系,甚至是算术表达式。 2. 语句必须以分号结束语句必须以分号结束 3. 若语句不止一条若语句不止一条,则必须用则必须用 括起来。在括起来。在 外可以不用分号外可以不用分号.二、注意的问题二、注意的问题:例1, 有有3个整数个整数a、b、c,由键盘输入,输,由键盘输入,输出其中最大的数。出其中最大的数。 0输入a、b、cab?bc?ac?max=amax=cmax=bmax=c输出max10

9、110main()main()int a,b,c,max; int a,b,c,max; scanf(“%d,%d,%d”,&a,&b,&c);scanf(“%d,%d,%d”,&a,&b,&c); if(ab) if(ab) if(ac) if(ac) max=a; max=a; else else max=c; max=c; else else if(bc) max=b; if(bc) max=b; else max=c; else max=c; printf(“Max is %dn”,max); #include main ( ) float a, b, t; scanf (%f, %f

10、, &a, &b); if (ab) t=a; a=b; b=t; printf (%5.2f, %5.2f, a, b);例例2 2 输入两个实数,按代数值由小到大次序输输入两个实数,按代数值由小到大次序输出这两个数。出这两个数。 3.6, 3.2 3.20, 3.60运行情况如下运行情况如下:开始开始输入输入a、b、ca ba c交换交换a、b的值的值b c交换交换b、c的值的值交换交换a、c的值的值打印打印a、b、c的值的值YYYNNN结束结束例3 输入三个数,按大小顺序输出。输入三个数,按大小顺序输出。#include main ( )float a, b, c,t; scanf(“

11、%f,%f,%f”, &a, &b,&c); if (ab) t=a; a=b; b=t; if (ac) t=a; a=c; c=t; if (bc) t=b; b=c; c=t; printf(%5.2f, %5.2f, %5.2f, a, b, c);运行情况如下运行情况如下:3,7,17.00, 3.00, 1.00三、三、 if语句的嵌套语句的嵌套if (表达式表达式1)内嵌内嵌ifelse内嵌内嵌注意注意: else与最近的与最近的if 配对配对.一般形式一般形式 在上述形式的在上述形式的if语句中语句中, 又可以是又可以是if语句语句称为嵌套。称为嵌套。if (表达式表达式2)

12、语句语句1if (表达式表达式3) 语句语句3else 语句语句2else 语句语句4例例: : if ( )if ( ) 语句语句2else 语句语句3if ( ) if ( ) 语句语句1 else 所以所以:必要时加必要时加 .if ( ) 语句语句1else例例3 3 有一函数有一函数:y=1 (x0)编一程序,输入一个编一程序,输入一个x值,输出值,输出y值。值。有以下几种写法,请判断哪些是正确的?有以下几种写法,请判断哪些是正确的?程序程序2:将程序1的if语句改为: /*exp52.c*/#include main ( ) int x, y; scanf(d, &x); if (

13、x=0) if (x0) y=1; else y=0; else y=-1; printf (x=%d, y=%dn, x, y);注意注意ifelse 对齐对齐程序程序1: /*exp51.c*/#include main ( ) int x, y; scanf(d, &x); if (x0) y= 1; else if (x= =0) y=0; else y=1; printf (x=%d, y=%dn, x, y);程序程序4:将程序1的if语句改为:/*exp54.c*/#include main() int x,y; scanf(%d,&x); y=0; if(x=0) if(x0)

14、 y=1; else y=-1; printf(x=%d,y=%dn,x,y); 程序程序3:将程序1的if语句改为:/*exp53.c*/#include main() int x,y; scanf(%d,&x); y=-1; if(x!=0) if(x0) y=1; else y=0; printf(x=%d,y=%dn,x,y);1. 程序程序1 和程序和程序2 是正确的。是正确的。 它们代表的函数为它们代表的函数为:2. 程序程序3 和程序和程序4 是错误的。是错误的。 它们代表的函数为它们代表的函数为:y= 0 (x0)y=1 (x0)结论结论:思考练习思考练习:分别画出一个程序的流

15、程图分别画出一个程序的流程图四、条件运算符四、条件运算符 C语言提供了一个简单的条件赋值语句或语言提供了一个简单的条件赋值语句或条件表达式。条件表达式。问题问题: : 当判断条件不论是当判断条件不论是“ 真真”是是“ 假假”, 均给同一变量赋值时。均给同一变量赋值时。简化条件语句运算符书写方式:简化条件语句运算符书写方式: ? : 属三目运算符。属三目运算符。功能功能: 先判表达式先判表达式1, 若非若非0,则值为表达式则值为表达式2的的值值,否则为表达式否则为表达式3的值。的值。一般形式:一般形式:表达式1?表达式2: 表达式3 max=ab? a:b;当当ab. max a. 否则否则ma

16、xb注意注意: : 1. 条件运算符优先于赋值运算符条件运算符优先于赋值运算符. 例例: : max=(ab? a:b)可去掉可去掉( ) 2. 条件运算符低于关系运算符和算术运算符。条件运算符低于关系运算符和算术运算符。 3. 条件运算符结合性为从右至左。条件运算符结合性为从右至左。例: max=ab? a:b+1 max= ab? a:(b+1)并不是 max=(ab? a:b)+1如: ab? a:cd ? c:d 相当于 ab? a:(cd? c:d)4. 条件表达式不能取代一般的条件表达式不能取代一般的if语句语句,只有当只有当if 的两的两 个分支为给个分支为给同一变量赋值同一变量

17、赋值时才可替代时才可替代if.if (ab) printf(%d, a);else printf (%d, b);可写成:可写成:printf(%d, ab? a:b);如:如:例例#include #include main()main()float x=1.0; float x=1.0; int a=2,b=3; int a=2,b=3; x=(ab)?a:b; x=(ab)?a:b; printf(“%f”,x); printf(“%f”,x); 输出为输出为:3.0000:3.0000条件表达式条件表达式(ab)?a:b(ab)?a:b的值为整型数据的值为整型数据, ,但但x x为实型

18、数据为实型数据, ,所以输出为实型数据所以输出为实型数据.5. 表达式表达式1、表达式、表达式2、表达式、表达式3的类型可以不同。的类型可以不同。 #include main ( ) char ch; scanf (%c, &ch); ch=(ch=A & ch=Z) ? (ch+32):ch; printf(%c, ch); 例4 输入一个字符,判别它是否大写字母,如果是,输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。输出最后得到的字符。运行结果如下: A a 一、复合赋值运算符:在一、复合赋

19、值运算符:在一、复合赋值运算符:在一、复合赋值运算符:在 号之前加一个其它号之前加一个其它号之前加一个其它号之前加一个其它运算符。运算符。运算符。运算符。C语言规定语言规定:凡是二目运算符均可构成复合运算符。凡是二目运算符均可构成复合运算符。例例: : a+=3; 相当于相当于 a=a+3 x =y+8; 相当于相当于 x=x (y+8) x%=3; 相当于相当于x=x%3 一般形式一般形式: 二、复合赋值表达式二、复合赋值表达式例: x=10 为一赋值表达式为一赋值表达式 其中其中又可以是一个赋值表达式。又可以是一个赋值表达式。例例: : x=(y=10) 相当于相当于 y=10;x=y 由

20、于赋值号为右结合性由于赋值号为右结合性,于是于是 ( ) 可省略,可省略, 即为即为:x=y=10;例例: : a + = a =aa (设a12)又: a=5+(c=6) c=6, a=11 a=(b=4)+(c=6) b=4, c=6, a=10 a=(b=10)/ (c=2)b=10, c=2, a=5还可用复合赋值运算符作下列运算:还可用复合赋值运算符作下列运算:步骤: aa144. a =a a a=a a a=12 144= 132 a + = 132 a = a+(132) = 2643 3 . .4 43 3 . .4 4逗逗号号运运算算符符和和逗逗号号表表达达式式逗逗号号运运

21、算算符符和和逗逗号号表表达达式式 一般形式一般形式: 表达式表达式1, 表达式表达式2其计算规则其计算规则: 先计算表达式先计算表达式1,再计算表达式再计算表达式2,最后值为最后值为表达式表达式2的值。的值。例例: : in a, b;a=35, a 4;b=(3*5, a*4);结果结果: a=15 b=60略略若:b=( (a=35, a 4), a+5); 扩展形式: 表达式1, 表达2, ,表达式n,结果b=20(作为逗号表达式的值) a+5b 即 20b. 3 5=15a a 4=60 (此时a值仍未变)结果为表达式n的值 略略四、自增,自减运算符例如:例如: 若有: int i =

22、 3;+ + 自增1 自减1+i: 先使i值+1,再使用i值;i+: 先使用i值,再使i值+1.则: j= +i; 结果为: j=4, i=4. 相当于 i=i+1; j=i;则: j=i+; 结果为: j=3, i=4. 相当于 j=i; i=i+1同理同理: i, i ,均使i值1,但: i: 先使i值1,再使用i值;i : 先使用i值,再使i值1例如:例如: int i = 3 , j;则: j= i; 结果为: j=2, i=2. 相当于 i=i1; j=i;则: j=i ; 结果为: j=3, i=2. 相当于 j=i; i=i1;1. +和和 运算法只能用于变量运算法只能用于变量,

23、不得用于不得用于常量和表达式常量和表达式.如如: 5+ +, (a+b)+ +均为不合法均为不合法.几几点注意点注意: :2. +, ,的结合性为从右至左,而一般算术运算符为从左至右。如如: : i+ 和+ +为同一优先级.i+相当于(i+)例例: #includemain( ) int i=3,j; j=-i+; printf(i=%d,j=%dn,i,j);运行结果:运行结果:i=4, j= -31. 要慎用要慎用+、 运算符。运算符。五、有关表达式使用中的问题说明五、有关表达式使用中的问题说明对于表达式(i+)+(i+)+(i+) ; 我们可能会认为应从左至右: 3+4+5=12例例:

24、#include main( ) int i=3,j; j=(i+)+(i+)+(i+); printf(i=%d,j=%dn,i,j); 实际运行结果:实际运行结果:i=6, j=9 先对i进行3次自加, 结果i的值为6,然后三个i值相加为18。3+3+3=9 然后再把6赋给i值如果表达式j=(i+)+(i+)+(i+);改为: j=(+i)+(+i)+(+i);则运行结果:则运行结果: i=6, j=18这是因为运算时是先取i的原值:32. 在表达式中在表达式中,有的运算符为一个字符有的运算符为一个字符,有的有的为两个字符。为两个字符。一般地: 自左至右尽可能多地将若干字符组成自左至右尽可

25、能多地将若干字符组成一个运算符一个运算符。如如: : i+j, 究竟理解为究竟理解为(i+)+j还是还是i+(+j)? 例例: #includemain( ) int i=3,j=3,m; m=i+j; printf(i=%d,j=%d,m=%dn,i,j,m);运行结果:运行结果:i=4, j=3, m=6对语句对语句m=i+j; 系统理解为系统理解为m=(i+)+j;3. 在函数调用时要注意参数的计算顺序在函数调用时要注意参数的计算顺序,printf(i=%d, i=%d, i, i+);如: int i=3;int j=3;printf(j=%d, j=%d, j+, j);输出结果输出

26、结果:i=4, i=3;j=3, j=3;原因:原因:参数的计算顺序从右到左。参数的计算顺序从右到左。 数据输出数据输出格式格式: putchar( c ): putchar( c )参数参数: c: c为字符常量、变量或表达式为字符常量、变量或表达式功能:把字符功能:把字符c c输出到显示器上输出到显示器上返值:正常,为显示的代码值;出错,为返值:正常,为显示的代码值;出错,为EOF(-1)EOF(-1)u C语言无语言无I/O语句,语句,I/O操作由函数实现操作由函数实现 字符输出函数字符输出函数u #include putchar()putchar()函数函数1 1、功能:将、功能:将一

27、个一个字符输出到标准输出设备。字符输出到标准输出设备。2 2、格式:、格式:putcharputchar(c c)3 3、使用要点:、使用要点:putcharputchar(c c)中的中的c c可以是字符型或整型数据;可以是字符型或整型数据; c=98;c=98; putchar putchar(c) (c) 输出字符输出字符b b putcharputchar(a) (a) 输出字符输出字符a a putcharputchar(0x41) (0x41) 输出字符输出字符A A使用输出函数需要调用使用输出函数需要调用c c的标准的标准I/OI/O库函数,故需用预编译命令:库函数,故需用预编译

28、命令: # #include include .h 将将stdiostdio.h.h文件包含在用户源程序文件中;文件包含在用户源程序文件中;putchar()putchar()也可以输出一个控制字符或其它转义字符。也可以输出一个控制字符或其它转义字符。 如:如:putcharputchar(n) (n) 输出一个换行符输出一个换行符 putcharputchar(101) (101) 输出字符输出字符A A putchar() putchar() 输出字符单引号输出字符单引号4 4、举例:举例:格式:getchar( )功能:从键盘读一字符返值:正常,返回读取的代码值;出错,返回EOF(-1)

29、字符输入函数 例 /*ch3_4.c*/#include main() int c; printf(Enter a character:); c=getchar(); printf(%c-hex%xn,c,c);运行结果:Enter a character:AA-hex41数据输入putchar()putchar()函数函数例 输入一个字符,回显该字符并输出其A S C I I码值。#includemain( ) char ch; ch = getchar( ) ; putchar(ch); printf(%d n , ch);运行程序:gg 103本章主要介绍的内容:本章主要介绍的内容:1.

30、 C程序语句的分类2. C程序结构的分类3. if语句和条件运算符4. 逗号表达式5. 自增、自减运算符6. 输入输出作业1:有一函数: x (x1)y= 2x-1 (1x10) 3x-11 (x10) 用if-else-if结构,输入x值, 输出y值作业作业2:写一程序:写一程序,输入年号输入年号,判断是否为闰年。判断是否为闰年。 算法算法: 当年号能被当年号能被4整除但不能被整除但不能被100整除时整除时,它为闰年。它为闰年。 当年号能被当年号能被400整除时整除时,它为闰年。它为闰年。根据闰年的判断条件为下列条件之一:根据闰年的判断条件为下列条件之一:例如例如: 判断年号是否为润年。润年

31、必须满足下列条件中的任意一个润年必须满足下列条件中的任意一个:年号能被400整除。 年号能被4整除但不能被100整除。 当(year%4!=0) (year%100= =0& year%400!=0) 为1时, year为非润年。设用变量设用变量year表示年号表示年号 当(year%4= =0& year% 100 !=0) (year%400= =0)为1时,year为润年,否则为非润年。如果要判别非润年可在上述表达式前加非(!)运算符. 当!( (year%4= =0 & year%100!=0) (year% 400= = 0) 为1时,year为非润年。或者或者:即即:则则: 程序举

32、例程序举例作业:写一程序,输入年号,判断是否为闰年。1. 算法算法: 当年号能被4整除但不能被100整除时,它为闰年。 当年号能被400整除时,它为闰年。根据闰年的判断条件为下列条件之一: 流程图流程图开始输入年号判断是否为润年?打印是润年打印非润年结束YNif ( ( year%4= =0)& year%100!=0) (year%400= =0)#include main( ) int year;scanf( %d, &year);printf( %d is , year);elseprintf( %d is not , year);printf( a leap yearn );程序程序:

33、第四章 程序控制例有一函数: x (x1)y= 2x-1 (1x10) 3x-11 (x10) 这是一个求三个分支的函数值的的情况,选用if-else-if结构比较方便。 main() float x,y; scanf(“%f”,&x); if(x1) y=x; else if(x = 10000 则tax = 0.05 *(price - 10000); price=10000; 否则,若price = 5000 则tax = 0.03 * ( price-5000)+tax; price=5000; 否则,若price = 1000 则tax = 0.02 * ( price-1000)+

34、tax; price=1000;# include main( ) float price,tax=0; printf(input price:); scanf(%f , &price); if(price = 10000.0) tax=0.05*(price-10000)+tax; price=10000; if (price=5000.0) tax = 0.03 * (price - 5000) + tax; price = 5000; if( price = 1000.00) tax = 0.02 * (price - 1000) + tax; printf(the tax=%10.3 f,tax);运行程序: 15000 the tax=480.000例 试编写程序,数据由键盘输入试编写程序,数据由键盘输入,求该数的绝对值。求该数的绝对值。例 试编写程序,数据由键盘输入试编写程序,数据由键盘输入,求该数的绝对值。求该数的绝对值。#include “stdio.h”main() float x,y; printf(“please input real number x=?”); scanf(“%f”,&x); y=x; if (x0.0) y=-x; printf(“abstr(%f)=%fn”,x,y);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号