第2章简单的C程序设计.ppt

上传人:本田雅阁 文档编号:3425116 上传时间:2019-08-24 格式:PPT 页数:74 大小:2.79MB
返回 下载 相关 举报
第2章简单的C程序设计.ppt_第1页
第1页 / 共74页
第2章简单的C程序设计.ppt_第2页
第2页 / 共74页
第2章简单的C程序设计.ppt_第3页
第3页 / 共74页
第2章简单的C程序设计.ppt_第4页
第4页 / 共74页
第2章简单的C程序设计.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《第2章简单的C程序设计.ppt》由会员分享,可在线阅读,更多相关《第2章简单的C程序设计.ppt(74页珍藏版)》请在三一文库上搜索。

1、第二章简单的C程序设计,程序处理的基本过程,开始,输入数据,x=2,y=3,外设,z=x+y,数据处理,输出数据,5,外设,结束,数据表示,主 要 内 容,数据及其表示方法; 数据的基本运算; 基本输入输出。,程序是对数据按照算法处理,并输出结果的过程,因 此,以上三个问题是程序设计的基本问题。,2.1 C语言的数据极其类型,2.1.1 C语言的数据,数据是对客观事物特征抽象的符号化表示,客观事物不同,表 示的方法也不同(人数以整数表示,圆面积用小数表示,灯的状态 用开关表示,信件要用文字表示),计算机的处理方法也不同,因 此根据程序处理的数据对象,应规定数据的类型。,计算机由于工程的限制,只

2、能在有限精度和有限范围内在工程 上近似地描述操作的对象数据。,数据类型决定了数据的如下特征:,数据的外部表示方式和内部存储方式不同; 表示的范围和精度不同; 对数据的处理方式不同。,2.1.2 C语言的数据类型,C语言的数据类型,基本类型,字符型 char,浮点型 float double,构造类型,数组、结构、联合、枚举型 enum,指针类型,空类型 void,整 型 int,2.2 常量(Constant)及其类型,常量的概念,在程序中不能改变的量称为常量。常量的类型由数据的外部表 现形式确定。,2.2.1整型常量的表示,整型常量根据表示的范围可以有一般整型和长整型,还可以表 示为十进制、

3、八进制、十六进制形式。长整型常量加后缀l或L。 十进制整型常量由10个数字组成序列,第一个数字不能是0。 八进制整型常量第一个数字为0,由07个数字组成序列。 十六进制以0x或0X开头,由09及af(AF)组成序列。,2.2.2 实型常量,实型常量的表示形式,十进制小数形式,规则:一个小数点、符号和至少一位数字。 如:12.34、 0.123 、 -3.4 、 3. 、 .123,十进制指数形式 指数表示方式规则:,规则:men 表示 m10n,n小数部分,整型常量或小数形式表示的实型常量。,指数部分,两位或三位整数。,m决定精度,一般精度为7位;n决定范围,范围10-38到 10+38,当超

4、过范围时称为“溢出”,小于10-38称为下溢,当0处理,大于10+38,称为上溢,系统出错!,123.456 表示为 0.123456E+3 -10000000 表示为 -1e7 0.0000123 表示为 0.123e-4 规范化的指数形式:1.23456e+2,实型常量的分类,实型常量分为三类:,单精度实型常量: 在实型常量后跟字母F或 f 表示,如:1.2F、-1.2f等。,双精度实型常量: 其后没有字母,是系统的默认形式,如:1.2、-2.3等,长双精度实型常量: 在实型常量后跟字母L或 l 表示,如:1.2L、-1.2l等。,各种精度实型常量的区别在于其表示的的精度和范围不同。在 程

5、序设计时,根据数据精度和范围可以进行选择。,2.2.3 字符型常量,表示ASCII字符集中的一个字符。 表示方法:a 、 ! 。撇号(单引号)定界的一个字符。 字符有一个整型值,即该字符的ASCII码值。因此字符可以参加 运算。如: A + 2其值为:65 + 2 即67。,转义字符是C语言表示字符的特殊方法,用来表示ASCII字符集 中的控制字符,以及系统占用字符如:。转义字符都已作为开始。,2.2.4字符串常量,一对双引号“”括起来的字符序列。 系统会在最后一个字符后加NULL(ASCII码值为0),标志字符串的结束。,如:”Hello!”,72,101,108,108,111,33,0,

