C语言入门教程_第1页
C语言入门教程_第2页
C语言入门教程_第3页
C语言入门教程_第4页
C语言入门教程_第5页
已阅读5页,还剩429页未读 继续免费阅读

下载本文档

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

文档简介

1、第一章第一章 计算机语言与计算机语言与C C语言概述语言概述 1.1 1.1 计算机语言概念计算机语言概念 计算机语言定义计算机语言定义 计算机能够识别和接受的语言。计算机能够识别和接受的语言。 要使计算机按自己的意图工作,必要使计算机按自己的意图工作,必须使用计算机所能接受、理解和执须使用计算机所能接受、理解和执行的指令指挥计算机工作。行的指令指挥计算机工作。 计算机语言的种类计算机语言的种类 机器语言机器语言 低级语言低级语言 汇编语言汇编语言 (面向计算机面向计算机) BASIC 入门语言入门语言 F77 科学计算科学计算 高级语言高级语言 Foxpro 数据库管理数据库管理 (面向问题

2、面向问题 ) C 多用途多用途 计算机语言机器语言机器语言 最早问世,用二进制代码构成指令。最早问世,用二进制代码构成指令。 如:如: 100000 100000 (+ +) 110000 110000 (- -) 用机器语言编程的缺点:用机器语言编程的缺点: 繁琐、不直观、不易调试。繁琐、不直观、不易调试。 如计算如计算y=2xy=2x2 2+3x-1+3x-1需要七八条指令。需要七八条指令。 移植性差。移植性差。 依赖于计算机。依赖于计算机。 汇编语言汇编语言 用符号构成指令,如:用符号构成指令,如:MOVMOV、ADDADD 用汇编语言编程:用汇编语言编程: 相对直观,但仍繁琐,仍是面向

3、计算相对直观,但仍繁琐,仍是面向计算机的语言。机的语言。 汇编语言是计算机间接接受的语言汇编语言是计算机间接接受的语言高级语言高级语言与低级语言相比,有根本性的区别: 是面向问题的语言。高级语言的一条指令(语句): y=2*x*x+3*x-1; 对应于:y=2x2+3x-1 y=sin(x); 对应于:y=sinx用高级语言编程:用高级语言编程:直观、易懂、移植性好(不依赖于具体计算机)上机运行高级语言程序需经过编译: 编译 执行 要上机完成一个计算问题,主要的任务就是用高级语言编写出相应的源程序。即至少要学会一种计算机语言。 高级语言源程序 机器指令目的程序结果编译程序1.2 C1.2 C语

4、言的特点语言的特点 集高级语言和低级语言的优点于一身: 能实现低级语言的大部分功能(如直接访问内存物理地址、进行位操作等)。 图形功能强。 运算符和数据结构丰富。 语法限制不太严格,程序设计自由度大。 生成目标代码质量高,程序执行效率高。 1.3 1.3 简单的简单的C C程序介绍程序介绍 例1: main()main() 主函数说明 程序框架 printf(“abcdefprintf(“abcdef”);”); 函数体 语句 程序的功能是输出字符串:abcdef 例2:求两数之和。main() int a,b,c; a a=100; b=50; b c=a+b; c printf(“n c=

5、%d”,c);程序运行结果:c=150 例例3 3:求两数中的最大值。:求两数中的最大值。 函数类型函数类型 函数名函数名 形参形参main() int max (int x,int y) int a,b,c; int z; scanf(“%d,%d”,&a,&b); if(xy) z=x; c=max(a,b); else z=y; printf(“nmax is:%d”,c); return(z); a x b y c z (两个函数组成)353555 总结上例可知:总结上例可知:(1 1) C C程序程序由函数构成由函数构成。(2 2) 函数由两部分组成:函数由两部分组成: 函数说明函数

6、说明部分:函数名、函数类型、形部分:函数名、函数类型、形参名、形参类型。参名、形参类型。 函数体函数体:实现函数的具体操作;由语句:实现函数的具体操作;由语句构成。构成。(3 3) 程序总是程序总是从从mainmain函数函数开始执行。开始执行。(4 4) 书写格式自由。书写格式自由。(5 5)语句必须有分号。)语句必须有分号。 : 第二章第二章 算法算法 2 2.1 .1 算法的概念算法的概念 要利用计算机处理问题,光学习语言要利用计算机处理问题,光学习语言的语法规则还不够,最重要的是要学会的语法规则还不够,最重要的是要学会针对各类型的问题,拟定出有效的解题针对各类型的问题,拟定出有效的解题

