1、第2章 基本数据类型与运算符,返回总目录,目 录,2.1 数据类型和取值范围,2.2 运算符,2.3 输入/输出函数,2.4 习题二,返回总目录,基本要求:)熟悉C语言的常用数据类型;)熟悉C语言的常用运算符;)熟练掌握输入/输出函数的使用。 学习重点:)C语言运算符的使用;)输入/输出函数的使用。,2.1 基本数据类型和取值范围,2.1.1 基本数据类型和取值范围,数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作, 数据类型总表,返回目录, 基本类型及范围 (Visual C+ 6.0环境下),2.1 基本数据类型和取值范围,2.1.1 基本数据类型和取值范
2、围,2.1.2 常量与变量, 标识符,定义:用来标识变量、常量、函数等的字符序列 组成: 只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线 大小写敏感 不能使用关键字 命名原则: 见名知意 不宜混淆 如l与I, o与0,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 标识符,例:判断下列标识符号合法性 sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123,M.D.John,3days,#33,char,$123,ab,2.1 基本数据类型和取值范围,2.1.2 常量
3、与变量, 常量,定义:程序运行时其值不能改变的量(即常数) 分类: 符号常量:用标识符代表常量 定义格式: #define 符号常量 常量,如 #define PRICE 30,例 符号常量举例#define PRICE 30 main() int num,total;num=10;total=num*PRICE;printf(“total=%d“,total); ,一般用大写字母 是宏定义预处理命令,不是C语句 直接常量: 整型常量 实型常量 字符常量 字符串常量,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 常量-整型常量(整常数),三种形式: 十进制整数:由数字09和正负号表
4、示.如 123,-456,0 八进制整数:由数字0开头,后跟数字07表示.如0123,011 十六进制整数:由0x开头,后跟09,af,AF表示. 如0x123,0Xff,示例: 0571 = (377 )10 0x179 = (377 )10 0X179 = (377 )10,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 常量-整型常量(整常数),两种长度:整型常量按长度划分为两种:短整型和长整型(后缀为小写字母l或大写字母L),从长度来看: Turbo C中默认为短整型,如-377是一个短整型数,而 -377l或-377L表示-377是长整型数。 而在Visual C+ 6.0
5、中默认为长整型,如-377、-377l或 -377L均表示-377是长整型数。例:语句:printf(“%d,%d”,sizeof(-377),sizeof(-377L); 在Turbo C中的运行结果为:2,4 而在VC中的结果为:4,4 小结:从数据类型角度来分析,整型常量默认为int类型,而加上后缀(l或L)后,就是long int类型。,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 常量-实型常量(实数或浮点数),表示形式: 十进制数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123. 指数形式:(e或E之前必须有数字;指数必须为整数)如12
6、.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5,实型常量的类型 默认double型 在实型常量后加字母f或F,认为它是float 型 例:语句:printf(“%d,%d”,sizeof(0.123),sizeof(0.123F); 在Turbo C和VC中的运行结果均为:8,4,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 常量-字符常量,定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 a A ? n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,如 A65, a97,048 , n10,2.1 基本数
7、据类型和取值范围,2.1.2 常量与变量, 常量-字符常量,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 常量-字符常量,如 101 -A 012 -n376 - x61 -a60 -0 483 -(),例: A-101-x41-65,转义字符示例:,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 常量-字符常量,例 转义字符举例 main() printf(“101 x42 Cn“);printf(“I say:“How are you?“n“);printf(“C Programn“);printf(“Turbo C“); ,运行结果:(屏幕显示) A B C Isa
8、y:”How are you?” C Program Turbo C,例 main() printf(“Yb=n”);,运行结果: 屏幕显示:= 打印机输出:,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 常量-字符串常量,定义:用双引号(“ ”)括起来的字符序列 存储:每个字符串尾自动加一个 0 作为字符串结束标志,字符常量与字符串常量不同,例: char ch;ch=“A”;,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 变量,概念:其值可以改变的量 变量名与变量值 变量定义的一般格式:数据类型 变量1,变量2,变量n;,例:int a,b,c;float data
9、;,决定分配字节数 和数的表示范围,合法标识符,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 变量,例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;,变量初始化:定义时赋初值,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 变量,例1 int student;stadent=19; /本行语句有错,符号 “stadent” 未定义,例2 int a,b,c;c=a%b; /本行语句有错,a、b没有具体的值就参与运算,变量的使用:先定义,后使用,2.1 基本数据类型和取值范围,2.1
10、.2 常量与变量, 变量,变量定义位置:一般放在函数开头,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 变量,整型变量 占字节数随机器不同而不同,一般占一个机器字 shortintlong 可用sizeof(类型标识符)测量,#include “stdio.h“ main() printf(“int length=%d“,sizeof(int); ,VC运行结果: int length=4,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 变量,实型变量 float:占4字节,提供67位有效数字(跟C编译系统有关,将实型数据按指数形式存储时,一般若以24位二进制位表示小数部
11、分(含符号),则对应的十进制有效数字为7位) double:占8字节,提供1516位有效数字,2.1 基本数据类型和取值范围,#include main() double a=1.234567890123456789e18;float b=a;printf(“a=%.20len“,a);printf(“b=%.20len“,b); ,程序输出结果为: a=1.23456789012345680000e18 b=1.23456793955060940000e18,2.1.2 常量与变量, 变量,字符型变量 字符变量存放字符ASCII码 char与int数据间可进行算术运算,例 a=D; /* a
12、=68; */x=A+5; /* x=65+5; */s=!+G /* s=33+71; */,没有字符串变量,字符串用字符数组存放,2.1 基本数据类型和取值范围,2.1.2 常量与变量, 变量,变量综合示例: #define PRICE 12.5main() int num=3;float total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%f,ch1=%cn”,total,ch1);,运行结果: total=37.500000, ch1=d,2.1 基本数据类型和取值范围,2.2 运算符,2.2.1 优先级与结合
13、规则, 运算符,返回目录,2.2 运算符,2.2.1 优先级与结合规则, 优先级和结合规则总表,2.2 运算符,2.2.1 优先级与结合规则,不同级别的运算符按运算符的优先级别确定计算顺序,优先级别高(即优先级别数小)的运算符先计算: 相同级别的运算符按结合规则确定计算顺序。 例:表达式3+4*(12-6)/(1+2)的计算顺序为: (126)6 (12)3 4*624 24/3=8 3+8=11, 运算符的计算规则,2.2 运算符,2.2.2 赋值运算与连续赋值,在C中,运算符“=”是赋值运算符。简单赋值运算的一般形式为:变量=表达式其功能是将一个表达式的值赋给变量。如下表达式a=b+c该式
14、读作将表达式b+c的值赋给a。其本意是改写变量a的值,而不是判断b+c与a是否相等,, 赋值运算,2.2 运算符,2.2.2 赋值运算与连续赋值, 连续赋值,在C语言中,赋值运算符的级别较低,为14级,并满足右结合规则。因此表达式:x=y=z=1 是连续赋值表达式,其功能相当于如下表达式的功能x=(y=(z=1) 它是先执行表达式z=1,即将1赋给z,表达式值也为1,然后将表达式值1赋给y,即执行y=1,表达式值也仍为1,再将表达式值1赋给x,即执行x=1。,2.2 运算符,2.2.3 算术运算,结合方向:从左向右 优先级: - -* / % - + -(2) (3) (4) 说明: “-”可
15、为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据,例 5/2 = 2 -5/2.0 = -2.5,例 5%2 = 1 -5%2 = -11%10 = 15%1 = 05.5%2 (), 基本算术运算符: + - * / %,2.2 运算符,2.2.3 算术运算, 自增、自减运算符+ -,作用:使变量值加1或减1 种类: 前置 +i, -i (先执行i+1或i-1,再使用i值) 后置 i+,i- (先使用i值,再执行i+1或i-1),例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=
16、3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,“先加后用”,“先用后加”,2.2 运算符,2.2.3 算术运算, 自增、自减运算符+ -,说明: + - 不能用于常量和表达式,如5+,(a+b)+ + -结合方向: 自右向左 优先级:- + - -* / % -+ -(2) (3) (4),例 -i+ -(i+)i=3; printf(“%d”,-i+); /-3,例 -i+i=3; printf(“%d”,-i+);,2.2 运算符,2.2.3 算术运算, 自增、自减运算符+ -,特
17、别提示:慎用+,-运算符! ! !,4,3 4 5,3,2,2,3,3 4 3,2,2,2,a=3; printf(“%d,%dn“,a,a+); printf(“%dn“,a); a=3; printf(“%d,%d,%d,%dn“,+a,a+,a+,-a);,例,TC中结果:,VC中结果:,从例中可分析出: 1、函数参数均按从右到左的顺序求值; 2、对于后置运算,都遵循“先用后加”规 则,但“加”的时机不同,TC中是用后马 上加,这样下个左边的参数用到的值是加 后的值,而在VC中,用后不马上加,而是 在函数调用(printf)完成后才加。,2.2 运算符,2.2.3 算术运算, 自增、自减
18、运算符+ -,特别提示:慎用+,-运算符! ! !,由上例知,由于+,-运算符在不同版本的C编译系统中使用时会出现非预期的结果,因此要慎用! 例如:a=3; printf(“%d,%d”,a,a+); 在有的系统中,函数参数是从左至右求值,输出“3,3”,在多数系统(如TC和VC)中是从右至左求值,输出“4,3”或“3,3”。因此,以上写法不宜提倡,最好改写成:a=3; b=a+; printf(“%d,%d”,a,b); 或:a=3; b=a; a+; printf(“%d,%d”,a,b); 则结果都是明确的(输出“4,3”)。,2.2 运算符,2.2.3 算术运算, 自增、自减运算符+
19、-,特别提示:慎用+,-运算符! ! !,总之,不要编写让人很难看懂,也不知道系统会怎样执行的程序。所以,我们可以通过一些含+,-比较多的表达式来加深对其运算规则的理解,但在实际编程中,除非不得已,否则绝对不要编写含+,-比较多的表达式。从上面的介绍可知,含+,-比较多的复杂语句或有歧义的语句完全可以用简单易懂、结果明确的语句组替代。,2.2 运算符,2.2.4 关系运算,关系运算又称为比较大小运算,它有六个运算符:、=、=、=等四个运算符级别为6级,它们比=、!=等两个运算符级别为7级的要高.,2.2 运算符,2.2.4 关系运算,关系运算的结果为逻辑真或逻辑假,关系成立时为逻辑真(值为1)
20、,关系不成立时为逻辑假(值为0)。如下表达式:53 5=3 53 5=3 5= =3 5!=3 的逻辑值分别为1 1 0 0 0 1,2.2 运算符,2.2.4 关系运算,关系运算的等于运算符=与数学上的等于运算符=具有相同的含义,与C语言中的赋值运算符=是完全不同的,这一点对初学者而言往往容易搞错。,2.2 运算符,2.2.5 逻辑运算、连续比较和逻辑优化,C语言中逻辑运算符有三个: 逻辑与&(11级、左结合)。逻辑与表达式a&b表示a与b中只要有一个条件不满足(值为0),其运算结果为0。 逻辑或|(12级、左结合)。逻辑或表达式a|b表示a与b中只要有一个条件满足(值为1),其运算结果为1
21、。 逻辑非!(2级、右结合)。逻辑非表达式!a,当a为1时,结果为0,当a为0时,结果为1。, 逻辑运算,2.2 运算符,2.2.5 逻辑运算、连续比较和逻辑优化,表2.4 逻辑运算真值表,在C语言的逻辑运算中,任何非0值都当作逻辑值1处理,因此表达式0.1|0的结果值为1。, 逻辑运算,2.2 运算符,2.2.5 逻辑运算、连续比较和逻辑优化,数学上的连续比较532 在数学上是恒成立的。但在C语言中,上式却不成立,因为首先计算第一个大于号,其值为1,而后计算第二个大于号时,成为计算12,显然不成立,其值为0。实际上,连续比较大小时,表示几个条件同时满足,因此若将上式改写为条件表达式53 &
22、32 后,则与数学上的的连续比较含意相符,表达式也是成立的。, 连续比较,2.2 运算符,2.2.5 逻辑运算、连续比较和逻辑优化, 逻辑优化,逻辑与优化。从逻辑与运算a&b的真值表中,我们可以看出,只要a值为0,不管b值如何,其运算结果都为0,因此,在进行逻辑与运算时,只要计算出a值为0,则不需计算b值,这种情况,我们称之为逻辑与优化。 逻辑或优化。对于逻辑或运算a|b,只要计算出a值为1,则也不需计算b值,此时表达式值恒为1,这种情况称之为逻辑或优化。,2.2 运算符,2.2.5 逻辑运算、连续比较和逻辑优化, 例2.4 逻辑运算综合举例,#include main() int x,y,z
23、;x=y=z=0; +x|+y|+z;printf(“x=%d y=%d z=%dn”,x,y,z);x=y=z=0; +x ,程序运行结果为:,x=1 y=0 z=0 x=1 y=1 z=0 x=1 y=1 z=1 x=1 y=0 z=0,2.2 运算符,2.2.6 位运算, 位运算操作符,表2.5 位运算符号表,2.2 运算符,2.2.6 位运算, 异或运算,异或运算真值表见表2.6,即对应位相同时为0,不同时为1.表2.6 异或运算真值表,2.2 运算符,2.2.6 位运算, 移位运算,左移位运算ab:右边移出的部分将丢弃,左边空出的高位部分填补方法则根据a是否为带符号数又分为两种: a
24、为带符号数时,左边空出的高位部分用符号位填补; a为不带符号数时,左边空出的高位部分用0填补。,注意:参与运算的数以补码形式出现.,2.2 运算符,2.2.6 位运算, 例2.5,#include main() char a= -25,b=93,c;unsigned char d= -25;c=a ,69 -1 -70 24 -4 28 3 -56,程序运行结果为:,2.2 运算符,2.2.7 条件运算,一般形式: expr1 ? expr2 : expr3 执行过程,条件运算符可嵌套如 x0?1:(x0?-1:0) 优先级: 13,结合方向:自右向左如 ab?a:cd?c:d ab?a:(c
25、d?c:d),2.2 运算符,2.2.7 条件运算,例 求 a+|b|printf(“a+|b|=%dn”,b0?a+b:a-b);,例 (a=b)?Y:N(x%2=1)?1:0(x=0)?x:-x(c=a & c=z)?c-a+A:c,2.2 运算符,2.2.8 复合赋值运算,表2.7 复合赋值运算符,2.2 运算符,2.2.9 逗号运算,形式:表达式1,表达式2,表达式n 结合性:从左向右 优先级: 15 计算过程:从前往后,依次计算 逗号表达式的值:等于表达式n的值,例: #include main() int x,y=7;float z=4;x=(y=y+6,y/z);printf(“
26、x=%dn“,x); ,X=3,程序运行结果为:,2.2 运算符,2.2.10 求字节数(sizeof),1)sizeof计算类型占用字节数的形式为:sizeof(类型) 2)sizeof计算变量占用字节数的形式有两种:sizeof(变量)或sizeof 变量,示例: #include main() int a=5;printf(“%dn“,sizeof(int);printf(“%dn“,sizeof(a);printf(“%dn“,sizeof a); ,2 2 2,运行结果为:,2.2 运算符,2.2.11 类型转换, 算术运算类型转换,算术运算中,当两个运算数类型相同时,运算结果类型与
27、原类型相同,当两个运算数类型不同时,运算结果类型为级别较高的数据类型。类型级别高低按下述规则进行:,即字符型向整型转换、整型向实数型转换、短型向长型转换、不带符号型向带符号型转换。,例如表达式:5/2+3*4.5+2 的运算结果为17.5,而不是18。 因为5/2时,除法运算符“/”两边运算数的类型都为整数,其运算结果类型也应为整数类型,其值当然为2,而不是2.5;乘法3*4.5两边运算数的类型不同,结果类型为级别高的类型,即实型,值为13.5,整个表达式值为17.5。 如将上述表达式改写为:5/2.0+3*4.5+2 此时,其运算结果为18.0,而不是17.5,请读者自行分析。,2.2 运算
28、符,2.2.11 类型转换, 算术运算类型转换,2.2 运算符,2.2.11 类型转换, 赋值转换,执行赋值运算变量a = 表达式b 时,若a、b类型相同,则直接将b赋给a即可,若a、b类型不同,则需先将b的类型转换为a的类型后再赋值,这种类型转换,我们称之为赋值类型转换。,2.2 运算符,2.2.11 类型转换, 强制类型转换,强制类型转换的一般格式为:(目标类型)表达式 其功能是将表达式类型转换为目标类型,其转换方法同赋值转换。 如:float a=3.1;int i;i=(int)a; 则i的值为3。,2.2 运算符,2.2.11 类型转换, 输入/输出类型转换,示例: #include
29、 main() int a=15;char ch=A;printf(“%dn“,ch);printf(“%Xn“,a); ,65 F,程序运行结果为:,详见“输入/输出函数”一节,2.3 输入/输出函数,2.3.1 格式化输出函数printf, printf( )函数调用格式,#include ,格式:printf(“格式字符串”,输出表) 功能:按指定格式向显示器输出数据,输出表:要输出的数据(可以没有,多个时以“,”分隔) 格式控制串:包含两种信息 格式说明: %flagswidth.precisionF|N|h|ltype, 用于指定输出格式 普通字符或转义序列:原样输出,返回目录,2.
30、3 输入/输出函数,2.3.1 格式化输出函数printf, Type类型代码及示例,d,i,x,X,o,u,c,s,e,E,f,g,%,十六进制无符号整数,不带符号十进制整数,十进制整数,指数形式浮点小数,单一字符,字符串,八进制无符号整数,小数形式浮点小数,e和f中较短一种,去0,百分号本身,int a=567;printf ( “%d”,a);,int a=255;printf(“%x”,a);,int a=65;printf(“%o”,a);,int a=567;printf(“%u”,a);,char a=65;printf(“%c”,a);,printf(“%s”,“ABC”);,
31、float a=567.789;printf(“%e”,a);,float a=567.789;printf(“%f”,a);,float a=567.789;printf(“%g”,a);,printf(“%”);,567,ff,101,567,A,ABC,5.677890e+002,567.789001,567.789,%,p,指针,int a=567; int *q=,FFF4,FFFF4,以无符号的十六进制形式输出变量的地址,说明 Type类型代码字符与输出项个数应相同,按先后顺序一一对应。,2.3 输入/输出函数,2.3.1 格式化输出函数printf,程序运行结果为:, Type类
32、型代码及示例,3 4 a=3, b=4,示例: main( ) int a=3,b=4;printf(“%d %dn”,a,b); printf(“a=%d , b=%dn”,a,b); ,说明 输出类型转换:格式字符与输出项类型不一致,按指定type类型输出。输出类型转换与赋值类型转换规律相同。,2.3 输入/输出函数,2.3.1 格式化输出函数printf,程序在VC中运行结果为:, Type类型代码及示例,u=1 u=4294967295,示例: main( ) int u=-1;printf(“u=%dn“,u);printf(“u=%un”,u); ,2.3 输入/输出函数,2.3.
33、1 格式化输出函数printf, 可选格式说明符宽度 width ,定义输出数据域宽。数据长度width,左补空格;否则按实际输出宽度。当width值前加0时,表示左边空位用0填补。,程序运行结果为:,a= 888 a=000888,示例: main( ) int a=888;printf(“a=%6dn“,a);printf(“a=%06dn“,a); ,2.3 输入/输出函数,2.3.1 格式化输出函数printf, 可选格式说明符精度 .precision ,精度作用于浮点数%f,%e,%E:精度表示“小数点后最多显示位数”,默 认值为6精度作用于%g,%G:精度表示“有效位的数目”精度
34、作用于字符串%s:精度表示“最大字符串位数”精度作用于整数:精度决定“必须显示的最小位数”,不足时补前导0。,程序运行结果为:,123.1235 00001234 This is a simpl,例2.12: main( ) printf(“%.4fn“,123.1234567);printf(“%3.8dn“,1234);printf(“%10.15sn“,“This is a simple test“); ,2.3 输入/输出函数,2.3.1 格式化输出函数printf, 可选格式说明符标志 flags ,程序运行结果为:,示例:对齐符”-” main( ) printf(“%8dn“,1
35、2345);printf(“%8dn“,12);printf(“%-8dn“,12345);printf(“%-8dn“,12); ,“-”:表示左对齐,缺省(即没有”-”号时)为右对齐;“0”:输出数值时指定左面不使用的空位置自动填0 ;“+”:指定在有符号数的正数前显示正号(+);“#”:在八进制和十六进制数前显示前导0,0x 或0X;,12345 12 12345 12,2.3 输入/输出函数,2.3.1 格式化输出函数printf, 可选格式说明符标志 flags ,程序运行结果为:,示例:“0”与“” main() printf(“%+08dn“,12345);printf(“%+8
36、dn“,12);printf(“%-8dn“,12345);printf(“%-8dn“,12); ,“-”:表示左对齐,缺省(即没有”-”号时)为右对齐;“0”:输出数值时指定左面不使用的空位置自动填0 ;“+”:指定在有符号数的正数前显示正号(+);“#”:在八进制和十六进制数前显示前导0,0x 或0X;,+0012345 +12 12345 12,2.3 输入/输出函数,2.3.1 格式化输出函数printf, 可选格式说明符标志 flags ,“-”:表示左对齐,缺省(即没有”-”号时)为右对齐;“0”:输出数值时指定左面不使用的空位置自动填0 ;“+”:指定在有符号数的正数前显示正号
37、(+);“#”:在八进制和十六进制数前显示前导0,0x 或0X;,程序运行结果为:,示例:”#” main() printf(“%#8xn“,0x1234);printf(“%#8xn“,0x12);printf(“%-#8on“,01234);printf(“%-#8on“,012);,0x12340x12 01234 012,2.3 输入/输出函数,2.3.1 格式化输出函数printf, 可选格式说明符标志 h|l ,程序运行结果为:,示例:”h”与“l” main() printf(“%hdn“,65536);printf(“%hon“,8);printf(“%lun“,65536);
38、printf(“%lxn“,65536);printf(“%len“,5000000000.0);printf(“%lfn“,5000000000.0);printf(“%lgn“,5000000000.0); ,0 10 65536 10000 5.000000e+009 5000000000.000000 5e+009,“h”:在d,o,x,u前,指定输出精度为short型;“l”:在d,o,x,u前,指定输出精度为long型;在e,f,g前,指定输出精度为double型;,2.3 输入/输出函数,2.3.1 格式化输出函数printf, 可选格式说明符标志 F|N ,“F”:在p前,指定
39、为远指针(32位),表示段地址:偏移地址;“N”:在p前,指定为近指针(16位),表示段内偏移地址;,TC程序运行结果为:,示例:”F”与“N” main() char far *q1=(char far *)0xB5000002;char near *q2=(char near *)0x452;printf(“%Fpn“,q1);printf(“%Npn“,q2); ,B500:0002 0452,注意:在VC中运行本程序时,会出现far is an obsolete keyword或near is an obsolete keyword之类的错误,表示在VC中,far和near是已经被废弃
40、的关键字。,2.3 输入/输出函数,2.3.2 格式化输入函数scanf, scanf( )函数调用格式,格式:scanf(“格式字符串”,地址表) 功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中。,地址表:变量的地址,常用取地址运算符&。 格式控制串:包含两种信息 格式说明: %*widthh|ltype, 用于指定输入格式 普通字符或转义序列:原样输入,#include ,2.3 输入/输出函数,2.3.2 格式化输入函数scanf, scanf( )函数调用格式,说明:各项的含义与printf中的含义相同,不同的是输入格式串没有“精度项”,其中“*”用于跳读输入的数据项.,程
41、序运行结果为:,例2.13: main( ) int r,h;float v;scanf(“%d%*d%d“, ,3 5 4 The volume is:113.09724,2.3 输入/输出函数,2.3.2 格式化输入函数scanf, 输入数据流的分隔方式,用空白符号分隔:空白符有:空格,制表符,回车符;,程序运行结果为:,例2.13: main( ) int r,h;float v;scanf(“%d%*d%d“, ,3 5 4 The volume is:113.09724,程序运行结果为:,3 5 4 The volume is:113.09724,2.3 输入/输出函数,2.3.2
42、格式化输入函数scanf, 输入数据流的分隔方式,示例: main( ) int r,h;float v;scanf(“r=%dh=%d“, ,程序运行结果为:,r=3 h=4 The volume is:113.09724,用指定的符号分隔:,2.3 输入/输出函数,2.3.2 格式化输入函数scanf, 输入数据流的分隔方式,示例: main( ) int r,h;float v;scanf(“%2d%*3d%2d“, ,程序运行结果为:,12345678 r=12 h=67 The volume is:30310.06055,用指定输入宽度分隔:,2.3 输入/输出函数,2.3.2 格式
43、化输入函数scanf, 输入数据流的分隔方式,根据数据含义分隔:,示例: main( ) int r,h; char c;float v;scanf(“%d%d%c“, ,程序运行结果为:,3 5r r=3 h=5 Input character is:r The volume is:113.09724,2.3 输入/输出函数,2.3.3 字符输入/输出函数, 字符输入,采用scanf函数例如:char ch;scanf(“%c”,2.3 输入/输出函数,2.3.3 字符输入/输出函数, 字符输出,采用printf函数:例如:char ch=B;printf(“%c”,ch); 采用函数:pu
44、tchar(参数)功能:向显示器输出参数指定的一个字符。例如:char ch=B;putchar(ch);/参数是字符变量putchar(B);/参数是字符常量putchar(66);/参数是整型常量putchar(ch+1);/参数是表达式,2.3 输入/输出函数,2.3.3 字符输入/输出函数,例2.14 字符输入输出函数。 #include main() char c1,c2,c3;c1=getchar();c2=getchar();c3=getchar();putchar(c1+32);putchar(c2+32);putchar(c3+32); , 综合示例,程序运行结果为:,ABC
45、 abc,本程序实现将大写字母转换成小写字母。,2.4 习题二, 单项选择题,C语言中最基本的非空数据类型包括 .A)整型、浮点型、无值型B)整型、字符型、无值型 C)整型、浮点型、字符型 D)整型、浮点型、双精度型、字符型 C语言中运算对象必须是整型的运算符是 .A)% B)/ C)= D)=,D,A,返回目录, 单项选择题,若已定义x和y为int类型,则执行了语句x=1;y=x+3/2;后y的值是 .A)1 B)2 C)2.0 D)2.5 若有以下程序段,int a=1,b=2,c; c=1.0/b*a; 则执行后,c中的值是 .A)0 B)0.5 C)1 D)2 5) 能正确表示逻辑关系
46、:“a10或a0”的C语言表达式是_. A)a=10 or a=0|a=10 & a=10a=0,B,A,D,2.4 习题二, 单项选择题,下列字符序列中,不可用作C语言标识符的是 .A)xyd233 B)No.1 C)_sd D)xyz 在printf( )函数中,反斜杠字符表示为 .A) B)0 C)n D) 8) 设先有定义:int a=10;则表达式a+=a *=a的值为_. A)10 B)100 C)1000 D)200 9) 设先有定义:int a=10;则表达式(+a)+(a-)的值为_.A)20 B)21 C)22 D)19,B,D,D,C,2.4 习题二, 单项选择题,10) 设先有定义:int y=3,x=3,z=1;则语句:printf(“%d %dn”,(+x,y+),z+2); 的输出结果为_. A)3 4 B)4 2 C)4 3 D)3 3 11)假定x、y、z、m均为int型变量,有如下程序段:x=2; y=3; z=1; m=(yx)?y: x; m=(zy)?m:y; 则该程序运行后,m的值是 _.A)4 B)3 C)2 D)1,D,C,2.4 习题二, 单项选择题,以下选项中合法的字符常量是 .A)“B“ B)010 C)68 D)D 设x=3,y=4,z=5,则表达式(x+y)z) 则m+=n;的结果是_.A)0 B)1 C)2 D)3,