6、H,e,l,l,o,!,0,”Hello!” 在内存中的存储结构:,2.3 变量(Variable),2.3.1 变量及其说明,在程序中变量是未知的、可以改变的量。由于变量的值是未知 的,无法像常量那样书写出来,因而必须为变量取一个名称,在C 语言中用标识符为变量命名,如变量a;由于变量名a本身并不能表 示变量的数据类型,因此必须说明变量的数据类型,即变量必须先 说明,再使用。,变量的说明,说明形式: 类型说明符 变量名表;,类型说明符必须是C语言合法的数据类型。 变量名表中的变量名必须满足C语言中标识符的命名规则。 变量名表是以逗号相间隔的、用标识符代表的变量。,如:int a, b, c;

7、 /* 定义a、b、c为整型变量 */ float score, aver; /* 定义score和 aver 为实型变量 */ char name; /* 定义name为字符型变量 */ double s; /* 定义s 为双精度型变量 */,使用变量时应注意的几个问题,在C语言中,变量必须说明在先,使用在后,而且所有变量 的说明必须在第一条可执行语句之前; 用标识符给变量命名时,应遵循“见名知意”的原则; C语言允许在说明变量的同时为变量赋初值(初始化); 如:int a=0 ; /* 说明a为整型变量且初值为0 */ 变量一经说明,系统为此变量分配内存单元,变量名是内存 单元的标识,变量

8、值是内存单元中存储的数据; 变量一经说明,就具有了确定的数据类型,系统为此变量分 配确定长度的内存单元,它的表示范围也就确定,而究竟分配几个 内存单元,与具体的计算机系统和使用的编程环境有关。,2.3.2 整型变量,整型变量的说明,整型变量说明语句的一般形式为: 修饰符 int 变量名表;,int是整型变量的类型说明符; 修饰符可以是short(短整型)、 long(长整型)、 signed (有符号整型) 、unsigned(无符号整型); 变量名表是以逗号相间隔的、用标识符代表的变量。,如: int temp; /* 说明有符号整型变量temp */ unsigned int age; /

9、* 说明无符号整型变量age */ long len, sum; /* 说明有符号长整型变量len和sum */,整型变量的分类,整型变量有以下三种类型。 短整型: 以short或short int 说明; 基本整型:以int说明; 长整型: 以long或long int说明。,对于上述三种类型可用signed或 unsigned修饰,默认为: signed。,整型变量的数据长度和取值范围,整型变量在计算机内部占用的字节数量和取值范围与具体的计算机系统和使用的编程环境有关 。如下表:,其中,int和unsigned int在不同的系统中可能用2个字节(TC), 也可能用4字节(VC)为变量分配

10、内存。 有符号整型变量a,第一位0(正,1为负)是符号位,其值=32767 无符号整型变量b,第一位1就是数据位,其值=65535,【例2-1】整型数据的取值范围示例(本例在VC+环境下运行),/* example 2-1(a) */ /* 无符号整型数据的取值范围 */ #include void main(void) unsigned long int a,b; a = 4294967295; b = a+1; printf(“a=%u “,a); printf(“b=%u “,b); ,编写代码2-1(a) ,其执行结果如图所示,例题:整型数据的溢出,main() int a,b; a=

11、32767; b=a+1; printf(“%d,%d”,a,b); 输出为:32767,-32768(此例为TURBOC环境下) a:32767 b:-32768 注意:计算机中,数值是以补码形式表示的。 正数的补码与原码相同。 负值补码求法:将该数绝对值的二进制形式,按位取反再加1。,/* example 2-1(b) */ /* 有符号整型数据的取值范围 */ #include void main(void) 图2-1(b) 代码2-1(b)的执行结果(此例为VC+下) int a,b; a = 2147483647; b = a+1; printf(“a=%d “,a); printf