7、方法和步骤。方法和步骤。解题方法和步骤就是算法解题方法和步骤就是算法。算法算法: 为了解决一个问题而采取的有限步骤。为了解决一个问题而采取的有限步骤。 计算机算法计算机算法: 如何使计算机一步一步地工作的具体过程。如何使计算机一步一步地工作的具体过程。 利用计算机处理问题的步骤: 1)设计好算法算法设计; 2)用计算机语言实现算法程序设计。 算法必须是“有效”的。 算法设计还要充分考虑算法的好坏。 衡量算法好坏的主要标准: 程序简练。 执行速度快。 占空间少。 例:考虑 的算法。算法:直接表达。直接用语句 s=1+2+3+4+5+6+7+8+9+10当项数较多时该算法不适用s=i110算法:迭

8、代法(累加求和法) s=1+2+3+4+5+6+7+8+9+10 算法步骤: s i 使s=0 + 使i=1 累加器 记数器 s+is i+1i 若i10转,否则转 输出s01123364105该算法通用,是好算法2.2 2.2 算法的表示算法的表示 算法需要有统一的表示方法算法需要有统一的表示方法 常用的表示方法有:常用的表示方法有: 自然语言自然语言 流程图流程图 结构化流程图结构化流程图 N-SN-S流程图流程图. . 1、自然语言自然语言 对于计算对于计算 s=1+2+3+4+5+6+7+8+9+10s=1+2+3+4+5+6+7+8+9+10 用自然语言表示为:用自然语言表示为: 使

9、使s=0s=0 (s s为累加器)为累加器) 使使i=1i=1 (i i为计数器)为计数器) s+iss+is (累加求和公式)(累加求和公式) i+1ii+1i (计数器加(计数器加1 1) 若若i10i10转转, ,否则转否则转 输出输出s s的值的值 特点:通俗易懂、文字冗长、含义不大严格。 2、流程图流程图 用流程图符号表示算法。 常用的流程图符号 起止框 输入输出框 处理框 流程线 判断框 对于计算 s=1+2+3+4+5+6+7+8+9+10 用流程图表示为:s+i s i+1 i S+i s S+i s i10 输出s 0 s 1 i 直观形象,易于理解,次序清楚YN3、结构化流

10、程图结构化流程图 传统的流程图有一个弊端:对流程线没有严格的限制,对于较复杂的算法可能会变成乱麻一般(BS型算法)。 为克服这一弊端,提出了由三个基本结构组成算法流程图的思想: 结构化流程图 三个基本结构: 顺序结构 按固定顺序(从上到下或从左到右)执行的结构。 ABab 选择结构 根据条件P选择执行哪一个分支。 成立 不成立 pABab成立不成立例:计算 y= 1/x 当x0时 y= 10000 当x=0时 的算法流程图图: 选择结构 输入x X=0? 10000y 1/xy 输出y YN 循环结构 重复执行某些操作的结构。 分为两种: 当型循环和直到型循环。 当型循环 直到型循环 P1AA

11、P2aabbYYNN 可以看出,每个基本结构都只有一个入口和一个出口,因此,用三个基本结构构成的流程图不会象乱麻一般,用三个基本结构构成的流程图就成为结构化流程图,用结构化流程图描述的算法称为结构化算法,相应的程序设计就称为结构化程序设计。 观察前例: 0 s 1 i S+i s i+1 i i10 输出s 顺序结构循环结构yn4 N-SN-S流程图流程图N-S流程图的三个基本结构: ABP成立不成立ABAB当P1直到P2顺序结构选择结构循环结构例:计算 y= 1/x 当x0时 y= 10000 当x=0时 的N-S流程图:输入x X=0?是否10000y 1/xy 输出y 例: 计算 s=1

12、+2+3+4+5+6+7+8+9+10 的N-S流程图: i10 直到i10 直到型 当型 0 s 1 i 输出s 1 i 0 s s+i s i+1 i s+i s i+1 i 输出s 第三章第三章 数据类型数据类型、运算符运算符 与与 表达式表达式 3.1 C 3.1 C 的数据类型的数据类型基本类型 (整型、实型实型、字符型字符型、枚举型)枚举型)构造类型 (略)指针类型 (略) 空类型 各类型包含常量常量与与变量变量 3.2 3.2 常量与变量常量与变量 常量与符号常量常量与符号常量 常量常量 在程序运行过程中其值保持不变的量。在程序运行过程中其值保持不变的量。 符号常量符号常量 用来

13、代表一个常量的标识符。 #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(“%f”, printf(“%f”,c c);); 变量变量 其值可以改变的量。其值可以改变的量。 变量的三要素变量的三要素: : 变量名变量名每个变量有一个名字,作为识别该变量的每个变量有一个名字,作为识别该变量的标识符。标识符。 变量的值变量的值 每个

14、变量有一个值,变量的值是随时每个变量有一个值,变量的值是随时可以改变的。可以改变的。 变量的存储单元变量的存储单元 每个变量占据一个内存单元,用于存放变量每个变量占据一个内存单元,用于存放变量的值的值。 变量名 a 变量值 存储单元3 变量的命名规则:变量的命名规则: 由字母、数字和下划线组成由字母、数字和下划线组成 以字母或下划线开头以字母或下划线开头 a a、x1x1、y_2y_2、_b1_b1、_1c _1c 合法合法 1x1x、a+2a+2、 不合法不合法 变量必须先定义后使用。变量必须先定义后使用。 程序中何时使用常量?何时使用变量?程序中何时使用常量?何时使用变量? 3.3 3.3

