C语言教学课件探讨_第1页
C语言教学课件探讨_第2页
C语言教学课件探讨_第3页
C语言教学课件探讨_第4页
C语言教学课件探讨_第5页
已阅读5页,还剩285页未读 继续免费阅读

下载本文档

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

文档简介

C语言教学课件探讨教学内容第一章 C语言概述第三章 数据类型、运算符与表达式第四章 最简单的C第五章 选择结构程序设计第六章 循环控制第九章 预处理命令第十一章结构体第十三章文件2前言前言一、计算机语言1、机器语言2、汇编语言3、高级语言4、高级语言向机器语言的过渡高级语言源程序机器语言目标程序计算结果编译解释执行——机器指令的集合——符号化的机器语言——通用自然的算法语言3前言二、程序与程序设计——完成某一功能的计算机指令的有序集合1、程序2、程序设计——设计、编制、调试程序的过程43、程序设计的基本步骤(1)分析问题(2)确定解题思路和算法(3)编制流程图(4)编写源程序(5)静态检查(6)上机调试(7)正式运行前言5本章内容1.1C语言发展史1.2C语言特点1.3简单C程序分析第一章C语言概述返回6第一章C语言概述第一章C语言概述§1.1C语言发展史1960ALGOL60(AlgorithmicLanguage)198787ANSIC1990ISOC1972C(取BCPL第二个字母)1970B(取BCPL第一个字母)1978标准C1983ANSIC 1967BCPL(BasicCombinedProgrammingLanguage)跳转7第一章C语言概述§1.2C语言特点1、简练、自由、结构化(32个关键字、9种控制语句)2、运算符丰富(附录Ⅲ)34种3、数据结构丰富4、可直接对硬件进行操作5、目标程序质量高6、可移植性好8第一章C语言概述§1.3简单C程序分析例1.1打印(显示)一串字符。运行结果:Thisisanexle./*exle1.1*/main(){printf(“Thisisanexle.\n”);}9第一章C语言概述例1.2已知角度值45°,求正弦值的2倍。

/*exle1.2*/#include“math.h”main(){floatx,y;x=45;y=2*sin(x*3.14/180);printf(“Y=%f\n”,y);}运行结果:Y=1.41365010第一章C语言概述例1.3已知三角形三边a,b,c,求面积。/*exle1.3*/#include“math.h”main(){floata,b,c,p,s;scanf(“%f,%f,%f”,&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“P=%f\nS=%f”,p,s);}输入:4,5,6↙输出:P=7.500000S=9.92156711第一章C语言概述max(intx,inty)main()/*maxnumber*/{{intz; inta,b,c;if(x>y)z=x; scanf(“%d,%d”,&a,&b);elsez=y; c=max(a,b); return(z); printf(“max=%d\n”,c);} }例1.4已知整数a,b,求其中的最大数。12第一章C语言概述C程序结构1、C程序由函数构成C程序={一个主函数(main函数)一个主函数+若干其他函数(子或库)说明部分2、函数{{函数体}数据定义执行部分(语句){TurboC有300多个跳转3、语句书写自由,后带分号“;”4、可用/*……*/对C程序作注释前一页13本章内容2.1算法的概念2.4算法的表示2.5结构化程序设计第二章算法返回14第二章算法第二章算法程序=数据结构+算法程序=数据结构+算法+程序设计方法+语言工具和环境数据结构:对数据的描述算法:对操作的描述#include“math.h”

main(){floatx,y;

x=45;

y=2*sin(x*3.14/180);printf(“Y=%f\n”,y);}15例如:1+2+3+……+100=5050或100+1+99+2+98+……+49+51+50=100+49*100+50=5050第二章算法§2.1算法的概念算法:为解决一个问题而采取的方法和步骤。16第二章算法§2.4算法的表示(用流程图表示算法)起止框处理框判断框输入/出框流程线连接点注释框17第二章算法例2.1计算265的平方根顺序结构开始X=265Y=√X输出Y结束N—S图X=265Y=√XY开始结束18第二章算法例2.2打印X的绝对值分支结构N—S图X>=0yn

打印x打印

-xX>=0?x-x结束开始19第二章算法例2.3计算 1到100的和循环结构i<=100nN—S图i=1,s=0s=s+ii=i+1打印syi=1,s=0s=s+ii=i+1打印s当i<=10020(1)自顶向下(2)逐步细化(3)模块化设计(4)结构化编码第二章算法§2.5结构化程序设计方法(了解内容)结构化程序便于编写、阅读、修改和维护。可以减少程序出错的机会,提高程序的可靠性,保证程序的质量。结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。21本章内容3.1C的数据类型3.2

常量与变量3.3整型数据3.4实型数据3.5字符型数据3.6变量赋初值3.8