12、(“b=%d “,b); ,编写代码2-1(b)如下,其执行结果如图所示,2.3.3 实型变量,实型变量的说明,实型变量说明语句的一般形式为: float 变量名表; double 变量名表; 其中: float 和double是实型变量的类型说明符; 变量名表是以逗号相间隔的、用标识符代表的变量。 如: float temp; /* 说明单精度浮点型变量temp */ double wid; /* 说明双精度浮点型变量wid */,实型变量的分类,实型变量根据精度及范围分为两类: 单精度浮点型:以float说明; 双精度浮点型:以double说明; double类型变量的精度和范围要比flo

13、at大,需占用更多的内存。,实型变量的数据长度和取值范围,实型变量在计算机内部占用的字节数量和取值范围与具体的计 算机系统和使用的编程环境有关, 如下表:,实型变量的精度,实型变量都是以浮点数形式存储的,而分配给尾数部分的位数 是有限的,因而有效位数也是有限的。 当数据的值超出取值范围时,超出的部分将丢失;当数据的位 数超出有效位数时,超出的部分将舍弃,由此将产生一定的误差。 如:设a是单精度浮点型,其只能保留7位有效数字,当为a赋值为 123456789.00时,超出有效位数的数字89将丢失,a实际得到的值 为1234567?,其中前7位是精确的,而后2位将是随机值。,【例2-2】实型数据的

14、精度示例,/* example 2-2 */ /* 实型数据的精度 */ #include void main(void) float a; a = 123456789.00; printf(“a=%f “,a); ,编写代码2-2如下,其执行结果如图所示,2.3.4 字符型变量,字符变量的说明,字符变量说明语句的一般形式为: char 变量名表; 其中: char是字符变量的类型说明符; 变量名表是以逗号相间隔的、用标识符代表的变量。 如: char c; /* 说明字符变量c */ char ca = A; /* 说明字符变量ca ,且为其赋初值A */,字符变量的存储,字符变量一经说明,

15、计算机系统为其分配一个字节,用于存放 这个字符,计算机系统中存储的不是这个字符本身,而是这个字符 对应的ASCII码。 如:char ca = A; 则计算机系统为其分配一个字节,存储字 符A 的ASCII码值,即二进制0100 0001(八进制101、十进制65、 十六进制41) 。,【例2-3】字符数据和整型数据的通用示例,/* example 2-3 字符数据和整型数据的通用 */ 图2-3 代码2-3的执行结果 #include void main(void) char c1,c2; c1 = A; c2 = c1+1; printf(“c1=%c, %d, %o, %x “,c1,c

16、1,c1,c1); printf(“n“); printf(“c2=%c, %d, %o, %x “,c2,c2,c2,c2); ,编写代码2-3如下,其执行结果如图所示,2.4 常用运算符与表达式,程序的核心是对数据按照算法进行处理(运算)。C 语言提供 了强大的数据运算功能。数据通过运算符连接的式子称为表达式, 表达式根据运算关系对数据运算,并得到一个值。,2.4.1 运算符和表达式,运算符及其分类,按功能可将运算符分为: 算术运算符 赋值运算符 关系运算符 逻辑运算符 条件运算符 逗号运算符等,按其需要的运算数的个数分为:,单目运算符:单目运算符是需要一个运算数的运算符, 双目运算符:双

17、目运算符是需要两个运算数的运算符, 三目运算符:三目运算符是需要三个运算数的运算符。,表达式,表达式是用各种运算符将各种运算数据连接起来的式子。表达 式中的数据可以是常量、变量、函数和表达式;表达式中的运算符 可以是C语言提供的各种运算符;表达式中的数据按照一定的运算 顺序、在各种运算符的作用下得到一个运算结果,即表达式的值。,书写表达式应注意以下几个问题: 表达式中乘号不能省略。 表达式中只能出现C语言的合法标识符,如:这个符号就不 能使用,2r应写成2*3.14159*r。 C语言的表达式中没有中括号和大括号,如果需要多重括号, 应使用小括号套用小括号。,2.4.2 算术运算符,算术运算符

