C语言基本语法归纳.ppt

上传人:w****2 文档编号:20466977 上传时间:2021-03-22 格式:PPT 页数:262 大小:925.01KB
收藏 版权申诉 举报 下载
C语言基本语法归纳.ppt_第1页
第1页 / 共262页
C语言基本语法归纳.ppt_第2页
第2页 / 共262页
C语言基本语法归纳.ppt_第3页
第3页 / 共262页
资源描述:

《C语言基本语法归纳.ppt》由会员分享,可在线阅读,更多相关《C语言基本语法归纳.ppt(262页珍藏版)》请在装配图网上搜索。

1、C语言基本语法归纳 及实例介绍 计算机教学中心 李雪飞 提 纲 C语言概况 C程序的结构 数据类型、运算符与表达式 最简单的 C程序设计 顺序程序设计 选择结构程序设计 循环控制 数组 函数 指针 C语言概况 C的优点 1)、高效 2)、可移植 3)、灵活 C的缺点 可读性差,学习应用较难 。 C语言概况 -简单的 C程序 例 1.1 main( ) printf(This is a C program.n); 该程序的作用:在屏幕上输出一行信息 : This is a C program. 1、 main( ) 表示 “ 主函数 ” ,每一个 C程序都必须有 且只有一个主函数。 2、 mai

2、n函数体由大括号 括起来。 3、语句后面有一个分号。 . 4、 printf( )是 C语言的输出函数。双引号内的字符 被原样输出。 5、 “ n”是换行符,即在输出 This is a C program 之后换行。 例 1.2求两数之和 。 main( ) int a, b, sum; /*定义三个整型变量 。 ( int = integer) 。 */ a = 123; b = 456; /*把常数 123赋给变量 a, 把常数 456赋给变量 b*/ sum = a + b; /*计算 a、 b之和 , 并把和值赋变量给 sum*/ printf(“Sum is %dn”, sum);

3、 /*输出 sum的值 */ 程序的输出信息为: sum is 579 /* */中间的内容表示“注释”。注释是程序员对程序某部分的功能和作用所做的 说明,是给人看的,对编译和运行不起作用。 %d表示输出的数据类型是十进制整数类型。在输出时,该位置用对应变量 sum 的值代替。 例 1.3输入两个整数,输出其中的最大值。 int max(int x,int y) /*求两数最大值函数 max*/ int z; if(xy) z=x; else z=y; return (z); /*将 z的值返回给主函数 main*/ /*返回值通过函数名 max带回 main函数调用处 */ main ( )

4、 /*主函数 */ int a,b,c; scanf(“%d,%d”, /*输入 a,b的值 */ c=max(a,b); /*调用 max函数,将实参 a,b的值给形参 x,y*/ printf(“max=%d”,c); /*输出最大值 */ C程序的结构 、 C 程序是由函数构成的。一个 C源程序至少 包括一个函数 (main函数: 它代表程序开始执行 的起始位置 ),也可以包括一个 main函数和若干 其它函数。因此,函数是 C程序的基本单位。 C程序中有三种类型的函数: 1).main():主函数 ,每一个 C程序必须且只有一个 main() 函数。 2).开发系统提供的特殊函数 ,如

5、 printf( )、 scanf( )等。 Turbo C开发系统提供三百多个函数。 3).程序员自己设计的函数 ,如例 1.3中的函数 max()。 C的函数相当于其它语言中的子程序。用函数来实现 特定的功能。可以说 C是函数式的语言。程序全部工 作都是由函数来完成的。 C的这种特性很容易实现模 块化 。 C程序的结构 C程序的结构 、一个函数由两部分组成: () 函数的说明部分 。包括函数名、函数类型、函数 属性、函数参数 (形参 )名、形式参数类型。 如 int max (int x, int y) 函数类型 函数名 函数参数类型 函数参数名 函数参数类型 函数参数名 () 函数体 。

6、即函数说明部分下面的大括弧 .内的 部分。如果一个函数内有多个大括弧,则最外层的一对 为函数体的范围。 函数体一般包括: 变量定义。如 例 1.3中 main函数中的 “ int a,b,c; ” 执行部分。由若干个语句组成。 当然,在某些情况下也可以没有变量定义部分 (例如 例 1.1)。甚至可以既无变量定义也无执行部分,如: dump() 它是一个空函数,什么也不干,但这是合法的。 C程序的结构 、一个 C程序 总是从 main函数开始执行 的,而不论 main函数在整个程序中的位置如何( main函数可以放 在程序最前头,也可以放在程序最后,或在一些函数之 前在另一些函数之后)。 、 C

