版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Ch2-1 #include stdio.h void main() int a,b; printf(“hello world ); scanf(%d, printf(a=%dn,a); Ch2-2 第二第二章章 C程序设计基础程序设计基础 本章内容提要本章内容提要: 2.1 C源程序的组成与结构源程序的组成与结构 2.2 基本数据类型、常量与变量基本数据类型、常量与变量 2.3 运算符与表达式运算符与表达式 2.4 字符界面输入与输出字符界面输入与输出 2.5 顺序结构简单程序设计顺序结构简单程序设计 重点小结重点小结 作业作业 Ch2-3 2.1 C源程序的组成与结构源程序的组成与结构 2
2、.1.0 初识初识C源程序源程序 例例2.1 最小的C源程序。 main() /* 能够编译、连接和运行的最小C程序 */ 例例2.2 输入两个整数,输出其中较大的那个整数值。 #include stdio.h int max(int a,int b) int m; if(ab) m=a; else m=b; return m; void main() int a,b; printf(Input integer numbers a b: ); scanf(%d%d, printf(max=%dn,max(a,b); Ch2-4 2.1.1 C语言语言源程序文件与字符源程序文件与字符 (1)C语
3、言源程序文件语言源程序文件 扩展名C: 纯C程序,通知编译器不支持C+特性 扩展名CPP:支持C+和C (2) C语言源程序文件的类型语言源程序文件的类型字符文件字符文件 (3) 组成组成C语言源程序文件的三种语言源程序文件的三种 字符字符 a. 语义字符语义字符 如:if else ; 等 键盘上的可显示字符除键盘上的可显示字符除 $ 三个外均可表示语义三个外均可表示语义 b. 非语义字符非语义字符 如:例2.2中的Input integer numbers c. 文件格式控制符文件格式控制符 如:例2.2中的回车符与换行符 2.1 C源程序的组成与结构(续源程序的组成与结构(续1) Ch2
4、-5 2.1.2 C标识符与关键字标识符与关键字 1. 什么是标识符?什么是标识符? 源程序中用来表示各种名称的符号串。 2. C标识符的语法规定标识符的语法规定 由英文字母、数字和下划线组成; 第一个字符必须是英文字母或者下划线; 标识符的长度大于31个字符时,前31个字符有效; 英文字母大小写有区别。 2.1 C源程序的组成与结构(续源程序的组成与结构(续2) Ch2-6 例如例如:a b5 max Value DataType _ 8 height x_1 y_x_y Min_Time_Out s08 T_A71a _ _ ZuiDaZhi U571 TurboC 以上都是合法的标识符。
5、 而8a 0.54 A8.e A$ #5 com 都是非法标识符。 A和和a是两个不同的标识符是两个不同的标识符 3. 关键字关键字 语言系统用来表示专门语义的英文单词或缩写 。 共32个(见教材) 2.1 C源程序的组成与结构(续源程序的组成与结构(续3) Ch2-7 4. 系统标识符系统标识符 语言系统软件已经预先定义,编程者在源程序中 可以直接 使用的标识符。 例如例如:main scanf printf 5. 用户自定义标识符用户自定义标识符 定义规则:定义规则: (1) 符合标识符的语法规定 (2) 不与关键字以及需要使用的系统标识符重名 (3) 命名时标识符名与其代表的实际意义相联
6、系 例如例如: min表示最小值变量名; GetLastValue表示求数组最后一个元素值的函数名 2.1 C源程序的组成与结构(续源程序的组成与结构(续4) Ch2-8 用户标识符的更多的例子用户标识符的更多的例子: (1)变量名和数组名 如:int a,b; float cx10; (2)函数名 如:int max(int a,int b) (3)宏名字(符号常量) 如:#define PI 3.14 2.1.3 C语言的句法单位语言的句法单位 1. 语句语句 (1) 简单语句简单语句: 以;号结束 2.1 C源程序的组成与结构(续源程序的组成与结构(续5) Ch2-9 2.1 C源程序的
7、组成与结构(续源程序的组成与结构(续6) a. 空语句空语句 一个单独的;号 b. 表达式语句表达式语句 如:a+; c. 函数调用语句函数调用语句 如:scanf(%d%d, (2) 控制语句控制语句: 用关键字和特定语法实现的语句 如:if(ab) m=a; else m=b; 注意:注意:整个控制语句,不论它有多复杂,不论书写了 多少行,其语法地位只相当于一条简单语句。 (3) 复合语句复合语句: 用 扩起来的0条至若干条语句 整个 中的内容语法地位相当于一条简单语句。 空复合语句空复合语句: 复合语句可以嵌套,如复合语句可以嵌套,如: Ch2-10 2.1 C源程序的组成与结构(续源程
8、序的组成与结构(续7) / 复合语句的嵌套复合语句的嵌套 / Ch2-11 2.1 C源程序的组成与结构(续源程序的组成与结构(续8) 2. 其它句法单位其它句法单位 (1) 变量定义与初始化变量定义与初始化 例如:int a, b=2, c=3; (2) 函数说明与变量说明函数说明与变量说明 (3) 编译预处理指令编译预处理指令 例如:#include math.h /*包含头文件包含头文件*/ #define PI 3.1415926 /*定义符号常量定义符号常量*/ (4) 源程序注释源程序注释 /* */ / C+单行注释单行注释 Ch2-12 2.1.4 模块结构模块结构函数函数 C
9、函数的基本定义格式由两部分组成,即函数头部和函 数体,如下所示。 返回值类型函数名函数名(自变量定义表) /*函数体,一个复合语句*/ 2.1.5 篇章结构篇章结构源程序的一般结构源程序的一般结构 编译预处理指令 全局变量定义与初始化 变量与函数说明 若干子函数 main函数 2.1 C源程序的组成与结构(续源程序的组成与结构(续9) 说明说明: 函数的顺序可以任意; main函数必不可少; 程序总是从main开始执行。 Ch2-13 2.1.5 C源程序书写规范源程序书写规范 1. 关键字必须小写 2. 用户标识符以小写为主 3. 宏名字以大写为主 4. 上下对齐 5. 内层模块相对外层向右
10、递进2-6个字符位书写 6. 多加程序注释,提高可读性 7. 同一语义模块内部紧密书写,不同语义模块分行 2.1 C源程序的组成与结构(续源程序的组成与结构(续10) Ch2-14 例:例:重复打印10次字符A,然后打印换行符。 for(i=1;i=10;i+) printf(A); printf(n); /* 正确,但可读性差正确,但可读性差 */ for(i=1;i=10;i+) printf(A); /* 打印打印10个个A */ printf(n); /* 打印换行符打印换行符*/ /* 分行,提高可读性分行,提高可读性 */ for(i=1;i=10;i+) printf(A); p
11、rintf(n); /* 正确,但可读性太差正确,但可读性太差 */ 2.1 C源程序的组成与结构(续源程序的组成与结构(续11完)完) Ch2-15 2.2.1 基本数据类型基本数据类型 1. 整型整型 (1) 标准整型类型名标准整型类型名 格式说明 长度说明 类型名 signed|unsigned long|short int 格式说明格式说明:singed 表示有符号整数,unsigned表示无 符号整数,缺省表示signed; 长度说明长度说明:long表示长整数,short表示短整数,缺 省表示int; 类型名类型名:int表示整型,当且仅当格式说明和长度说 明都缺省时,才必须写出关
12、键字int,其余情况都可 以不写出关键字int。 2.2 基本数据类型、常量与变量基本数据类型、常量与变量 Ch2-16 (2) 1字节整型类型名字节整型类型名(等同于字符型等同于字符型) 格式说明 类型名 signed|unsigned char 格式说明格式说明:singed 表示有符号整数,unsigned表示无 符号整数,缺省表示signed; 类型名类型名:char 类型名使用举例:类型名使用举例: signedintsigned int unsignedunsigned int signed longlonglong intsigned long int unsigned long
13、unsigned long int shortsigned shortshort intsigned short int 2.2 基本数据类型、常量与变量(续基本数据类型、常量与变量(续1) Ch2-17 (3) 整形的存储格式与存储长度整形的存储格式与存储长度 VC+6.0, VC+ in Studio.NET 2003 and 2005 2.2 基本数据类型、常量与变量(续基本数据类型、常量与变量(续2) 类型名类型名格式格式 存储长度存储长度 (bit) 十进制整数表示范围十进制整数表示范围 char补码8-2727-1 (-128127) unsigned char无符号数8028-1
14、 (0255) short补码16-215215-1 (-3276832767) unsigned short无符号数160216-1 (065535) int补码32-231231-1 (-21474836482147483647) unsigned无符号数32 0232-1 (04294967295) long补码32-231231-1 (-21474836482147483647) unsigned long无符号数32 0232-1 (04294967295) Ch2-18 2. 实型实型 2.2 基本数据类型、常量与变量基本数据类型、常量与变量(续续3) 类型名类型名 存储长度存储长
15、度 (bit) 十进制有效数字十进制有效数字十进制数值范围十进制数值范围(绝对值绝对值) float3267位3.410-383.410+38 double641516位1.710-3081.710+308 long double801920位3.410-49323.410+4932 说明:说明:VC+6.0及其更高版本不再支持long double 3. 字符型字符型 即1字节整型 4. 无值型无值型 类型名类型名表示的含义表示的含义 void没有值、空 值或者不占存储 Ch2-19 2.2.2 C语言的常量语言的常量 1. 整型常量整型常量 (1) 十进制十进制 如:0 125 +18 -
16、2549 89 (2) 八进制八进制: 以0开头的整数 如:01011 -025 07777 +0240 007 0825是错误的常量,编译不能通过 (3) 十六进制十六进制: 以0X(0 x)开头的整数 如:0 x85A -0Xa0F +0X0A9e 注意注意:常量中的英文字符大小写没有区别 2.2 基本数据类型、常量与变量(续基本数据类型、常量与变量(续4) Ch2-20 2. 实型常量实型常量 (1) 十进制小数十进制小数 如:+0.25 -15.567 9.80560 +006.7 -8.500 36. -2. +15. .200 (2) 十进制指数形式十进制指数形式 如:-0.25e
17、+8 表示表示-0.25108 +1E-6 表示表示110-6 010.001e+001 表示表示10.001101 说明:说明: E(e)大小写无区别; E(e)后面的指数部分必须是整数 2.2 基本数据类型、常量与变量(续基本数据类型、常量与变量(续5) Ch2-21 十进制指数形式的常见错误用法: 38 表示为3e8 pow(3,8) 3.6102.5 表示为3.6e2.5 3.6*pow(10,2.5) 3. 字符常量字符常量 单引号括起来的字符,如如:A $ 字符换码(转义字符): n 换行符(ASCII码 10) r 回车符(ASCII码 13) 反斜杠字符 单引号字符 ooo 1
18、3位八进制数表示的ASCII码对应字符 xhh 12位十六进制数表示的ASCII码对应字符 2.2 基本数据类型、常量与变量(续基本数据类型、常量与变量(续6) Ch2-22 C语言中,字符常量就是1字节整型常量,其 值等于该字符的ASCII码。 例如例如: x41 101 A 65 0 x41 0101 特别注意特别注意: 0 0 0 48 4. 字符串常量字符串常量 用双引号括起来的0个至多个字符,可用转义字符。 例如例如: /* 空串,串长为空串,串长为0 */ ABCD x41x42x43x44 /*串长为串长为4*/ nHellon /*串长为串长为8 */ 2.2 基本数据类型、常
19、量与变量(续基本数据类型、常量与变量(续6) Ch2-23 C语言中字符串的存储格式:语言中字符串的存储格式: 依次存储每个字符的ASCII码,最后存储0 作为 串结束标志。 例如例如: ABCD 在内存中占5个字节,依次是 (65, 66, 67, 68, 0) 空串在内存中占一个字节,即(0) A 内存中占两个字节,即(65, 0) 对比对比: A 内存中占一个字节,即(65) 5. 符号常量符号常量 例如例如:#define PI 3.1415926 #define M 10 #define MAX_LEN 1000 2.2 基本数据类型、常量与变量(续基本数据类型、常量与变量(续7)
20、Ch2-24 6. 常量的数据类型与后缀字符常量的数据类型与后缀字符 (1) 整型常量整型常量 a. 后缀字母后缀字母U(u): 强制常量为无符号类型; 无后缀U(u),则为补码。 例如例如:-1U 值为65535 (TC2.0) b. 后缀字母后缀字母L(l): 强制整型常量为长整型。 例如例如:TC2.0中: 2.2 基本数据类型、常量与变量(续基本数据类型、常量与变量(续8) 32767 (int型,2字节) 32767L (long型,4字节) 32768 (long型,4字节) 1UL (unsigned long型,4字节) Ch2-25 (2) 实型常量实型常量 a. 无任何后缀
21、字母无任何后缀字母: 默认为double型 b. 后缀字母后缀字母F(f): 强制为float型 c. 后缀字母后缀字母L(l): 强制为long double型 例如例如:BC+3.1中, 0.5 double型,8字节 0.5F float型,4字节 0.5L long double 型,10字节 注意注意:double型是实数及数学函数的默认类型 2.2 基本数据类型、常量与变量(续基本数据类型、常量与变量(续9) Ch2-26 2.2.3 C语言的变量语言的变量 1. 什么是变量?什么是变量? 它是按照某种数据类型所规定的存储格式和 存储长度用来存储数据的若干连续内存单元。 变量的三个
22、属性变量的三个属性: (1) 名字属性名字属性:变量名用于引用变量,它是标识符。 (2) 存储属性存储属性:即数据类型(存储格式与长度) (3) 值属性值属性:即变量值,变量存储的数据值。 2. 变量的基本操作:变量的基本操作:存入数据;取出数据 3. 变量的定义和初始化变量的定义和初始化 变量必须先定义后使用,定义的作用是指定 名字和存储属性,初始化则存入一个初值。 2.2 基本数据类型、常量与变量(续基本数据类型、常量与变量(续9) Ch2-27 例如例如:int a, b, c; double x=0.5, y, z; char ch=A; /* 定义时使用定义时使用=号和常量表达式实现
23、初始化号和常量表达式实现初始化 */ 定义变量时不初始化,变量的初值有两种情况: a. 全局变量或者静态变量初值自动为0; b. 其它情况初值可视为一个随机数。 4. 常变量常变量(const变量变量) : 不能改变初始值的变量 例如例如:const float pi=3.14f; const int N=10; /* 常变量必须进行初始化常变量必须进行初始化 ; C+允许用常变量定义数组维度大小允许用常变量定义数组维度大小 */ 2.2 基本数据类型、常量与变量(续基本数据类型、常量与变量(续10完)完) Ch2-28 2.什么是程序语言的表达式什么是程序语言的表达式? ? 2.3 运算符与
24、表达式运算符与表达式 由各种运算符、变量、常量、函数调用和小括号组 成的实现某种运算含义并且符合书写格式要求的符 号串称为表达式表达式。 在高级语言中,单个的变量或常量也可以称为表达 式。表达式的运算结果(求值结果)称为表达式的 返回值返回值,返回值的数据类型称为表达式类型表达式类型。C语 言的表达式类型主要有整型、实型和地址(指针) 三种。本节将介绍整型和实型表达式,而地址表达 式请参阅“指针初步”。 Ch2-29 2.3.1 算术运算符、数学库函数与数学表达式算术运算符、数学库函数与数学表达式 1. 算术基本运算符算术基本运算符 +(加) -(减) *(乘) /(除) %(求模) 注意注意
25、: 1/2 = 0 1.0/2 = 0.5 7/3=2 /* 除号两边为整型时,结果为整型除号两边为整型时,结果为整型 */ 5%3=2 1%2=0 /* 求模就是求余数求模就是求余数 */ 2. 常用数学库函数常用数学库函数 使用数学库函数请包含头文件math.h,即 #include math.h 或者 #include (1) double型数学函数型数学函数 以下函数自变量均为double型,返回值也是 double型。 2.3 运算符与表达式(续运算符与表达式(续1) Ch2-30 sin(x) 求正弦值,x必须是弧度 cos(x) 求余弦值,x必须是弧度 tan(x) 求正切值,x
26、必须是弧度 asin(x) 反正弦,x1,1,函数值/2, /2 acos(x) 反余弦,x1,1,函数值0, atan(x) 反正切,函数值/2, /2 exp(x) 计算ex log(x) 计算ln(x) log10(x) 计算log10(x) pow(x,y) 计算xy,当x=0且y0时或者x0而y不是整数时,会出现错误 sqrt(x) 计算x的平方根,要求x0 fabs(x) 求x的绝对值 ceil(x) 求大于或等于x的最小整数,注意求出的整数值是double类型 floor(x) 求小于或等于x的最大整数,注意求出的整数值是double类型 2.3 运算符与表达式(续运算符与表达式
27、(续2) Ch2-31 (2) 整型数学函数整型数学函数 int abs(int x) /* int型表达式型表达式x求绝对值求绝对值 */ long labs(long x) /* long型表达式求绝对值型表达式求绝对值 */ 3. 数学表达式的数学表达式的 书写规则书写规则 1) 所有变量、常量、运算符和函数调用都必须书写在一行。 2) 改变运算优先级只能使用小括号。 3) 变量名与函数名都是标识符,不能使用其它数学符号以及 上标、下标等标记。 4) 数学表达式中,常常缺省乘法运算符,而C表达式必须写 出所有的运算符。 5) C表达式必须符合数学限定条件,比如:负数不能开平方, 对数函数
28、自变量不能是负数,除数不能是0等。 6) 变量的指数为4次方以下时,一般采用连乘形式,以提高 运算速度。比如:a3写成aaa。 2.3 运算符与表达式(续运算符与表达式(续3) Ch2-32 4. 数学表达式的例子数学表达式的例子 例子例子1 2.3 运算符与表达式(续运算符与表达式(续4) a acbb 2 4 2 (-b+sqrt(b*b-4*a*c)/(2*a) 例子例子2 3 1 )10( -exp(-log(10)/3) -pow(10,-1.0/3) 常见错误常见错误:(-b+sqrt(b*b-4*a*c)/2*a 常见错误常见错误:pow(-10, -1.0/3) -pow(10
29、, -1/3) 例子例子3 )0348sin( sin(48.5/180*PI) 常见错误常见错误:sin(48.5) 或 sin(48.3/180*PI) Ch2-33 3. 自增与自减运算符自增与自减运算符 syntax: +L_value L_value+ -L_value L_value- +的功能是使L_value的值自加1; -的功能是使L_value的值自减1。 (1) 什么是什么是L_value? L_value即左值,它指变量、数组元素和指 针对象。因为这些对象可以放在赋值运算符(=)左 边接收数据(即被赋值),因此得名。 例如例如:int a=1; a+; +a; a=a+
30、1; /* a的值自加的值自加1变成变成2*/ a-; -a; a=a-1; /* a的值自减的值自减1变成变成0*/ 2.3 运算符与表达式(续运算符与表达式(续5) Ch2-34 5+; -(a+b); / 对非对非L-value表达式进行自减表达式进行自减1操作操作 / +a+; / 不允许同时使用前置和后置自增自减运算不允许同时使用前置和后置自增自减运算 / (2) 前置与后置形式的区别是什么?前置与后置形式的区别是什么? 前置形式运算规则:前置形式运算规则:先对表达式中含有前置自增 (减)运算符的变量进行自加(减)1,然后用这些 变量的新值参与表达式运算。 后置形式运算规则:后置形式
31、运算规则:先用变量原来的值参与表达式 运算,然后对含有后置自加(减)运算符的变量进 行自加(减)1运算。 2.3 运算符与表达式(续运算符与表达式(续6) Ch2-35 例例:1) int a=2, b; b=a-; 等效于 b=a; a-; 故 a= 1 , b= 2 。 2) int a=2, b; b=+a; 等效于 +a; b=a; 故 a= 3 , b= 3 。 3) int a=2, b=1, c; c=a+-b-; 等效于c=a-b; a+; b-; 故 a= 3 , b= 0 , c= 1 。 2.3 运算符与表达式(续运算符与表达式(续7) Ch2-36 例例:4) int
32、x=5, y=1; y=-x+y+; 等效于-x; y=x+y; y+; 故 x= 4 , y= 6 。 (3) 自增自减运算符的结合性自增自减运算符的结合性 +,-总是与它前面的L-value尽量匹配,即尽 量向左结合。 例如例如:c=a+b; 应理解为c=a+b; a+; 而不是+b; c=a+b; 使用小括号可以改变自加减运算符的结合性使用小括号可以改变自加减运算符的结合性。 2.3 运算符与表达式(续运算符与表达式(续8) Ch2-37 例如例如:已知int a=1,b=2,c; c=a+b; /*则则a=2, c=3 */ c=(a+)+b; / 同同 c=a+b; / c=a+(+
33、b); /*则则b=3,c=4 / c=+a+b; /*则则a=2,c=4*/ c=(+a)+b; / 同同 c=+a+b; / 特殊情况特殊情况: int k=3; 1) (k+)+(k+)+(k+) /* 则则k=6, 表达式表达式=9 */ 2) (+k)+(+k)+(+k) /* TC2.0: k=6, 表达式表达式=4+5+6=15 */ /* VC+6.0: k=6, 表达式表达式=5+5+6=16 */ 2.3 运算符与表达式(续运算符与表达式(续9) Ch2-38 2.3.2 二进制位运算与位运算表达式二进制位运算与位运算表达式 b=a; 则 b的值为2。16位位int型型运算
34、过程如下: 2.3 运算符与表达式(续运算符与表达式(续11) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 FFFE 2) 与、或和异或的例子(P64 例2.8)。 int a=3, b=10, c; c=a 则c=2 (a=1) (b= 2) Ch2-40 16位位int型型运算过程如下: 2.3 运算符与表达式(续运算符与表达式(续11) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 (a=3) (b=10) 则c=11 (运
35、算过程略) c=ab; 则c=9 (运算过程略) 3) 移位运算的例子(P67例2.9) unsigned char a=245, b; int c; /*设设int型为型为16位长位长*/ b=a2; 则b=212 . Ch2-41 2.3 运算符与表达式(续运算符与表达式(续12) 1 1 1 1 0 1 0 1(a=245=0 xF5) 左移2位 1 1 0 1 0 1 0 0(b=0 xD4=212) 1 1 1 1 0 1 0 1 b=(24522)%28=980%256=212 /*b的位宽为的位宽为8*/ c=(24522)%216=980%65536=980 /*c的位宽为的位
36、宽为16*/ c=a3; 则b=30 , 运算过程如下: Ch2-42 1 1 1 1 0 1 0 1(a=245=0 xF5) 右移3位 0 0 0 1 1 1 1 0(b=0 x1E=30) 1 1 1 1 0 1 0 1 2.3 运算符与表达式(续运算符与表达式(续13) b=245/23=245%8=30 2.3.3 关系与逻辑运算符及其表达式关系与逻辑运算符及其表达式 1. 关系运算符关系运算符(比较数值大小运算) (大于) = (大或等于) = (小于或等于) = (等于) != (不等于) Ch2-43 2.3 运算符与表达式(续运算符与表达式(续14) 2. 逻辑运算符逻辑运算
37、符 賦值表达式返回值为L_value得到的值; 表达式类型与L_value类型不一致,自动强制转换; 多个等号连用时,从右向左运算。 例如例如: int a, b, c, d, x, ch; x=3= =2; ch=A+1; a=b=c=d=0; a=(b=(c=(d=0); Ch2-46 2.3 运算符与表达式(续运算符与表达式(续16) 2. 自反賦值运算符自反賦值运算符 syntax: L_value=表达式表达式 说明说明: 执行赋值 运算:L_value=L_value(表达式); 指代指代 +, , *, / , %, , a+=1; a=a+1; a=1; a=a1; b*=a+
38、2; b=b*(a+2); a+=a=a*=a; /* a=0, 表达式表达式=0 */ Ch2-47 2.3 运算符与表达式(续运算符与表达式(续17) 2.3.4 其它运算符其它运算符(不含不含 指针有关运算指针有关运算) 1. 数据类型强制转换数据类型强制转换 syntax: (数据类型名数据类型名)表达式表达式 说明说明:将表达式值强制转换为指定数据类型。 例如例如: int a=(int)3.5, b=(int)-3.5; /*a得到得到 3, b得到得到-3, 截尾取整截尾取整*/ 2. 求存储长度运算符求存储长度运算符 syntax: sizeof(表达式表达式|类型名类型名)
39、说明说明:求表达式返回值或者指定的数据类型长度。 例如例如: sizeof(double) 值为8 sizeof(32) 值为2或4 sizeof(0.5f) 值为4 sizeof(char) 值为1 Ch2-48 2.3 运算符与表达式(续运算符与表达式(续18) 3. 条件运算符条件运算符 syntax: 表达式1?表达式2:表达式3 说明说明:首先计算表达式1,如果表达式1的值不等于0, 则计算表达式2(这时不会计算表达式3),用表 达式2的返回值作为整个条件运算表达式的值; 如果表达式1的值等于0 ,则计算表达式3(这时 不会计算表达式2),用表达式3的值作为整个条 件运算表达式的值。
40、表达式1一般是关系或逻辑 表达式。 例如:例如:a=xy?1:0; if(xy) a=1;else a=0; Ch2-49 2.3 运算符与表达式(续运算符与表达式(续19) 4. 逗号运算符逗号运算符 syntax: 表达式1,表达式2,表达式3,表达式n 说明说明:从左向右依次计算各表达式,以最后一个表 达式的值作为逗号表达式的返回值。 例如:例如:int a=4, b; b=(+a, a*=2, a+=3); 则则 a=13, b=13 2.3.5 运算符的优先级运算符的优先级 教材教材P73表表2.10全背全背 Ch2-50 优先级优先级运运 算算 符符 1 ( ) . 2 ! siz
41、eof a0?1:1) (5) 写一个表达式,求一个实型变量x的小数部分。 如:x=-25.8704, 则表达式返回-0.8704。 x-(int)x (6) 整型变量y存放一个年号,写出判断y是否为闰年 的表达式。 已知闰年的判断条件是:年号y能被4整除,但不 能被100整除;或者年号y能被400整除。 y%4=0 (9) 将整型变量a的第k位设置为0。 a (10) 交换char型变量c的高4位和低4位。 如:c=0 xb3, 则交换后c=0 x3b; c=(c Ch2-56 2.4 字符界面输入与输出字符界面输入与输出 2.4.1 单字符输入与输出函数单字符输入与输出函数 1. 头文件头
42、文件stdio.h int getchar(void); /*单字符输入单字符输入*/ int putchar(int ch); /*单字符输出单字符输出*/ 例:例:#include stdio.h char ch; ch=getchar(); putchar(ch); Ch2-57 2.4 字符界面输入与输出(续字符界面输入与输出(续1) 2. 头文件头文件conio.h int getche(void); int getch(void); /*用法均同用法均同getchar() */ 三个单字符输入函数的区别三个单字符输入函数的区别: getchar / 单字符输入函数,输入字符时显示输
43、入的 字符并且需要回车 / getche / 单字符输入函数,输入字符时显示输入的 字符, 不用回车 / getch / 单字符输入函数,输入字符时不显示输入 的字符,也不用回车 / Ch2-58 2.4 字符界面输入与输出(续字符界面输入与输出(续2) 2.4.2 格式化输出函数格式化输出函数printf 用法:用法:printf(格式串格式串 ,表达式表达式1,表达式表达式2,); 其中,格式串的字符有两类: 以%开头引导的格式符格式符,用于控制表达式的输出 格式(有多少个表达式,就有多少个格式符); 非格式符非格式符:原样显示在屏幕上。 1. 字符串常量的输出字符串常量的输出 无表达式,
44、格式串中无格式符,如如: printf(We are students.n); / 在屏幕上打印We are students.然后换行 / printf(n); / 作用是换行,它等效于putchar(n);/ Ch2-59 2.4 字符界面输入与输出(续字符界面输入与输出(续3) 2. 格式符的语法格式符的语法 syntax: %flagwidth.precisionh|l|Ltype (1) h|l|Ltype type字段采用一个英文字母来表达数据类型与格式: d d 按十进制有符号整数形式输出 i i 按十进制有符号整数形式输出(同d格式) u u 按十进制无符号数形式输出 o o
45、按八进制无符号数形式输出 x x 按十六进制无符号数形式输出,输出时使用小写 字母 (a, b, c, d, e, f) X X 按十六进制无符号数形式输出,输出时使用大写 字母(A, B, C, D, E, F) Ch2-60 2.4 字符界面输入与输出(续字符界面输入与输出(续4) f f 按十进制小数形式输出浮点数,输出格式为: -ddd.dddddd(默认输出(默认输出6 6位小数)位小数) e e 按十进制指数形式输出浮点数,输出格式为: -d.dddde+/-ddd,(e后面是指数) E E 按十进制指数形式输出浮点数,输出格式为: -d.ddddE+/-ddd,(E后面是指数)
46、用e和E格式输出浮点数时,输出的是科学记数 法形式,即小数点前面的整数部分固定为1位整数。 g g 按十进制形式输出浮点数,自动选择f或e格式中, 输出长度小的格式输出;g格式不输出无用的0。 G G 按十进制形式输出浮点数,自动选择f或E格式中, 输出长度小的格式输出;G格式不输出无用的0。 Ch2-61 2.4 字符界面输入与输出(续字符界面输入与输出(续5) c c 输出单个字符 s s 输出字符串 p p 输出void指针,输出格式是:WIN32编程模式, 只有XXXXXXXX一种格式 % % 输出字符%(%用于引导格式控制符,在格式串用于引导格式控制符,在格式串 中输出中输出%号时,
47、必须采用格式号时,必须采用格式%) 前缀修饰符前缀修饰符: L L: 输出long double类型表达式必加必加 l l: 输出长整型表达式必加必加 h h: 输出短整型表达式必加必加 Ch2-62 2.4 字符界面输入与输出(续字符界面输入与输出(续6) (2) width width字段用来指定输出的数据项占用的字符列数,也 称为输出域宽。缺省该字段,输出宽度按数据的实际位数输 出;如果指定的输出宽度小于数据的实际位数,则突破域宽 的限制,按实际位数输出;如果指定的域宽大于数据的实际 位数,则默认在输出数据的左边输出空格,使输出的字符数 等于列宽,也就是说,输出的数据在输出域中自动向右对
48、齐。 width有以下三种情况有以下三种情况: n 一个非负整型常数,指定输出占用n列宽度。 0n n为一个整型常数,输出占用n列,如果实际位数不足n列, 数据前面补0,填满n列 输出域宽来自待输出表达式前面的一个整型表达式。 Ch2-63 2.4 字符界面输入与输出(续字符界面输入与输出(续6) 例如例如:int a=1, b=2, c=3; printf( %d%d%d, a, b, c); 输出为输出为:123 printf(%3d%3d%3d, a, b, c); 输出为输出为: 123 printf(%04X%4x, 0 xa5, 0 xa5); 输出为输出为: 00A5a5 pri
49、ntf(%*d, 8+1, -3); 输出为输出为: -3 (3) .precesion 有以下4种情况: Ch2-64 2.4 字符界面输入与输出(续字符界面输入与输出(续7) 缺省缺省 对于f |e|E格式,表示小数点后输出6位小数位小数 对于g |G格式,表示最多输出6位有效数字 .m m为非负整型常数,对于浮点格式,指定小数 点后面输出m位小数位小数; s格式,表示只输出字符串的 前面m个字符 .0 对于f |e|E格式,表示不输出小数点和小数,按 整数形式输出 . 表示precision来自待输出表达式前面的一个整 型表达式 例如例如:double a=12.578,b=0.2572
50、;int n=9,m=4; printf(%.2f,%.10.2E,%f,%e,%10g,a,a,a,a,a,); 输出为输出为: 12.58, 1.26E+001,12.578000,1.257800e+001, 12.578 Ch2-65 2.4 字符界面输入与输出(续字符界面输入与输出(续8) printf(a=%.0f,a=%*.*f,a,n,m,a); 输出为输出为: a=13,a= 12.5780 printf(%.2f%,b*100); 输出为输出为: 25.72% printf(%s%6s%6.3s,ABCD, ABCD, ABCD); 输出为输出为: ABCDABCDABC
51、(4) flag 缺省缺省 输出正数时不输出正号;域宽大于数据实际位数时,域 中左边补空格,数据靠右对齐; + 输出正数时要输出正号; 域宽大于数据实际位数时,域中右边补空格,数据靠 左对齐。 # 用于x |X格式:输出0 x(格式x)或0X(格式X)。 Ch2-66 2.4 字符界面输入与输出(续字符界面输入与输出(续9) 例如例如: unsigned a=0 xa84d; int b=346; printf(%-8#x%#X,a,a); 输出为输出为: :0 xa84d0XA84D printf(b=%8dnb=%8db=% 8dnb=% d,b=%08dn,b,b,b,b,b); 输出为
52、输出为: :b=+346 b=+346 b=+346 b=+346,b=+0000346 3. 常用输出格式常用输出格式 (1)(1)整型表达式整型表达式:int-%d long-%ld (2)(2)实型表达式实型表达式:float, double-%f (3)(3)字符表达式字符表达式:char-%c, %d Ch2-67 2.4 字符界面输入与输出(续字符界面输入与输出(续10) 注意注意%c和和%d输出字符表达式的区别输出字符表达式的区别: char c1=A,c2=97; printf(c1=%c,%dnc2=%c,%dn,c1,c1,c2,c2); 输出结果是输出结果是:c1=A,6
53、5 c2=a,97 2.4.3 格式化输入函数格式化输入函数scanf 用法用法: scanf(格式串格式串 ,地址地址1,地址地址2,); 1. 格式符格式符 syntax: %*widthh|l|Ltype (1) h|l|Ltype Ch2-68 2.4 字符界面输入与输出(续字符界面输入与输出(续11) d 以十进制有符号整数形式转换输入数据 i 以十进制有符号整数形式转换输入数据(同d格式) u 以十进制无符号整数形式转换输入数据 o 以八进制有符号整数形式转换输入数据 x |X 以十六进制有符号整数形式转换输入数据(x和 X等效) e|E|f|g|G 以十进制浮点数形式转换输入数据
54、,输入 数据时,可以输入整型常量、小数形式实型常量或 指数形式实型常量。 c 输入一个字符(可输入控制字符) s 输入字符串(遇到第一个空格、TAB或换行符结束 转换) Ch2-69 2.4 字符界面输入与输出(续字符界面输入与输出(续12) 前缀修饰符前缀修饰符: L L: 输入long double类型变量必加必加 l l: 输入长整型变量或者double型变量必加必加 h h: 输入短整型变量必加必加 (2) width width字段用来指定输入数据的转换宽度,它必 须是一个十进制非负整型常量。width表示读入多少 个字符就结束本数据项的转换。如果没有指定width, 则遇到空格空格
55、 、TAB键键、回车回车/换行符换行符、非法输入非法输入则结 束数据项的转换(%c格式除外格式除外)。 (3) 号表示数据输入项要按指定格式进行转换, 但不保存变量,即该%没有对应的变量。 Ch2-70 2.4 字符界面输入与输出(续字符界面输入与输出(续13) scanf用法举例用法举例: 1) int a,b,c; scanf(%d%d%d, 2) char ch; ch=getchar(); scanf(%c, 3) float a;int b;double c; scanf(%f%3x%lf, 若输入为:-1.5A8059 则a=-1.5, b=0 xA80, c=59.0 4) char c1,c2,c3,c4; scanf(%c%c%c%c, 若输入为:Ab 则c1=A, c2=, c3=b, c4=n Ch2-71 2.4 字符界面输入与输出(续字符界面输入与输出(续14) 5) 字符与其它类型变量混合输入字符与其它类型变量混合输入 int age; char sex; f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗美容诊所财务总监绩效评定表
- 智能马桶节能管理指南
- 航天器飞行姿态控制方案
- 质量控制标准提升通知3篇
- 食品安全事故数据恢复社区生活组织者预案
- 互联网咖啡店网络安全风险防范指南
- 工程师技术创新能力与研发成果绩效评定表
- IT网络安全管理绩效考核表
- 两年合同期满商务谈判邀请函(5篇范文)
- 交通协管员外包服务方案投标文件(技术标)
- 个人安全述职报告模板讲解
- 高校学生军事技能训练评分细则
- AI项目管理实战
- 人工智能在医疗健康领域的应用培训
- 测绘生产作业指导书
- AQ3026-2026《化工企业设备检修作业安全规范》标准解读课件
- 2026年烟花爆竹考试试题及答案
- 2025版《煤矿安全规程》学习与解读课件(监控与通信)
- 酒店全年会议合同范本
- T-CCTAS 263-2025 城市轨道交通供电智能运维系统通 用技术规范
- 振动位移探头培训课件
评论
0/150
提交评论