




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第一章 C语言概述第二章 算法第三章 数据类型、运算符与表达式第四章 最简单的C程序设计第五章 选择结构程序设计第六章 循环控制第七章 数组第八章 函数第九章 预处理命令第十章 指针第十一章 结构体第十三章 文件第1页/共291页2前 言第2页/共291页3前 言第3页/共291页4前 言第4页/共291页5&本章内容1.1 C语言发展史1.2 C语言特点1.3 简单C程序分析第一章 C语言概述返回第5页/共291页6第一章 C语言概述第一章 C语言概述1.1 C语言发展史1960 ALGOL60 (Algorithmic Language)1987 87 ANSI C 1990 I
2、SO C1972 C (取BCPL第二个字母)1970 B (取BCPL第一个字母)1978 标准C 1983 ANSI C1967 BCPL (Basic CombinedProgramming Language)跳转第6页/共291页7第一章 C语言概述1.2 C语言特点1、简练、自由、结构化 (32个关键字、9种控制语句)2、运算符丰富(附录)34种3、数据结构丰富4、可直接对硬件进行操作5、目标程序质量高6、可移植性好第7页/共291页8第一章 C语言概述1.3 简单C程序分析例1.1 打印(显示)一串字符。运行结果: This is an example./* example1.1
3、*/ main( ) printf(“This is an example. n”); 第8页/共291页9第一章 C语言概述例1.2 已知角度值45, 求正弦值的2倍。 /*example 1.2*/ #include “math.h” main( ) float x, y; x=45; y=2*sin(x*3.14/180); printf(“Y=%f n”, y); 运行结果: Y=1.413650第9页/共291页10第一章 C语言概述例1.3 已知三角形三边 a, b, c, 求面积。 /*example 1.3*/ #include “math.h” main( ) float a
4、, 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 n S=%f ”, p, s); 输入:4,5,6 输出:P=7.500000S=9.921567第10页/共291页11第一章 C语言概述max( int x , int y ) main( ) /*max number*/ int z ; int a , b , c ; if(xy) z=x ; scanf(“%d,%d”,&a,&b); else
5、z=y ; c=max( a , b ) ; return(z) ; printf(“max=%dn ”, c) ; 例1.4 已知整数 a, b, 求其中的最大数。第11页/共291页12第一章 C语言概述C程序结构1、C程序由函数构成C程序=一个主函数(main函数)一个主函数+若干其他函数(子或库)说明部分2、函数 函数体 数据定义执行部分(语句)Turbo C有300多个跳转3、语句书写自由,后带分号“;”4、可用 /*/ 对C程序作注释前一页第12页/共291页13&本章内容2.1 算法的概念2.4 算法的表示2.5 结构化程序设计第二章 算法返回第13页/共291页14第二
6、章 算法第二章 算法程序 = 数据结构 + 算法程序=数据结构+算法+程序设计方法+语言工具和环境数据结构:对数据的描述算法:对操作的描述#include “math.h” main( ) float x, y; x=45; y=2*sin(x*3.14/180); printf(“Y=%f n”, y); 第14页/共291页15例如:1+2+3+100=5050 或100+1+99+2+98+49+51+50=100+49*100+50=5050第二章 算法2.1 算法的概念算法:为解决一个问题而采取的方法和步骤。第15页/共291页16第二章 算法2.4 算法的表示(用流程图表示算法)起
7、止框处理框判断框输入/出框流程线连接点注释框第16页/共291页17第二章 算法例2.1 计算265的平方根顺序结构开始开始X=265Y=X输出输出Y结束结束NS图X=265Y=XY开始结束第17页/共291页18第二章 算法例2.2 打印X的绝对值分支结构NS图X=0y n 打印x 打印 -xX=0? x -x结束开始第18页/共291页19第二章 算法例2.3 计算1到100的和循环结构i=100nNS图 i=1,s=0s=s+ii=i+1打印sy i=1,s=0s=s+ii=i+1打印s当i = = !=逻辑运算符 ! & |赋值运算符 =条件运算符 ? :逗号运算符 , 指针运
8、算符 * & 强制类型转换运算符 (类型关键字)第45页/共291页46第三章 数据类型、运算符与表达式二、算术表达式1、定义:用算术运算符和括号将运算对象连接起来且符合C语法规则的式子2、运算顺序 a*b/c-1.5+a 优优 先先 级级 运运 算算 符符 结结 合合 方方 向向 1 ( ) 里里 层层 优优 先先 2 + + - - 自自 右右 至至 左左 3 * / % 自自 左左 至至 右右 4 + - 自自 左左 至至 右右 第46页/共291页473、运算类型( 3.7混合运算 )(1) 同类型运算结果类型不变(2) 不同类型运算先按类型级 别低向高转换成同一类型, 再计算
9、double floatlongunsignedint char, short 高低 10+a+ i * f - d/ldoubledouble doubleint4、优先级和结合性 double第三章 数据类型、运算符与表达式第47页/共291页48第三章 数据类型、运算符与表达式(类型关键字)(表达式)例: (int) a (float)(5%3) (double)(x+y)三、强制类型转换运算注意: (int) x+y 只转换 x的类型后与y相加 (int) x 不等同于int (x)第48页/共291页49第三章 数据类型、运算符与表达式举例3.10main()int i ; floa
10、t x ; x=3.6 ; i=(int)x ; printf(“x=%f , i=%dn” , x , i ) ; 运行结果:x=3.600000 , i=3第49页/共291页50第三章 数据类型、运算符与表达式四、自增、自减运算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;第50页/共291页51第三章 数据类型、运算符与表达式3、例运运算算前前 表表达达式式 运运算算后后 i=3 j=(i+)+(i+)+(i+) i
11、=6, j=9 i=3 j=(+i)+(+i)+(+i) i=6, j=18 i=3, j=4 k=i+j i=4, k=7 i=3 j= -i+ i=4, j=-3 i=3 printf(“%d,%d”,i,i+) 结结果果:4,3 第51页/共291页52第三章 数据类型、运算符与表达式3.9 赋值运算符和赋值表达式一、赋值运算符及其操作= 将一个表达式的值赋给一个变量二、赋值表达式 说明:(1) 发生类型转换(自学60-61页) (2) 右结合例:x= -b/(2*a) a=b=c=5 a= (b=4)+(c=6) 那么a=5=b=c?第52页/共291页53第三章 数据类型、运算符与表
12、达式三、复合赋值运算复合赋值运算符=运算符+赋值号例: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) -12第53页/共291页54第三章 数据类型、运算符与表达式3.10 逗号运算符和逗号表达式1、逗号表达式表达式1,表达式2,表达式n2、运算规则从左到右依次计算各表达式的值,以表达式n的值作为最终值(其优先级最低)例:比较 (设a=3)a= 3*5, a*4a= (3*5, a*4)计算后: 值
13、60,a=15 a=12 第54页/共291页55第三章 数据类型、运算符与表达式举例3.11main()int i ; float f=7.2 ; printf(“i=%d n” ,(f+=4 , i=f) ; printf(“f=%f n” , f ) ; 运行结果:i=11f=11.200000 第55页/共291页56&本章内容4.1 C语句概述4.2 赋值语句4.3 I/O的概念及在C语言中的实现4.4 字符数据的输入/输出4.5 格式输入与输出第四章 最简单的C程序设计返回第56页/共291页57第四章 最简单的C程序设计4.1 C语句概述第四章 最简单的C程序设计C语句控
14、制语句(条件、分支、循环)函数调用语句(函数加分号)表达式语句(表达式加分号)空语句(一个单独的分号)复合语句(用 将若干语句括起)第57页/共291页58第四章 最简单的C程序设计4.2 赋值语句语句格式:赋值表达式;例如:if ( ( a=b ) 0 ) t=a ; if ( ( a=b ) ) x=a; if (a=b ) y=a;在 if 后面的小括号内必须是表达式第58页/共291页59 C C 程序最基本的成分是语句程序最基本的成分是语句 目前我们已掌握的语句:目前我们已掌握的语句: 变量说明语句变量说明语句: int a,b,c;: int a,b,c; 表达式语句:表达式语句:
15、 x+y;x+y; 特别地:特别地: a=5; a=5; 赋值语句赋值语句第59页/共291页60 可以编写简单程序如:可以编写简单程序如: main()main() int x,y; int x,y; x=5; x=5; y=2 y=2* *x x* *x+3x+3* *x-1;x-1; 该程序语法上完整,但还缺少输出。该程序语法上完整,但还缺少输出。 第60页/共291页61 数据的输出数据的输出 用输出函数实现用输出函数实现, ,其中的两种输出函数:其中的两种输出函数: 1.putchar 1.putchar 函数函数 (字符输出函数)(字符输出函数) 用于输出一个字符。用于输出一个字符
16、。 如如: : putchar (a); putchar (100); char c=b; putchar (c);第61页/共291页62 例例:输出单词:输出单词BoyBoy的完整程序:的完整程序: #include “stdio.h” 注意该语句的作用注意该语句的作用 main() char a, b, c; a=B; b=o; c=y; putchar (a); putchar (b); putchar (c); 第62页/共291页63 2. printf2. printf函数(格式输出函数)函数(格式输出函数) 任意类型、任意格式、任意个数。任意类型、任意格式、任意个数。 例如:例
17、如: int a=100,b=56;int a=100,b=56; printf(printf(“a=%d,b=%da=%d,b=%d”,a,b);,a,b); 普通字符普通字符 格式说明格式说明 格式控制格式控制 输出表列输出表列 输出结果:输出结果:a=100,b=56a=100,b=56“% %” 后的字符称格式字符,不同格式字符对应不同的数据类型。后的字符称格式字符,不同格式字符对应不同的数据类型。第63页/共291页64 d d格式符:按整数格式输出格式符:按整数格式输出 几种用法:几种用法: %d %d 不指定宽度,按实际宽度输出不指定宽度,按实际宽度输出 %md %md 按指定宽
18、度输出,按指定宽度输出,m m为宽度为宽度 %ld %ld 用于输出长整型数用于输出长整型数第64页/共291页65 例:例: int a=125,b=453;int a=125,b=453; long c=65535; long c=65535; printf( printf(“a=%d,b=%5d,c=%lda=%d,b=%5d,c=%ld”,a,b,c);,a,b,c); 输出结果:输出结果: a=125,b= 453,c=65535a=125,b= 453,c=65535第65页/共291页66 c c格式符:用于输出字符格式符:用于输出字符 char c=char c=A A; ;
19、printf( printf(“c=%c,%cc=%c,%c”,c,c,B B);); 输出结果输出结果:c=A,Bc=A,B 输出对象既可以是字符变量、字符常量,还可以是整型表达式。输出对象既可以是字符变量、字符常量,还可以是整型表达式。 第66页/共291页67 如:如: int a=100;int a=100; char b= char b=A A; ; printf( printf(“n%d,%cn%d,%c”,a,a);,a,a); printf( printf(“n%c,%dn%c,%d”,b,b);,b,b); 输出结果:输出结果: 100,d100,d A,65 A,65第67
20、页/共291页68main()main() int x,y; int x,y; x=5; x=5; y=2 y=2* *x x* *x+3x+3* *x-1;x-1; printf( printf(“n y=%dn y=%d”,y);,y); 第68页/共291页69例4.1 已知三角形三边 a, b, c, 求面积 #include “math.h”main( ) float a, 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(
21、“p=%fns=%f n”, p, s); 第四章 最简单的C程序设计第69页/共291页70第四章 最简单的C程序设计例4.2 已知整型变量x,y的值分别是3和5, 试将它们的值互换。int x=3, y=5, z;z=x; x=y; y=z;zy35x353第70页/共291页71第四章 最简单的C程序设计4.3字符数据的输入/输出2、语句功能:从指定设备读一个字符输出c的值(字符)1、语句格式输入:getchar( );输出:putchar(c);3、说明使用标准I/O函数时,应在程序前加预编译命令: #include “stdio.h”字符变量第71页/共291页72第四章 最简单的C
22、程序设计例4.3 输入一个字符并把它输出出来 #include “stdio.h” main( ) char c; c=getchar( ); putchar(c); 第72页/共291页73第四章 最简单的C程序设计1、语句格式输入 scanf(格式控制,地址表列);输出 printf(格式控制,输出表列);2、语句功能按格式控制描述的格式给地址表列中的量 输入值或输出输出表列中各量的值3、格式控制“”括起来的一串格式字符和其它字符4.4 格式输入与输出第73页/共291页74第四章 最简单的C程序设计4、格式字符格式字符格式字符 描述对象描述对象 说明说明 %d 整型数据整型数据 有有 %
23、md ,%ld %f 实型数据实型数据 小数部分输出小数部分输出6位位 %e 带带e实数实数 指数指数4位,位,2位整数位整数 %c 字符数据字符数据 %s 字符串数据字符串数据 指定输出宽度在格式符中插入:m.n例: %10d %10.4f %12.5e 第74页/共291页75&本章内容5.1 关系运算符和关系表达式5.2 逻辑运算符和逻辑表达式5.3 if 语句5.4 switch 语句4.5 格式输入与输出第五章 选择结构程序设计返回第75页/共291页76第五章 逻辑运算和判断选取控制第五章 选择结构程序设计5.1 关系运算符和关系表达式一、运算符与优先级 (左结合性) =
24、= !=同级同级高低算术运算 关系运算 赋值运算高低第76页/共291页77第五章 逻辑运算和判断选取控制二、关系表达式1、关系表达式的形式 2、关系表达式的值1 真0 假下列是合法的关系表达式:a+b c+d (a=3) b)=(cd)注意:f=abc 表达式的值。如: 0 x 3 & 2 | 2 b)&(n=cd) 当a=1,b=2,c=3,d=4,m=1,n=1时,执行结 果m=0, (n=cd)不被执行, n 仍然为13、运算中一旦能确定其值,终止计算如计算: a&b&c a|b|c2、逻辑运算的对象并非仅限于逻辑量C判断处理的原则非0 真 0 假例 i
25、f (-5) x=10; else x=0;思考题: 上式去掉括号后m=ab & n=cd 结果如何?第80页/共291页81第五章 逻辑运算和判断选取控制5.3 if 语句(条件语句)一、语句格式任意表达式可以是复合语句格式1:if (e) 语句格式2:if (e) 语句1 else 语句2格式3:if (e1 ) 语句1 else if (e2 ) 语句2 else if (e3 ) 语句3 . else if (em ) 语句m else 语句n 第81页/共291页82第五章 逻辑运算和判断选取控制二、语句功能格式1:if (e) 语句计算 e 的值并判断。 e 值非0,则执行
26、语句;否则,执行下条语句。格式2:if (e) 语句1 else 语句2计算 e 的值并判断。 e 值非0,则执行语句1;否则,执行语句2。下条语句语句1语句2e非00下条语句e语句非00goto第82页/共291页83第五章 逻辑运算和判断选取控制格式3:if (e ) 语句1 else if (e ) 语句2 else if (e ) 语句3 . else if (e ) 语句m else 语句n 123m计算 e1 的值并判断,其值非0执行语句1;否则,判断 e2 的值,其值非0执行语句2; 否则,判断 e3 的值, 其值非0执行语句3;否则,. 判断em 的值,其值非0执行语句m ;否
27、则,执行语句n00e1e3eme2语句1语句3语句2语句m语句n 下条语句非0非0非0非000.第83页/共291页84第五章 逻辑运算和判断选取控制例5.1 从键盘输入两个整型数,输出最大数。main() int a ,b ; scanf(“%d,%d”,&a,&b); if(a=b)printf(“max=%dn”,a); if(ba)printf(“max=%dn”,b);开始enda , babaa) a=b; printf(“max=%dn”,a);开 始enda , bbaaa=b非00第85页/共291页86第五章 逻辑运算和判断选取控制例5.2 输入两个整型数,
28、按大小输出。main() int a ,b ,temp ; scanf(“%d,%d”,&a,&b); if (ba) temp=a;a=b;b=temp; printf(“%d,%dn”,a,b);开始enda , bbaa,ba b非00第86页/共291页87第五章 逻辑运算和判断选取控制例5.3 输入互不相等的三个数,按从小到大 顺序输出它们。分析:设已知的三个数为a, b, c。(1)可直接通过逻辑表达式和条件语句 设计程序。(2)可通过条件语句和互换变量值设计 程序,即经过处理后使:abc第87页/共291页88第五章 逻辑运算和判断选取控制方法(1):main(
29、)float a, b, c; scanf(“%f %f %f ”,&a,&b,&c); if(ab&bc) printf(“%f,%f,%f”, a, b, c); if(ac&cb) printf(“%f,%f,%f”, a, c, b); if(ba&ac) printf(“%f,%f,%f”, b, a, c); if(bc&ca) printf(“%f,%f,%f”, b, c, a); if(cb&ba) printf(“%f,%f,%f”, c, b, a); if(ca&ab)t=a;a=b;b=t; if
30、(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);第89页/共291页90例5.4 求一元二次方程 ax2+bx+c=0 的解第五章 逻辑运算和判断选取控制求x1、x2x1、x2endd=0无实根yn开 始d=b2-4aca, b, c开 始求根:x1、x2x1、x2enda, b, cd=b2-4ac第90页/共291页91第五章 逻辑运算和判断选取控制#include main( ) float a, b, c, d, x1, x2; scanf(“%f %f %f ”,&a,&a
31、mp;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=%fn ”, x1,x2); else printf(“It is no real roots.”); 第91页/共291页92第五章 逻辑运算和判断选取控制例5.5某运输公司吨公里基本运费为p,根 据距离s的远近计费标准如下: s250km没有折扣 250 s500 2% 折扣500 s1000 5% 折扣 1000 s2000 8% 折扣 2000 s=3000) d=0.15; else if(s
32、=2000) d=0.10; else if(s=1000) d=0.08; else if(s=500) d=0.05; else if(s=250) d=0.02; else d=0.0; f=p*w*s*(1-d); printf(“f=%15.2f ”, f); 第93页/共291页94第五章 逻辑运算和判断选取控制三、if 语句的嵌套嵌套 if 的一般形式if ( ) if ( ) 语句1 else 语句2else if ( ) 语句3 else 语句4内嵌 if内嵌 if注意:else 总是与它上面最近的 if 配对第94页/共291页95第五章 逻辑运算和判断选取控制if ( )
33、 if ( ) 语句1else if ( ) 语句2 else 语句3内嵌 ifif ( ) if ( ) 语句1 else if ( ) 语句2 else 语句3内嵌 ifif ( ) if ( ) 语句1else 语句2if ( ) if ( ) 语句1 else 语句2第95页/共291页96第五章 逻辑运算和判断选取控制分析:a=0 不是二次方程。 b2-4ac=0 有两个相等实根。 b2-4ac0 有两不等实根。 b2-4ac0求xyynnd=b -4ac2yna=0开 始a , b , cend第97页/共291页98第五章 逻辑运算和判断选取控制if ( fabs(a)1e-6)
34、 printf(“No!”);else d=b*b-4*a*c; if ( fabs(d)0 ) x1=(-b+sqrt(d)/(2*a); x2=(-b -sqrt(d)/(2*a); printf(“Two real roots:%f,%f ”,x1,x2); else xr= -b/(2*a); xi=sqrt(-d)/(2*a); printf(“Complex roots:%f,%f ”, xr,xi); 第98页/共291页99第五章 逻辑运算和判断选取控制四、条件运算符与条件表达式1、条件表达式的一般形式 ? :2、运算规则先计算表达式1,若为非0,则以表达式2的值作为条件表达式
35、的值;否则,以表达式3的值为条件表达式的值。3、优先级算术 关系 逻辑运算(!除外) 条件运算 赋值运算高低右结合第99页/共291页100第五章 逻辑运算和判断选取控制(1)输出x和y当中的最大值 z=xy ? x : y ; printf(“max=%d”,z);或 printf(“max=%d”,xy?x:y); 或 xy?printf (“%d”,x) : printf (“%d”,y); 举例:(2)ab?a:b+1等价于ab?a:(b+1)而不是(ab?a:b)+1(3)ab?a:cd?c:d等价于ab?a:(cd?c:d)(4)xy?1:5.6 表达式的值的类型取高的(5)ch=
36、(ch=A&ch=Z)?(ch+32):ch;第100页/共291页101第五章 逻辑运算和判断选取控制5.4 switch 语句一、语句格式 switch(表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default :语句n+1 第101页/共291页102第五章 逻辑运算和判断选取控制二、执行过程当switch后的表达式的值与某一个case后的常量表达式的值相等时,执行其后的语句;若无匹配,则执行default后的语句。三、break 语句使流程跳出switch结构,终止switch语句的执行。第102页/共291页10
37、3第五章 逻辑运算和判断选取控制例5.7 用switch语句设计“例5.5运费程序”跳转 s 1 d=0 1 s 2 d=0.2 2 s 4 d=0.05 4 s 8 d=0.08 8 s 12 d=0.112 =3000) c=12; else c=s/250; switch(c) case 0 : d=0; break; case 1 : d=0.02; break; case 2 : case 3 : d=0.05; break; case 4 : case 5 : case 6 : case 7 : d=0.08; break; case 8 : case 9 : case 10: c
38、ase 11: d=0.1; break; case 12: d=.15; break; f=p*w*s*(1-d); printf(“f=%15.2f ”, f); 第104页/共291页105第五章作业第111页 5.3 、 5.5、 5.7上机调试作业第111-112页 5.6、 5.7第五章 逻辑运算和判断选取控制第105页/共291页106第五章 逻辑运算和判断选取控制习题5.5 已知x,求分段函数值ymain() float x, y; scanf(“%f”, &x); if(x=1&x=10) y=3*x-11; printf(“x=%f, y=%fn”, x,
39、y); 程序1:第106页/共291页107第五章 逻辑运算和判断选取控制main() float x, y; scanf(“%f”, &x); if(x1) y=x; else if(x10) y=2*x-1; else y=3*x-11; printf(“x=%f, y=%fn”, x, y); 程序2:第107页/共291页108第五章 逻辑运算和判断选取控制习题5.6分析:设百分制成绩为x, 成绩等级为yA x90B80 x90C70 x80D60 x70Ex60y=第108页/共291页109第五章 逻辑运算和判断选取控制习题5.1010a|b|c|d0其他h=分析:设坐标为
40、(x, y), 高度为h设: a=(x-2) + (y-2) 1b=(x+2) + (y-2) 1c=(x+2) + (y+2) 1d=(x-2) + (y+2) 122222222第109页/共291页110&本章内容6.1 概述6.2 goto语句6.3 while语句6.4 do-while语句6.5 for语句6.6 循环的嵌套6.7 几种循环的比较6.8 break语句和continue语句第六章 循环控制返回第110页/共291页111第六章 循环控制第六章 循环控制C 循环控制if - goto循环(6.2) while循环(6.3)do - while循环 (6.4)f
41、or循环(6.5)6.1 概述第111页/共291页112第六章 循环控制6.2 goto语句及其构成的循环一、goto语句2、语句功能使控制转到语句标号所标识的语句 goto L1;L2: 语句 . L1: 语句 goto L2;例:1、语句格式 goto 语句标号写在语句前的标识符 (后加:)第112页/共291页113第六章 循环控制二、用法1、与if语句联合使用构成循环2、用来实现从多重循环体内转出L1: if(e) 循环体 goto L1; (当型循环)L2: 循环体 if(e) goto L2; (直到型循环)第113页/共291页114第六章 循环控制例6.1 求 s=1+2+3
42、+.+n 的值。 main( ) int i=1, sum=0, n; scanf(“%d”,&n);L1:sum=sum+i; i+; if(i=n) goto L1; printf(“s=%d”,sum); main( ) int i=1, sum=0, n; scanf(“%d”,&n); L1:if(i=n) sum=sum+i; i+; goto L1; printf(“s=%d”,sum); 第114页/共291页115第六章 循环控制6.3 while语句“当型”循环一、语句格式while(e)循环体二、执行过程(先判断后执行)当表达式 e 值为非0时,执行循环体
43、,然后重复执行while语句;当e 的值为0 时,结束循环,执行后继语句。非00循环体e单语句或复合语句第115页/共291页116第六章 循环控制例6.2 求 s=1+2+3+.+n 的值(用while循环n=100)。main( ) int i=1, s=0, n; scanf(“%d”,&n); while(i=n) s=s+i; i+; printf(“s=%d”, s);main( ) int i=1, s=0, n; scanf(“%d”,&n); while(i=n) s+=i+; printf(“s=%d”, s);第116页/共291页117第六章 循环控制6
44、.4 do-while语句“直到型”循环一、语句格式do 循环体while(e);二、执行过程(先执行后判断)先执行do后的循环体,然后判断表达式e 的值,若为非0,重复执行循环体,直到while中的表达式e 为0,结束循环。循环体e0非0单语句或复合语句第117页/共291页118第六章 循环控制例6.3 求 s=1+2+.+n 的值(用do-while循环n=100)。main( ) int i=1, s=0, n; scanf(“%d”,&n); do s=s+i; i+; while(i=n); printf(“s=%d”, s);main( ) int i=1, s=0, n
45、; scanf(“%d”,&n); do s+=i+; while(i=n); printf(“s=%d”, s);第118页/共291页119第六章 循环控制6.5 for语句及其构成的循环一、语句格式for(表达式1;表达式2;表达式3) 循环体计算表达式1计算表达式3表达式2循环体下一条语句0非0二、执行过程1、计算表达式1。2、判断表达式2。 若非0,执行循环体,转3; 否则,结束循环,转4。3、计算表达式3。转2。4、执行for语句的下一条语句。第119页/共291页120第六章 循环控制三、说明1、for语句最简单、最常用的应用形式for(循环变量赋初值;循环条件;循环变量
46、增值) 循环体例6.4 求 s=1+2+.+n 的值(用for循环n=100)。 main( ) int i, s=0, n; scanf(“%d”,&n); for(i=1; i=n; i+) s=s+i; printf(“s=%d”, s); 第120页/共291页121第六章 循环控制2、for语句中的三个表达式均可省略 注意:(1) 分号不能省略。 (2) 应保证循环正确执行。例 main( ) int i, s, n; scanf(“%d”,&n); for(i=1,s=0; i=n;) s+=i+; printf(“s=%d”, s);main( ) int i=1
47、, s=0, n; scanf(“%d”,&n); for(; in)break; printf(“s=%d”, s);第121页/共291页122第六章 循环控制例6.5 给一年级的小学生出10道100以内的加法练习题。分析:1、出题 2、回答 3、判断对错#include “stdlib.h” main( ) int i , 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)pr
48、intf(“nright!n”); else printf(“nwrong!n”);思考:1、做对几题 2、总成绩#include “stdlib.h” main( ) int i ,x ,y ,z ; int count=0 ,score=0 ; randomize(); for(i=1; i=3) (注:一行打印3个数字) main( ) long i=1, j=1, k ; int n ; printf(“%8ld%8ld”, i , j) ; for(n=3; n=30; n+) k=i+j ; printf(“%8ld”, k) ; if(n%3= =0) printf(“n”) ;
49、 i=j ; j=k ; 第123页/共291页124第六章 循环控制例6.7 求分数序列:1/2,2/3,3/5,5/8,8/13, 13/21, .的前20项之和。main() int k ; float i=1 , j=2 , s=0; for(k=1 ; k=20 ; k+) s=s+i/j ; j=i+j ; i=j-i ; printf(“sum=%10.6fn ”, s); 第124页/共291页125第六章 循环控制1、循环的嵌套概念对各种循环结构是一样的, 即某一循环的循环体内包含另一循环结构。2、各种循环结构可以互相嵌套。例for嵌套for( ; ; ) . for( ;
50、; ) . .for-while嵌套for( ; ; ) . while( ) . .6.6 循环的嵌套多重循环第125页/共291页126第六章 循环控制1、各种循环结构可以互相替代,但不提倡使用 用goto构成的循环。2、在while和do-while语句构成的循环体中必须 有使循环趋于结束的语句,如i+。6.7 几种循环的比较3、在while和do-while语句构成的循环中,循环 变量的初始化必须在循环之前完成。 4、在while、do-while和for语句构成的循环中, 可以用break和continue跳出或结束本次循环 第126页/共291页127第六章 循环控制6.8 bre
51、ak语句和continue语句一、break语句1、用来跳出switch结构。2、用来跳出当前循环。循 环break;二、continue语句用来结束本次循环,即跳过当前循环中后继尚未执行的语句,进行下 一次循环循 环continue;第127页/共291页128第六章 循环控制例6.8 利用公式 2/6=1-2 +2-2 +3-2 +4-2 +. 求的 近似值,直到最后一项的值小于10-8为止。 #include “math.h” main() long i=1; double pi=0; while(i*i=1e8) pi=pi+1.0/(i*i); i+; pi=sqrt(6.0*pi)
52、; printf(“ pi=%10.6fn ”, pi);6.9程序举例第128页/共291页129第六章 循环控制例6.8 利用公式 2/6=1-2 +2-2 +3-2 +4-2 +. 求的 近似值,直到最后一项的值小于10-8为止。 #include “math.h” main() long i ; double pi=0; for( i=1 ; i=1e8) break; pi=pi+1.0/(i*i); pi=sqrt(6.0*pi); printf(“ pi=%10.6fn ”, pi) ; 第129页/共291页130第六章 循环控制例6. 9 打印100以内个位数为6,且能被3整
53、除的数。 main() int i , j ; for(i=0;i=9;i+) j=i*10+6; if(j%3!=0) continue; printf(%d , j ); 可以省略第130页/共291页131第六章 循环控制例6.10 写出下列程序的运行结果。 main() int i , j , a=0 ; for ( i=0 ; i2 ; i+ ) for ( j=0 ;j4 ;j+ ) if ( j%2 ) break ; a+ ; a+; printf (%dn,a) ; 第131页/共291页132第六章 循环控制例6.11 打印99表。1*1=11*2=2 2*2=41*3=3
54、 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10 3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81第132页/共291页133第六章 循环控制例6.11
55、打印99表。main() int i , j ; for ( i=1 ; i=9 ; i+ ) for ( j=1 ; j=i ;j+ ) printf ( “%d*%d=%-3d”,j , i, i*j ) ; printf (n) ; 第133页/共291页134第六章 循环控制例6.12 百鸡百钱问题。公鸡一只5元,母鸡一只3元,小鸡三只1元,用100元买一百只鸡,问公鸡、母鸡、小鸡各多少只?设:公鸡x只、母鸡y只、小鸡z只列等式:x+y+z=10015*x+9*y+z=300第134页/共291页135第六章 循环控制例6.12 百鸡百钱问题。main() int x , y , z
56、; for ( x=1 ; x=20 ; x+ ) for ( y=1 ; y=33 ; y+ ) for ( z=1 ; z=100 ; z+ ) if(x+y+z=100&15*x+9*y+z=300) printf ( “%d,%d,%dn”,x , y, z) ;第135页/共291页136第六章 循环控制例6.13 求e x的台劳级数展开式的前n项之和。e x=1+x+ + + (-x)x22!x33! xn-1 (n-1)!main() float x, s=1,t=1 , f=1 ; int i, n; scanf(“%f,%d”,&x,&n); for
57、( i=1 ; i1 ; i- ) if (m%i=0) break ; if(i=1)printf( “%d is a prime number.n”,m); else printf( “%d is not a prime number.n”,m);第137页/共291页138第六章 循环控制例6.15 用牛顿迭代法求代数方程e x-x=0在x=-2附近的一个实根。直到满足|xn+1-xn|=10-6为止。牛顿迭代公式:令: f (x)= e -x -x xn+1=xn- f (xn)是f (x)曲线在xn点处的切线斜率 f (xn) f (xn)f(x)x1f(x1)x2f(x2)x2=x
58、1- f (x1) f (x1)f (x1)= f (x1) x1-x2第138页/共291页139第六章 循环控制例6.15 用牛顿迭代法求代数方程e x-x=0的实根。#include“math.h”main() float f1 , f0 , x1=-2 , x0 ; do x0=x1; f0=exp(-x0)-x0; f1=-exp(-x0)-1; x1=x0-f0/f1; while(fabs(x1-x0)1e-6); printf ( “%fn”,x1) ;第139页/共291页140第六章作业上机调试作业第129页 6.2,6.8, 6.14第129页 6.2, 6.4 , 6.
59、6, 6.8第六章 循环控制第140页/共291页141&本章内容7.1 一维数组7.2 二维数组7.3 字符数组第七章 数组返回第141页/共291页142第七章 数组第七章 数组7.1 一维数组一、定义类型关键字 数组名常数表达式;标识符数组体积二、数组元素数组名下标下界为 0,上界为常数表达式-1第142页/共291页143第七章 数组例: int a10; float b5;定义一维整型数组 a和实型数组ba数组中的元素是:a0, a1, a2, a3, a4, a5, a6, a7, a8, a9;b数组中的元素是: b0, b1, b2, b3, b4 第143页/共291
60、页144第七章 数组三、数组的引用以数组元素作为引用对象例7.1 求 s=a1+a2+a10 main( ) int i; float s=0, a10; for(i=0; i10; i+) scanf(“%f ”, &ai); s=s+ai; printf(“s=%fn”, s); 第144页/共291页145第七章 数组四、一维数组的初始化1、在定义数组时,给数组元素赋初值例: int a6=1,2,3,4,5,6;2、可只给一部分数组元素赋初值。 例: int a6=1,2,3;3、未赋初值的数组,各元素值不确定。4、数组的大小由初始化的数据个数决定 。 例: int a =1,2,3;5、数组中全部元素初始化为0 。 例: int a6=0;第145页/共291页146第七章 数组例7.2 求Fibonacci数列的前30项。(一行三个) main( ) long f30=1,1; int i; for(i=2; i30; i+) fi=fi-1+fi-2; for(i=0; i30; i+) if(i%3=0) printf(“n”) ; printf(“%8ld”, fi) ; 第146页/共291页147第七
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨文化传播与国际贸易
- 3D打印肘关节外固定支具在经肱动脉入路行冠脉介入诊疗患者术后的应用研究
- 农村广告招租合同范例
- 国有资本共同所有权对企业创新的影响研究
- 农村车库买卖合同范例
- 再生混凝土细粉对水泥基材料结构与性能的影响研究
- pcb抄板合同范例
- 传媒公司活动合同范例
- 加盟合同范本饮品
- 兑店定金合同范例
- 二零二五年度医疗健康产业贷款担保合同
- 2025年安徽医学高等专科学校单招职业适应性测试题库及答案一套
- 2025年双方协商一致自愿离婚协议书范本
- 眼科与视功能检查屈光参差课件
- GB/T 6433-2025饲料中粗脂肪的测定
- 2025年湖南司法警官职业学院单招职业倾向性测试题库学生专用
- 2025年赣西科技职业学院单招职业技能测试题库带答案
- 急性ST段抬高型心肌梗死溶栓治疗专家共识2024解读
- 电影《哪吒之魔童降世》主题班会
- 四川德阳历年中考语文文言文阅读试题12篇(含答案与翻译)(截至2024年)
- 10以内加减法口算趣味学习500题(可打印)
评论
0/150
提交评论