15、 整型数据整型数据 整型常量整型常量 即整常数,即整常数,c c的整常数有三种形式:的整常数有三种形式: 十进制整数十进制整数 与数学中的整数一致,如:与数学中的整数一致,如:100100,123123,1515等。等。 八进制整数八进制整数 以以0 0开头的整数,如:开头的整数,如:010,07,020010,07,020等。等。 十六进制整数十六进制整数 以以0 x0 x开头的整数,如:开头的整数,如:0 x10,0 xff,0 x2a0 x10,0 xff,0 x2a等。等。 整型变量整型变量 用于存放整数的变量。用于存放整数的变量。 分分4 4种类型:种类型: 基本型:基本型:inti

16、nt a a 16 16位,可表示的数值范围:位,可表示的数值范围:-32768-327683276732767 短整型:短整型:short intshort int b b 16 16位,可表示的数值范围:位,可表示的数值范围:-32768-327683276732767 长整型:长整型:long intlong int c c 32 32位,数值范围:位,数值范围:-2147483648-214748364821474836472147483647 无符号型:加上无符号型:加上 unsignedunsigned 只存放正数。只存放正数。 如:如:unsigned intunsigned i

17、nt x x 变量变量x x为无符号整数,为无符号整数,1616位全表示数码,位全表示数码, 数值范围:数值范围:0 06553565535 在程序设计中,如果要使用整型变在程序设计中,如果要使用整型变量,必须首先选择以上类型符来定义变量,量,必须首先选择以上类型符来定义变量,然后才能使用;然后才能使用; 例:例: main() main() 定义定义 int int a,b,c; a,b,c; a=100; b=50; a=100; b=50; 使用使用 c=a+b;c=a+b; printf(“%d”,c printf(“%d”,c);); 一般根据什么原则选择变量的类型?一般根据什么原则

18、选择变量的类型? 3.4 3.4 实型数据实型数据 实型常量实型常量 可使用两种形式表示:可使用两种形式表示: 小数形式:小数形式:如如 1.23, 3.1415926 15.481.23, 3.1415926 15.48 指数形式:指数形式:如如 1e-20 1.23e5 1e-20 1.23e5 实型变量实型变量 用于存放实数的变量用于存放实数的变量 分单精度和双精度两种:分单精度和双精度两种: float a,bfloat a,b 定义定义a a和和b b为单精度型变量为单精度型变量 3232位,位,7 7位有效数字,位有效数字,1010-38-3810103838 double x,y

19、double x,y 定义定义x x和和y y为双精度型变量为双精度型变量 6464位,位,1515位有效数字,位有效数字,1010-308-3081010308308 例:例: main()main() float r,c; float r,c; double r,c;double r,c; r=5; r=5; c=2 c=2* *3.14159263.1415926* *r;r; printf(“%f”,c printf(“%f”,c); ); 3.5 3.5 字符型数据字符型数据 字符常量字符常量 用单引号括起来的一个字符。用单引号括起来的一个字符。 a,x,a,x,* *,1,1等等

20、除 此 外 , 以除 此 外 , 以 开 头 的 字 符开 头 的 字 符如如n,tn,t等等 称为转义字符,祥见书表称为转义字符,祥见书表3.33.3 字符型变量字符型变量 用于存放字符的变量。用于存放字符的变量。 char c1,c2 char c1,c2 定义定义c1c1和和c2c2为字符型变量为字符型变量 c1=a; c2=b; c1=a; c2=b; 字符赋值字符赋值 字符型变量存放一个字符,占据一个字节字符型变量存放一个字符,占据一个字节 字符型数据的存储形式字符型数据的存储形式 存放ASCII码 不是 而是 如字符如字符aa在内存中存放在内存中存放9797,b b 存放存放989

21、8。 与整数的存储形式一致,它们之间可以通与整数的存储形式一致,它们之间可以通用用 一个字符数据既可以作字符用,也可以作一个字符数据既可以作字符用,也可以作整数用(取其整数用(取其ASCIIASCII代码)。代码)。 如:如:32+a32+a相当于相当于 32+9732+97 若若 intint x; char c; x; char c;则则 x=a; c=97; x=97; c=a; x=a; c=97; x=97; c=a; 都允都允许许 a97 字符串常量字符串常量 用双引号括起来的字符序列。用双引号括起来的字符序列。 如:如:”abcde”abcde”, ,”china”china”