算术运算符与算术表达式3.9赋值运算符和赋值表达式3.10逗号运算符和逗号表达式第三章数据类型、运算符与表达式返回22第三章数据类型、运算符与表达式空类型void(无return的函数)C数据类型基本类型构造类型指针类型整型实型字符型枚举型数组型结构体型共用体型单精度双精度

第三章数据类型、运算符与表达式§3.1C的数据类型23第三章数据类型、运算符与表达式§3.2常量与变量一、常量1、整型常量——0和正负整数4、字符串常量——“”括起来的字符串5、符号常量——#define符号名常量2、实型常量小数形式(12.34、-0.65)指数形式(0.1234e2)3、字符型常量‘’括起来的一个字符或以\开头的字符序列跳转24第三章数据类型、运算符与表达式#definePI3.1415926例3.1判断下列是否是C语言的常量

’1’-123’internet’2/4100.0-12e2.5"t"0.4e-4(字符型)(整型)(

)(

)(实型)(

)(字符串)(实型)例3.2定义一个符号常量PI,其值为

25第三章数据类型、运算符与表达式二、变量1、变量名——以标识符命名由字母、数字或下划线组成首字符为字母或下划线用来标识变量、符号常量、数组、函数、文件等标识符例:sumgood123student_name26第三章数据类型、运算符与表达式2、变量的定义用变量定义语句定义变量及其类型(1)变量定义语句的格式类型关键字变量名或赋值表达式表;实型字符型(2)类型关键字整型基本型int短整型short长整型long无符号型unsigned单精度型float双精度型doublechar27第三章数据类型、运算符与表达式(3)说明①必须在程序执行部分之前对程序中的所有变量进行定义②C语言中整型和字符型数据通用可在定义变量的同时给其赋初值例:inta=3,b=4,c=5;floatx,y,z=0.5;charw=‘a’;⑤变量名不能用关键字④变量区分大小写28第三章数据类型、运算符与表达式(4)举例3.3#definePI3.1415926#include“math.h”main(){floatx,y;x=67;y=2*sin(x*PI/180);printf(“y=%f”,y);}{floatx=67,y;注意区分:返回29第三章数据类型、运算符与表达式1、常量:十进制567,-789,0八进制0567,-0753十六进制0x567,-0xa12、变量:inti,j;i=10;j=-10;i100000000000001010j-101111111111110110§3.3整型数据30第三章数据类型、运算符与表达式3、整型变量数的表示范围:(-32768~32767)4、整型变量的分类:有符号基本整型[signed]int无符号基本整型unsignedint有符号短整型[signed]short[int]无符号短整型unsignedshort[int]有符号长整型[signed]long[int]无符号长整型unsignedlong[int]31第三章数据类型、运算符与表达式a0111111111111111b5、无符号和有符号数的比较:inta;(-32768~32767)unsignedintb;(0~65535)符号位数据位327676553511111111111111112152142132122112102928272625242322212032768、16384、8192、4096、2048、1024…32第三章数据类型、运算符与表达式举例3.4main(){inta,b,c,d;unsignedintu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}运行结果:a+u=22,b+u=-14

33第三章数据类型、运算符与表达式a01111111111111116、整型数据的溢出:符号位32767a+11000000000000000符号位-327681111111111111111-134第三章数据类型、运算符与表达式举例3.5main(){inta,b;a=32767;b=a+1;printf(“a=%d,b=%d\n”,a,b);}运行结果:a=32767,b=-32768

35第三章数据类型、运算符与表达式7、整型常量的类型使用整型常量时应注意以下几点:在(-32768~32767)范围内的整数赋给int型或long型变量 如:

inta;longb;a=0xb4;b=12;在(-2147483648~2147483647)范围内的整数赋给long型变量 如:

longb;b=50000;如果机器中短整型和基本整型所占字节数相同,则同等对待

如:

inta;shortb;a=0576;b=a;常量无unsigned型,赋值时注意溢出问题一个整型常量后面加一个l

或L则认为是long型常量(虚实对应) 如:

inta;longb;a=1234;b=12L;36第三章数据类型、运算符与表达式1、常量:小数形式.567,-789.,0.0,5.0指数形式123e4,-753E-5(输出时规范化1.23000e+06)2、变量:floatx;doubley;longdoublez;x=3.14159;y=7.86e12x.314159+1数符小数部分指数+.314159×103.141591+§3.4实型数据(浮点数)37第三章数据类型、运算符与表达式main(){floata,b;a=123456.789e5;b=a+20;printf(“a=%f,b=%f\n”,a,b);}运行结果:

3、实型数据的舍入误差举例3.638第三章数据类型、运算符与表达式4、实型常量的类型许多编译系统均将实型常量按照双精度数处理,结果存入单精度变量,降低了运算速度,可以在实型常量的后边加一个f或F以表示单精度数。如:floatf;f=2.45678f*4523.65f;5、单精度变量有6~

7位有效数字(10-37~1038)双精度变量有15~16位有效数字(10-307

~10308)39第三章数据类型、运算符与表达式1、常量:(a)‘a’、‘x’、‘?’、‘$’(b)‘\n’、‘\t’、‘\’’(c)‘\101’、‘\x41’(d)‘\0’或‘\000’ASCII值为0的空操作字符2、变量:charc1,c2;c1=‘a’;c2=‘b’;3、内存中的存储形式c19701100001c29801100010八进制十六进制§3.5字符型数据‘A’40第三章数据类型、运算符与表达式4、字符型数据的使用举例3.7main(){charc1,c2;c1=97;c2=98;printf(“c1=%c,c2=%c\n”,c1,c2);printf(“c1=%d,c2=%d\n”,c1,c2);}

运行结果:c1=a,c2=bc1=97,c2=98

41第三章数据类型、运算符与表达式举例3.8main(){charc1,c2;c1=‘a’;c2=‘b’;c1=c1-32;c2=c2-32;printf(“c1=%c,c2=%c\n”,c1,c2);printf(“c1=%d,c2=%d\n”,c1,c2);}运行结果:c1=A,c2=Bc1=65,c2=6642第三章数据类型、运算符与表达式举例3.9main(){inti;charc;i=‘a’;c=97;printf(“c=%c,c=%d\n”,c,c);printf(“i=%c,i=%d\n”,i,i);}运行结果:c=a,c=97i=a,i=9743第三章数据类型、运算符与表达式5、字符串常量“Howdoyoudo.”、“CHINA”、“a”、“$123.45”注意:(1)没有字符串变量(可用字符数组存储)

(2)字符串常量在内存中的存储形式CHINA\0(3)在输出语句中的应用

printf(“Howdoyoudo.”);

printf(“c=%c,c=%d\n”,c,c);44第三章数据类型、运算符与表达式inta=3;floatf=3.14;charc=‘a’;inta,b=3,c;inta=3,b=3,c=3;

注意:变量的初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋予初始值的。§3.6变量赋初值45第三章数据类型、运算符与表达式§3.8算术运算符与算术表达式一、C运算符简介(13类)算术运算符+-

*/%++-

-关系运算符><==>=<=!=逻辑运算符!&&||赋值运算符=条件运算符?:逗号运算符,指针运算符*&强制类型转换运算符(类型关键字)46第三章数据类型、运算符与表达式二、算术表达式1、定义:用算术运算符和括号将运算对象连接起来且符合C语法规则的式子2、运算顺序a*b/c-1.5+‘a’473、运算类型(§3.7混合运算

)(1)同类型运算结果类型不变不同类型运算先按类型级别低向高转换成同一类型,再计算doublefloatlongunsignedintchar,short

高低