18、,算术运算符用于对整型、实型等数值型数据进行运算,字符参 加运算是以其对应的ASCII码值参加运算,算术运算的结果为数值。,算术运算符如下表:,说明, 整型除(/)运算的结果还是整型,运算会有误差。 求余(%)运算只能对整型和字符型数据运算,余数与被除数 同号。,自加和自减(+ 和 -)运算 自加和自减运算是C语言中常用的运算符,使用时应注意以下 几个问题: 自加和自减运算只对变量有效,表示变量在原值的基础上加 1或减1,对于常量和表达式无效。 如:a+ 是合法的,相当于a = a+1; 2+ 是非法的,因为2是常量; (a+b)+ 是非法的,因为a+b是表达式。 自加和自减运算的位置可以放在

19、变量的前面,也可以放在变 量的后面。 放在前面:表示先对变量加1或减1,再参加其他运算; 放在后面:表示先参加其他运算,再对变量加1或减1。,【例2-4】自加和自减运算前置和后置示例,/* example 2-4(a) */ /* 自加和自减运算前置示例 */ #include void main(void) int a,b; a = 5; b = +a; printf(“a=%d, b=%d “,a,b); printf(“n“); /* 换行*/ a = 5; b = -a; printf(“a=%d, b=%d “,a,b); ,编写代码2-4(a) 如下,其执行结果如图所示,/* ex

20、ample 2-4(b) */ /* 自加和自减运算后置示例 */ #include void main(void) int a,b; a = 5; b = a+; printf(“a=%d, b=%d “,a,b); printf(“n“); /* 换行*/ a = 5; b = a-; printf(“a=%d, b=%d “,a,b); ,编写代码2-4(b) 如下,其执行结果如图所示,2. 算术表达式,算术表达式是用算术运算符将各种数据连接起来的、符合一定语法规则的式子,算术表达式的值是按照一定的运算规则进行的,必须按照相应的顺序进行,即存在优先级的问题。,算术运算符的优先级是:先乘除

21、,后加减,同一优先级内按运算符的结合方向进行,即是“自左向右”的左结合,或是“自右向左”的右结合。必须注意的是,在不同的编程环境下,可能会有一定的差别,【例2-5】运算符的优先级和结合方向示例,/* example 2-5(a) */ /*运算符优先级和结合方向示例*/ #include void main(void) int a,b; a = 2; b = (a+)+(a+); printf(“ b=%dn“,b); printf(“ a=%d n“,a); ,编写代码2-5(a) 如下,其执行结果如图所示,/* example 2-5(b) */ /*运算符优先级和结合方向示例*/ #in

22、clude void main(void) int a,b; a = 2; b = (+a)+(+a); printf(“ b=%dn“,b); printf(“ a=%d n“,a); ,编写代码2-5(b) 如下,其执行结果如图所示,/* example 2-5(c) */ /*运算符优先级和结合方向示例*/ #include void main(void) int a,b; a = 2; b = (a+)+(+a); printf(“ b=%dn“,b); printf(“ a=%d n“,a); ,编写代码2-5(c) 如下,其执行结果如图所示,/* example 2-5(d) */

23、 /*运算符优先级和结合方向示例*/ #include void main(void) int a,b; a = 2; b = (+a)+(a+); printf(“ b=%dn“,b); printf(“ a=%d n“,a); ,编写代码2-5(d) 如下,其执行结果如图所示,2.4.3 赋值运算符,赋值运算符,C语言提供的赋值运算符是=,也称为赋值号。赋值运算符的作 用是将赋值号右边的数据赋给赋值号左边的变量,其结合方向为自 右向左。,如:“a=18”是将18赋给a ,则变量a取值为18。,赋值表达式,赋值表达式由赋值运算符连接一个变量和一个表达式的式子, 其一般形式为: 变量名 = 表

24、达式 其作用是:首先计算出赋值号右边表达式的值;再将此值赋给 赋值号左边的变量,赋值表达式的值就是赋给左边变量的值。,如: c=13%3 是先计算出13%3的值为1,再将此值赋给c; x=y=8 是先将值8赋给y,再将y的值赋给x;,赋值语句,赋值语句由赋值表达式末尾加一个分号,即构成了赋值语句, 其一般形式为: 变量名 = 表达式; 赋值表达式末尾加一个分号变成赋值语句后,就具有了语句的 特性,可以出现在任何允许语句出现的地方。如:c=13%3;为赋值 语句。,复合算术赋值运算符,在C语言中允许在赋值号前面加上算术运算符构成复合算术赋 值运算符,其含义和等价关系如下表:,2.4.4 关系运算