7、程序书写格式自由,一行内可以写几个语句, 一个语句可以分写在多行上。 C程序没有行号 ,也不象 fortran或 cobol那样严格规定书写格式 (语句必须从某 一列开始书写 )。 C程序的结构 、每个语句和数据定义的最后必须有一个分号。分号 是 C语句的必要组成部分。例如: c=a+b; 分号不可少 。 即使是程序中最后一个语句也应包含分号 (这是和 pascal语言不同的 )。 、 C语言本身 没有输入输出语句 。输入和输出的操作 是由库函数 scanf和 printf等函数来完成的。 C对输入输 出实行“函数化”。 、可以用 /*/ 对 C程序中的任何部分作注释。可以 增加程序的可读性。

8、 C程序的结构 程序开发过程 C源代 码 编译 程序 目标 代码 链 接 程 序 可 执 行 代 码 库 C源代 码 编译 程序 目标 代码 数据类型、运算符与表达式 3.1 信息在计算机中的存储与表示 计算机的基本功能是进行数据的计算和加工处理, 程序和数据在计算机的存储是用二进制形式表示的。 数与字符是自然信息与计算机二进制信息的中转环 节。 数制:就是用一组固定的数字和一套统一的规则来 表示数据的方法。 日常使用的十进制(逢十进一) 机器内部的二进制(逢二进一) 其它常用的数制:八进制,十六进制 不同数制之间的对应表示 十进制 decimal 二进制 binary 八进制 octal 十

9、六进制 hexdecimal 0 0 0 0 1 1 1 1 2 10 2 2 3 11 3 3 4 100 4 4 5 101 5 5 6 110 6 6 7 111 7 7 十进制 decimal 二进制 binary 八进制 octal 十六进制 hexdecimal 8 1000 8 9 1001 9 10 1010 11 1011 12 1100 13 1101 14 1110 15 1111 16 10000 10 A B C D E F 20 10 11 12 13 14 15 16 17 数制间的转换 1.二、八、十六进制转换为十进制 按权展开法。 例: (101.11)2=1

10、 22+0 21+1 20+1 2-1+1 2-2 =(5.75) 10 (127.4)8=1 82+2 81+7 80+4 2-1 =(87.5) 10 数制间的转换 2.十进制转换为二、八、十六进制 整数部分:除 R取余法 (先余为低,后余为高 ) 小数部分:乘 R取整法 (先整为高,后整为低 ) 转换精度问题 例: (4.6875)10=(?) 2 结果: (100.1011) 2 (87.5)10=(?) 8 结果: (127.47) 8 数制间的转换 3.二进制与八、十六进制之间的转换 八、十六进制转换为二进制 一分为三、一分为四 例: (23.54)8=(010011.101100

11、) 2 =(10011.1011) 2 (13.B)16=(00010011.1011) 2 =(10011.1011) 2 二进制转换为八、十六进制 合三为一、合四为一 3.2 C的数据类型 数据结构 指的是数据的组织形式。 不同的计算机语言所允许定义和使用的数据结构是不同的。 处理同一类问题,如果数据结构不同,算法也会不同。 所以,我们应当综合考虑算法和数据结构,选择最佳的数 据结构和算法。 数据结构 +算法 =程序 对程序当中所用到的所有数据都必须指定其数据类型。 C语言的数据结构是以数据类型形式出现的。 C的数据类型如下 : 3.2 常量与变量 3.2.1 常量和符号常量 3.2.2

12、变量 3.2.1 常量和符号常量 在程序运行过程中,其值不能被改变的量称为 常量 。 常量分为 : ( 1) 整型常量;如 12, 0, 3等; ( 2)实型常量;如 4.6, 1.23等; ( 3)字符常量;如 a, d等; (将在后面的小节中详细讲解) 常量一般从其字面形式即可判别,这种常量称为 字面常量 或 直接常量 。 也可以用一个标识符代表一个常量。如例 3.1 例 3.1 符号常量的使用。 #define PRICE 30 main() int num,total; num=10; total=num*PRICE; printf(“total=%d”,total); 程序中用 #d

13、efine 命令行 定义 PRICE代表常量 30,此后 凡在本文件中出现的 PRICE都代表 30,可以和常量一样 进行运算。 程序运行结果为: total=300 符号常量 用一个标识符代表一个常量的,称为 符号常量 ,即标识 符形式的常量。 注意: 符号常量不同于变量 。符号常量的值在其作用域 (例 3.1中即为 main()函数)内不能被改变,也不能被再 次赋值。如:在 主函数 main中 再次用“ PRICE=40”语句 对 PRICE赋值是 错误 的。 为了方便区分符号常量与变量,习惯上 符号常量名大写 , 变量名小写 。 使用符号常量的好处 ( 1)含义清楚。 定义符号常量名时应

14、考虑“见名知意”,在一个规范的程 序中不提倡使用很多的常数,如: sum=15*30*23.5*43. 在检查程序时搞不清各个常数究竟代表什么。应尽量使 用“见名知意”的变量名和符号常量。 ( 2)在需要改变一个常量时能够做到“一改全改”。例如, 在程序中多处用到某物品的价格,如果价格用常数表示, 则在价格进行调整时,需要在程序中作多处修改;若使 用符号常量 PRICE代表价格,则只需在 定义该符号常量 处 作一次修改即可。如: #define PRICE=35 3.2.2 变量 其值可以改变的量称为 变量 。一个变量应该有一个名字, 在内存中占据一定的存储单元。在该存储单元中存放该 变量的值

15、。 注意: 变量名 与 变量值 的区别。 3 a 变量名 (一个符号地址,在对程序编 译时系统分配给它一个内存地址) 变量值 (在程序中对变量取值,实际上是 通过变量名找到相应内存地址,从其存储 单元中读取数据) 存储单元 变量的使用是程序设计的中心环节之一,应掌握: ( 1) 变量的定义:某一时刻值是确定的,不同时刻可能取不同的值, 其改变是不连续的。 ( 2) 变量的两个要素 变量名 :它是一个 标识符 ,代表一定的内存存储单元,存储单元有一 个地址。 C语言以“ (指定变量 a,b为整型 ) unsigned short c,d; (指定变量 c,d为无符号短整型 ) long e,f

16、(指定变量 e,f为长整型 ) 对变量的定义,一般是放在一个函数的开头部分的声明 部分,变量的作用域是整个函数;也可以放在函数中的 某一分程序内,但变量的作用域只限于该分程序内(这 将在第 8章介绍)。 例 3.2 整型变量的定义与使用 main() int a,b,c,d; /*指定 a,b,c,d为整型变量 */ unsigned u; /*指定 u为无符号整型变量 */ a=12;b=-24;u=10; c=a+u;d=b+u; printf(“a+u=%d,b+u=%dn”,c,d); 运行结果为: a+u=22,b+u=-14 可以看到:不同种类的整型数据可以进行算术运算。在 本例中

