




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、e富程序母计Copyer:V igiking第一牽针幫机语害彫C语書楼毬1.1计算机语言概念计算机语言定义计算机能够识别和接受的语言。要使计算机按自己的意图工作,必 须使用计算机所能接受、理解和执 行的指令指挥计算机工作O计算机语言的种类書机直=口机器语言厂低级语言Yj|Z编语言(面向计算机) 用二进制代码构成指令。如:100000 ( + )110000 (-)用机器语言编程的缺点:繁琐.不直观不易调试。如计算y=2x2+3x-1需要七八条指令。 移植性差。依赖于计算机。汇编语言用符号构成指令 如:MOV、ADD用汇编语言编程:相对直观,但仍繁琐,仍是面向计算机 的语言。汇编语言是计算机间接
2、接受的语言高级语言与低级语言相比,有根本性的区别: 是面向问题的语言。高级语言的一条指令(语句): y=2*x*x+3*x-l;对应于:y=2x2+3x-l y=sin(x); 对应于:y=sinx用高级语言编程:直观、易懂、移植性好(不依赖于具体计 算机)上机运行高级语言程序需经过编译:编译程序/要上机完成一个计算问题,主要的任务就是 用高级语言编写出相应的源程序。即至少要 学会一种计算机语言。1.2 C语言的特点集高级语言和低级语言的优点于一身:能实现低级语言的大部分功能(如直接访问内稈扬理龜址、进行位操祜等)O图形功能强。运算符和数据结构丰富。语法限制不太严格,程序设计自由度大。生成目标
3、代码质量高,程序执行效率高。13简单的C程序介绍例1:mainO. 明 程序框架_函数体printf(66abcdefw);程序的功能是输出字符串:abcdef例2 :求两数之和。main() int a,b,c;a=100; b=50;c=a+b;printf(66n c=%d,c); 程序运行结果:c=150例3 :求两数中的最大值。函数类型函数名形参main()int max (int y) int a?b?c; int z;scanf(t4%d,%d,5,&a,&b); if(xy) z=x; c=max(a,b);else z=y;print ffnmax is: %d5
4、c); retum(z);yz(两个函数组成)3总结上例可知:(1) C程序由函数构成。(2 )函数由两部分组成:函数说明部分:函数名、函数类型、形参 名、形参类型。函数体:实现函数的具体操作;由语句构 成。(3 )程序总是从main函数开始执行。(4)书写格式自由。(5 )语句必须有分号。第一早算法2.1算法的概念要利用计算机处理问题,光学习语言的 语法规则还不够,最重要的是要学会针 对各类型的问题,拟定出有效的解题方 法和步骤。解题方法和步骤就是算法。为了解决一个问题而采取的有限步骤。计算机算法;如何使计算机一步_步地工作的具体过程。利用计算机处理问题的步骤:1)设计好算法M法设计;2 )
5、用计算机语言实现算法一程序设计。 算法必须是有效的。算法设计还要充分考虑算法的好坏。衡量算法好坏的主要标准: 程序简练。 执行速度快。 占空间少。10例:考虑S二*的算法。算法:直接表达。直接用语句s=1+2+3+4+5+6+7+8+9+10当项数较多时该算法不适用算法:迭代法(累加求和法)s二1+2+3+4+5+6+7+8+9+10算法步骤: 使s二0 使i二1 s + jf S i+1 i105累加器记数器该算法通用,是好算法 若i 40转,否则转 输出s2.2算法的表示算法需要有统一的表示方法 常用的表示方法有:自然语言流程图结构化流程图NS流程图.1、自然语言对于计算 s=l+2+3+
6、4+5+6+7+8+9+10用自然语言表示为: 使s 二 0 使i二1 s+is(4) i+lT(s为累加器)(i为计数器)若10转,否则转(累加求和公式)(计数器加输出s的值特点:通俗易懂、文字冗长、含义不大严格。2、流程图用流程图符号表示算法。常用的流程图符号对于计算直观形象易于理解次序清林s二1+2+3+4+5+6+7+8+9+103、结构化流程图传统的流程图有一个弊端:对流程线没 有严格的限制,对于较复杂的算法可能会 变成乱麻一般(BS型算法)。为克服这一弊端,提出了由三个基本结构组 成算法流程图的思想:结构化流程图三个基本结构: 顺序结构按固定顺序(从上到下或从左到右)执行的结构。
7、选择结构根据条件P选择执行哪一个分支。例:计算y 二 1/X当XMO时y二10000 当x=0时的算法流程图图: 循环结构 重复执行某些操作的结构。分为两种:当型循环和直到型循环。AN当循环可以看出,每个基本结构都只有 一个入口和一个出口,因此,用三 个基本结构构成的流程图不会象乱 麻一般,用三个基本结构构成的流 程图就成为结构化流程图,用结构 化流程图描述的算法称为结构化算 法,相应的程序设计就称为结构化 程序设计。观察前例:循齧构顺序结构4 NS流程图NS流程图的三个基本结构:AB顺序结构当P1三循环结构选择结构例:计算y 二 1/X当 XHO 时y 二 10000 当 X 二 0时 的N
8、-S流程图:例:计算 s=l+2 + 3+4+5 + 6+7+8+9 + 10 的N-S流程图:0f S1 f 1s+i f si+1 - i直到i10输出S0f s1 f 1W10s+i f si+1 f i输岀S当型直到型第三章数据类型、运算符 亏表达式3.1 C的数据类型基本类型(整型.实型.字符型.枚举型) 构造类型(略) 指针类型(略)空类型各类型包含常量与变量3.2常量与变量常量与符号常量常量在程序运行过程中其值保持不变的量。 符号常量用来代表一个常量的标识符。define PI 3. 1415926例:define PI 3.1415926 main()float r=2, c;
9、c=2*PI*r;printf (“f”,c);变量其值可以改变的量。变量的三要素:变量名每个变量有一个名字,作为识别该变量的标 识符。变量的值每个变量有一个值,变量的值是随时可 以改变的。变量的存储单元每个变量占据一个内存单元,用于存放变量 的值。变量名变量值 存储单元变量的命名规则: 由字母、数字和下划线组成 以字母或下划线开头a. xl. y_2、_bl. _lc 合法 lx、a+2、Q 不合法变量必须先定义后使用。程序中何时使用常量?何时使用变量?3.3整型数据整型常量即整常数,c的整常数有三种形式: 十进制整数与数学中的整数一致,in : 100 , 123 , 15等。 八进制整数
10、以0开头的整数,如:010,07,020等。 十六进制整数以Ox开头的整数,如:0xl0,0xff,0x2a等。用于存放整数的变量。 分4种类型:基本型:int16位,可表示的数值范围:-32768-32767短整型:short int b16位,可表示的数值范围:-32768-32767长整型:long int c32 位,数值范围:-2147483648 2147483647无符号型:加上unsigned只存放正数。如:unsigned int x变量x为无符号整数f 16位全表示数码f数值范围:065535在程序设计中 如果要使用整型变量, 必须首先选择以上类型符来定义变量 然 后才能使
11、用;例:main 0定义 int a, b, c;a=100;b=50;使用c=a+b;printf (“d”,c);一般根据什么原则选择变量的类型?3.4实型数据实型常量可使用两种形式表示: 小数形式:如 1.23, 3.1415926 15.48 指数形式:如le-20 1.23e5实型变量 用于存放实数的变量 分单精度和双精度两种: float a,b定义a和b为单精度型变量32位,7位有效数字,10-38-1038 double x,y定义x和y为双精度型变量64位,15位有效数字,10-308-10308例:main ()float r, c; doub 1 e r, c;r=5;c
12、=2*31415926*r; printf (“%f,, c);3.5字符型数据字符常量用单引号括起来的一个字符。a,/x,m,等除此外,以,开头的字符如njt,等称为转义字符,祥见书表3.3I字符型变量用于存放字符的变量。char cl,c2定义cl和c2为字符型变量 cl二,a,; c2二,b,;字符赋值字符型变量存放_个字符,占据一个字节97字符型数据的存储形式存放ASCII码不是如字符a,在内存中存放97 , b,存放98。与整数的存储形式一致,它们之间可以通用 一个字符数据既可以作字符用,也可以作整 数用(取其ASCII代码)。如:32+W相当于32+97若 int x; char
13、c;贝|J x二,a,; c二97; x二97; c二,a,;都允许字符串常量 用双引号括起来的字符序列。如:abcde,china,”a”也属字符串。注意” a”与a啲区别。 对于:char c;cia”;用法错误字符串中每个字符各占一个字节,并且在 字符串结尾加上一个结束标记0,如:china,在内存中占6个字节。c h i n a 0C语言中专门的字符串变量,可用字符数纟 存放(以后介绍)O3.6变量赋初值在定义变量的同时给相应的变量赋初值。 如:int a=3; float b=5.2;char c二,a,;int x=y=z=6;效果:在给变量分配内存单元的同时在相应的单元中存放初值
14、。3.7各数值型数据间的混合运算整型、实型、字符型数据间可以进行混合运算, 如:10-6a9*1.5运算时,参加运算的两个数据如果类型不同, 则首先将其类型转换成一致再运算,转换规则 是:将优先级低的类型转换到优先级高的类型floatchar数据类型的优先级:高double long unsignde 低int 3.8算术运算符与算术表达式基本的算术运算符+ * / %算术表达式用算术运算符将运算对象连接起来的式子 用于表达数学公式的式子如:2*x+y-l/a表达式经过运算最终得到一个值: 算术表达式的值运算符的优先级与结合性在对表达式求值时,如果存在多个运算符,则运 算的先后次序按运算符的优
15、先级别从高到底进行。运算符的优先级关系为:高:*/%低:+ -如:a-2*x 先算*2*(a + 2)有括号的情况?如果在一个运算对象两边的运算符的优先级相 同,则按规定的结合方向处理。如:a-b+cb与结合是从左到右,称左结合性。b与+结合是从右到左,称右结合性。每个运算符都有相应的优先级和结合性。基本算术运算符都是左结合性。计算表达式例:1+3/2-12+,A,-1/2. 02x2+3x-l2*x*x+3*x-l构造表达式例a+ba+ba-bn-bx+y (*不能省)x-y(a+b)/(a-b)(a+b)/(a-b)/(x+y)/(x-y)(a+b)/(a-b)/(x+y)*(x-y)(i
16、nxx+y)(fog(7%3)应用举例:int a=200,b=300,c; 可以是任何表 达式如:a = (b=5)赋值表达式中包含赋值表达式赋值运算符的优先级低于所有算术运算符, 且是右结合性。a = (b=5)与 a=b=5 等效。例:计算以下表达式的值:a=b=c=5a=5+(c=6)a=(b=4) + (c=6)a二(b二45) + (c二6.5) (a、b、c为整型变量) a+=a-=a*a (设a的原值为3)赋值表达式是C语言中的_个重要成分, 在赋值表达式后加一分号就成为常用的赋值 语句。in y=2*x+l;赋值表达式作为表达式的一种,可以出现 在任何表达式中,如:x+2-(
17、b/3-(a=k-5) + 9b93.10逗号表达式逗号也是一种运算符,用它对两个表达式实 现连接运算。3+ 5,6+8 称逗号表达式。逗号表达式的一般形式:表达式1 表达式2取表达式2的值作为整个逗号表达式的值。如:a = 3*5,a*4逗号表达式的值为:60一个逗号表达式又可以与另一个表达式组成一 个新的逗号表达式,如:(a=3*5fa*4)fa+5因此,逗号表达式的一般形式可以扩展为: 表达式1,表达式2 ,表达式3表达式n取表达式n的值作为整个逗号表达式的值。逗号运算符的优先级最低,且是左结合性。逗号运算符只起到连接作用,没有实际操作。第四章最简单的C程序设计c程序最基本的成分是语句目
18、前我们已掌握的语句:变量说明语句:int a,b,c; 表达式语句:x+y; 特别地:a二5;赋值语句可以编写简单程序如: mainOint x,y;x=5; y=2*x*x+3*x-l;该程序语法上主整但还缺少输出。数据的输出用输出函数实现,其中的两种输出函数: l.putchar函数(字符输出函数) 用于输出一个字符。如:putchar (X);putchar (100);char c=,b,; putchar (c);例:输出单词Boy的主整程序:#inelude stdio.h”注意该语旬的作用 main() char a,b, c;a=,B,; b=,o,; c=y;putchar
19、(a);putchar (b);putchar (c);2printf函数(格式输出函数)任意类型、任意格式.任意个数。 例如:int a=100,b=56;printf (“耳=%d, b=%/,a,普通字符格式说明格式控制输出表列输出结果:a=100, b=56%”后的字符称格式字符,不同格式字符对应不同的数据类型。d格式符:按整数格式输出几种用法:%d不指定竟度,按实际竟度输出 %md按指定竟度输出,m为竟度 %ld用于输出长整型数例:int a=125, b=453;long c=65535;printf (“a=%d, b=%5d, c=%ld,a, b, c);输出结果:a=125
20、, b= 453, c=65535%ld也可以按指定竟度输出:printf (“c=%81d,c);输出结果:c =65535注意:格式字符的类型要与对应的输出对象 的类型一致。c:格式符:用于输出字符char c=,A,;printf(uc=%c, %c,c,,B,);输出结果:c二A, B输出对象既可以是字符变量.字符常量,还 可以是整型表达式。int a=100;char b=,A,;printf (“n%d, %c,, a, a); printf (“n%c, %d”, b, b);输出结果:100, dA, 65S格式符:用于输出字符串%S 不指定竟度%-ms指定宽度.左靠齐%ms指
21、定宽度.右靠齐%m.ns指定竟度m ,只取左端n个字符, 右靠齐%-m.ns指定竟度m ,只取左端n个字符, 左靠齐printf (“1 :%s”,abed”);prirrtf (“2:%8s”,abed”);printf(“3:%s”,”abed”);printf (“4 :%8 3s”,”abed”); printf (“5: %-& 3s,abcd,);1:abcd2:abcd3:abed4:abc5:abcf格式符:按小数形式输出实数%f由系统指定竟度(6位小数)%m.nf指定竟度m ,小数位数n ,右靠齐 %-m.nf指定竟度m ,小数位数n ,左靠齐注意:竞度包括符号和小数点。fl
22、oat a=3. 141592654, b=14. 326795,c=-125. 2468;printf (na=%f, b=%8. 3f, c=%-10. 2f”, a, b, c);输出结果:a=3. 141592, b= 14. 326, c=-125. 24完整前面的程序:mainO int xfy;x=5; y=2*x*x+3*x-l; printf(66n y=%d95,y);程序设计例:编写程序计算如图中的电流I.UR1R2R3假设 U=220, Rl=30, R2=60, R3=45算法设计:WU/R1+U/R2+U/R3程序设计:main()int U=220, Rl=30,
23、 R2=60, R3=45; float I;I=U/R1+U/R2+U/R3;printf (n I=%f,I);正确的程序:main()int U=220, Rl=30, R2=60, R3=45; float I;1=(float)U/R1+(float)U/R2+(float)U/R3; printf(“n I=%fw, I);考虑通用:ain ()int U, R1,R2, R3; float I; 输入 U, Rl, R2, R3 1=(float)U/R1+(float)U/R2+(float)U/R3; printf(66n I=%fw, I);数据的输入getchar函数(字
24、符输入)ftinclude stdio. h, main() char c;c=getchar ();等待键盘输入putchar(c);scanf函数(格式输入)与printf函数相反。 用于输入若干任意类型的数据。scanfC6%d%d%d,9f&a,&b,&c); 格式控制 地址列表scanfC6%d%d%d,9,&a,&b, &c);执行此函数时,等待从键盘输入三个整 数给a若从键盘输入358则系统即从键盘缓冲区取出这三个数分别 赋给a注意与printf的区别,注意格式的匹配scanf(66%3d%2d%4dwf&af&bf &c);若从键盘输入123456789a = 123,b=45
25、,c=6789 若想使 a 二:L2.b 二 5.c 二 100 则键盘输入应为:12 5 100 方便的输入格式一般不指定竟度, 如:scanf(“d%d%d”,&a, &b, &c);在键盘输入时,用分隔符把每个数据隔开, 标准的分隔符是空格。如:123 150 23若想用逗号作分隔符,则:scanf (“d, %d, %d,&a, &b, &c);不要随便使用普通字符,如使用: scanf(“a=%d , b=%d c=%d9,&a,&b&c) 对应数据输入:a=123,b=150,c=23前面的欧姆定律:main ()int U, R1,R2, R3;float I; scanf (“
26、d%d%d%d”, &U, &R1, &R2, &R3);1= (float) U/R1+ (float) U/R2+ (float) U/R3; printf(“n I=%fw, I);求三角形面积#include math.hmain() float a,b,c,area,s; scanf ( 4%f,%f,%r, &%&b,&c);s=1.0/2*(a+b+c);area=sqrt (s*(s-a)*(s-b)*(s-c); printf(un area=%farea);使用数学函数使用三角函数#include math.hmain() float x,y;以弧度为单位scanf (%,
27、, &x);y=sin(x*3.1415926/180); printf(66n y=%P,y);第五章选择结构程序设计对于如下的函数计算,算法上属于一个选 择结构。1/x当XHO时y=10000 当x=0时用于实现选择结构的主要是if语句oif语句的最常见形式为:if(关系表达式)语句1; else语句2 ;如:if(x!=O) y=l/x; else y= 10000;x!=0就是一个关系表达式!= 就是一个关系运算符51关系运算符和关系表达式1. 关系运算符用于进行比较运算的运算符。共有六种:v = =!=优先级与结合性:前4种大于后两种。 低于算术运算符而高于赋值运算符。 左结合性。2
28、、关系表达式般形式.表区式关系运算符表达式如:ab a + bb+c经过关系运算后最终有一个值八关系表达式 的值。关系表达式的值只有0(假)或1 (真)宦奴m矗状嘿 MlffKH则 & V q) A (q V e)3s?Jms馥呢 Mlff(s UA) A (CNUX) 宦?Jm埠wMlffGTPA9U3u+qcq + e qAe-MiTP 寸Hq 7e 強二例:假设x=3, y=5, z=l,计算以下关系 表达式的值:x+zyxy=yz=xzyxz (x=y-2)z+l=x+y a=x+y=x+zx+l52逻辑运算符和逻辑表达式有时,只用一个简单的关系表达式无法主整地 表达一个条件,如:w_
29、 l/x+1/a 当xHO.aHO时 y-10000其它其中的条件需要用逻辑表达式来表达:x!=0 &a!=0&就是一种逻辑运算符。1.逻辑运算符&逻辑与两个操作数都为真时&运算结果为真。II逻辑或两个操作数之一为真时即为真。!逻辑非(单目运算)操作数为真(假)时为假(真)。如:若 a=2, b=3, c=0 则: avb&bvc 0 ab|bc 1 !(ab) 0优先级(由高到低): !逻辑非算术运算符 关系运算符&逻辑与|逻辑或 赋值运算符结合性:左结合性2.逻辑表达式实际上,前面所举例子即为逻辑表达式:avb&bvc ab|bc !(abca和b之一为0 ,但不同时为0a=O&b!=O
30、| a!=0&b=Oa*b=0a*b=O&a+b! =0对于 a =0 & b!=0 | a!=0 & b=0a =0可以用!a代替a!二0可以直接用a!a & b | a & !b但必须是运算结果作为逻辑量的情况下。y=(a!=O)与y二a不等效53 if语句1、if语句的三种形式 if (表达式)语句; 有一分支为空。scanf (“ d,&score); if(score=60) printf(“pass,);if (表达式)语句1; else语句2 ;if(x!=O) y=l/x; else y=10000;if (表达式1)语句1 ;else if(表送盘2)语句2 ; else i
31、f法达式3j语句3 ;I!else语句n ; if(score=100) printf(“A,);else if (score =90) printf(“B,); else if (score =80) printf(66Cw); else if(score=70) printf(“D,); else if (score =60) printf(uEw); else printf(“F,);对于: c 1/x 当XHO时y=y=i/x; if(x=0)y=1000 0、10000 当x=0时一般用: if(x!=O) y = 1/x; else y= 10000; 也可用: y=10000;
32、if(x!=O) y=l/x;例:(习题5.5 ):f X (X1)y= 2x-l (lWxvlO) 3x-ll (xlO)mainOfloat x,y; scanf(“ f”,&x); if(xl) y=x;else if(x10) y=2*x-l; else y=3*x-ll; printfCAn y=%f,:y);说明:语句中的表达式可以是任意表达式: if(x) y = 1/x; else y= 10000; 一个if结构不可分割:if(x) y=l/x; z=10; else y=10000; 一个分支中包含多个语句时,要用 :if (a max) max=b; if(cmax) m
33、ax=c;printf(“n max=%dmax);例:从键盘输入三个整数到变量a.b.c,要求按 从大到小的顺序输出。两种典型算法:枚举法(将各种可能的排列枚举出来)。换位法(将玄肛中的数据换位)。c换位法 mainO int afbfcft; scanf(u%df%df%d&af &bf&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; printfCAn %df%df%d9,fa,b,c);囲目S七JJ?as_attlrcbjturd asa ryjtupld (09H28sJt asa rabtup
34、ld as_a r b) max=a;else max=b;可用:max=ab ? a : b;赋值运算符右边为一条件表达式。条件表达式的一般形式:表达式1 ?表达式2 :表达式3优先级:低于关系运算符,高于赋值运算符。 结合性:右结合性。例:求abc中的最大值:max= ab ? (ac?a:c): (bc?b:c);54 switch语句(多分支)适用于根据一个表达式的值就可确定走 哪个分支的情况。switch (表达式)常量表达式1 :语句1常量表达式2 :语句2常量表达式n :语句ndefault:语句n + 1例:成绩分档: switch (sco re/10) case 10: p
35、rintf(“A,); case 9: printf(“B,); case 8: printfi“C,j; case 7: printf(“E,); case 6: printfj“F,j; default: printf(“G,);注:应使用break.switc h(score/10)case 10: printf(“A”); break; case 9: printf(“B”); break; case 8: printf(“C”); break; case 7: printf(“E”); break; case 6: printf(“F”); break; default: print
36、f(“G”);55程序举例(习题5.10)有4个圆塔,圆心分别为:(2,2),(-2,2) , (-2,-2) , (2,-2),圆 半径为1。这4个塔的高度为10m.塔以外 无建筑物。今输入任一点的坐标,求该点 的建筑高度(塔外的高度为0 )。算法设计:Pio在某一圆内lo在圆外条件在某一圆内若设变量cl、c2. c人c4分别代表是否在相应的圆内则以上条件为:cl|c2|c3|c4cl=(x-2)2+(y-2)2lc2=(x+2)2+(y-22W1c3=(x+2)2+(y+22Wlc4=(x-2尸+(y+22W1mainOint h,cl,c2,c3fc4;float x,y;sea nf
37、(“ f %f 3 &x, &y); cl=(x-2)*(x-2) + (y-2)*(y-2) = 1; c2=(x+2)*(x+2) + (y-2)*(y-2) = 1; c3=(x+2)*(x+2) + (y+2)*(y+2)=l; c4= (x-2)*(x-2)+(y+2)*(y+ 2) = 1; if(cl|c2|c3|c4) h=10;else h=0;printf(wn h=%d5h);第六章循环控制61概述所谓循环控制,就是如何实现循环结构 的控制问题。有4种方法:用goto语句和if构成循环。 用while语句。 用dowhile语句。 用for语句。6 2用goto语句和if
38、语句构成循环例:对于计算 s=l+2+3+4+5+6+7+8+9+10goto语句可以构造循环, 但不主张用,因为它容易破 坏结构化程序设计。s=0; i=l; lable:s+=i; I i+;语句标号if(i=10) goto lable; printf(“d迪j 无条件转向语句63 while语句while语句是专门用于实现循环控制的语 句之一。其一般形式为:含义:当表达式的值为非0时,执行循环体, 否则执行后续语句。执行过程:while俵达式)语句s=Oi=ls=s+ii=i+l例:用while语句实现前面算法厶main() int i=l, s=0; while(i=10)s=s+i
39、;i卄; printf(“n %d”, s);注意与if语句的区别。循环体中要有使循环条件趋于成立的条件while(i=10)s=s+i;i卄;可简写为:wh订e(i=10) s+二i+;6 4 do-while语句 do-while语句主要用于实现直到型循环。其一般形式为: do 循环体 while俵达式);执行过程:s=0i=ls=s+ii=i+l假例:用do-while语句实现前面算法:main () int i=l, s=0;dos+=i+;while(i=10); printf (“n%d,s);注意与while语句的区别。for(表达式1;表达式2;表达式3) 循环体大体含义:对于
40、()的情况执行循环体内容。求解表达式1假6 5 for语句for语句是一种使用最为灵活 并且是用得最多的循环控制语句,其一般形式为:例:用for语句实现前面的算法:s=0;for(i=l;i=10;i+) s+=i;标准形式表达式|表达式2表达式3可以理解:循环变量i从初值1开始到终值10 f步长为1,重复执 行循环体。for语句的常见变化:s=0; i=l;for(;i=10;i+)s+=i;省略表达式 is=0;for(i=l;i = 10;)s+=iWBW3s 0 ifor(;i 10) break:省略表达式2表达式2是 任意表达式s=10;i=10; for(;一一i;) s+=i;
41、s=0;for (i=l, j=10; ij; i+, j) s+=i+j;1 2 3 4 5 6 79 10在程序设计中不要过分追求它的多变性例:求n! n! = l*2*3.(n-l)*n 参照累加求和mainOint i,n=5 , s=l; for(i=l;i=n;i+)s*=i; printf(66n s=%d9s);注意s的初值。注意当n较大时的情况。求和与连乘都是最常用的算法,要熟练掌握。例:求自然数100中能被3整除的数之和。 mainOint i,s=O;fbr(i=3;imax) max=a;printf(“n max=%d,9,max);循环体中没有引用循环变量。i的作用
42、? 求任意个数中的最大值?66循环的嵌套循环体内又包含另一个主整的循环结构(多重 循环)。以上多重循环结构可以简写为:for(i=l;i=10;i+)for(j=l;j=20;j+)例:找出行号乘以列号等于100的座位。 mainOint i,j; for(i=l;i=30;i+) for(j=l;j=20;j+)if(i*j= = 100)p ri n tf (“n % d, % d, j);注意循环的关系例:百钱买百鸡问题。给定100块钱,要求正好买100只鸡,已知公 鸡5元/只,母鸡3元/只,小鸡1元/3只,问公 鸡、母鸡和小鸡应各买多少只? 若考虑用方程组:x+y+z=100x+3y+
43、z/3=100是一多解问题。用测试法求解的程序:mainOint x,y,z;for(x=l;x = 100;x+ +) f or(y=l;y = 100;y + +) for(z=l;z v = 100;z+ +)if(x+y+z= = 100&5*x+3*y+z/3.0= = 100) printfC6n%d,%d,%d,fx,y,z);程序可进一步简化为: mainO int x,y,z;for(x= l;x =20;x+ +) for(y=l;y = 33;y+) z=100-x-y;if(5*x+3*y+z/3.0= = 100) printfC6n%d,%d,%d,x,y,z); 用测试法求解问题的典型例子测试法求解的程序设计有两个要点: 通过循环列出所有可能的解。对所有列出的可能的解逬行条件测试。用测试法求解例:判断一个数m是否为素数。 mainOint ifm;scanf(“ dm&m);for(i=2;im;i+) if(m%i=O)break;if(i=m)printfCAn %d is a primem); elseprintf(“n %d is not a primem);例:(习题66)打印出所有的水仙花数,所谓水仙 花数是指一个三位数,其各位数字的立方 和等于该数本身。如:153是一水仙花
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农机优化设计-洞察及研究
- 2026届乐山市峨边彝族自治县四上数学期末学业质量监测试题含解析
- 江西省萍乡市莲花县2026届数学四上期末检测模拟试题含解析
- 2025年四川省阆中市数学四年级第一学期期末学业水平测试模拟试题含解析
- 2025景星矿复垦区域内账外物资处置合同
- 2026届南郑县数学三上期末复习检测模拟试题含解析
- 2025年双方解除契约协议书
- 2026届青海省西宁市大通回族土族自治县数学六上期末学业质量监测模拟试题含解析
- 寄生虫感染HDL氧化修饰-洞察及研究
- 浸没式云光学特性-洞察及研究
- 电梯基坑合同协议
- 山东益丰生化环保股份有限公司50000吨年高效环保助剂技改项目环境影响报告书
- 2025年中国开关电源行业市场全景评估及发展战略规划报告
- 情侣常识测试试题及答案
- 2025年中国人寿:国寿健康产业投资有限公司招聘笔试参考题库附带答案详解
- 新药临床试验药物警戒
- 2024年内蒙古《辅警招聘考试必刷500题》考试题库及答案(必背)
- 技术报告范文模板
- 金融行业反欺诈风控系统设计与实现方案
- 怎做好价格管理
- 急性肾小球肾炎病的护理
评论
0/150
提交评论