25、符,关系运算符,关系运算符用于比较两个数据之间的关系,以判断两个数据是 否满足比较关系,C语言提供了6个双目关系运算符,如下表:,关系表达式,关系表达式是用关系运算符连接的表达式,其一般形式为: 表达式 关系运算符 表达式 关系运算按关系运算符提供的关系从左向右比较两个数值,如 果关系成立,表达式的结果为1,否则,表达式的结果为0。,说明,相等关系比较是2个等号,1个等号的意义是赋值, 如:x=y 是判x和 y的值是否相等,x=y是将y的值赋给x ; 当比较2个字符关系时,比较的是字符的ASCII码; 关系表达式的结果只有2个取值,关系成立,取值为1,关系 不成立,取值为0; 关系运算符的优先

26、级为: 、=、= 这4个关系运算符的优先级相同; =、!= 这2个关系运算符的优先级相同; 前4种关系运算符的优先级高于后2种; 关系运算符的优先级低于算术运算符高于赋值运算。 关系运算符的结合性是左结合 。,2.4.5 逻辑运算符,逻辑运算符,C语言提供了3个逻辑运算符,其意义如下表:,说明: C语言中没有逻辑型数据,但C语言将任何非0的数据看成逻 辑值真(1),将0看成逻辑值假(0),因此整型、实型、字符型 数据都可以作为逻辑型数据;,说明:,逻辑运算符是用于对数据进行逻辑判断,判断的结果只有 2个(1或0),即系统在给出逻辑运算的结果时,用1代表真,用 0代表假; 逻辑运算符主要用于对数

27、据进行逻辑判断,并根据判断的 结果决定程序流程,常用在分支和循环中构造条件; 逻辑运算符的优先级: 逻辑非运算的优先级高于算术运算符; 逻辑与运算和逻辑或运算的优先级低于关系运算; 逻辑与运算的优先级高于逻辑或运算。 逻辑运算符的结合性: 逻辑运算符 & 和 | 是左结合。 !是右结合。,逻辑表达式,逻辑表达式是用逻辑运算符将逻辑型数据连接起来的式子,逻 辑表达式的一般形式为: ! 表达式 表达式 & 或 | 表达式,如: x 3 & x=3 & x=3 & x=A& ch=A& ch=a& ch=z 用于判断变量ch是否是字母。,2.4.6条件运算运算,格式: e1 ? e2 : e3,e1

28、、e2、e3为表达式,当e1非0时,运算结果取e2的值;当e1 为0时,取e3的值。,int a=2,b=3,c=-1,d; d=a?b:c; /*d为3*/ a=0; d=a?b:c; /*d为-1*/,2.4.6条件运算运算,2.4.7逗号表达式,格式: e1, e2, e3,en,用,分隔的表达式,计算顺序从 左到右,表达式取值为en;,x=(a=5,a+6)*10; printf(“%d,%d”,a,x); /*得a=5,x=110 */,2.4.8 sizeof 运算,形式: sizeof 数据对象; sizeof (类型说明符); 含义: 单目运算符,运算结果是存储该表达式值所需的

29、字节数。,int a,b,c; char ch=A; b=sizeof a; /*b的值为2(TC环境中) */ c=sizeof(float); /* c的值为4*/ sizeof(char); sizeof ch; /* 值都为1 */,注意:如果sizeof的运算对象是表达式,对该表达式不求值,如:i=10;sizeof +i; /*此时sizeof的值为2,而i值仍为10。*/,2.4.9语言常用数学函数,为方便用户使用,C语言系统定义了大量函数。数学函数主要目 的是求解常用数学函数,如sinX等。数学函数的原型定义在系统的 math.h头文件中。在使用此类函数时,应在程序的开始处加如