17、是 int型数据与 unsigned int型数据进行加减运算。 3.4 实型数据 3.4.1 实型常量的表示方法 3.4.2 实型变量 3.4.3 实型常量的类型 3.4.1 实型常量的表示方法 实数 在 C语句中又称为 浮点数 。实数有两种表示形式: ( 1) 十进制数形式 。它由数字和小数点组成 (注意 必须有 小数点 )。 0.123, .123, 123.0, 123., 0.0都是十进制数形 式。 ( 2) 指数形式 。如 123e3或 123E3都代表 123 103 。但 注意字母 e(或 E)之前必须有数字,且 e后面指数必须为 整数,如 e3, 2.1e3.5, .e3,

18、e等都不是合法的指数形式。 3.4.2 实型变量 1. 实型数据在内存中的存放形式 2. 实型变量的分类 3. 实型数据的舍入误差 3.4.2 实型变量 1. 实型数据在内存中的存放形式 2. 实型变量的分类 3. 实型数据的舍入误差 3.5 字符型数据 3.5.1 字符常量 3.5.2 字符变量 3.5.3 字符数据在内存中的存储形式 3.5.4 字符串常量 3.5.1 字符常量 C的字符常量是用 单引号 括起来的一个字符。如 a, D, ?等都是字符常量。注意, a和 A是 不同 的字符的常量。 除了以上形式的字符常量外, C还允许用一种特殊的字 符常,就是以一个 “ ”开关的字符序列 。

19、例如,前面已 经遇到过的,在 printf函数中的 n,它代表一个“换 行”符,这种 非显示字符 难以用一般形式的字符表示, 故规定用这种特殊形式表示。 这类特殊的字符称为“ 转义字符 ”。 转义字符 a. 控制字符: t 水平制表(跳到下一个 tab位置); r 回车; n 换行; b. 疑难字符: 单引号字符 反斜杠字符 c. 指定 ASCII码对应的字符: 格式 1: xhh:1到 2位十六进制数 ASCII码对应的字符 如: x42表示字符“ B”; 格式 2: ddd: 1到 3位八进制数 ASCII码对应的字符 如: 102同样表示字符“ B”; 3.5.2 字符变量 字符型变量

20、用来 存放字符常量 ,注意 只能放一个字符 , 不要以为在一个字符变量中可以放一个字符串 (包括若干 字符 )。字符变量的字义如下: char c1,c2; 它表示 c1和 c2为字符型变量,各可以放一个字符。因此 可以用下面语句对 c1,c2赋值: c1=a;c2=b 一般以一个字节来存放一个字符,或者说一个字符变量 在内存中占一个字节。 3.5.3 字符数据在内存中的存储形式 将一个字符常量放到一个字符变量中,并不是把该字符 本身放到内存单元中,而是将该字符的 ASCII码放到存 储单元中,而且以二进制形式存放。例如:执行赋值语 句 c1=a;c2=b;字符 a的 ASCII码为 97,

21、b为 98,在 内存中变量 c1,c2的值如图所示: 既然在内存中,字符数据以 ASCII码存放,它的存储形 式就与整数的存储类似,这使得字符型数据和整型数据 之间可以通用。 97 98 c1 c2 01100001 01100010 c1 c2 字符型数据和整型数据的通用性 一个字符数据既可以以字符形式输出,也可以以整数形 式输出。 两种通用形式的输出 ;以字符形式输出时,需要先将存 储单元中的 ASCII码转换成相应字符,然后输出;以整 数形式输出时,直接将 ASCII码作为整数输出。 对字符数据进行算术运算 ;相当于对它们的 ASCII码进 行整数的算术运算。 相互赋值 ;字符数据与整型

22、数据可以相互赋值。 两种通用形式的输出 main() char c1,c2; c1=97;c2=98; (等价于 c1=a;c2=b;) printf(“%c%cn”,c1,c2); printf(“%d%dn”,c1,c2); 将 97和 98两个整数 直接存放到 c1和 c2的内 存单元中。 先将字符 a 和 b 化成 ASCII码 97和 98,然 后放到内存单元中。 两者的作用和结果是完全相同的 程序输出如下: a b 97 98 对字符数据进行算术运算 例 3.7 大小写字母的转换。 main() char c1,c2; c1=a;c2=b; c1=c1-32;c2=c2-32; p

23、rintf(“%c%c”,c1,c2); 运行结果为: A B a的 ASCII码为 97, A为 65; b为 98, B为 66。从 ASCII 代码表中可以发现:每一个 小写字母比它相应的大写字母 的 ASCII码大 32。 C语言允许字符数据与整数 直接进行算术运算。 相互赋值 字符数据与整型数据可以相互赋值。 main() int i; char c; i=a; c=97; printf(“%c,%dn”,c,c); printf (“%c,%dn”,i,i); 运行结果: a,97 a,97 3.5.4 字符串常量 前面已提到, 字符常量 是由一对 单引号 括起来的单个字 符。 C

24、语言除了允许使用字符常量外,还允许使用字符 串常量。 字符串常量 是一对 双引号 括起来的字符序列。如: “ How do you do.”, “CHINA”, “$123.45”都是字符串常量。 可以输出一个字符串,如 printf(How do you do.); 不要将字符常量与字符串常混淆。 a是字符常量, “ a”是字符串常量,二者不同。 假设 C被指定为字符变量: char c; c=a; 是正确的; 而 c=“a”; 是错误的。 c=“CHINA”, 也是错误的。 不能把一个字符串赋给一个字符变量。 究竟为什么 c=a就是正确的, 而 c “ a”就错了 呢? 3.6 变量赋初值