10+‘a’+i*f-d/l②double④double⑤double①int4、优先级和结合性③double第三章数据类型、运算符与表达式48第三章数据类型、运算符与表达式(类型关键字)(表达式)例:(int)a(float)(5%3)(double)(x+y)三、强制类型转换运算注意:(int)x+y只转换x的类型后与y相加(int)x不等同于int(x)49第三章数据类型、运算符与表达式举例3.10main(){inti;floatx;x=3.6;i=(int)x;printf(“x=%f,i=%d\n”,x,i);}运行结果:x=3.600000,i=350第三章数据类型、运算符与表达式四、自增、自减运算1、运算规则++i--i使用前使i值加(减)1i++i--使用后使i值加(减)12、注意(1)只能用于变量(2)右结合方向(3)使用时谨防出错{j=++i;j=i++;相当于{i=i+1;j=i;j=i;i=i+1;51第三章数据类型、运算符与表达式3、例52第三章数据类型、运算符与表达式§3.9赋值运算符和赋值表达式一、赋值运算符及其操作=将一个表达式的值赋给一个变量二、赋值表达式<变量><赋值运算符><表达式>说明:(1)发生类型转换(自学60-61页)(2)右结合例:x=-b/(2*a)a=b=c=5a=(b=4)+(c=6)那么a=5=b=c?53第三章数据类型、运算符与表达式三、复合赋值运算复合赋值运算符=运算符+赋值号例:a+=3 a+=3 a=a+3a*=x+y a*=x+y a=a*(x+y) a%=b a%=b a=a%b 例:设a=3求下列表达式的值a+=a-=a*aa+=(a-=a*a)a+=(a=a-a*a)a=a+(a=a-a*a)-1254第三章数据类型、运算符与表达式§3.10逗号运算符和逗号表达式1、逗号表达式表达式1,表达式2,

,表达式n2、运算规则从左到右依次计算各表达式的值,以表达式n的值作为最终值(其优先级最低)例:比较(设a=3)a=3*5,a*4a=(3*5,a*4)计算后:值60,a=15a=1255第三章数据类型、运算符与表达式举例3.11main(){inti;floatf=7.2;printf(“i=%d\n”,(f+=4,i=f));printf(“f=%f\n”,f);}运行结果:i=11f=11.20000056本章内容4.1C语句概述4.2赋值语句4.3I/O的概念及在C语言中的实现4.4字符数据的输入/输出4.5格式输入与输出第四章最简单的C程序设计返回57第四章最简单的C程序设计§4.1C语句概述第四章最简单的C程序设计C语句控制语句(条件、分支、循环)函数调用语句(函数加分号)表达式语句(表达式加分号)空语句(一个单独的分号)复合语句(用{}将若干语句括起)58第四章最简单的C程序设计§4.2赋值语句语句格式:赋值表达式;例如:if((a=b)>0)t=a;if((a=b))x=a;if(a==b)y=a;在if后面的小括号内必须是表达式59

C程序最基本的成分是语句目前我们已掌握的语句:变量说明语句:inta,b,c;

表达式语句:x+y;

特别地:a=5;赋值语句60可以编写简单程序如:

main(){intx,y;x=5;y=2*x*x+3*x-1;}

该程序语法上完整,但还缺少输出。

61

■数据的输出

用输出函数实现,其中的两种输出函数:

1.putchar函数(字符输出函数)用于输出一个字符。

如:

putchar(‘a’);putchar(100);charc=’b’;putchar(c);62

例:输出单词Boy的完整程序:

#include“stdio.h”注意该语句的作用

main(){chara,b,c;a=’B’;b=’o’;c=’y’;putchar(a);putchar(b);putchar(c);}63

2.printf函数(格式输出函数)

任意类型、任意格式、任意个数。例如:

inta=100,b=56;

printf(“a=%d,b=%d”,a,b);

普通字符格式说明格式控制输出表列

输出结果:a=100,b=56“%”后的字符称格式字符,不同格式字符对应不同的数据类型。64

d格式符:按整数格式输出

几种用法:

%d不指定宽度,按实际宽度输出

%md按指定宽度输出,m为宽度

%ld用于输出长整型数65

例:

inta=125,b=453;longc=65535;printf(“a=%d,b=%5d,c=%ld”,a,b,c);

输出结果:

a=125,b=453,c=6553566

c格式符:用于输出字符

charc=’A’;printf(“c=%c,%c”,c,’B’);

输出结果:c=A,B

输出对象既可以是字符变量、字符常量,还可以是整型表达式。

67

如:

inta=100;charb=’A’;printf(“\n%d,%c”,a,a);printf(“\n%c,%d”,b,b);

输出结果:

100,dA,6568完整前面的程序:main(){intx,y;x=5;y=2*x*x+3*x-1;printf(“\ny=%d”,y);}69例4.1已知三角形三边a,b,c,求面积#include“math.h”main(){floata,b,c,p,s;scanf(“%f,%f,%f”,&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“p=%f\ns=%f\n”,p,s);}第四章最简单的C程序设计70第四章最简单的C程序设计例4.2已知整型变量x,y的值分别是3和5,

试将它们的值互换。intx=3,y=5,z;z=x;x=y;y=z;zy35x35371第四章最简单的C程序设计§4.3字符数据的输入/输出2、语句功能:从指定设备读一个字符输出c的值(字符)1、语句格式输入:getchar();输出:putchar(c);3、说明使用标准I/O函数时,应在程序前加预编译命令:#include“stdio.h”字符变量72第四章最简单的C程序设计例4.3输入一个字符并把它输出出来#include“stdio.h”main(){charc;c=getchar();putchar(c);}73第四章最简单的C程序设计1、语句格式输入scanf(格式控制,地址表列);输出printf(格式控制,输出表列);2、语句功能按格式控制描述的格式给地址表列中的量输入值或输出输出表列中各量的值3、格式控制“”括起来的一串格式字符和其它字符§4.4格式输入与输出74第四章最简单的C程序设计4、格式字符指定输出宽度在格式符中插入:m.n例:%10d%10.4f%12.5e75本章内容5.1关系运算符和关系表达式5.2逻辑运算符和逻辑表达式5.3if语句5.4switch语句4.5格式输入与输出第五章选择结构程序设计返回76第五章逻辑运算和判断选取控制第五章选择结构程序设计§5.1关系运算符和关系表达式一、运算符与优先级(左结合性)<<=>>===!=同级同级高低算术运算关系运算赋值运算高低77第五章逻辑运算和判断选取控制二、关系表达式1、关系表达式的形式<表达式><关系运算符><表达式>2、关系表达式的值1——真0——假下列是合法的关系表达式:a+b>c+d(a=3)<(b=5)‘a’!=‘A’(a>b)==(c<d)注意:f=a<b<c表达式的值。如:0<x<5当x=10时,表达式成立78第五章逻辑运算和判断选取控制§5.2逻辑运算符和逻辑表达式一、运算符与优先级!算术运算关系运算&&||高低逻辑运算真值表79第五章逻辑运算和判断选取控制二、逻辑表达式1、逻辑表达式的值1——真0——假例:设a=4,b=5,则!a为0(假)a&&b-1为1(真)5>3&&2||2<4-!0结果为1①②③④⑤⑥逆波兰表达式计算过程:从左到右,运算符和其后面的比较,级别底的和前面的数一起进栈,级别高的运算,最后全部出栈同时完成计算。80第五章逻辑运算和判断选取控制(m=a>b)&&(n=c>d)

当a=1,b=2,c=3,d=4,m=1,n=1时,执行结果m=0,(n=c>d)不被执行,n仍然为13、运算中一旦能确定其值,终止计算如计算:a&&b&&ca||b||c2、逻辑运算的对象并非仅限于逻辑量C判断处理的原则非0——真0——假例if(-5)x=10;elsex=0;思考题:上式去掉括号后m=a>b&&n=c>d结果如何?81第五章逻辑运算和判断选取控制§5.3if语句(条件语句)一、语句格式任意表达式可以是复合语句格式1:if(e)语句格式2:if(e)语句1else语句2格式3:if(e1)语句1

else

if(e2)语句2

else

if(e3)语句3…...

else

if(em)语句melse语句n82第五章逻辑运算和判断选取控制二、语句功能格式1:if(e)语句计算e的值并判断。e值非0,则执行语句;否则,执行下条语句。格式2:if(e)语句1else语句2计算e的值并判断。e值非0,则执行语句1;否则,执行语句2。下条语句语句1语句2e非00下条语句e语句非00goto83第五章逻辑运算和判断选取控制格式3:if(e)语句1

else

if(e)语句2

else

if(e)语句3…...

else

if(e)语句melse语句n123m计算e1

的值并判断,其值非0执行语句1;否则,判断e2

的值,其值非0执行语句2;否则,判断e3

的值,其值非0执行语句3;否则,.…..判断em

的值,其值非0执行语句m;否则,执行语句n00e1e3eme2语句1语句3语句2语句m语句n

下条语句非0非0非0非000….84第五章逻辑运算和判断选取控制例5.1从键盘输入两个整型数,输出最大数。main(){inta,b;scanf(“%d,%d”,&a,&b);if(a>=b)printf(“max=%d\n”,a);if(b>a)printf(“max=%d\n”,b);}开始enda,ba>ba<bab非0非00085第五章逻辑运算和判断选取控制例5.1从键盘输入两个整型数,输出最大数。main(){inta,b;scanf(“%d,%d”,&a,&b);if(b>a)a=b;printf(“max=%d\n”,a);}开始enda,bb>aaa=b非0086第五章逻辑运算和判断选取控制例5.2输入两个整型数,按大小输出。main(){inta,b,temp;scanf(“%d,%d”,&a,&b);if(b>a){temp=a;a=b;b=temp;}printf(“%d,%d\n”,a,b);}开始enda,bb>aa,bab非0087第五章逻辑运算和判断选取控制例5.3输入互不相等的三个数,按从小到大顺序输出它们。分析:设已知的三个数为a,b,c。(1)可直接通过逻辑表达式和条件语句设计程序。(2)可通过条件语句和互换变量值设计程序,即经过处理后使:a<b<c88第五章逻辑运算和判断选取控制方法(1):main(){floata,b,c;scanf(“%f%f%f”,&a,&b,&c);if(a<b&&b<c)printf(“%f,%f,%f”,a,b,c);if(a<c&&c<b)printf(“%f,%f,%f”,a,c,b);

if(b<a&&a<c)printf(“%f,%f,%f”,b,a,c);if(b<c&&c<a)printf(“%f,%f,%f”,b,c,a);

if(c<b&&b<a)printf(“%f,%f,%f”,c,b,a);if(c<a&&a<b)printf(“%f,%f,%f”,c,a,b);}89第五章逻辑运算和判断选取控制方法(2):main(){floata,b,c,t;scanf(“%f%f%f”,&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(“%5.2f,%5.2f,%5.2f”,a,b,c);}90例5.4求一元二次方程ax2+bx+c=0的解第五章逻辑运算和判断选取控制求x1、x2x1、x2endd>=0无实根yn开始d=b2-4aca,b,c开始求根:x1、x2x1、x2enda,b,cd=b2-4ac91第五章逻辑运算和判断选取控制#include<math.h>main(){

float

a,b,c,d,x1,x2;scanf(“%f%f%f”,&a,&b,&c);d=b*b-4*a*c;if

(d>=0){

x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);printf(“x1=%f,x2=%f\n”,x1,x2);}elseprintf(“Itisnorealroots.”);}92第五章逻辑运算和判断选取控制例5.5某运输公司吨公里基本运费为p,根据距离s的远近计费标准如下:

s<250km 没有折扣

250

s<500 2%折扣 500

s<1000 5%折扣 1000

s<2000 8%折扣 2000

s<3000 10%折扣 3000

s 15%折扣根据货物重量w和运距s,求运费f。返回93第五章逻辑运算和判断选取控制main(){floatp,s,w,d,f;scanf(“%f%f%f”,&p,&s,&w);if(s>=3000)d=0.15;elseif(s>=2000)d=0.10;elseif(s>=1000)d=0.08;elseif(s>=500)d=0.05;elseif(s>=250)d=0.02;elsed=0.0;f=p*w*s*(1-d);printf(“f=%15.2f”,f);}94第五章逻辑运算和判断选取控制三、if

语句的嵌套嵌套if

的一般形式if()if()语句1

else语句2elseif()语句3

else语句4内嵌if内嵌if注意:else总是与它上面最近的if配对95第五章逻辑运算和判断选取控制if()if()语句1elseif()语句2

else语句3内嵌ifif()if()语句1elseif()语句2

else语句3内嵌ifif()if()语句1else语句2if(){if()语句1}else语句296第五章逻辑运算和判断选取控制分析:a=0不是二次方程。

b2-4ac=0有两个相等实根。b2-4ac>0有两不等实根。b2-4ac<0有两共轭复根。

#include“math.h”main(){floata,b,c,d,x,x1,x2,xr,xi;scanf(“%f%f%f”,&a,&b,&c);编程:例5.6求一元二次方程ax2+bx+c=0的解97第五章逻辑运算和判断选取控制求x1、x2x求xr、xix1、x2xr、xiNO!d=0d>0求xyynnd=b-4ac2yna=0开始a,b,cend98第五章逻辑运算和判断选取控制if

(

fabs(a)<1e-6)printf(“No!”);else{d=b*b-4*a*c;if

(

fabs(d)<1e-6

){x=-b/(2*a);printf(“Twoequalroots:%f”,x);}else

if

(

d>0

){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf(“Tworealroots:%f,%f”,x1,x2);}else{xr=-b/(2*a);xi=sqrt(-d)/(2*a);printf(“Complexroots:%f,%f”,xr,xi);}

}}99第五章逻辑运算和判断选取控制四、条件运算符与条件表达式1、条件表达式的一般形式<表达式1>?<表达式2>:<表达式3>2、运算规则先计算表达式1,若为非0,则以表达式2的值作为条件表达式的值;否则,以表达式3的值为条件表达式的值。3、优先级算术关系逻辑运算(!除外)条件运算赋值运算高低右结合100第五章逻辑运算和判断选取控制(1)输出x和y当中的最大值