30、下语 句: #include ,使用方法:,作为一个运算项参加表达式运算。,函数的参数(自变量)、函数的值 都是double类型。,z=sqrt(sin(x)*sin(x)+cos(y)*cos(y),2.4.10 各种运算符的优先级,C语言允许任何类型的量参加各种,因此在一个表达式中可以 出现各种运算符,必须明确各个运算符的优先级和它们的结合性。 运算的优先级及结合性如下表:,高,2.4.11 数据类型的转换,表达式允许出现不同的类型,必须转换为相同的类型才能参加 运算,得到的值取其相同的类型。,同类型数据运算,如果运算对象的数据类型一致,运算结果保持同类型。 如: 3.8+7.8 两个运算

31、对象的数据类型都是实型,运算结果也为实型11.6 4/8 两个运算对象的数据类型都是整型,运算结果也为整型0。 整型除法存在误差,应尽量避免使用。,不同类型数据运算,如果运算对象的数据类型不一致,必须先将数据转换为同类型 的数据,再进行运算,转换原则分为两种情况:,表达式中数据类型的转换,转换向着表示范围更大的方向进行,即所谓的就高不就低。 原则如下:,char 、short int unsigned long double float,如: 4+8.8 其运算过程为先将整型4转换为双精度实型4.0,再进行 4.0+8.8的运算,结果为双精度的12.8 。,赋值语句中数据类型的转换,原则:以赋

32、值运算符左边的变量类型为准,即先将右边的数据 转换为与左边的变量一致的数据类型,再赋值 。 如: int x; x = 3.0/2.0;/*先计算3.0/2.0,得实型1.5,再将1.5转为整型1, 赋给整型变量x*/,强制类型转换,语言提供了另一种类型转换,将数据强制转换为需要的数据类 型,强制类型转换的一般形式为: (类型名)(表达式),说明: 类型名应加括号; 表达式尽量加括号,在增加可读性避免错误,同时培养良好 的程序设计风格; 强制类型转换后得到一个转换后的表达式值,并不改变变量 原来的数值和类型。,如: (int) x 是将x的值强制转换为整型值。 (int) (x)是将x的值强制

33、转换为整型值,与上一个意义相同, 但具有较好的风格。,练习:float c,x=1.5; int y; y=(int)x; c=x+y; printf(“%dn%f”,y,c);,2.5 基本的C语句,2.5.1 C语句,语句是构成函数的基本单位,每一条语句可以完成一个特定的 小功能,多条语句有机的组合在一起即可完成较大的功能 。,2.5.2 C语句分类,C语言的语句可以分为以下5大类: 表达式语句 在一个表达式末尾加一个分号,即构成了表达式语句。如: y = 2 + 3 ; 复合语句 用一对大括号将一些语句括起来,形成一段功能相对较为独立 的语句块,称为复合语句。如: a = a + b;

34、b = a - b; a = a - b; ,2.5.2 C语句分类,空语句 只有一个分号组成的语句,称为空语句,其一般形式为: ; 函数调用语句 函数是构成程序的基本单位,每一个函数可以实现一个特定的 功能,调用函数借助于被调用函数实现某个功能,调用函数的一般 形式为: 函数名(函数参数); 如: printf(”Hello!”);/*调用输出函数输出Hello! */ 控制语句 分支及循环流程的控制。如: for(i = 0; ii 100; i+) sum += i ; ,2.6数据的输入和输出Input &Output,2.6.1输入输出的概念,输入输出指的是内存变量或程序和外部设备间

35、的数据交换。,内 存,外 设,输入,输出,2.6.2 C语言中输入和输出的实现,C 语言没有输入输出语句,输入输出是通过系统定义的标准函 数来实现的。,I/O函数的原型定义在stdio.h头文件中,在引用I/O函数时,应 应在程序开始处加预处理语句包含头文件。 #include ,输入输出函数要描述: 输入输出的量; 输入输出的格式; 输入输出的设备。,2.7 字符数据的输入和输出,C语言中专门用于字符数据的输入输出函数是: 输入:getchar( ) 输出:putchar( ),2.7.1 putchar函数(字符输出函数),字符输出函数的调用格式为: putchar(c); 功能:通过标准