25、 程序中常需要对一些变量预先设置初值。 C语言允许在定 义变量的同时使变量初始化。 int a=3; /*指定 a为整型变量,初值为 3*/ float f=3.56; /*指定 f为实型变量,初值为 3.56*/ char c=a; /*指定 c为字符变量,初值为 a*/ 也可以使被定义的变量的一部分赋初值。 int a,b,c=5; /*指定 a,b,c为整型变量,只对 c初始化 */ 如果对几个变量赋予初值 3,应写为 :int a=3,b=3,c=3; 不能写成: int a=b=c=3 初始化不是在编译阶段完成的(只有在第 8章中介绍 的 静态存储变量 和 外部变量 的初始化时在编译

26、阶段完 成的)。 如: int a=3; 相当于: int a; /*指定 a为整型变量 */ a=3; /*赋值语句,将 3赋给 a*/ 如: int a,b,c=5; 相当于: int a,b,c; /*指定 a,b,c为整型变量 */ c=5; /*赋值语句,将 5赋给 c*/ 3.7 算术运算符和算术表达式 3.7.1 C运算符简介 3.7.2 算术运算符和算术表达式 1. 基本的算术运算符 2. 算术表达式和运算符的优先级与结合性 3. 强制类型转换运算符 4. 自增、自减运算符 5. 有关表达式使用中的问题说明 3.7.1 C运算符简介 C语言是表达式语言,除了控制语句和输入输出外