22、” ”a a”也属字符串。也属字符串。 注意注意”a”a”与与aa的区别。的区别。 对于:对于: char c;char c; c=”a”; c=”a”; 用法错误用法错误 字符串中每个字符各占一个字节,并且在字符串中每个字符各占一个字节,并且在字符串结尾加上一个结束标记字符串结尾加上一个结束标记00 如:如:”china”china” 在内存中占在内存中占6 6个字节。个字节。 c h i n a 0 C C语言中专门的字符串变量,可用字符数语言中专门的字符串变量,可用字符数组存放(以后介绍)。组存放(以后介绍)。 3.6 3.6 变量赋初值变量赋初值 在定义变量的同时给相应的变量赋初值。在

23、定义变量的同时给相应的变量赋初值。 如:如: intint a=3; a=3; a a float b=5.2;float b=5.2; char c=a; char c=a; int int x=y=z=6; x=y=z=6; 效果:效果: 在给变量分配内存单元的同时在相应的单在给变量分配内存单元的同时在相应的单 元中存放初值。元中存放初值。 3 3.7 3.7 各数值型数据间的混合运算各数值型数据间的混合运算 整型、实型、字符型数据间可以进行混合运整型、实型、字符型数据间可以进行混合运算,如:算,如: 10-a10-a* *1.51.5 运算时,参加运算的两个数据如果类型不同,运算时,参加

24、运算的两个数据如果类型不同,则首先将其类型转换成一致再运算,转换规则则首先将其类型转换成一致再运算,转换规则是:是: 将优先级低的类型转换到优先级高的类型将优先级低的类型转换到优先级高的类型 数据类型的优先级:数据类型的优先级: 高高 double floatdouble float long long unsignde unsignde 低低 intint char char 3.8 3.8 算术运算符与算术表达式算术运算符与算术表达式 基本的算术运算符基本的算术运算符 + - * / % 算术表达式算术表达式 用算术运算符将运算对象连接起来的式子用算术运算符将运算对象连接起来的式子 用于表

25、达数学公式的式子用于表达数学公式的式子 如:如:2 2* *x+y-1/ax+y-1/a 表达式经过运算最终得到一个值:表达式经过运算最终得到一个值: 算术表达式的值算术表达式的值 运算符的优先级与结合性运算符的优先级与结合性 优先级:优先级: 在对表达式求值时,如果存在多个运算符,则在对表达式求值时,如果存在多个运算符,则运算的先后次序按运算符的优先级别从高到底进运算的先后次序按运算符的优先级别从高到底进行。行。 运算符的优先级关系为:运算符的优先级关系为: 高:高:* * / %/ % 低:低:+ -+ - 如:如:a-2a-2* *x x 先算先算 * * 2 2* *(a+2) (a+

26、2) 有括号的情况?有括号的情况? 结合性:结合性: 如果在一个运算对象两边的运算符的优先级相如果在一个运算对象两边的运算符的优先级相同,则按规定的同,则按规定的“结合方向结合方向”处理。处理。 如:如:a-b+ca-b+c b b与与- -结合是从左到右,称结合是从左到右,称“左结合性左结合性”。 b b与与+ +结合是从右到左,称结合是从右到左,称“右结合性右结合性”。 每个运算符都有相应的优先级和结合性。每个运算符都有相应的优先级和结合性。 基本算术运算符都是基本算术运算符都是左结合性左结合性。 计算表达式例:计算表达式例: 2+A-1/2.0 1+3/2-12+A-1/2.0 1+3/

27、2-1构造表达式例构造表达式例 2x2x2 2+3x-1+3x-1 a+b a-b a+b a-b x+y x-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(int)(x+y) ) (float)(7%3) (float)(7%3) 应用举例:应用举例: int

28、int a=200,b=300,c; a=200,b=300,c; c=a c=a* *b/100; b/100; ? ? 可知,有自动转换和强制转换,可知,有自动转换和强制转换, 当自动转换达不到目的时,可用强制转换。当自动转换达不到目的时,可用强制转换。c=(long)a*b/100;c=(long)(a*b)/100; 自增、自减运算符自增、自减运算符 自增运算符:自增运算符:+ 使变量值加使变量值加1 1 自减运算符:自减运算符:- 使变量值减使变量值减1 1 两种用法:两种用法: +i, -i +i, -i 先加(减)后用先加(减)后用 i+, i- i+, i- 先用后加(减)先用

29、后加(减) 两种用法对两种用法对i i效果一样,但表达式的值不同。效果一样,但表达式的值不同。例例:假设:假设i i的原值为的原值为5 5: j=+i; j=?j=+i; j=? j=i+; j=?j=i+; j=? 注意:注意:+和和-只能用于变量。只能用于变量。 如:如:3+3+和(和(a+1a+1)+ 不合法不合法+和和-为右结合性。为右结合性。 (-i)+(-i)+ -i+-i+ -(i+)-(i+) 若若i i的原值是的原值是5 5,则该表达式的值是多少?,则该表达式的值是多少? 例:分析执行下列语句后的结果:例:分析执行下列语句后的结果: a=5; a=5; a b c da b

30、c d b=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+) k=(i+)+(i+)+(i+) i+j i+j 是是 i+(+j)i+(+j) 还是还是 (i+)+j(i+)+j ? ? i+ i+虽然与虽然与i=i+1i=i+1等效,但使用自增自减等效,但使用自增自减运算符的代码优化程度好,因而经常使用;运算符的代码优化程度好,因而经常使用;但用时需特别小心。但用时需特别小心。 3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表