36、输出设备(显示器)输出一个字符。 说明: c可以是字符常量、字符变量或整型变量,当c是字符型数据 时,输出的是字符本身;当c是整型数据时,输出的是整型数据的 ASCII码对应的字符; c也可以是转义字符,以控制一个动作。 如:putchar(A); /* 输出字符A */ putchar(65); /* 输出ASCII码值对应的字符,即字符A */ putchar(n); /* 输出换行回车*/ putchar(015); /* 015是回车ASCII码,输出回车,即不换行而是使当前位置移到本行开头*/,2.7.2 getchar函数 (字符输入函数),字符输入函数的调用格式为: c = ge

37、tchar( ); 功能:从标准输入设备(键盘)输入一个字符,并将字符赋给 字符变量c。 说明: c是字符变量; 字符输入函数没有参数。 (3)也可以不赋值,直接getch(),函数的值就是输入的字符。,【例2-6】字符输入输出函数示例,/* example 2-6 字符输入输出函数 */ #include void main(void) char a,b,c,d=E; /* 说明字符变量,并给d 赋初值 */ a = A; /* 直接将字符常量赋给字符变量 */ b = a+32; /* 将字符表达式的值赋给字符变量 */ c = getchar(); /* 从键盘输入字符变量 */ put

38、char(a); /* 输出字符变量 */ 图2-6 代码2-6的执行结果 putchar(t); /* 跳到下一个制表位 */ putchar(b); putchar(n); /* 换行 */ putchar(c); putchar(t); /* 跳到下一个制表位 */ putchar(d); putchar(n); /* 换行 */ ,编写代码如下,其执行结果如图所示,2.7.3 变量获取数据的几种方法,编译系统为说明的变量分配内存,动态变量的存储单是一个随 机数,如果程序没有给这个变量赋值,在程序中使用的是一个随机 数,这将给程序埋下隐患,因此应养成为变量赋初值的好习惯。变 量的使用步骤

39、是:先说明,后赋值,再使用。,赋值的方法如下: 在定义变量的同时,为变量赋初值 C语言允许在说明变量的同时,为变量赋初值。 如: int a=0; /* 说明整型变量a,并给a 赋初值 */ 通过赋值语句 如: b = a+32; /* 利用赋值语句将表达式的值赋给变量b */ 通过输入函数 如: c = getchar();,2.8 格式输入和输出,2.8.1 printf函数,printf函数的一般形式,格式: printf(“输出格式字符串”,输出项列表);,格式描述。,用,分隔的常量、变量、表达式表。,输出格式字符串可包含以下内容:,普通字符 ,如:a=,转义字符,如:n,对于普通字符

40、和转义字符在相应位置原样输出,其中%用%。 printf(“nabcd%”); 输出结果: abcd%,格式说明符组,说明输出项列表中的各项的输出格式。格式 说明符组用%为开始标志。内容包含对一项输出对象的格式说明。,%-7.5f,格式说明类型表,格式说明符应和输出的列表项对应,产生相应的输出。其中输 出的表项应与格式说明符类型一致。,printf(“a=%5dnb=%f”, 2+3, 5.34);,详见P4445表2-14,格式说明串的一般形式和意义,% - m.n l 格式类型字符(一个字母),格式说明标志,对齐方式:缺省为右对齐,-为左对齐。,宽度.精度(位数),宽度:输出总列数,精度:

41、小数位数(或字符位数)。,类型长度,缺省短整型,l表示long或double。,详见P46表2-15 及下页例题,例题:关于格式说明符对比 void main() int a, i,j; float b; a=2; printf(“%4d“,a); printf(“n“); b=a; printf(“%-7.5f“,b); printf(“n“); printf(“%-7.3f“,b); printf(“n“); printf(“%+7.3f“,b); ,【例2-8】格式输入输出函数示例,/* example 2-8 格式输入输出函数 */ #include void main(void) i