27、几乎 都是表达式。如:赋值符 “ ” 作为赋值运算符,而方 括号 “ ”作为下标运算符等。 C的运算符有 13类之多。 C的运算符 1. 算术运算符( +, -, *, /, %,即加,减,乘,除,求余) 2. 关系运算符( , =, =, !=) 3. 逻辑运算符( !, 前置形式 运算规则:先对表达式中含有前置自增 (减 )运 算符的变量进行自加 (减 )1,然后用这些变量的新值参与 表达式运算。 后置形式 运算规则:先用变量原值参与表达式运算,然 后对含有后置自加 (减 )运算符的变量进行自加 (减 )1运算。 main() main() int j,i=3; int j,i=3; j=

28、+i;(相当于 i=i+1;j=i) j=i+;(相当于 j=i;i=i+1) printf(“%d,%d”,i,j); printf(“%d,%d”,i,j); 运行结果: 4,4 运行结果: 4,3 ( 1)自增运算符 ( )和自减运算符 ( ),只 能用于变量,不能用于常量或表达式; ( 2)和的结合方向为“自右至左”。 考虑:若 i的初值为 3,那么 print(“%d”,-i+)的 结果 应该为多少呢? 3.8 赋值运算符和赋值表达式 1. 赋值运算符 2. 类型转换 3. 复合的赋值运算符 4. 赋值表达式 1. 赋值运算符 赋值符号“”就是 赋值运算符 ,作用是将一个数据 赋给一

29、个变量。 如“ a=3”的作用是执行一次赋值操作(或称赋值运 算),把常量 3赋给变量 a。 也可以将一个表达式的值赋给一个变量。如“ a=3+5- 8%5”,相当于把结果值 5赋给变量 a(“ a=5”)。 2. 类型转换 如果赋值运算符两侧的类型不一致,但都是数值型或字 符型时,在赋值时要进行类型转换。 3. 复合的赋值运算符 在赋值符 “” 之前加上其他运算符,可以构成复合的运 算符。如: a+=3等价于 a=a+3, x%=3等价于 x=x%3。 注意: 赋值符 “” 右边看作一项。 凡是二元运算符,都可以与赋值符一起组成复合赋值符。 C语言规定了 10种复合赋值运算符: +=, -=

30、, *=, /=, %=, =, a=b=c=0; 连续使用等号时,从右向左顺序赋值: a=(b=(c=0); 赋值表达式也可以包含复合的赋值运算符。如: a+=a-=a*a也是一个赋值表达式。 若 a的初值为 12,则: 先进行“ a-=a*a”,相当于 a= a- a*a, a的值为 12-144=-132; 再进行“ a+=-132”的运算,相当于“ a= a+(-132)”, a的 值为 -132-132=-264。 3.9 逗号运算符和逗号表达式 逗号运算符 ( 又称顺序求值运算符 ) : , 逗号表达式 :用逗号运算符把两个表达式连接起来的表 达式 。 一般形式为:表达式 1, 表

31、达式 2, .,表达式 n 逗号表达式的值 :表达式 n的值 . 如:逗号表达式“ 3+5,6+8”的值为 14。 如:“ a=3*5,a*4”,由于赋值运算符的优先级高于逗号 运算符(逗号运算符在所有运算符中级别最低),因此 应先求解 a=3*5,再求解 a*4,得到逗号表达式的值 60。 一个逗号表达式又可以与另一个表达式组成一个新的逗 号表达式,如: (a=3*5,a*4),a+5,先计算出 a的值为 15, 由于 a*4的操作并没有改变 a的值,所以 a+5的值为 20。 因此,逗号表达式最终的值为 20。 在许多情况下,使用逗号表达式的目的只是想分别得到 各个表达式的值。 逗号表达式

32、最常用于循环( for)语句。 注意:并不是任何地方出现的逗号都作为逗号运算符。 例如函数参数也是用逗号来间隔的,如: printf(“%d,%d,%d”,a,b,c); 课堂作业 : 2.1 指出下面哪些是合法的变量名 : 123 abc a+b a_b pad ?12 Li_Li *P 2.2 a在内存中占 个字节 ,“a”在在内存中占 个字节 . 2.3 写出下面程序的运行结果 : main() char ch; ch=B; /*B的 ascii码的值为 66*/ printf(“%c,%dn”,ch,ch) 1 2 B 66 2.4 写出下面程序的运行结果 : main() int a

33、=10, b , c , d ; int b,c; a+=6; b = (c=20, 6, a+2 ); printf(a=%d,b=%d,c=%dn,a,b,c); 运行结果: a=16,b=18,c=20 2.5写出下面程序的运行结果 : main() int a=4; int b,c; c=a+(b=2); a+=a-=a*a; printf(%d,%d,%dn,a,b,c); 2.6 写出下面程序的运行结果 : main() int a,b,c=9; a=3,b=4; c%= a+b; printf(“%dn”,c) 运行结果: -24,2,6 运行结果: 2 2.7 写出下面程序的运

34、行结果 : main() int i,j,m,n; i=8;j=10; m=+i; n=j+; printf(%d,%d,%d,%dn,i,j,m,n); 运行结果: 9, 11, 9, 10 2.8 写出下面程序的运行结果 : main() float x=5.4; int i; i=(int)x; printf(”x=%f,i=%dn,x,i); 运行结果: x=5.400000,I=5 第四章 最简单的 C程序设计 顺序程序设计 4.1 C语句概述 4.2 赋值语句 4.3 数据输入输出的概念及实现 4.4 字符数据输入输出函数 4.5 格式输入与输出 4.6 顺序结构程序设计举例 4.

35、1 C语句概述 与其他高级语言一样, C语言的语句用来向计算机系统发 出操作指令。 一个语句经编译后产生若干条机器指令。 一个实际的程序应当包含若干条语句。 C语句都是用来完成一定的操作任务的;声明部分的内容 不应称为语句。如: int a;不是一个 C语句,它不产生机 器操作,而只是对变量的定义。 C程序结构 C程序 源程序文件 1 源程序文件 2 源程序文件 n 预处理命令 全局变量声明 函数 1 函数 n 函数首部 函数体 局部变量声明 执行语句 . C语句分类 C语句可以分为以下 5类: 1. 控制语句; 2. 函数调用语句; 3. 表达式语句; 4. 空语句; 5. 复合语句; 1.

36、 控制语句 完成一定的控制功能。 C只有 9种控制语句: if() else ( 条件语句 ) for() ( 循环语句 ) while() ( 循环语句 ) do while() ( 循环语句 ) continue ( 结束本次循环语句 ) break ( 中止 switch或循环语句 ) switch ( 多分支选择语句 ) goto ( 转向语句 ) return ( 从函数返回语句 ) ( )表示条件,表示内嵌的语句 。 2. 函数调用语句 由 一次函数调用 加 一个分号 构成一个语句。 如: printf(“This is a C statement.”); 一次函数调用 分号 3.

37、 表达式语句 由一个表达式构成一个语句;最典型的是,由赋值表达式 构成一个赋值语句(表达式后面加分号即构成语句)。如: a=3是一个赋值表达式,而 a=3;是一个赋值语句。 一个语句必须在最后出现分号。 任何表达式都可以加上分号而成为语句。如: x+y;是语句, 但没有意义(没有将相加之和赋给另一个变量)。 表达式能构成语句是 C语言的一个重要特色。 C中大多数 语句是表达式语句(包括函数调用语句),所以有人称 C 语言为 表达式语言 。 4. 空语句 空语句:仅包含一个分号的语句 , 它什么都不做 。 有时用来做 被转向点 , 或是 循环语句中的循环体 ( 循环体是空语句 , 表示循环体什么

38、也不做 。 ) 如 : ; 5. 复合语句 由大括号 括起来的语句序列,称为复合语句,或 是分程序。 如: z = x + y; t = z / 100; printf(%f,t); 注意:复合语句中最后一个语句最后的分号不能忽略不 写。 C语言允许一行写几个语句,也可以一个语句拆开写在 几行上。 4.2 赋值语句 C语言的赋值语句具有其他高级语言赋值语句的一切特点 和功能,但也有不同之处: 1、 C语言中的赋值号 = 是一个运算符,而其它大多数 语言中赋值号 = 不是运算符。 2、关于赋值表达式和赋值语句的概念。其他大多数高级 语言中没有 赋值表达式 这一概念。作为赋值表达式可 以包括在其他

39、表达式之中,如: if(a=b)0) t=a;(先赋值,将 b的值赋给 a;再判断 a是 否 0,若 0,则执行 t=a; ) if(a=b;)0) t=a;(不合法: if条件不能包含赋值语句) 4.3 数据输入输出的概念及实现 所谓输入输出是以计算机主机为主体而言的。从计算机向 外部输出设备(显屏,打印机)输出数据称为 输出 ; 从输入设备(键盘,磁盘)向计算机输入数据称为 输 入 。 C语言本身不提供输入输出语句,输入和输出操作是由函 数来实现的。 在 C的标准函数库中提供了一些输入输出函数,例如, printf函数和 scanf函数。在使用它们时,千万不要简单地 认为它们是 C语言的

40、输入输出语句 。 printf和 scanf不是 C语言的关键字。完全可以不用 printf和 scanf这两个名字, 而另外编两个函数,另用其它函数名。 C提供的 函数 以 库 的形式存放在系统中,它们不是 C语言 文本中的组成部分。因此各函数的功能和名,在各种不同 的计算机系统所不同。 有些通用的函数(如 printf和 scanf等),各种计算机系统 都提供,成为各种计算机系统的标准函数(标准输入输出 库的一部分)。在程序编译连接时,用户程序与标准文件 相连,所以在程序中可以直接使用 printf和 scanf函数。 注意:在源程序中有 printf函数,在编译时并不把它翻译 成目标指令