31、达式 赋值运算符赋值运算符 “=”=”称赋值运算符,其作用是将一个数据称赋值运算符,其作用是将一个数据赋给一个变量。赋给一个变量。 如:如: a=5a=5 不要理解为不要理解为“等号等号”。 执行赋值运算的结果,是将右边的数据存执行赋值运算的结果,是将右边的数据存入左边变量所对应的内存单元中。入左边变量所对应的内存单元中。 赋值规则赋值规则 如果赋值运算符两侧的类型不一致,则在赋如果赋值运算符两侧的类型不一致,则在赋值时要进行类型转换,转换规则为:值时要进行类型转换,转换规则为: 实型实型整变量整变量 舍去小数部分。舍去小数部分。 intint a=5.5; a a=5.5; a中为中为5 5

32、。 整型整型实变量实变量 数值不变,以浮点形式存储。数值不变,以浮点形式存储。 字符型字符型整变量整变量 放在整形变量低放在整形变量低8 8位。保持原值不变原则。位。保持原值不变原则。 intint a=A; a=A; 复合赋值运算符复合赋值运算符 在赋值运算符前加上其它运算符,可以构成在赋值运算符前加上其它运算符,可以构成复合赋值运算符。复合赋值运算符。 a+=3 a+=3 a=a+3 a=a+3 b-=x+5 b-=x+5 b=b-(x+5) b=b-(x+5) x x* *=c-6 =c-6 x=x x=x* *(c-6)(c-6) y/=a y/=a* *4 4 y=y/(a y=y/

33、(a* *4)4) k%=b-2 k%=b-2 k=k%(b-2) k=k%(b-2) 属于高效率运算符。属于高效率运算符。 赋值表达式赋值表达式 主要实现赋值运算的表达式。主要实现赋值运算的表达式。 一般形式:一般形式: = 如:如: a=5 y=2a=5 y=2* *x+3 a=a+1x+3 a=a+1 不是衡等不是衡等作用:作用:将右边表达式的值赋给左边的变量将右边表达式的值赋给左边的变量。 赋值表达式的值取左边变量的值。赋值表达式的值取左边变量的值。 赋值表达式右边的赋值表达式右边的 可以是任何表可以是任何表达式,如:达式,如: a=(b=5) a=(b=5) 赋值表达式中包含赋值表达

34、式赋值表达式中包含赋值表达式 赋值运算符的优先级低于所有算术运算符,赋值运算符的优先级低于所有算术运算符,且是右结合性。且是右结合性。 a=(b=5)a=(b=5) 与与 a=b=5a=b=5 等效。等效。 例:计算以下表达式的值:例:计算以下表达式的值: a=b=c=5a=b=c=5 a=5+(c=6) a=5+(c=6) a=(b=4)+(c=6) a=(b=4)+(c=6) a=(b=4.5)+(c=6.5) a=(b=4.5)+(c=6.5) (a a、b b、c c为整型变量)为整型变量) a+=a-=aa+=a-=a* *a a ( (设设a a的原值为的原值为3)3) 赋值表达式