z=x>y?x:y;printf(“max=%d”,z);或printf(“max=%d”,x>y?x:y);或x>y?printf(“%d”,x):printf(“%d”,y);举例:(2)a>b?a:b+1等价于a>b?a:(b+1)而不是(a>b?a:b)+1(3)a>b?a:c>d?c:d等价于a>b?a:(c>d?c:d)(4)x>y?1:5.6表达式的值的类型取高的(5)ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch;101第五章逻辑运算和判断选取控制§5.4switch语句一、语句格式switch(表达式){case常量表达式1:语句1

case常量表达式2:语句2

……

case常量表达式n:语句ndefault:语句n+1}102第五章逻辑运算和判断选取控制二、执行过程当switch后的表达式的值与某一个case后的常量表达式的值相等时,执行其后的语句;若无匹配,则执行default后的语句。三、break语句使流程跳出switch结构,终止switch语句的执行。103第五章逻辑运算和判断选取控制例5.7用switch语句设计“例5.5运费程序”跳转s<1d=01<s<2d=0.22<s<4d=0.054<s<8d=0.088<s<12d=0.112<s d=0.15104第五章逻辑运算和判断选取控制main(){floatp,w,s,d,f;intc;scanf(“%f”,&s);scanf(“%f%f”,&p,&w);if(s>=3000)c=12;elsec=s/250;switch(c){case0:d=0;break;case1:d=0.02;break;case2:case3:d=0.05;break;case4:

case5:case6:case7:d=0.08;break;case8:case9:case10:case11:d=0.1;break;case12:d=.15;break;}f=p*w*s*(1-d);printf(“f=%15.2f”,f);}105第五章作业第111页5.3、5.5、5.7上机调试作业第111-112页5.6、

