1、C C语言程序设计语言程序设计Copyer:Vigiking第一章第一章 计算机语言与计算机语言与C C语言概述语言概述 1.1计算机算机语言概念言概念计算机语言定义计算机语言定义 计算机能够识别和接受的语言。计算机能够识别和接受的语言。要使计算机按自己的意图工作,必要使计算机按自己的意图工作,必须使用计算机所能接受、理解和执须使用计算机所能接受、理解和执行的指令指挥计算机工作。行的指令指挥计算机工作。计算机算机语言的种言的种类 机器机器语言言 低低级语言言汇编语言言 (面向面向计算机算机)BASIC入入门语言言 F77科学科学计算算 高高级语言言 Foxpro数据数据库管管理理 (面向面向问
2、题 )C多用途多用途 计算机语言机器机器语言言最早最早问世,用二世,用二进制代制代码构成指令。构成指令。如:如:100000(+)110000(-)用机器用机器语言言编程的缺点:程的缺点:繁繁琐、不直、不直观、不易、不易调试。如如计算算y=2x2+3x-1需要七八条指令。需要七八条指令。移植性差。移植性差。依依赖于于计算机。算机。汇编语言言 用符号构成指令,如:用符号构成指令,如:MOV、ADD用用汇编语言言编程:程:相相对直直观,但但仍仍繁繁琐,仍仍是是面面向向计算算机的机的语言。言。汇编语言是言是计算机算机间接接受的接接受的语言言高高级语言言与低级语言相比,有根本性的区别:是面向问题的语言
3、。高级语言的一条指令(语句):y=2*x*x+3*x-1;对应于:y=2x2+3x-1y=sin(x);对应于:y=sinx用高用高级语言言编程:程:直观、易懂、移植性好(不依赖于具体计算机)上机运行高级语言程序需经过编译:编译 执行 要上机完成一个计算问题,主要的任务就是用高级语言编写出相应的源程序。即至少要学会一种计算机语言。高级语言源程序机器指令目的程序结果编译程序1.2C语言的特点言的特点 集高级语言和低级语言的优点于一身:能实现低级语言的大部分功能(如直接访问内存物理地址、进行位操作等)。图形功能强。运算符和数据结构丰富。语法限制不太严格,程序设计自由度大。生成目标代码质量高,程序执
4、行效率高。1.3简单的的C程序介程序介绍例1:main()主函数说明程序框架printf(“abcdef”);函数体语句程序的功能是输出字符串:abcdef例2:求两数之和。main()inta,b,c;aa=100;b=50;bc=a+b;cprintf(“nc=%d”,c);程序运行结果:c=150例例3:求两数中的最大:求两数中的最大值。函数函数类型型函数名函数名形参形参main()intmax(intx,inty)inta,b,c;intz;scanf(“%d,%d”,&a,&b);if(xy)z=x;c=max(a,b);elsez=y;printf(“nmaxis:%d”,c);r
5、eturn(z);axbycz(两个函数组成)353555总结上例可知:上例可知:(1)C程序程序由函数构成由函数构成。(2)函数由两部分函数由两部分组成:成:函函数数说明明部部分分:函函数数名名、函函数数类型型、形形参名、形参参名、形参类型。型。函函数数体体:实现函函数数的的具具体体操操作作;由由语句句构成。构成。(3)程序程序总是是从从main函数函数开始开始执行。行。(4)书写格式自由。写格式自由。(5)语句必句必须有分号。有分号。:第二章第二章 算法算法 2 2.1算法的概念算法的概念要利用要利用计算机算机处理理问题,光学,光学习语言言的的语法法规则还不不够,最重要的是要学会,最重要的
6、是要学会针对各各类型的型的问题,拟定出有效的解定出有效的解题方法和步方法和步骤。解解题方法和步方法和步骤就是算法就是算法。算法算法:为了解决一个了解决一个问题而采取的有限步而采取的有限步骤。计算机算法算机算法:如何使如何使计算机一步一步地工作的具体算机一步一步地工作的具体过程。程。利用计算机处理问题的步骤:1)设计好算法算法设计;2)用计算机语言实现算法程序设计。算法必须是“有效”的。算法设计还要充分考虑算法的好坏。衡量算法好坏的主要标准:程序简练。执行速度快。占空间少。例:考虑的算法。算法:直接表达。直接用语句s=1+2+3+4+5+6+7+8+9+10当项数较多时该算法不适用s=i110算
7、法:迭代法(累加求和法)s=1+2+3+4+5+6+7+8+9+10算法步骤:si使s=0+使i=1累加器记数器 s+is i+1i若i10转,否则转输出s01123364105该算法通用,是好算法2.2算法的表示算法的表示算法需要有算法需要有统一的表示方法一的表示方法常用的表示方法有:常用的表示方法有:自然自然语言言流程流程图结构化流程构化流程图N-S流程流程图.1、自然自然语言言 对于于计算算 s=1+2+3+4+5+6+7+8+9+10s=1+2+3+4+5+6+7+8+9+10 用自然用自然语言表示言表示为:使使s=0(s为累加器)累加器)使使i=1(i为计数器)数器)s+is(累加求
8、和公式)(累加求和公式)i+1i(计数器加数器加1)若若i10转,否否则转 输出出s的的值特点:通俗易懂、文字冗长、含义不大严格。2、流程流程图用流程图符号表示算法。常用的流程图符号起止框输入输出框处理框流程线判断框 对于计算s=1+2+3+4+5+6+7+8+9+10用流程图表示为:s+i si+1 iS+i sS+i si10输出s0 s1 i直观形象,易于理解,次序清楚YN3、结构化流程构化流程图 传统的流程图有一个弊端:对流程线没有严格的限制,对于较复杂的算法可能会变成乱麻一般(BS型算法)。为克服这一弊端,提出了由三个基本结构组成算法流程图的思想:结构化流程图 三个基本结构:顺序结构
9、 按固定顺序(从上到下或从左到右)执行的结构。ABab选择结构 根据条件P选择执行哪一个分支。成立 不成立 pABab成立不成立例:计算y=1/x当x0时y=10000当x=0时的算法流程图图:选择结构 输入xX=0?10000y1/xy输出yYN循环结构重复执行某些操作的结构。分为两种:当型循环和直到型循环。当型循环直到型循环P1AAP2aabbYYNN 可以看出,每个基本结构都只有一个入口和一个出口,因此,用三个基本结构构成的流程图不会象乱麻一般,用三个基本结构构成的流程图就成为结构化流程图,用结构化流程图描述的算法称为结构化算法,相应的程序设计就称为结构化程序设计。观察前例:0 s1 i
10、S+i si+1 ii10输出s顺序结构循环结构yn4N-S流程流程图N-S流程图的三个基本结构:ABP成立不成立ABAB当P1直到P2顺序结构选择结构循环结构例:计算 y=1/x当x0时y=10000当x=0时的N-S流程图:输入xX=0?是否10000y1/xy输出y 例:计算s=1+2+3+4+5+6+7+8+9+10的N-S流程图:i10 直到i10 直到型 当型 0 s1 i输出s1 i0 ss+i si+1 is+i si+1 i输出s 第三章第三章 数据类型数据类型、运算符运算符 与与 表达式表达式 3.1C的数据的数据类型型基本类型(整型、实型型、字符型字符型、枚枚举型)型)构
11、造类型(略)指针类型(略)空类型 各类型包含常量常量与与变量量3.2常量与常量与变量量常量与符号常量常量与符号常量常量常量在程序运行在程序运行过程中其程中其值保持不保持不变的量。的量。符号常量符号常量用来代表一个常量的标识符。#define PI 3.1415926#define PI 3.1415926例:例:#define#define PIPI 3.1415926 3.1415926 main()main()float float r r=2,=2,c c;c c=2*=2*PIPI*r r;printf(printf(“%f%f”,c c););变量量其其值可以改可以改变的量。的量。变
12、量的三要素量的三要素:变量名量名每个每个变量有一个名字,作量有一个名字,作为识别该变量的量的标识符。符。变量的量的值每个每个变量有一个量有一个值,变量的量的值是随是随时可以改可以改变的。的。变量的存量的存储单元元 每个每个变量占据一个内存量占据一个内存单元,用于存放元,用于存放变量的量的值。变量名a变量值存储单元3 变量的命名量的命名规则:由字母、数字和下划由字母、数字和下划线组成成以字母或下划以字母或下划线开开头a、x1、y_2、_b1、_1c合法合法1x、a+2、不合法不合法变量必量必须先定先定义后使用。后使用。程序中何程序中何时使用常量?何使用常量?何时使用使用变量?量?3.3整型数据整
13、型数据整型常量整型常量即整常数,即整常数,c的整常数有三种形式:的整常数有三种形式:十十进制整数制整数与数学中的整数一致,如:与数学中的整数一致,如:100,123,15等。等。八八进制整数制整数以以0开开头的整数,如:的整数,如:010,07,020等。等。十六十六进制整数制整数以以0 x开开头的整数,如:的整数,如:0 x10,0 xff,0 x2a等。等。整型整型变量量用于存放整数的用于存放整数的变量。量。分分4种种类型:型:基本型:基本型:inta16位,可表示的数位,可表示的数值范范围:-3276832767短整型:短整型:shortintb16位,可表示的数位,可表示的数值范范围:
14、-3276832767长整型:整型:longintc32位,数位,数值范范围:-21474836482147483647 无符号型:加上无符号型:加上 unsigned只存放正数。只存放正数。如:如:unsignedintx变量量x为无符号整数,无符号整数,16位全表示数位全表示数码,数数值范范围:065535在在程程序序设计中中,如如果果要要使使用用整整型型变量量,必必须首首先先选择以以上上类型型符符来来定定义变量量,然然后才能使用;后才能使用;例:例:main()main()定定义 int a,b,c;int a,b,c;a=100;b=50;a=100;b=50;使用使用 c=a+b;c
15、=a+b;printf(printf(“%d%d”,c);,c);一般根据什么原一般根据什么原则选择变量的量的类型?型?3.4实型数据型数据实型常量型常量可使用两种形式表示:可使用两种形式表示:小数形式:小数形式:如如 1.23,3.141592615.48指数形式:指数形式:如如1e-201.23e5实型型变量量用于存放用于存放实数的数的变量量分分单精度和双精度两种:精度和双精度两种:floata,b定定义a和和b为单精度型精度型变量量32位,位,7位有效数字,位有效数字,10-381038doublex,y定定义x和和y为双精度型双精度型变量量64位,位,15位有效数字,位有效数字,10-
16、30810308例:例:main()main()float r,c;float r,c;double r,c;double r,c;r=5;r=5;c=2*3.1415926*r;c=2*3.1415926*r;printf(printf(“%f%f”,c);,c);3.5字符型数据字符型数据字符常量字符常量用用单引号括起来的一个字符。引号括起来的一个字符。a,x,*,1等等除此外,以除此外,以开开头的字符如的字符如n,t等等称称为转义字符,祥字符,祥见书表表3.3 字符型字符型变量量用于存放字符的用于存放字符的变量。量。charc1,c2定定义c1和和c2为字符型字符型变量量c1=a;c2=
17、b;字符字符赋值字符型字符型变量存放一个字符,占据一个字量存放一个字符,占据一个字节字符型数据的存字符型数据的存储形式形式存放ASCII码不是而是如字符如字符a在内存中存放在内存中存放97,b存放存放98。与整数的存与整数的存储形式一致,它形式一致,它们之之间可以通用可以通用 一一个个字字符符数数据据既既可可以以作作字字符符用用,也也可可以以作作整整数数用用(取取其其ASCII代代码)。)。如:如:32+a相当于相当于 32+97若若intx;charc;则x=a;c=97;x=97;c=a;都允都允许a97 字符串常量字符串常量用双引号括起来的字符序列。用双引号括起来的字符序列。如:如:”a
18、bcde”,”china”a”也属字符串。也属字符串。注意注意”a”与与a的区的区别。对于:于:charc;c=”a”;用法用法错误字字符符串串中中每每个个字字符符各各占占一一个个字字节,并并且且在在字字符符串串结尾尾加加上上一个一个结束束标记0如:如:”china”在内存中占在内存中占6个字个字节。china0C语言言中中专门的的字字符符串串变量量,可可用用字字符符数数组存存放放(以以后后介介绍)。)。3.6变量量赋初初值在定在定义变量的同量的同时给相相应的的变量量赋初初值。如:如:inta=3;afloatb=5.2;charc=a;intx=y=z=6;效果:效果:在在给变量分配内存量分
19、配内存单元的同元的同时在相在相应的的单元中存放初元中存放初值。33.7各数各数值型数据型数据间的混合运算的混合运算整型、整型、实型、字符型数据型、字符型数据间可以可以进行混合运算,如:行混合运算,如:10-a*1.5运运算算时,参参加加运运算算的的两两个个数数据据如如果果类型型不不同同,则首首先先将将其其类型型转换成一致再运算,成一致再运算,转换规则是:是:将将优先先级低的低的类型型转换到到优先先级高的高的类型型 数据数据类型的型的优先先级:高高 double floatdouble float long long unsignde unsignde 低低 int charint char3.
20、8算算术运算符与算运算符与算术表达式表达式基本的算基本的算术运算符运算符+-*/%算算术表达式表达式用算用算术运算符将运算运算符将运算对象象连接起来的式子接起来的式子用于表达数学公式的式子用于表达数学公式的式子 如:如:2*x+y-1/a2*x+y-1/a表达式表达式经过运算最运算最终得到一个得到一个值:算算术表达式的表达式的值运算符的运算符的优先先级与与结合性合性优先先级:在在对表表达达式式求求值时,如如果果存存在在多多个个运运算算符符,则运运算算的的先先后后次次序序按按运算符的运算符的优先先级别从高到底从高到底进行。行。运算符的运算符的优先先级关系关系为:高:高:*/%低:低:+-如:如:
21、a-2*x先算先算*2*(a+2)有括号的情况?有括号的情况?结合性:合性:如如果果在在一一个个运运算算对象象两两边的的运运算算符符的的优先先级相相同同,则按按规定定的的“结合方向合方向”处理。理。如:如:a-b+cb与与-结合是从左到右,称合是从左到右,称“左左结合性合性”。b与与+结合是从右到左,称合是从右到左,称“右右结合性合性”。每个运算符都有相每个运算符都有相应的的优先先级和和结合性。合性。基本算基本算术运算符都是运算符都是左左结合性合性。计算表达式例:算表达式例:2+2+A A-1/2.0 1+3/2-1-1/2.0 1+3/2-1构造表达式例构造表达式例 2x2x2 2+3x-1
22、+3x-1a+ba-ba+ba-bx+yx-ya+b/a-b?(a+b)/(a-b)2*x*x+3*x-1(*不能省)(a+b)/(a-b)/(x+y)/(x-y)(a+b)/(a-b)/(x+y)/(x-y)(a+b)/(a-b)/(x+y)*(x-y)强制制类型型转换可可以以用用强制制类型型转换运运算算符符将将一一个个表表达达式式的的值转换成成所所需需类型:型:如:如:(int)(x+y)(float)(7%3)应用用举例:例:inta=200,b=300,c;c=a*b/100;?可知,有自可知,有自动转换和和强制制转换,当自当自动转换达不到目的达不到目的时,可用,可用强制制转换。c=(
23、long)a*b/100;c=(long)(a*b)/100;自增、自减运算符自增、自减运算符自增运算符:自增运算符:+使使变量量值加加1自减运算符:自减运算符:-使使变量量值减减1两种用法:两种用法:+i,-i先加(减)后用先加(减)后用i+,i-先用后加(减)先用后加(减)两种用法两种用法对i效果一效果一样,但表达式的,但表达式的值不同。不同。例例:假:假设i的原的原值为5:j=+i;j=?j=i+;j=?注意:注意:+和和-只能用于只能用于变量。量。如:如:3+和(和(a+1)+不合法不合法+和和-为右右结合性。合性。(-i)+-i+-(i+)若若i的原的原值是是5,则该表达式的表达式的
24、值是多少?是多少?例:分析例:分析执行下列行下列语句后的句后的结果:果:a=5;a=5;a b c da b c db=a+;b=a+;c=-a-b+;c=-a-b+;d=(a+)-(+b)+c-;d=(a+)-(+b)+c-;556 506 7-26-1两种特殊情况:两种特殊情况:k=(i+)+(i+)+(i+)i+j是是 i+(+j)还是是(i+)+j?i+虽然然与与i=i+1等等效效,但但使使用用自自增增自自减减运运算算符符的的代代码优化化程度好,因而程度好,因而经常使用;但用常使用;但用时需特需特别小心。小心。3.9赋值运算符和运算符和赋值表达式表达式赋值运算符运算符“=”称称赋值运算
25、符,其作用是将一个数据运算符,其作用是将一个数据赋给一个一个变量。量。如:如:a=5不要理解不要理解为“等号等号”。执行行赋值运运算算的的结果果,是是将将右右边的的数数据据存存入入左左边变量量所所对应的内存的内存单元中。元中。赋值规则如如果果赋值运运算算符符两两侧的的类型型不不一一致致,则在在赋值时要要进行行类型型转换,转换规则为:实型型整整变量量舍去小数部分。舍去小数部分。inta=5.5;a中中为5。整型整型实变量量数数值不不变,以浮点形式存,以浮点形式存储。字符型字符型整整变量量放在整形放在整形变量低量低8位。保持原位。保持原值不不变原原则。inta=A;复合复合赋值运算符运算符在在赋值
26、运算符前加上其它运算符,可以构成复合运算符前加上其它运算符,可以构成复合赋值运算符。运算符。a+=3a=a+3b-=x+5b=b-(x+5)x*=c-6x=x*(c-6)y/=a*4y=y/(a*4)k%=b-2k=k%(b-2)属于高效率运算符。属于高效率运算符。赋值表达式表达式主要主要实现赋值运算的表达式。运算的表达式。一般形式:一般形式:=如:如:a=5y=2*x+3a=a+1不是衡等不是衡等作用:作用:将右将右边表达式的表达式的值赋给左左边的的变量量。赋值表达式的表达式的值取左取左边变量的量的值。赋值表达式右表达式右边的的可以是任何表达式,如:可以是任何表达式,如:a=(b=5)赋值表
27、达式中包含表达式中包含赋值表达式表达式赋值运算符的运算符的优先先级低于所有算低于所有算术运算符,且是右运算符,且是右结合性。合性。a=(b=5)与与 a=b=5等效。等效。例:例:计算以下表达式的算以下表达式的值:a=b=c=5a=5+(c=6)a=(b=4)+(c=6)a=(b=4.5)+(c=6.5)(a、b、c为整型整型变量)量)a+=a-=a*a(设a的原的原值为3)赋值表表达达式式是是C语言言中中的的一一个个重重要要成成分分,在在赋值表表达达式式后加一分号就成后加一分号就成为常用的常用的赋值语句。如句。如 y=2*x+1;赋值表表达达式式作作为表表达达式式的的一一种种,可可以以出出现
28、在在任任何何表表达达式式中,如:中,如:x+2-(b/3-(a=k-5)+b 3.10逗号表达式逗号表达式逗号也是一种运算符,用它逗号也是一种运算符,用它对两个表达式两个表达式实现连接运算。接运算。3+5,6+8称称逗号表达式逗号表达式。逗号表达式的一般形式:逗号表达式的一般形式:表达式表达式1,表达式,表达式2取取表达式表达式2的的值作作为整个逗号表达式的整个逗号表达式的值。如:如:a=3*5,a*4逗号表达式的逗号表达式的值为:60一一个个逗逗号号表表达达式式又又可可以以与与另另一一个个表表达达式式组成成一一个个新新的的逗逗号号表表达达式,如:式,如:(a=3*5,a*4),a+5因此,逗
29、号表达式的一般形式可以因此,逗号表达式的一般形式可以扩展展为:表达式表达式1,表达式,表达式2,表达式,表达式3,,表达式表达式n取取表达式表达式n的的值作作为整个逗号表达式的整个逗号表达式的值。逗号运算符的逗号运算符的优先先级最低最低,且是左且是左结合性。合性。逗号运算符只起到逗号运算符只起到连接作用,没有接作用,没有实际操作操作。第四章第四章 最简单的最简单的C C程序设计程序设计 C程序最基本的成分是程序最基本的成分是语句句目前我目前我们已掌握的已掌握的语句:句:变量量说明明语句句:inta,b,c;表达式表达式语句:句:x+y;特特别地:地:a=5;赋值语句句可以可以编写写简单程序如:
30、程序如:main()intx,y;x=5;y=2*x*x+3*x-1;该程序程序语法上完整,但法上完整,但还缺少缺少输出。出。数据的数据的输出出用用输出函数出函数实现,其中的两种其中的两种输出函数:出函数:1.putchar函数函数(字符(字符输出函数)出函数)用于用于输出一个字符。出一个字符。如如:putchar(a);putchar(100);char c=b;putchar(c);例例:输出出单词Boy的完整程序:的完整程序:#include“stdio.h”注意该语句的作用注意该语句的作用 main()char a,b,c;a=B;b=o;c=y;putchar(a);putchar(
31、b);putchar(c);2.printf2.printf函数函数(格式(格式输出函数)出函数)任意任意类型、任意格式、任意个数。型、任意格式、任意个数。例如:例如:inta=100,b=56;printfprintf(“a=%d,b=%da=%d,b=%d”,a,ba,b););普通字符普通字符格式格式说明明格式控制格式控制 输出表列出表列输出出结果:果:a=100,b=56a=100,b=56“%”后的字符称格式字符,不同格式字符后的字符称格式字符,不同格式字符对应不同的数据不同的数据类型。型。d d格式符:格式符:按整数格式按整数格式输出出 几种用法:几种用法:%d不指定不指定宽度,按
32、度,按实际宽度度输出出%md按指定按指定宽度度输出,出,m为宽度度%ld用于用于输出出长整型数整型数例:例: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%ld也可以按指定也可以按指定宽度度输出:出:printf(printf(“c=%8ldc=%8ld”,c);,c);输出出结果:果:c=65535c=65
33、535注意:格式字符的注意:格式字符的类型要与型要与对应的的输出出对象的象的类型一致。型一致。c格式符:格式符:用于用于输出字符出字符 char c=char c=A A;printf(printf(“c=%c,%cc=%c,%c”,c,c,B B););输出出结果果:c=A,Bc=A,B 输出出对象象既既可可以以是是字字符符变量量、字字符符常常量量,还可可以以是是整整型型表表达达式。式。如:如: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
34、%c,%d”,b,b);,b,b);输出出结果:果:100,d100,d A,65 A,65s格式符:格式符:用于用于输出字符串出字符串%s不指定不指定宽度度%-ms指定指定宽度,左靠度,左靠齐%ms指定指定宽度,右靠度,右靠齐%m.ns指定指定宽度度m,只取左端,只取左端n个字符,个字符,右靠右靠齐%-m.ns指定指定宽度度m,只取左端,只取左端n个字符,个字符,左靠左靠齐例:例:printf(printf(“1:%s1:%s”,”abcdabcd”););printf(printf(“2:%8s2:%8s”,”abcdabcd”););printf(printf(“3:%-8s3:%-8s
35、”,”abcdabcd”););printf(printf(“4:%8.3s4:%8.3s”,”abcdabcd”););printf(printf(“5:%-8.3s5:%-8.3s”,”abcdabcd”););1:abcd2:abcd3:abcd 4:abc5:abc 1:abcd2:abcd3:abcd 4:abc5:abc f格式符:格式符:按小数形式按小数形式输出出实数数%f由系由系统指定指定宽度(度(6位小数)位小数)%m.nf指定指定宽度度m,小数位数,小数位数n,右靠,右靠齐%-m.nf指定指定宽度度m,小数位数,小数位数n,左靠,左靠齐注意:注意:宽度包括符号和小数点度包括
36、符号和小数点。例:例:float a=3.141592654,b=14.326795,float a=3.141592654,b=14.326795,c=-125.2468;c=-125.2468;printf(printf(“na=%f,b=%8.3f,c=%-10.2fna=%f,b=%8.3f,c=%-10.2f”,a,b,c);,a,b,c);输出出结果:果:a=3.141592,b=14.326,c=-125.24a=3.141592,b=14.326,c=-125.24 完整前面的程序:完整前面的程序:main()intx,y;x=5;y=2*x*x+3*x-1;printf(“n
37、y=%d”,y);程序程序设计例:例:编写程序写程序计算如算如图中的中的电流流I.假假设 U=220,R1=30,R2=60,R3=45U=220,R1=30,R2=60,R3=45UIR1R2R3算法算法设计:I=U/R1+U/R2+U/R3I=U/R1+U/R2+U/R3程序程序设计:main()main()I=U/R1+U/R2+U/R3;I=U/R1+U/R2+U/R3;int U=220,R1=30,R2=60,R3=45;int U=220,R1=30,R2=60,R3=45;float I;float I;printf(printf(“n n I=%fI=%f”,I);,I);正
38、确的程序:正确的程序:main()main()int U=220,R1=30,R2=60,R3=45;int U=220,R1=30,R2=60,R3=45;float I;float I;I=I=(float)(float)U/R1+U/R1+(float)(float)U/R2+U/R2+(float)(float)U/R3;U/R3;printf(printf(“n I=%fn I=%f”,I);,I);考考虑通用通用:main()main()int U,R1,R2,R3;int U,R1,R2,R3;float I;float I;输入输入 U,R1,R2,R3U,R1,R2,R3 I
39、=(float)U/R1+(float)U/R2+(float)U/R3;I=(float)U/R1+(float)U/R2+(float)U/R3;printf(printf(“n I=%fn I=%f”,I);,I);数据的数据的输入入 getchargetchar函数(函数(字符字符输入入)#include#include“stdio.hstdio.h”main()main()char c;char c;c=getchar();c=getchar();等待等待键盘输入入 putchar(c);putchar(c);SCANF SCANF 函数函数(格式输入)与与printf函数相反。函数
40、相反。用于用于输入若干任意入若干任意类型的数据。型的数据。scanf(“%d%d%d”,&a,&b,&c);格式控制格式控制地址列表地址列表 scanf(“%d%d%d”,&a,&b,&c);执行此函数行此函数时,等待从,等待从键盘输入三个整数入三个整数给a,b,c若从若从键盘输入入358则系系统即从即从键盘缓冲区取出冲区取出这三个数分三个数分别赋给a,b,c注意与注意与printf的区的区别,注意格式的匹配,注意格式的匹配如:如:scanf(“%3d%2d%4d”,&a,&b,&c);若从若从键盘输入入123456789a=123,b=45,c=6789若想使若想使a=12,b=5,c=10
41、0则键盘输入入应为:125100方便的方便的输入格式一般不入格式一般不 指定指定宽度,度,如:如:scanf(scanf(“%d%d%d%d%d%d”,&a,&b,&c);,&a,&b,&c);在在键盘输入入时,用用分分隔隔符符把把每每个个数数据据隔隔开开,标准准的的分分隔隔符符是空格。是空格。如:如:12315023若想用逗号作分隔符,若想用逗号作分隔符,则:scanf(scanf(“%d%d,%d%d,%d%d”,&a,&b,&c);,&a,&b,&c);不要随便使用普通字符,如使用:不要随便使用普通字符,如使用:scanf(“a=%d,b=%dc=%d”,&a,&b,&c)对应数据数据输
42、入:入:a=123,b=150,c=23前面的欧姆定律前面的欧姆定律:main()main()int U,R1,R2,R3;int U,R1,R2,R3;float I;float I;scanf(scanf(“%d%d%d%d%d%d%d%d”,&U,&R1,&R2,&R3);,&U,&R1,&R2,&R3);I=(float)U/R1+(float)U/R2+(float)U/R3;I=(float)U/R1+(float)U/R2+(float)U/R3;printf(printf(“n I=%fn I=%f”,I);,I);求三角形面积求三角形面积#include“math.h”mai
43、n()floata,b,c,area,s;scanf(“%f,%f,%f”,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(“narea=%f”,area);使用数学函数使用数学函数使用三角函数使用三角函数#include“math.h”main()floatx,y;scanf(“%f”,&x);y=sin(x*3.1415926/180);以弧度为单位以弧度为单位printf(“ny=%f”,y);第五章第五章 选择结构程序设计选择结构程序设计对于如下的函数于如下的函数计算,算法上属于一个算,算法上属于一个选择结构
44、。构。y=用于用于实现选择结构的主要是构的主要是if语句。句。1/x当当x0时10000当当x=0时if语句的最常句的最常见形式形式为:if(关系表达式关系表达式)语句句1;else语句句2;如:如:if(x!=0)y=1/x;elsey=10000;其中其中x!=0就是一个关系表达式就是一个关系表达式!=就是一个关系运算符就是一个关系运算符51关系运算符和关系表达式关系运算符和关系表达式1、关系运算符、关系运算符用于用于进行比行比较运算的运算符。共有六种:运算的运算符。共有六种:=!=优先先级与与结合性:合性:前前4种大于后两种。种大于后两种。低于算低于算术运算符而高于运算符而高于赋值运算符
45、。运算符。左左结合性。合性。2、关系表达式、关系表达式一般形式:一般形式:表达式表达式关系运算符关系运算符表达式表达式如:如:aba+bb+c经过关关系系运运算算后后最最终有有一一个个值-关关系系表表达达式式的的值。关系表达式的关系表达式的值只有只有 0(假假)或)或1(真真)例例:设 a=2,b=4,c=1计算算以以下下关关系系表表达达式式的的值:aba+bb+cab可以是字符表达式可以是字符表达式(x=2)(y=5)可以是可以是赋值表达式表达式(a(bc)甚至可以是关系表达式甚至可以是关系表达式ab=byxy=yz=xzyxz(x=y-2)z+1=x+ya=x+y=x+zx+152逻辑运算
46、符和运算符和逻辑表达式表达式有有时,只只用用一一个个简单的的关关系系表表达达式式无无法法完完整整地地表达一个条件,如:表达一个条件,如:y=其中的条件需要用其中的条件需要用逻辑表达式来表达:表达式来表达:x!=0&a!=0&就是一种就是一种逻辑运算符。运算符。1/x+1/a当当x0,a0时10000其它其它1、逻辑运算符运算符&逻辑与与两个操作数都两个操作数都为真真时&运算运算结果果为真。真。|逻辑或或两个操作数之一两个操作数之一为真真时即即为真。真。!逻辑非非(单目运算目运算)操作数操作数为真(真(假假)时为假(假(真真)。)。如:如:若若 a=2,b=3,c=0则:ab&bc0ab|bc1
47、!(ab)0优先先级(由高到低):(由高到低):!逻辑非非算算术运算符运算符关系运算符关系运算符&逻辑与与|逻辑或或赋值运算符运算符结合性:合性:左左结合性合性2、逻辑表达式表达式实际上,前面所上,前面所举例子即例子即为逻辑表达式表达式:ab&bcab|bc!(ab)逻辑表表达达式式的的值同同样只只有有1和和0,但但参参加加逻辑 运运算算的的操操作作数数可可以以是是任任意意类型型的的数数据据,可可以以是是 任意大小。任意大小。例:例:a+b&b+c是合法的是合法的逻辑表达式。表达式。此此时以以0代表代表假假,非非0代表代表真真。例:例:设 A=2,B=3,C=0,计算以下表达式的算以下表达式的
48、值:A&BB&CA|C!A+C&B+C!C+A=B|BC+10对于于逻辑表达式的两种基本技能:表达式的两种基本技能:逻辑表达式的表达式的计算。算。逻辑表达式的构造。表达式的构造。逻辑表达式的构造表达式的构造举例:例:abca和和b之一之一为0,但不同,但不同时为0a=b=c5=4=3a=b&b=ca=0&b!=0|a!=0&b=0a*b=0a*b=0&a+b!=0对于于 a=0&b!=0|a!=0&b=0a=0可以用可以用!a代替代替a!=0可以直接用可以直接用a!a&b|a&!b但必但必须是运算是运算结果作果作为逻辑量的情况下。量的情况下。y=(a!=0)与与y=a不等效不等效53if语句句
49、1、if语句的三种形式句的三种形式if(表达式表达式)语句;句;有一分支有一分支为空。空。scanf(“%d”,&score);if(score=60)printf(“pass”);if(表达式表达式)语句句1;else语句句2;if(x!=0)y=1/x;elsey=10000;if(表达式表达式1)语句句1;elseif(表达式表达式2)语句句2;elseif(表达式表达式3)语句句3;else语句句n;if(score=100)printf(“A”);elseif(score=90)printf(“B”);elseif(score=80)printf(“C”);elseif(score=
50、70)printf(“D”);elseif(score=60)printf(“E”);elseprintf(“F”);对于:于:1/x当当x0时10000当当x=0时一般用:一般用:if(x!=0)y=1/x;elsey=10000;也可用:也可用:y=10000;if(x!=0)y=1/x;y=?y=1/x;if(x=0)y=10000 例:(例:(习题5.5):x(x1)2x-1(1x10)10)3x-11(x10)y=main()floatx,y;scanf(“%f”,&x);if(x1)y=x;elseif(x10)y=2*x-1;elsey=3*x-11;printf(“ny=%f”