41、,而是在执行阶段中调用已被连接的函数库中 的 printf函数。 C语言函数库中有一批标准输入输出函数,它是 以标准的输入输出设备(一般为终端设备)为输入输 出对象的。其中有: putchar(输出字符) getchar(输入字符) printf(格式输出) scanf(格式输入) puts(输出字符串) gets(输入字符串) 在使用标准 I/O库函数时,要用预编译命令 #include”将 stdio.h”文件包括到用户源文件中。即 #include “stdio.h”(或 #include )。 stdio.h是 standart input a=B; b=O; c=Y; putchar

42、(a); putchar(b); putchar(c); 运行结果: BOY 也可以输出控制字符,如 putchar(n)输出一个换行符。 如果将例 4.1程序最后一行改为: putchar(a);putchar(n);putchar(b);putchar(n); putchar(c);putchar(n); 则输出结果为: B O Y 也可以输出其它转义字符,如: putchar(101) (输出字符 A) putchar() (输出单引号字符 ) putchar(015) (输出回车,不换行,使输出的 位置移到本行开头) 4.4.2 getchar函数 此函数的作用是从终端(或系统隐含指定

43、的输入设备)输 入一个字符。 getchar函数没有参数,其一般形式为: getchar() 函数的值就是从输入设备得到的字符。 例 4.2: #include stdio.h main() char c; c=getchar(); putchar(c); 在运行时,如果从键盘输入字 a a (输入 a后,按 “ 回车 ” 键,字符才送到内存) a (输出变量 c的值 a) 请注意, getchar()只能接收一个字符。 getchar函数得到 的字符可以赋给一个字符变量或整型变量,也可以不赋 给任何变量,作为表达式的一部分。 例如,例 4.2第 4、 5行可以用下面一行代替: putchar