5.7第五章逻辑运算和判断选取控制106第五章逻辑运算和判断选取控制习题5.5已知x,求分段函数值y

main() {floatx,y; scanf(“%f”,&x); if(x<1)y=x; if(x>=1&&x<10)y=2*x-1; if(x>=10)y=3*x-11; printf(“x=%f,y=%f\n”,x,y);}程序1:107第五章逻辑运算和判断选取控制

main() {floatx,y; scanf(“%f”,&x); if(x<1)y=x; elseif(x<10)y=2*x-1; elsey=3*x-11; printf(“x=%f,y=%f\n”,x,y);}程序2:108第五章逻辑运算和判断选取控制习题5.6分析:设百分制成绩为x,成绩等级为y‘A’ x90‘B’ 80

x<90‘C’ 70

x<80‘D’ 60

x<70‘E’ x<60y=109第五章逻辑运算和判断选取控制习题5.1010 a||b||c||d0 其他h=分析:设坐标为(x,y),高度为h 设: a=(x-2)+(y-2)1 b=(x+2)+(y-2)1 c=(x+2)+(y+2)1 d=(x-2)+(y+2)122222222110本章内容6.1概述6.2goto语句6.3while语句6.4do-while语句6.5for语句6.6循环的嵌套6.7几种循环的比较6.8break语句和continue语句第六章循环控制返回111第六章循环控制第六章循环控制C循环控制if-goto循环 (§6.2)while循环 (§6.3)do-while循环 (§6.4)for循环 (§6.5)§6.1概述112第六章循环控制§6.2goto语句及其构成的循环一、goto语句2、语句功能使控制转到语句标号所标识的语句