42、nt a = -1; /* 定义有符号整型变量 */ unsigned b = 2; /* 定义无符号整型变量 */ float c = 3.3; /* 定义实型变量 */ char d = Y; /* 定义字符变量 */ printf(“a=%d,a=%5dn“, a,a); printf(“b=%-5u,b=%un“, b,b); printf(“n“); printf(“c=%f,c=%8.4f,c=%gn“, c,c,c); printf(“n“); printf(“d=%d,d=%5dn“, d,d); printf(“d=%c,d=%5cn“, d,d); ,2.8.2 scanf

43、函数,scanf函数的一般形式 scanf函数调用的一般形式为: scanf(“格式说明字符串”,输入变量地址列表);,scanf函数的功能: 从指定的输入设备上(默认为键盘)、按指定格式读取数据, 并将读取的数据赋给输入表列中的变量。,scanf函数的说明: 输入表列是以逗号相间隔的变量,而且必须代地址符&,不 能是常量,也不能是表达式; 格式控制字符串必须在一对双引号中,格式控制字符串可以 包含普通字符、转义字符、格式说明符几种信息,格式说明符在个 数、类型、顺序上应该与输入地址表列中的数据保持一致。,格式说明符,输入格式说明符及其功能如下表:,说明:,程序执行到scanf函数时,需要从指

44、定的输入设备上、按指 定格式读取数据。用户必须按照格式说明符从键盘上将数据,当输 入数据数量不够,则程序处于等待状态;如果用户敲入的数据格式 不正确,会导致错误的数据。, 数据输入结束 a:正常输入分隔是空格、多个空格或tab、回车。 b:按指定的宽度结束,如(5)中的%3d。 c:遇见非法输入。 如scanf(“%d%c%f”,应输入:34,56 2个数据之间以逗号分隔,scanf函数用%c输入一个字符时,空格等分隔符也作为一个 普通字符输入。 如: scanf(“%c%c”, 若输入:a b 则得到的是字符a和空格; 若输入:ab 则得到的是字符a和字符b。,说明:,scanf函数用%f输

45、入一个实型数据时,不能指定精度;,scanf函数用%d输入一个整型数据时,尽量不要指定宽度, 如果指定了宽度,则要求用户在输入时,也必须按对应宽度进行, 这不仅会给用户增加难度,还容易产生错误。 如: scanf(“%3d%3d”, 若输入: 12456 则:a 实际获得120,b实际获得450 若输入: 123456 则:a 实际获得12,b实际获得345 其长度系统自动截取,即中间不用空格等。,scanf函数输入时,格式说明符中尽量不要加其它辅助信息, 如需提示可采用另一种形式。如有其他字符,包括空格、逗号等都必须原样输入。 如: scanf(“a =%d“,(7)如果%后面有个“*”,叫

46、附加格式说明符,表示跳过它指定的列数。 例如: scanf(“%2d,%*3d,%2d“, 如输入“12,345,67”,则会得a=12,b=67,而345被跳过。,补充练习,void main(void) int a,b,a1,b1, a2,b2,a3,a4,b4; char c,c1; scanf(“%d%d“, ,格式输入输出函数示例,/* example 2-9 格式输入输出函数 */ #include void main(void) char a; /* 定义字符整型变量 */ unsigned b; /* 定义无符号整型变量 */ float c; /* 定义实型变量 */ int

47、 d; /* 定义有符号变量 */ printf(“a=? “); scanf(“%c“, /* 输出信息 */ ,2.9 简单顺序程序设计举例,【例2-10】任意输入2个实数,将这2个实数交换,/* example 2-10 交换2个实数 */ #include void main(void) float reala,realb,realtemp; /* 定义3个实型变量 */ printf(“reala=? “); scanf(“%f“, /* 输出交换后的信息 */ ,【例2-11】任意输入1个3位整数,找出它的个位、十位、百位,/* example 2-11 拆分3位整数个位、十位、百位 */ #include void main(void) int a ; /* 定义整数 */ int onedig,tendig,hundig; /* 定义个位、十位、百位 */ printf(“a=? ”); /* 输入三位整数 */ scanf(“%d“, /* 输出 */ ,【例2-12】任意输入1个小写字母,将其转换为大写字母,/* example 2-12 小写字母转换为大写字母 */ #in

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1