44、(getchar(); 也可以用 printf函数: printf(%c,getchar(); 在函数中要用 getchar函数,应该在函数的前面(或本文 件开头)用 #include stdio.h”。 因为在使用标准 I/O库中 的函数时需要用到 stdio.h” 文件中包含的一些信息。 4.5 格式输入与输出 4.5.1 printf函数(格式输出函数) 4.5.2 scanf函数(格式输入函数) 4.5.1 printf函数 1. printf函数的一般格式 2. 格式字符 printf函数的一般格式 printf函数的作用是:向终端(或系统隐含指定的输 出设备)输出若干个任意类型的数

45、据。 注意: putchar只能输出字符,而且只能是一个字符; 而 printf可以输出多个数据,且为任意类型。 一般格式: printf(格式控制,输出列表) 如 : printf(“%d , %c n” , i,c) 格式说明: 将数据转换 为指定格式输出 。 普通字符: 即需要原样 输出的字符 (逗号,空 格和换行符) 输出列表:需 要输出的数据, 可以是表达式。 例 : printf(“a=%d_b=%d”,a,b); 双引号中的字符除了 “ %d”和 “ %d”以外,还有非格式 说明的普通字符 “ a=”、“ b=”及空格 “ _”, 它们按原样输 出。若 a=3,b=4, 则输出为

46、: a=3_b=4 格式字符 对不同类型的数据用不同的格式字符。 常用的有以下几种格式字符: (1) d格式符 (6) s格式符 (2) o格式符 (7) f格式符 (3) x格式符 (8) e格式符 (4) u格式符 (9) g格式符 (5) c格式符 d格式符:输出十进制整数 %d: 按整型数据的实际长度 输出; %md: 输出 m位 ( 指定的输出字段宽度 ) ; (数据位数 小于 m位时左端补空格 , 大于 m位时按实际长度输出 ); %ld,%mld:l表示输出 长整型 数据 , 也可以指定输出 字段宽度; 一个 int型数据可以用 %d或 %ld格式输出; 注: %后面的 m(位数

47、控制 ) 对于其它格式符也适用 。 例 、 ( 表示空格 ) int i = 123; long j = 123456; printf(%d,%5d,%ld, %8ld ,i ,i , j, j); 输出 : 123, 123, 123456, 123456 c格式符:输出一个字符 一个整数,只要它的值在 0 255之间,也可以用字符形 式输出。在输出前,系统会将该整数作为 ASCII码转换成 相应的字符;反之,字符数据也可以用整数形式输出。 例 :4.4 main() char c=a; int i=97; printf(%c,%dn,c,c); printf(%c,%dn,i,i); 可以

48、指定输出字段宽度: printf(“%3c”,c);则输出: _a 输出: a,97 a,97 s格式符:输出一个字符串 (1)%s:原样输出字符串; 如: printf(“%s”,“CHINA”)输出: CHINA (2)%ms:输出字符串占 m列; m全输出 m左补空格; (3)%-ms:输出字符串占 m列; m,则 m自 动取 n值,即保证 n个字符正常输出。 例 4.5 main() printf(%3s,%7.2s,%.4s,%-5.3sn, CHINA,CHINA,CHINA,CHINA); 输出 : CHINA, CH,CHIN,CHI m自动取 n值,即 等价于: 4.4s f

49、格式符:以小数形式输出实数(单 /双精度) (1)%f:由系统自动指定字段宽度,使整数部分全部输出, 并输出 6位小数。 (2)%m.nf:指定输出的数据共占 m列,其中由 n位小数。若 数值长度 m,则左端补空格。 (3)%-m.nf:同 %m.nf,只是输出的数值向左端靠,右端补 空格。 注意:并非全部数字都是有效数字。 单精度 实数的有效位数一般为 7位 ,而 双精度 实数的有效 位数一般为 16位 (小数 6位)。 例 4.6 main() float x,y; x=111111.111;y=222222.222; printf(“%f”,x+y); 运行结果为 : 333333.32

50、8125 显然,只有前 7位数字是有效数字。 例 4.7 main() double x,y; x=1111111111111.111111111; y=2222222222222.222222222; printf(“%f”,x+y); 运行结果为 : 3333333333333.333010 可以看到,最后 3位小数(超过 16位)是无意义的。 例 : 4.8 main() float f=123.456; printf(%f %10f %10.2f %.2f %-10.2fn,f,f,f,f,f); 输出 : 123.455994 123.455994 123.46 123.46 123

51、.46 按原样输出的字符 由于格式定义而输出的字符 4.5.2 scanf函数 getchar函数只能用来输入一个字符,用 scanf函数 可以用来输入任何类型的多个数据。 在前面已初步接触到了 scanf函数,在本节中再作详 细介绍。 1. 一般形式 2. 格式说明 3. 使用 scanf函数时应注意的问题 一般形式 scanf(格式控制,地址表列) 格式控制 含义同 printf函数。 地址表列 是由 若干个地址组成的表列,可能是变量的地址,或字 符串的首地址。 例 4.9:用 scanf函数输入数据 main() int a,b,c; scanf(%d%d%d, printf(%d,%d

52、,%dn,a,b,c); 运行时按以下方式输入 a,b,c的值: 3 4 5 (输入 a,b,c的值) 3,4,5 (输出 a,b,c的值) scanf(%f,%f,%f , s = 1.0/2*(a+b+c); area = sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%7.2f, b=%7.2f, c=%7.2fn,a,b,c); printf(area = %7.2fn,area); 运行情况如下: 3, 4, 6 a= 3.00, b= 4.00, c= 6.00 area = 5.33 例 4.11输入一个大写字母,改为小写字母输出。 #include ma

53、in() char c1,c2; c1=getchar(); printf(“%c,%dn”,c1,c1); c2=c1+32; printf(“%c,%dn”,c2,c2); 运行情况如下 : A A,65 a,97 第 5章 选择结构程序设计 C语言中选择结构是用 if语句实现的。 if语句最常用的形式是: if (关系表达式 ) 语句 1 else 语句 2 例如: if (x0) y=1;else y=-1; 其中, x0是一个关系表达式, ”是一个关系运 算符。 5.1 关系运算符和关系表达式 5.2 逻辑运算 5.3 if语句 5.4 switch语句 5.5 程序举例 5.1 关

54、系运算符和关系表达式 关系运算是逻辑运算的一种。 所谓 关系运算 实际上是 比较运算 。将两个值进 行比较,判断比较的结果是否符合给定的条件。 例如, a3是关系表达式,大于号 ”是一个关系运算 符,如果 a的值为 5,则满足给定的的 a3” 条件,因 此关系表达式 a3的值为 真 (即 条件满足 ); 如果 a的值为 2,不满足 a3” 条件,则称关系表达式 的值为 假 。 5.1.1 关系运算符及其优先次序 5.1.2 关系表达式 5.1.1 关系运算符及其优先次序 C语言有六种关系运算符: ( 1) 小于 ( 2) 大于 ( 4) = 大于或等于 ( 5) =( 等于 ) 优先级相同 (

55、 低 ) ( 6) != 不等于 算术运算符 关系运算符 赋值运算符 5.1.2 关系表达式 用关系运算符将两个表达式(算术表达式或关系表达式、 逻辑表达式、赋值表达式、字符表达式)连接起来的式 子,称为关系表达式。 如: ab,a+bb+c,(a=3)(b=5),ab”的值为真, 表达式的值为 1; b+ca+b 等效于 c(a+b) 表达式的值为 0 2). ab=c 等效于 (ab)=c 表达式的值为 1 3). a!=bc 等效于 a!=(bc 等效于 a=(bc)(赋值表达式) 表达式的 值为 1 例 :a=3,b=2,c=1; d=abc f的值为 0 (赋值表达式) 5.2 逻辑

56、运算 5.2.1 逻辑运算符及其优先次序 5.2.2 逻辑表达式 5.2.1 逻辑运算符及其优先次序 C语言提供三种逻辑运算符: 表达式 语句 假 (0) 真 (非 0) (2) if(表达式) 语句 1 else 语句 2 例如: if (xy) printf(%d,x); else printf(%d,y); 表达式 语句 1 语句 2 假 真 (3) if (表达式 1) 语句 1 else if(表达式 2) 语句 2 else if(表达式 3) 语句 3 else if(表达式 m) 语句 m else 语句 n 例如: if (num500) cost=0.15; else if

57、 (num300) cost=0.10; else if (num100) cost=0.075; else if (num50) cost=0.05; else cost=0; . 表达式 1 表达式 2 表达式 3 表达式 4 语句 5 语句 4 语句 3 语句 2 语句 1 假 假 假 假 真 真 真 真 对 if语句的三点说明 ( 1) if后面的 表达式 ,一般为 逻辑表达式 或 关系表达 式 。 例如: if(a=b 系统对表达式的值进行判断,若为 0,按 假 处理,若 为非 0,按 真 处理,执行指定的语句。 表达式可以是任意的数值类型(包括整型、实型、字符型、 指针型数据)。

58、例如: if(3) printf(“O.K.”);执行结果: O.K. if(a) printf(“%d”,a);执行结果: 97 ( 2)第二、第三种形式的 if语句中,在每个 else前面有 一分号,整个语句结束处有一分号。 例如: if (x0) printf(“%f”,x); else printf(%f,-x); 这个分号是 if语句中的内嵌语句所要求的。 如果无此分号,则出现语法错误。 ( 3)在 if和 else后面可以只含一个内嵌的操作语句,也可以有 多个操作语句。若有多个操作语句,则用花括号 ” 将 几个语句括起来成为一个复合语句。 例如: if(a+bc area=sqrt

59、(s*(s-a)*(s-b)*(s-c); printf(area=%6.2f,area; else printf(it is not a trilateral); 注意:在 外面不需要再加分号。 例 5.1: 输入两个实数,按代数值由小到大 输出这两个数。 main() float a,b,t; scanf(%f,%f, if (ab) t = a; a = b; b = t; printf(%5.2f,%5.2f,a,b); 运行示例: 3.6 ,-3.2 -3.20, 3.60 a b? 交换 a、 b的位置 假 真 例 5.2: 输入三个数 a,b,c, 按由小到大输出 。 main(

60、) float a,b,c,t; scanf(%f,%f,%f, if (ab) t = a; a = b; b = t; if (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); 运行示例 : 3,7,1 1.00,3.00,7.00 3 7 1 3 7 1 1 7 3 1 3 7 5.3.2 if语句的嵌套 一般形式: if ( ) if ( ) 语句 1 else 语句 2 else if ( ) 语句 3 else 语句 4 *注意:使用嵌套 if语句时 , 必须

61、特别注意 if与 else配对: (1)从最内层开始 , else总是与它上面最接近的 ( 未曾配对 的 ) if配对 。 (2)避免 if与 else配对错位的最佳办法是 加大括号 , 同时 , 为 了便于阅读 , 使用适当的缩进 。 ( 只有大括号能保证 if 和 else不错位配对 , 缩进只是为了便于阅读 ) 内嵌 if 内嵌 if 5.3.3 条件运算符 若 if语句中,在表达式为 真 和 假 时,且都只执行 一个赋值语句给同一个变量赋值时,可以用简单的条件运 算符来处理。 例如: if(ab) max=a; else max=b; 可以用下面的条件运算符来处理: max=(ab)?

62、a:b;其中 (ab)?a:b”是一个 条件表达式 。它是这样执行的: 如果 (ab)条件为真,则条件表达式取值 a,否则取值 b。 条件运算符要求有三个操作对象,称三目(元)运算符。 它是 C语言中唯一的三目运算符。条件表达式的一般形 式为: 表达式 1?表达式 2:表达式 3 表达式 1 条件表达式 取表达式 2的值 条件表达式 取表达式 3的值 假( 0) 真(非 0) 5.4 switch语句 switch语句是多分支选择语句。 if语句只有两个分支可供 选择,而实际问题中常常需要用多分支的选择。 一般形式 : switch(表达式 ) case 常量表达式 1:语句 1 case 常

63、量表达式 2:语句 2 case 常量表达式 n:语句 n default :语句 n+1 例:按照考试成绩的等级打印出百分之分 数段。 grade 输出 “ 60 69” 输出 “ 60” 输出 “ error” 输出 “ 70 84” 输出 “ 85 100” 用 switch语句实现 switch(grade) case A:printf(85 100n); case B:printf(70 84n); case C:printf(60 69n); case D:printf(60n); default :printf(errorn); 问题 1:各个 case和 default的出现次

64、序影响执行结果吗? 问题 2:若 grade=B,以上程序的输出结果是什么? Default的出现次序 会不会影响结果?和 书中意见不同。 应该在执行一个 case分支后,使流程跳出 switch结构, 即终止 switch语句的执行。可以用一个 break语句来达到 此目的。 switch(grade) case A:printf(85 100n);break; case B:printf(70 84n);break; case C:printf(60 69n);break; case D:printf(60); break; 习题 5-6:判别学生成绩的等级 : 小于 60分 ,E级 ;

65、小于 70分 ,D级 ; 小于 80分 ,C级 ; 小于 90分 ,B级 ; 小于 100分 ,A级 ; (1)算法 : 分数 /10: 6 ,E级 7 ,D级 8 ,C级 9 ,B级 10 ,A级 60 70 80 90 100 6 7 8 9 10 A B C D E 5.5 程序举例 60 E 假 真 70 D 假 真 80 C 假 真 B 90 0, 有两个不等实根 。 b2-4ac b)(与这个 if配对的 else是?) if (a0) printf(A); else if (b-5) printf(B); else printf(C); printf(n); 1.A 2.C 3.

66、B 4. 2. 本程序的作用是判断 year是否闰年,如是闰年则输出 leap year”字样,闰年的条件是符合下面二者之一: 能被 4整除,但不能被 100整除;能被 4整除,又能被 400整除。请对程序填空 (填入一个运算符 )。 main( ) int year; scanf(%d, if(year%4=0_year%100=0)_year%400=0) printf(leap year); 第 5章小结 一、运算符 关系运算符 : 、 =、 、 b) ? a : b; c(a+b) ( ab) (2)从循环体中跳转到循环体外。 例 6.1:用 if语句和 goto语句构成循环,求 main() int i,sum=0; i = 1; loop: if (i = 100) sum = sum + i; i+; goto loop; printf(%d,sum); sum=sum+i i=i+1 i=100 假 真 i=1,sum=0 100 1i i 6.3 while语句 一般形式: while (表达式 ) 语句 。 作用:实现 当型 循环结构。当表达式为非 0值时

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!