gotoL1; L2:语句…… …...L1:语句 gotoL2;例:1、语句格式goto语句标号写在语句前的标识符(后加:)113第六章循环控制二、用法1、与if语句联合使用构成循环2、用来实现从多重循环体内转出L1:if(e) {循环体

gotoL1;}(当型循环)L2:循环体

if(e)

gotoL2;(直到型循环)114第六章循环控制例6.1求s=1+2+3+….+n的值。

main(){inti=1,sum=0,n;scanf(“%d”,&n);L1:sum=sum+i;i++;if(i<=n)gotoL1;printf(“s=%d”,sum);}

main(){inti=1,sum=0,n;scanf(“%d”,&n);L1:if(i<=n){sum=sum+i;i++;gotoL1;}printf(“s=%d”,sum);}115第六章循环控制§6.3while语句—“当型”循环一、语句格式while(e)循环体二、执行过程(先判断后执行)当表达式e值为非0时,执行循环体,然后重复执行while语句;当e的值为0时,结束循环,执行后继语句。非00循环体e单语句或复合语句116第六章循环控制例6.2求s=1+2+3+….+n的值(用while循环n=100)。main(){inti=1,s=0,n;scanf(“%d”,&n);while(i<=n){s=s+i;i++;}printf(“s=%d”,s);}main(){inti=1,s=0,n;scanf(“%d”,&n);while(i<=n)s+=i++;printf(“s=%d”,s);}117第六章循环控制§6.4do-while语句—“直到型”循环一、语句格式do循环体while(e);二、执行过程(先执行后判断)先执行do后的循环体,然后判断表达式e的值,若为非0,重复执行循环体,直到while中的表达式e为0,结束循环。循环体e0非0单语句或复合语句118第六章循环控制例6.3求s=1+2+….+n的值(用do-while循环n=100)。main(){inti=1,s=0,n;scanf(“%d”,&n);do{s=s+i;i++;}while(i<=n);printf(“s=%d”,s);}main(){inti=1,s=0,n;scanf(“%d”,&n);dos+=i++;while(i<=n);printf(“s=%d”,s);}119第六章循环控制§6.5for语句及其构成的循环一、语句格式for(表达式1;表达式2;表达式3)循环体计算表达式1计算表达式3表达式2循环体下一条语句0非0二、执行过程1、计算表达式1。2、判断表达式2。若非0,执行循环体,转3;否则,结束循环,转4。3、计算表达式3。转2。4、执行for语句的下一条语句。120第六章循环控制三、说明1、for语句最简单、最常用的应用形式for(循环变量赋初值;循环条件;循环变量增值)循环体例6.4求s=1+2+….+n的值(用for循环n=100)。main(){inti,s=0,n;scanf(“%d”,&n);for(i=1;i<=n;i++)s=s+i;printf(“s=%d”,s);}121第六章循环控制2、for语句中的三个表达式均可省略注意:(1)分号不能省略。(2)应保证循环正确执行。例main(){inti,s,n;scanf(“%d”,&n);for(i=1,s=0;i<=n;)s+=i++;printf(“s=%d”,s);}main(){inti=1,s=0,n;scanf(“%d”,&n);for(;i<=n;)s+=i++;printf(“s=%d”,s);}main(){inti=1,s=0,n;scanf(“%d”,&n);for(;;){s+=i++;if(i>n)break;}

printf(“s=%d”,s);}122第六章循环控制例6.5给一年级的小学生出10道100以内的加法练习题。分析:1、出题2、回答3、判断对错#include“stdlib.h”main(){inti,x,y,z;randomize();for(i=1;i<=10;i++){x=random(99);y=random(99);printf(“%d+%d=”,x,y);scanf(“%d”,&z);if(z==x+y)printf(“\nright!\n”);elseprintf(“\nwrong!\n”);}}思考:1、做对几题2、总成绩#include“stdlib.h”main(){inti,x,y,z;intcount=0,score=0;randomize();for(i=1;i<=10;i++){x=random(99);y=random(99);printf(“%d+%d=”,x,y);scanf(“%d”,&z);if(z==x+y){printf(“\nright!\n”);count++;score+=10;}elseprintf(“\nwrong!\n”);}printf(“%d,%d\n”,count,score);}123第六章循环控制例6.6求Fibonacci数列:1,1,2,3,5,8,….的前30项。分析:f1=f2=1,fn=fn-1+fn-2(n>=3)