35、是赋值表达式是C C语言中的一个重要成分,语言中的一个重要成分,在赋值表达式后加一分号就成为常用的赋值在赋值表达式后加一分号就成为常用的赋值语句。如语句。如 y=2y=2* *x+1;x+1; 赋值表达式作为表达式的一种,可以出赋值表达式作为表达式的一种,可以出现在任何表达式中,如:现在任何表达式中,如: x+2-(b/3-(x+2-(b/3-(a=k-5a=k-5)+b)+b 3.10 3.10 逗号表达式逗号表达式 逗号也是一种运算符,用它对两个表达式逗号也是一种运算符,用它对两个表达式实现连接运算。实现连接运算。 3+5,6+8 3+5,6+8 称称逗号表达式逗号表达式。 逗号表达式的一

36、般形式:逗号表达式的一般形式: 表达式表达式1 1,表达式,表达式2 2 取取表达式表达式2 2的值作为整个逗号表达式的值。的值作为整个逗号表达式的值。 如:如: a=3a=3* *5,a5,a* *4 4 逗号表达式的值为:逗号表达式的值为:6060 一个逗号表达式又可以与另一个表达式组成一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如:一个新的逗号表达式,如: (a=3(a=3* *5,a5,a* *4),a+54),a+5 因此,逗号表达式的一般形式可以扩展为:因此,逗号表达式的一般形式可以扩展为: 表达式表达式1 1,表达式,表达式2 2,表达式,表达式3 3,, , 表达

37、式表达式n n 取取表达式表达式n n的值作为整个逗号表达式的值。的值作为整个逗号表达式的值。 逗号运算符的优先级最低逗号运算符的优先级最低, ,且是左结合性。且是左结合性。 逗号运算符只起到连接作用,没有实际操作逗号运算符只起到连接作用,没有实际操作。 第四章第四章 最简单的最简单的C C程序设计程序设计 C C 程序最基本的成分是语句程序最基本的成分是语句 目前我们已掌握的语句:目前我们已掌握的语句: 变量说明语句变量说明语句: : intint a,b,c; a,b,c; 表达式语句:表达式语句: x+y;x+y; 特别地:特别地: a=5;a=5; 赋值语句赋值语句 可以编写简单程序如

38、:可以编写简单程序如: main()main() int int x,y; x,y; x=5; x=5; y=2 y=2* *x x* *x+3x+3* *x-1;x-1; 该程序语法上完整,但还缺少输出。该程序语法上完整,但还缺少输出。 数据的输出数据的输出 用输出函数实现用输出函数实现, ,其中的两种输出函数:其中的两种输出函数: 1.putchar 1.putchar 函数函数 (字符输出函数)(字符输出函数) 用于输出一个字符。用于输出一个字符。 如如: : putchar (a); putchar (100); char c=b; putchar (c); 例例:输出单词:输出单词B

39、oyBoy的完整程序:的完整程序: #include “stdio.h” 注意该语句的作用注意该语句的作用 main() char a, b, c; a=B; b=o; c=y; putchar (a); putchar (b); putchar (c); 2. printf2. printf函数函数(格式输出函数)(格式输出函数) 任意类型、任意格式、任意个数。任意类型、任意格式、任意个数。 例如:例如: intint a=100,b=56; a=100,b=56; printfprintf( (“a“a=%d,b=%d”=%d,b=%d”, ,a,ba,b);); 普通字符普通字符 格式说

40、明格式说明 格式控制格式控制 输出表列输出表列 输出结果:输出结果:a=100,b=56a=100,b=56“%” “%” 后的字符称格式字符,不同格式字符对应不同的数据类型。后的字符称格式字符,不同格式字符对应不同的数据类型。 d d格式符:格式符:按整数格式输出按整数格式输出 几种用法:几种用法: %d%d 不指定宽度,按实际宽度输出不指定宽度,按实际宽度输出 %md%md 按指定宽度输出,按指定宽度输出,m m为宽度为宽度 %ld%ld 用于输出长整型数用于输出长整型数 例:例: intint a=125,b=453; a=125,b=453; long c=65535; long c=

41、65535; printf(“a printf(“a=%d,b=%5d,c=%ld”,a,b,c);=%d,b=%5d,c=%ld”,a,b,c); 输出结果:输出结果: a=125,b= 453,c=65535a=125,b= 453,c=65535 %ld%ld也可以按指定宽度输出:也可以按指定宽度输出: printf(“cprintf(“c=%8ld”,c);=%8ld”,c); 输出结果:输出结果:c = 65535c = 65535注意:格式字符的类型要与对应的输出对象注意:格式字符的类型要与对应的输出对象的类型一致。的类型一致。 c c格式符:格式符:用于输出字符用于输出字符 ch

42、ar c=A;char c=A; printf(“c printf(“c=%c,%c”,c,B);=%c,%c”,c,B); 输出结果输出结果:c=A,Bc=A,B 输出对象既可以是字符变量、字符常量,还输出对象既可以是字符变量、字符常量,还可以是整型表达式。可以是整型表达式。 如:如: intint a=100; a=100; char b=A; char b=A; printf(“n%d,%c”,a,a printf(“n%d,%c”,a,a);); printf(“n%c,%d”,b,b printf(“n%c,%d”,b,b);); 输出结果:输出结果: 100,d100,d A,65

43、 A,65 s s格式符:格式符:用于输出字符串用于输出字符串 %s%s 不指定宽度不指定宽度 %-ms%-ms 指定宽度,左靠齐指定宽度,左靠齐 %ms%ms 指定宽度,右靠齐指定宽度,右靠齐 %m.ns%m.ns 指定宽度指定宽度m m,只取左端,只取左端n n个字符,个字符, 右靠齐右靠齐 %-m.ns%-m.ns 指定宽度指定宽度m m,只取左端,只取左端n n个字符,个字符, 左靠齐左靠齐例:例: printf(“1:%s”,”abcd”);printf(“1:%s”,”abcd”); printf(“2:%8s”,”abcd”);printf(“2:%8s”,”abcd”); pr

44、intf(“3:%-8s”,”abcd”); printf(“3:%-8s”,”abcd”); printf(“4:%8.3s”,”abcd”);printf(“4:%8.3s”,”abcd”); printf(“5:%-8.3s”,”abcd”); printf(“5:%-8.3s”,”abcd”);1:abcd2: abcd3:abcd 4: abc5:abc 1:abcd2: abcd3:abcd 4: abc5:abc f f格式符:格式符:按小数形式输出实数按小数形式输出实数 %f %f 由系统指定宽度(由系统指定宽度(6 6位小数)位小数) %m.nf%m.nf 指定宽度指定宽度m

45、 m,小数位数,小数位数n n,右靠齐,右靠齐 %-m.nf%-m.nf 指定宽度指定宽度m m,小数位数,小数位数n n,左靠齐,左靠齐 注意:宽度包括符号和小数点注意:宽度包括符号和小数点。 例:例: float a=3.141592654,b=14.326795,float a=3.141592654,b=14.326795, c=-125.2468; c=-125.2468; p r i n t f ( “ n ap r i n t f ( “ n a = % f , b = % 8 . 3 f , c = % -= % f , b = % 8 . 3 f , c = % -10.2f

46、”,a,b,c);10.2f”,a,b,c); 输出结果:输出结果: a=3.141592,b= 14.326,c=-125.24a=3.141592,b= 14.326,c=-125.24 完整前面的程序:完整前面的程序: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; printf(“n y=%d”,yprintf(“n y=%d”,y);); 程序设计例:程序设计例: 编写程序计算如图中的电流编写程序计算如图中的电流I I. 假设假设 U=220,R1=30,R2=60,R3=45U=2

47、20,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;intint U=220,R1=30,R2=60,R3=45; U=220,R1=30,R2=60,R3=45;float I;float I;printf(“nprintf(“n I=%f”,I);I=%f”,I); 正确的程序:正确的程序: main()main() int int U=220,R1=30,R2=60,R3=45; U=2

48、20,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(“n printf(“n I=%f”,I); I=%f”,I); 考虑通用考虑通用: main()main() int int U,R1,R2,R3; U,R1,R2,R3; float I; float I; 输入输入 U,R1,R2,R3U,R1,R2,R3 I=(float)U/R1+(float)U/R2+(float)U/R3; I=(f

49、loat)U/R1+(float)U/R2+(float)U/R3; printf(“n printf(“n I=%f”,I); I=%f”,I); 数据的输入数据的输入 getchargetchar函数(函数(字符输入字符输入) #include “stdio.h#include “stdio.h” main() main() char c; char c; c=getchar c=getchar(); (); 等待键盘输入等待键盘输入 putchar(cputchar(c);); scanfscanf 函数函数(格式输入) 与与printfprintf函数相反。函数相反。 用于输入若干任意

50、类型的数据。用于输入若干任意类型的数据。 scanfscanf( (“%d%d%d”“%d%d%d”, ,&a,&b,&c&a,&b,&c);); 格式控制格式控制 地址列表地址列表 scanfscanf( (“%d%d%d”“%d%d%d”, ,&a,&b,&c&a,&b,&c);); 执行此函数时,等待从键盘输入三个整执行此函数时,等待从键盘输入三个整数给数给a,b,ca,b,c 若从键盘输入若从键盘输入 3 5 83 5 8 则系统即从键盘缓冲区取出这三个数分则系统即从键盘缓冲区取出这三个数分别赋给别赋给a,b,ca,b,c 注意与注意与printfprintf的区别,注意格式的匹配的区

51、别,注意格式的匹配如:如: scanf(“%3d%2d%4d”,&a,&b,&c);scanf(“%3d%2d%4d”,&a,&b,&c); 若从键盘输入若从键盘输入123456789123456789 a=123,b=45,c=6789 a=123,b=45,c=6789 若想使若想使a=12,b=5,c=100a=12,b=5,c=100 则键盘输入应为:则键盘输入应为: 12 5 10012 5 100 方便的输入格式一般不方便的输入格式一般不 指定宽度,指定宽度, 如:如: scanf(“%d%d%d”,&a,&b,&cscanf(“%d%d%d”,&a,&b,&c);); 在键盘输入

52、时,用分隔符把每个数据隔开,在键盘输入时,用分隔符把每个数据隔开,标准的分隔符是空格。标准的分隔符是空格。 如:如:123 150 23123 150 23 若想用逗号作分隔符,则:若想用逗号作分隔符,则: scanf(“%dscanf(“%d,%d%d,%d”,&a,&b,&c);%d”,&a,&b,&c); 不要随便使用普通字符,如使用:不要随便使用普通字符,如使用: scanf(“ascanf(“a=%d=%d,b=%d c=%d”,&a,&b,&c)b=%d c=%d”,&a,&b,&c) 对应数据输入:对应数据输入: a=123,b=150,c=23a=123,b=150,c=23

53、前面的欧姆定律前面的欧姆定律: : main() main() int int U,R1,R2,R3; U,R1,R2,R3; float I; float I; scanf(“%d%d%d%d”,&U,&R1,&R2,&R3);scanf(“%d%d%d%d”,&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(“n printf(“n I=%f”,I); I=%f”,I); 求三角形面积求三角形面积#include “math.h”main

54、() float a,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(“n area=%f”,area);使用数学函数使用数学函数使用三角函数使用三角函数#include “math.h”main() float x, y; scanf ( “%f”, &x); y=sin(x*3.1415926/180); 以弧度为单位以弧度为单位 printf(“n y=%f”,y);第五章第五章 选择结构程序设计选择结构程序设计 对于如下的函数计算,算法上

55、属于一个选对于如下的函数计算,算法上属于一个选择结构。择结构。 y=y= 用于实现选择结构的主要是用于实现选择结构的主要是ifif语句。语句。1/x 1/x 当当x0 x0时时 10000 10000 当当x=0 x=0时时ifif语句的最常见形式为:语句的最常见形式为: if(if(关系表达式关系表达式) )语句语句1 1; else else 语句语句2 2;如:如: if(if(x!=0 x!=0) y=1/x;) y=1/x; else y=10000; else y=10000;其中其中 x!=0 x!=0 就是一个关系表达式就是一个关系表达式 !=!= 就是一个关系运算符就是一个关

56、系运算符5 51 1 关系运算符和关系表达式关系运算符和关系表达式1 1、关系运算符、关系运算符用于进行比较运算的运算符。共有六种:用于进行比较运算的运算符。共有六种: = = = != = = = !=优先级与结合性:优先级与结合性: 前前4 4种大于后两种。种大于后两种。 低于算术运算符而高于赋值运算符。低于算术运算符而高于赋值运算符。 左结合性。左结合性。2 2、关系表达式、关系表达式一般形式:一般形式:表达式关系运算符表达式表达式关系运算符表达式 如:如:ab a+bb+cab a+bb+c 经过关系运算后最终有一个值经过关系运算后最终有一个值-关系表达关系表达式的值式的值。 关系表达

57、式的值只有关系表达式的值只有 0 0( (假假)或)或1 1(真真)例:例:设设 a=2, b=4, c=1 a=2, b=4, c=1 计算以下关系表达计算以下关系表达式的值:式的值: ab ab a+bb+ca+bb+cab ab 可以是字符表达可以是字符表达式式(x=2x=2)(y=5) (y=5) 可以是赋值表达式可以是赋值表达式(a(bc) (a(bc) 甚至可以是关系表达式甚至可以是关系表达式ab= =bcab= =byx+zyxy=yzxy=yz=xzyz=xzyxz yxz (x=y-2)z+1=x+y(x=y-2)z+1=x+ya=x+y=x+zx+1a=x+y=x+zx+1

58、5 52 2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式有时,只用一个简单的关系表达式无法完整有时,只用一个简单的关系表达式无法完整地表达一个条件,如:地表达一个条件,如: y= y= 其中的条件需要用逻辑表达式来表达:其中的条件需要用逻辑表达式来表达: x!=0 &a!=0 x!=0 &a!=0 &就是一种逻辑运算符。就是一种逻辑运算符。1/x+1/a 1/x+1/a 当当x0,a0 x0,a0时时 10000 10000 其它其它1 1、逻辑运算符、逻辑运算符& & 逻辑与逻辑与 两个操作数都为真时两个操作数都为真时&运算结果为真。运算结果为真。| 逻辑或逻辑或 两个操作数之一为真时即为

59、真。两个操作数之一为真时即为真。! ! 逻辑非逻辑非 (单目运算单目运算) 操作数为真(操作数为真(假假)时为假()时为假(真真)。)。 如:如:若若 a=2, b=3, c=0 a=2, b=3, c=0 则:则: ab&bc ab&bc 0 0 ab|bc ab|bc 1 1 !(ab) !(ab) 0 0优先级优先级(由高到低):(由高到低):! ! 逻辑非逻辑非算术运算符算术运算符关系运算符关系运算符&逻辑与逻辑与|逻辑或逻辑或赋值运算符赋值运算符结合性:结合性:左结合性左结合性2 2、逻辑表达式、逻辑表达式 实际上,前面所举例子即为逻辑表达式实际上,前面所举例子即为逻辑表达式: ab

60、&bc ab|bc !(ab)ab&bc ab|bc !(ab) 逻辑表达式的值同样只有逻辑表达式的值同样只有1 1和和0 0,但参加逻辑,但参加逻辑 运算的操作数可以是任意类型的数据,可以是运算的操作数可以是任意类型的数据,可以是 任意大小。任意大小。例:例: a+b&b+ca+b&b+c 是合法的逻辑表达式。是合法的逻辑表达式。此时以此时以0 0代表代表假假,非非0 0代表代表真真。例:例:设设 a=2, b=3, c=0 , a=2, b=3, c=0 , 计算以下表达式计算以下表达式的值:的值: a&b b&c a|ca&b b&c a|c !a+c&b+c !a+c&b+c !c+a

温馨提示

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

评论

0/150

提交评论