(注:一行打印3个数字)main(){longi=1,j=1,k;intn;printf(“%8ld%8ld”,i,j);for(n=3;n<=30;n++){k=i+j;printf(“%8ld”,k);if(n%3==0)printf(“\n”); i=j;j=k;}}124第六章循环控制例6.7求分数序列:1/2,2/3,3/5,5/8,8/13,13/21,….的前20项之和。main(){int

k;floati=1,j=2,s=0;for(k=1;k<=20;k++){s=s+i/j;j=i+j;i=j-i;}

printf(“sum=%10.6f\n”,s);}125第六章循环控制1、循环的嵌套概念对各种循环结构是一样的,即某一循环的循环体内包含另一循环结构。2、各种循环结构可以互相嵌套。例for嵌套for(;;){….for(;;){….}….}for-while嵌套for(;;){….while(){….}….}§6.6循环的嵌套—多重循环126第六章循环控制1、各种循环结构可以互相替代,但不提倡使用用goto构成的循环。2、在while和do-while语句构成的循环体中必须有使循环趋于结束的语句,如i++。§6.7几种循环的比较3、在while和do-while语句构成的循环中,循环变量的初始化必须在循环之前完成。4、在while、do-while和for语句构成的循环中,可以用break和continue跳出或结束本次循环

127第六章循环控制§6.8break语句和continue语句一、break语句1、用来跳出switch结构。2、用来跳出当前循环。循环break;二、continue语句用来结束本次循环,即跳过当前循环中后继尚未执行的语句,进行下一次循环循环continue;128第六章循环控制例6.8利用公式

2/6=1-2+2-2+3-2+4-2+….求的近似值,直到最后一项的值小于10-8为止。#include“math.h”main(){longi=1;doublepi=0;while(i*i<=1e8){pi=pi+1.0/(i*i);i++;}

pi=sqrt(6.0*pi);printf(“pi=%10.6f\n”,pi);}§6.9程序举例129第六章循环控制例6.8利用公式

2/6=1-2+2-2+3-2+4-2+….求的近似值,直到最后一项的值小于10-8为止。#include“math.h”main(){longi;doublepi=0;for(i=1;i<10000;i++){if(i*i>=1e8)break;pi=pi+1.0/(i*i);}

pi=sqrt(6.0*pi);printf(“pi=%10.6f\n”,pi);}130第六章循环控制例6.9打印100以内个位数为6,且能被3整除的数。main(){inti,j;for(i=0;i<=9;i++){j=i*10+6;if(j%3!=0)continue;

printf("%d",j);}}可以省略131第六章循环控制例6.10写出下列程序的运行结果。main(){inti,j,a=0;for(i=0;i<2;i++){for(j=0;j<4;j++){if(j%2)break;a++;}a++;}printf("%d\n",a);}132第六章循环控制例6.11打印99表。1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81133第六章循环控制例6.11打印99表。main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf(“

温馨提示

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

评论

0/150

提交评论