版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(一 )程 序 设 计 语 言 的 发 展1 、 机 器 语 言 2、 汇 编 语 言 3、 面 向 过 程 的 语 言4、 面 向 对 象 的 程 序 设 计 语 言(二)C程序设计语言的执行过程1 、 编 辑2、 编 译 3、 连 接4、 执 行(三)用库函数组装C程序例 1 : 计 算 2. 17 15 的 正 弦 值 。#i nclu de math. h II ma in( )fl oa t a ;/* 定 义 a 为 实 型 变 量 */a=si n(2. 1 71 5);/*调 用 si n 函 数 */pri ntf( 一%f n |,a);/*调用 printf 函数,输出
2、a 的值 */详解:1 、 在 本 例 中 用 到 的 si n 函 数 称 为 数 学 函 数 , 它 是 为 了 用 户 使 用 方 便 , 由 一 批 厂 家 开 发 编 写 的 函 数,并不是C语言的一部分。在使用数学函数时,往往要用到函数执行时所需的一些信息(例如宏 定义),这些信息包含在 math. h忡。因此在程序开头用#i nclu de -math. h II将有关的标头文件包括到 程序中。2 、一 个 C 语 言 源 程 序 文 件 由 一 个 或 多 个 函 数 组 成 , C 语 言 的 基 本 组 成 单 位 是 函 数 。一 个 完 整 的 C语言程序 有 且只有一
3、 个称 为主函数的main函 数 ,程序 总是 从main函 数 开始执行,调用其它函数后再回到main函数, 在main函数中结束 整 个程 序的运行。3 、main 是函数名 称, 没有参数可以 不 写, 但圆括 号不 能 省略 ,main()后面有一对花括号,花 括号内的部 分称 为 函数体 ,main函数可以在程序的任意位置。4 、C规定每 个 语 句以 分号 ( ;)结束,分号是语句不可缺少的组成部分,每行中可以写多条语句。5 、/*与*/ 之 间 为 注释信 息, 对程序运行结果不发生影响,也不被编译,注释说明可以放在语句的任意位置。6 、fl oata;此语句是把a定 义 为 一
4、个实型变量。7 、C 语 言本身没有输入、输 出 语 句,本例使 用p ri nft函 数 输 出 数 据 。prinft函数的括 号内包括两 部分内容 : 双引号内的部分、 双 引 号外的部分。双引 号 内的 部 分 是 “ 格 式字符 串”,用于 指定输出双引号外的变量的打印格式。此例中双引号中有一个l%f IL它是输出一个保留小数点后6位数字的格式字符,小数点前的位数不指定。二、练习(一 ) 选 择 题1 、 以 下 叙 述 正 确 的 是 _C _。(A) 在 C程 序中,main函数 必 须 位于 程序 的 最 前 面(B) C程序的每行中只能写一条语句(C) C 语言本身没有输入输
5、出 语 句(D) 在对一个C程序进行编译 的 过程 中, 可 发 现 注释中的 拼 写 错 误2 、C 语言规定:在一个源程序 中 ,ma in函 数 的 位 置_C_。(A) 必须在最开始(B) 必须在系统调用库函数的后面(C) 可以任意(D) 必须在最后3 、 一 个 C 语 言 程 序 是 由 B 。(A) 一个主程序和若干子程序组成(B) 函数组成(C) 若干过程组成(D) 若干子程序组成4 、一个C程序的执行是从A。(A) 本程序的main 函数开始,到main函 数 结 束(B) 本程序文件的第一个函数开始,到本程序 文 件的 最 后 一 个 函 数 结 束(C) 本程序的main
6、 函数开始,到 本 程序 文 件 的 最 后 一 个 函 数 结 束(D) 本程序文件的第一个函数开始,到本程序main函 数 结 束5 、以下叙述不正 确 的是_D_。(A) 一个C源程序可由一个或多个函数组成(B) 一个C源程序必须包含一个main 函 数(C) C程序的基 本 组成单位是 函 数(D) 在 C 程 序 中 , 注 释 说 明 只 能 位 于 一 条 语 句 后 面(二 ) 填 空 题 :1、一个C源程序中至少包括一个 main函数 。2、在一个C源程序中,注释部分两侧的分界符分别为 /* 和*/第二章 数据描述与基本操作主要知识点(一)C的基本数据类型节短整型(short
7、 )整型 整型(nnt)基本类型数据类型构造类型指针类型1空类型(voi d)字符型(c har) 长 <实型(浮户型)单精度1枚举类型f数组类型结构类把(st ruct)共用类型(u n i on )文件类型(FILE )整型 (l on g)广型(float)双精度型 (d ou bl e)(二)常量和符号常量1、常量定义:在程序运行过程中,其值不能被改变的量称为常量。常量常区分不同的类型,如 12、0、-3为整型常量,a: 'D为字符常量2、符号常量:用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。常量不同于变量,它的值在作用域内不能改变,也不能再被赋值。例1
8、:已知商品的单价及数量求商品的总价值。#defi ne PR IC E3 0mai n ()i nt num = 10 ,tot al;tot al= num* PR IC E;pri ntf( ot al= %d |,tot al);输出结果:tot al= 300详解:1 、程序中用#defi ne 命 令 行 定 义PRIC E 代 表 常量30, 此 后 凡 在 此 文 件 中 出 现 的PRIC E都代表30,可 以和常量一样进行运算。2 、符号常量不同于变量, 它 的 值在 其 作 用 域 内不 能改 变 , 也 不 能 再 被 赋 值 。 如 再用 以下赋值语句给PR ICE赋值
9、:PR IC E= 4 0;是错误的。(三)变量1、 变量定义:其值可以 改 变 的 量 称 为 变 量 。2、 标识符的命名规范和其它高级语言一样,用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有 效字符序列称为标识符,C语言中的标识符命名规范为:变量名只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 C 语言 中标 识 符 的 长 度 ( 字 符 个 数 ) 无 统 一 规 定 , 随 系 统 而 不 同 。 许 多 系 统 (如 IB M PC的MS C) 取前 7个字 符 , 假 如 程 序 中 出 现 的 变 量 名 长 度 大 于 7个字 符 ,
10、 则 只 有 前 面 7个 字 符 有 效 ,后面的不被识别。C语言有32个关键字(例如if、else、wh i le)它们已有专门含义,不应用采用与它们同名的 变量名。C语言将大写字母和小写字母认为是两个不同字。例 2: 在 下 列 符 号 中 , 可 以 选 用 哪 些 作 变 量 名 ? 哪 些 不 可 以 ?a3B 3aB +a -b *x $_b5_ if next_daye_2 OK? integer MA XN UMB ERi *j答 案 : _b5_ a3B next_day e_2MAXN UM BER 可作 变 量 名,其 它 的 作 变量 名 不 可以。详解: M AXN
11、 UM B ER 可 作 变 量 名 。 习 惯 上 符 号 常 量 名用 大 写 ,变量 名 用 小 写以 示 区 别,但 大 写 字 母作变量名并无错误。 if、 integer 属 于 保 留 字 , 保 留 字 不 可 作 变 量 名 。口 +a -b *x $OK?i*j不可作变量名,因为变量名只能由字母、数字和下划线三种字符 组成。 3aB 不 可 作 变 量 名 , 因 为 变 量 名 的 第 一 个 字 母 必 须 为 字 母 或 下 划 线 。(四 ) 整 型 数 据整型常量即整常数。C语言整常数可用以下三种表示形式。十进制表示。如2 31、-5 6.47 8八进制表示。以0
12、开头的数是八进制数。如0123即( 123) 8 = 1*8 2 +2*8 1+3*8 0=64+1 6+3=83。十六进制表示。以 0x 开头的数是 16 进制。如 0x123 即 (123 )1 6=1 *1 62+2*1 61 + 3*1 60 = 256+32+3 = 29 1 o2、整型变量整型变量分为:基本型、短整型、长整型、和无符号型四种。基本型,以int表示短整型,以short i nt表示或以short表示长整型,以lon gi n t表示,或以lon g表示无符号型,存储单元中全部二进制位(bit)用作存放数本身,而不包括符号。无符号型中又分为 无符号整型、无符号短整型和无
13、符号长整型,分别以un si gn ed int、un si gn ed sh ort和u nsi gn ed l on g 表示。3、整型数据的取值范围C标准没有具体规定各类型所占内存字节数,各种机器处理上有所不同,以 旧M PC为例,数的 范围如表2. 1所示。表2. 1所占位数数的范围In t16-32768 32767即-2 15(215-1)short int16-3 276832767 即-2 15 (215-1)Lon g int32-2 147483648 21 474 83 647 即-2 31 (231-1 )Un si gn ed int160 65535即 0 (216
14、-1 )Un si gn ed short160 65535即 0 (216-1 )Un si gn ed l ong320 - 42 949 6 72 95即 0 (23 2-1 )4、整型常量的分类一个整常量,如果其值在-3276832767范围内,认为它是int型,它可以赋值给int型和10ng i nt型变量。一个整常量,如果其值超过了上述范围,而在-2 147 48 364821 47 483 647范围内,则认为它是 longint型,可以将它赋值给一个10ng i nt型变量。如果某一计算机系统的C版本确定的shortint与int型在内存中占据的长度相同,则一个int型的常量出
15、同时一个sh ort i nt型常量 常 量 中 无 unsigned型 。但一 个非负 值 的 整常 量 可 以 赋 值 给 unsigned型 整 变 量,只 要 它的 范 围不 超 过 变 量 的 取 值 范 围 即可 。例如 :将50000 赋给 一 个 unsigned int 型 变量 是 可 以的, 而 将70000赋 给 它 是 不 行 的 ( 溢 出 )。 在 一 个 整 常 量 后 面 加 一 个 字 母 l 或 L, 则 认 为 是 long i nt 型 常 量 。(五 ) 实 型 数 据1、 实 型 常 量实数在C语言中又称为浮点数。实数有两种表示形式: 十 进 制
16、形 式 。 它 由 数 字 和 小 数 点 组 成 ( 注 意 必 须 有 小 数 点 ) 。 例 如 : 0. 123、 .123、 123.0、 0.0都是十进制数形式 指 数 形 式 。 如 1 23. 56e4 或 123. 56E4 都 代 表 123. 56*1 04。 但 字 母e( 或 E) 之 前 必 须 有 数 字 , e后面指数必须为整数。例如:e3、2. 1e3. 5、.e3、e等都不是合法的指数形式例 3: 下 面 四 个 选 项 中 , 均 是 不 合 法 的 浮 点 数 的 选 项 是A) 1 60.0. 12e3B) 1232e4. 2.e5C) -. 18 1
17、23e4 0.0 ( D) -. e3 .2341e3答案:B详解: 1 60.0. 12-. 1 8123e40. 0.2341e3 是 实 数 的 十 进 制 形 式 或 指 数 形 式 e3 2e4. 2.e5-. e3 不 是 正 确 的 指 数 形 式 。 因 为 正 确 的 字 母 e( 或E) 之 前 必 须 有 数 字 , e后 面 指 数 必 须 为 整 数 。 对 于 数 据 表 示 形 式 .e5 以 及 -.e3, e 前 的 .与 -. 不 是 有 效 的 数 字 表 示 形 式 1 23 是 整 数 形 式2、 实 型 变 量C实型变量分为单精度(fl o at型)
18、和双精度(dou b le 型)两 类。在一般系统中,一个单精度 型数据在内存中占4 个 字 节(32 位) , 一个 double型数据占8个字节 。一个单精度型变量能接收7 位有效数字,一个double型变 量 能 接 收17 位 有 效数字,数值的范围随机器系统而异。在旧M PC中,单精度实数的范围约为±(3. 4E1 0-383. 4E 1 038 ),双精度实数的 范围约为 ± (1. 7E 1 0-308 1.71 0308)。例 4:main( ) f loa t a;a=111111.6 66666;pri ntf( ff I, a);输出结果:111111
19、.6 40621详解:一个实型常量不分float型和double型。一个实型常量可以赋给一个float型或double型变量。 根据变量的类型截取实型常量中相应的有效位数字。由于float型变量只能接收7位有效数字,因此在把111111.6 6 66 66赋给a时,a只接收了 111111.6 ,由于输出函数pri ntf中的f格式表示输出小数点后的6位小数,所以111111. 6后的40621 属于无意义数字。如果a改为dou ble型,则能全部接收上述1 2位数字。(六)字符型数据1、字符常量:普通形式的字符常量:用引号(即撇号)括起来的一个字符,如a: D '、?等都是字符常量。
20、转义符:以“ ”开头的字符序列。常用的以“ ”开头的特殊字符见表2. 2表2.2字符形式功能n换行t横向跳格v竖向跳格b退格r回车f走纸换页反斜杠字符单引号字符ddd1到3位8进进制所代表的字符xh h1到2位16进制数所代表的字符例5:若有说明语句:char c= 7 29 '则变量c(A)包含1个字符(B)包含2个字符(C)包含3个字符(D)说明不合法答案:D详解:I后可以有1到3位8进制所代表的字符,本题中II I后的172 1属于8进制所代表的字符,而归恻不属于8进制位所代表的字符,则729中包含了两个字符常量72和'9:而字符常量是用 引 号 ( 即 撇 号 ) 括
21、起 来 的 一 个 字 符 , 所 以 答 案 为 D。2、 字符变量字符变量是用来存放字符常量的存储单元。3、 字符数据在 内 存 中 的 存 储 形 式将一个字符常量存放到一个字符变量中,实际上并不是把该字符本身存放到内存单元中去,而是 将 该 字 符 的 相 应 的 ASC II 码 值 存 放 到 存 储 单 元 中 去 。例6: 将 小 写 字 母 转 换 成 大 写 字 母main( ) char c1 = a;c1=c1-32;pri ntf( 一%c I, cl);输出结果:A详解: a 的 ASC II 码为 97,所 以 c1 = a; 语 句 的功 能 是 把 97赋 值
22、 给 了 c1 。 c1=c1-32; 语 句的 功 能是 把 97-32的 值 65赋 值 给 c1 。printf函数中的c格式表示以字符方式输出。ASC II码值为65的字符为A ,所以运行结果为:A(七 ) 字 符 串 常 量字 符 常 量 是 用 一 对 双 引 号 括 起 来 的 零 个 或 多 个 字 符 序 列 。 C 规 定 以 字 符 0作 为 字 符 串 结 束 标志。所以字符串b I实际上包含2个字符:a :'0 ;因此下面的语句:c= ia ii;把一个串赋值给一个字符变量c是错误的。例7 : 下 面 不 正 确 的 字 符 串 常 量 是 。(A)'
23、bc '( B) 1112 '2 II ( C) 10 II ( D) II II答案:A详 解 : a bc 是 用 单 引 号 引 来 的 , 所 以 a bc 不 是 正 确 的 字 符 串 常 量 。(八 ) 算 术 运 算 符 和 算 术 表 达 式1、 基 本 算 术 运 算 符C语言中有5个基本算术运算符:(加法运算符。如3+5、+3)(减法运算符。如5-2、- 3 )(乘法运算符,如3*5 )(除法运算符,如5/3,5. 0/3)( 求 余运 算 符 , 要 求 %两侧均为整型 数 据 )例 8 :在 C语 言 中 , 要 求 运 算数必须是整 型 的 运 算
24、符 是 。( A) /( B ) +( C ) ! =( D ) %答案:D详解: 对 于 %运算符来说,要求两 侧 均 为 整 型 数 据 , 所 以 表 达 式 3.5%2 与 3%2.0 是 错 误 的 。例9: 写 出 下 列程序的输出结果ma in( )pri ntf( 一%d, %d n |,5/3, 5%3);pri ntf( 一%d, %d n |,-5/-3 ,-5 %-3);pri ntf( 一%d, %d n |,-5/3 ,-5 %3);pri ntf( 一%d, %d n |,5/-3 ,5%-3);输出结果:1, 21 , -2-1,-2-1,2详解 : 两 个同号
25、整数相 除时 结果为 正 整 数 ,如 5/3、 -5/-3 的 结 果 值 为 1 。两 个 异 号 整 数 相 除 时 结果为负整数, 多 数 机 器采取 “ 向 零 取整”法, 即-5/-3=-1 ,5/-3=-1 , 但 如 果 参 加 运 算 的 两 个 数 中 有 一个数为实数时 结 果 为 实数。 对 于 求 余(%)运 算, 运算结 果 与第一 个 数 的 符 号 相 同 。优 先 级 别:先*、 /、 %后 +、运算量:双元运算量,%前后必须为整数。左右结合性:自左至右参预运算。2、 自 加 自 减 运 算 符C语言中有4种形式的自加自减运算符:十十i(先使i力口 1后使用)
26、i(先使用后使i加1)i(先使i减1后使用)1 (先使用后使i减1)优先级别:高于算术运算。例 10: 若 x 和 n 均 是 int 型 变 量 , 且 x 和 n 的 初 值 均 为 5, 则 计 算 表 达 式 后 x 的 值 为 , n的 值 为 。x+ =n +答 案 :106详解:根据优先级别选运算表达式n + +,因为n+ +是后缀表示形式,所以n先参预运算,再运算 表 达 式 x+ =n, 则 x 为 10, 最 后 n 自 加 为6。例 11:main( )i nt x, y, m, n;x= 2; y= 2m= x+ +*5 ;n=+ y*5 ;pri ntf( -%d,
27、%d,%d,%d |,x, y, m,n); 输 出 结 果 : 3,3,10,1 5详解:对于后缀来说是先使用后运算,所以m的 值为x在自 加 以前 的 2*5 得10 赋 值给m 后 ,x 自 加 变为3。对于前缀来说是先运算后使用,所以m 的值为x 在 自 加以 后 的 3*5得 15 赋值给 n。 运算量 :单元运算量,此运算量必须为变 量,所 以表达式5+、(x+y)+ +是 错误 的 。左右结合性:自右至左参预运算。(九) 关系运 算1、C语言提供的关系运算符有:>(大 于)>=(大 于 或 等 于 ) <(小 于 )<=( 小 于 或 等 于 ) =( 等
28、 于 ) 是!=( 不 等 于 )2 、优 先 级 别 :关系运算符 的优 先级 别 低 于 纯 算术 类 ,高 于 赋 值 类 。后 两 个 的 优 先 级 小 于 前 四 个 。如 表 达式 a+b<c+d 完全等价于 表达 式(a+b)< (c+d)。3、 运算量:关系运算符是双 元运算符,整型、实型、字符都可以参预运算。4、 左右结合性:从左向右的 结合方向5、 关 于 关 系 运 算 符 的 进 一 步 说 明 : 关系表达式的值是整型数0或1,故也可以将其看成一种整型表达式。例如:i nt i=1 ,j=7 ,a;a=i+ (j %4!= 0);的执行结果为:a的值为2
29、。要说明x在区间a,b中,普通数学中使用表达式aVxb。但C语言中应写成a<=x &&x< = b。 表达式 5>2>7>8 在数 学 上 是 不允 许的,而 在 C 中 是 允 许 的 。 按 自 左 至 右 求 解 。 字符数据 的 比 较 按其 ASC II 码值 进行。在判定两个浮点数是否相等时,由于存储上的误差,会得出错误的结果。例如:1.0/3.0*3. 0=1.0该 表 达 式 的 值 为 0。(十 ) 逻 辑 运 算1、C语言提供的逻辑运算符:&&(逻辑与)|(逻 辑或 )!(逻 辑非)2、 优先级别:&&a
30、mp;与|的 优先级别低于关系 运算符,高于 条件运 算 符 , && 的 优 先 级 别 高 于 |, ! 的优 先级 别与自加运算符(+) 、自减运算符(-)同级。3、 运 算 量 : && 和 |是 双 元 运 算 符 , ! 是 单 元 运 算 符 。例 12: 已 知 x= 43,ch= A, y= 0; 则 表 达 ( x> =y&&c h<B && !y ) 的 值 是 。( A) 0( B) 语 法 错( C) 1( D)“ 真 ”答案:C详 解 : C 语 言 不 提 供 逻 辑 性 数 据 “ 真
31、” 和 “ 假 ” , 在 进 行 逻 辑 运 算 时 , 结 果 不 是 1 就 是 0。4、 左右结 合性:&&和|运算符的结合方向为自左至右 , ! 的 结 合 方 向 为 自 右 至 左。5、 关于逻 辑运算符的 进 一步说明: 在一个&&表 达式中,若&&的一端为0,则不必再计算 另 一 端 , 该 表 达 式 的 值 肯 定 为 0。 在一个|表达 式中,若|的一端为0,则不必再计算另一 端 , 该 表 达 式 的 值 肯 定 为1。例 13: 写 出 下 面 程 序 的 输 出 结 果mai n( )i nt x, y, z;x=
32、y= z= 0;+x &&+ +y| |+ z;pri ntf( -%d,%d,%d |,x, y, z);x= y= z= 0;+x |+ + y&&+ + z;pri ntf( -%d,%d,%d |,x, y, z);输出结果:1, 1, 01, 0, 0详解: 因为&&的优先级别高于|,所以 表达式 +x&&+y| |+z 是 一个或表 达式, 根据| 的一端为0,则不 必 再 计算另一端的原则,先计算表达式+x&&+ +y 的值 为 1,因为1或 任何值 都为1 ,所以表达 式+z 没 有运算,输出结果为
33、:1 ,1 ,0。 表 达 式 +x|+ + y&&+ +z 也是一 个或表达式,同 样 根 据 |的一端 为 0, 则 不必 再 计 算 另 一 端 的 原 则 ,先 计 算 表 达 式 +z 的 值 为 1 , 因为1 或任何值都为 1 ,所 以 表 达式+y&&+ +z没 有 运 算 , 输 出 结 果 为 :1 , 0, 0。(十一)赋值运算1、 基本的赋值运算符:=( 将 赋 值 运 算 符 右 侧 的 表 达 式 赋 给 左 侧 的 变 量 )2、 自反算术赋值运算符C语言中有5个基本自反算术赋值运算符:=(a=3等价于a=a3)= (a=3等价于a
34、=a3)= (a=3等价于a=a3)= (a=3等价于a=a3)=(a=3等价于a=a3)3、 优 先 级 别: 赋 值 运 算 符 与自反算术赋 值 运 算 符属 于 同 等 级 别 , 低 于 条 件 运 算 符 , 高 于 逗 号运 算 符 。 如 对 于 表达 式 x% =y+ 3 完全等价于x% =(y+3)。例 14: 若 有 以 下 定 义 , 则 能 使 值 为 3 的 表 达 式 是 。In t k=7 ,x= 1 2;( A) x% =(k %5) ( B ) x% =(k -k %5)( C) x% =k-k %5( D) (x% = k)- (k %=5)答案:D详解:
35、表达式(x% =k)-(k %=5)完全等价于(x= x% k)-(k =k%5)等价于5-2 ,此表达式的结果为3。4、 运算 量:双元 运算量,赋 值 运 算 符与自反算术赋值运算的第一个量必须 为变 量 ,且=前 后必 须为整 型数 据 。如 对 于表达式a*3 +=2 是错误的。因为此表达式完全等价于(a*3)=(a*3)+2。5、 左 右 结 合 性 : 自 右 至 左 参 预 运 算 。例15: 若a 是int 型变量,且 a 的 初 值为6,则计算表达式后a的值为。a+=a-= a*a答 案 : -60详 解 : 表 达 式 从 左 向 右 运 算 ,先 计 算 表 达 式 a=
36、a-36 后 a 为 -3 0,再计 算 表 达 式 a=a+a 后 a 的 值 变为 -6 0 。(十二)条 件运 算 :1、 条件运 算符 的 基本 形 式 及 功 能 :条件运算是一种在两个表达式的值中选择一个的操作。它的一般形式为: e1?e2:e3它的操作过程为,若el为真,则表达式的值为e2,若为假表达式的值为e3o2、 优先级别:低于逻辑运算 ,高于赋值运 算 。3、 、运算量:三元运算量,e1一般为算术表 达 式,e2 、e3 可 以 是 任 意 类 型 的 表 达 式 , 条 件 表 达式 的 值 的类 型为e2与e3二者中类型较高的。例16: 若有条件 表达式(exp )?
37、a+ :b-,则以 下 表达式 中能 完 全 等 价 于 表 达 式( exp )的 是 。答 案 : exp != 0详解 : 对 于 表 达 式 e1 ?e2:e3, e1一 般 为 算 术 表达 式 、 逻 辑表达式、关 系表达 式 ,结 果 为1( 真 )或 0(假 ) 。 也 可 以 为 数 值 exp , 结 果 为 结 果 为 非 0(真 ) 或 0(假)在本例 中与exp 完全 等 价的 表 达式 是 exp != 0 。4、 左 右 结 合 性 : 自 右 至 左 运 算例 1 7: 以 下 程 序 的 运 行 结 果 是 。mai n()int k=4,a=3 ,b=2,c
38、=1;pri ntf( 一%d I, k<a?k:c< b?c :a);答案:1详 解 : 条 件 表 达 式 是 从 右 向 左 运 算 ,所 以 在 本 例 中 先 计 算 表 达 式 c<b?c:a 的 值 ,把 各 数 值 代 入 此 表 达 式的值为1o再计算表达式k<a?k:1的值,因为k<a为假,所以整个表达式的值为1。(十 三 ) 逗 号 运 算1、 逗号运算符的基本形式及功能:逗号表达式的一般形式为: 表达 式1 ,表达 式 2。逗 号 表 达 式 的 求 解 过 程 是 :先 求 解 表 达 式 1 ,再 求 解 表 达 式 2。 整 个 表
39、达 式 的 值 是 表 达 式 2的 值 。2、 优先级别:逗号 运算符是所有运算符 中 级 别 最 低 的 。例18:以下符合C语言语法的赋值表达 式 是 。( A) d=9+e+f= d+9( B ) d=( 9+e, f= d+9)( C) d=9+e, e+,d+9( D) d=9+e+=d+7答案:B解 析:表 达式d=9+e+f= d+9 中9+e+f=d+9 是 不 正 确 的 表 示 形 式 , 因 为 赋 值 号 ( =) 左 边 不 能 是 表达式。表达式d=9+e,e+,d+9 是逗号表 达 式,因为赋值运算符(=)的 优 先级别 高 于 逗 号 运 算 符( , ) 。
40、表达式d=9+e+=d+7 中9+e+=d+7是 不 正确 的表达式,因为 赋 值 号 ( =)左边 不 能 是 表 达 式 。3、 运算量: 二 元 运算 量 。4、 左右 结合性 : 从 左 向 右 运算 。例19:假设所有 变 量 均为 整 型,则表 达 式a=2,b=5,b+ +,a+b 的 值 是 。答案:8解 析:根 据逗号运算符从 左 向右运算的原则,首 先把2和5分别 赋 值 给 了a,b。 再 计算表 达式b+,b 变为6,再计算表达式a+b 的值,最后整个表达 式的值是8。(十 四 ) 强 制 类 型 转 换1、 强 制 类 型 一 般 形 式 及 功 能 :可以 利 用强
41、制 类型转 换 运 算符将 一个表达式 转换成 所需类型 。 例 如 :(dou ble)a(将a转换 成dou ble 类 型 ) 其 一 般 形 式 为 :(类 型 名 )(表 达 式 )2、 优先级别:强制 类 型 转 换 运 算 符 与 逻 辑 非 ( ! ) 、 自 加 (+) 、 自 减 ( - ) 属 于 同 等 级 别 , 高于算术运算符。3、 运算量:单元运 算 量4、 关于强制 类 型 转 换 运 算符的进一步说明: 强制转换表 达 式 时 ,表 达式应该用括号括起来 。如 果 写 成 (i nt )x+y 则 只 将 x 转 换 成 整 型 ,然 后与y相加。 如 果 x
42、原 指 定 为 f loat型 , 进 行 强 制 类 型 运 算后 得 到一 个i nt 型 的 中 间 变 量 , 它 的 值 等 于 x 的整 数 部 分 ( 截去 小 数 部 分 ) ,而 x 的 类 型 不 变 ( 仍 为 float型 ) 。例 20:main( )fl oat x= 3. 6 ;int i;i=(i nt)xpri ntf( x=% f, i = % d ll,x, i);输出结果:x= 3. 600000,I= 3解析:变量x 进 行 强 制 类 型运 算 后 , 其 类 型 仍 为 float 型 , 值 仍 为 3. 6。( 十 五 )pr i ntf 函
43、数pri ntf 函 数 可 以 输 出 任 意 类 型 的 多 个 数 据 。1、 、 pri ntf 函数 的 一般格式p ri ntf( 格 式控 制 , 输出表列) “格式控制”是用双引号 括 起 来 的 字 符串,也称“转换控制字符串”,它包括两种信息:格式说 明和 普 通 字 符 。格 式 说 明 是 由 “ %” 和 格 式字符组成,如%d,%f 等 。 它的作用是将输出的数据转换为指定的格式输出。格式说明总是由1%序符开始的。普通字符即需要原样输出的字符。 输出表列是指需要输出的 一 些 数 据 , 可以是表达式,它们之间用“,”隔开。2、 格式控制的完整格式:% - 0m.n
44、 l 或 h 格 式 字 符下面对组成格式说明的各项加以说明: %:表 示格式说 明的起 始符号,不 可缺少。 -:有 -表示左对 齐输出 ,如省略表 示右对齐输 出 。 0: 有0 表示指定空 位填0,如省略表示 指 定 空位不 填。 m. n:m 指域宽,即 对应的 输出项在输 出 设 备上所 占的字符数。N指精度。用于说 明 输出 的 实型数的小数位数。为指定n时,隐含的精度为n =6位。 l 或h:l 对整型指lon g型, 对实型指double 型。h 用于将整型的格式字符修正为short型 。3、 格 式 字 符 :格式字符用以指定输出项的数据类型和输出格式。d格式:用来输出十进制
45、整数。有以下几种用法:%d: 按整型 数据 的 实际 长 度 输 出 。%md:m为 指定 的 输出 字 段 的 宽 度 。 如 果 数 据 的 位 数 小 于 m,则 左 端补以空格,若 大 于m,则按实际位数输出。%ld:输出长整型数据。 o 格 式:以无符号八进制 形 式 输 出 整 数 。 对 长 整 型 可 以 用 “ %lo” 格 式输出。同样也 可 以 指 定字 段 宽 度 用 “ %mo” 格 式 输 出 。例 21:mai n()i nt a=-1 ;pri ntf( -%d,%o |,a,a);运 行 结 果 : -1 ,177777程序解析:-1在内存单元中(以补码形式存
46、放)为( 1111111111111111) 2,转换为八进制数为(1 77777)8。 x格式:以无符号十六进制形式输出整数。对长整型 可 以 用 “ %lx” 格式输出。同样也可以指定字段宽度用 “ %mx” 格式输出。 u格式:以无符号十进制形式输出整数。对长整型可 以 用 “ %lu” 格 式输出。同样也可以指定字段宽度用“ %mu” 格 式输出。c格式:输出一个字符。s格式:用来输出一个串。有几中用法%s:例如:pri ntf(一%s IUCHIN Al )输出"CHINA”字符串(不包括双引号)%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串
47、全部输出 。 若 串 长 小 于 m, 则 左 补 空 格 。%-ms: 如 果 串 长 小 于 m, 则 在 m 列 范 围 内 , 字 符 串 向 左 靠 , 右 补 空 格 。%m.ns:输 出 占 m 列,但只取字符 串中 左 端 n 个 字 符 。这 n 个 字符 输出 在 m 列的右侧 , 左补空格。%-m. ns:其 中 m、 n含义同上,n 个字 符 输 出 在 m 列 范围 的 左 侧, 右补 空 格 。如果n>m,则自动取n值,即保证n个字符正常输出。f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:%f: 不 指 定 宽 度 , 整 数 部 分
48、 全 部 输 出 并 输 出 6 位 小 数 。%m.nf:输 出共 占m 列,其中有n 位小数 , 如 数 值宽度小于m 左 端补空格。%-m. nf:输出共 占n 列,其中有n 位小数 , 如 数 值宽度小 于m 右 端补空格。e格式:以指数形式输出实数。可用以下形式:%e: 数 字部分 ( 又称 尾数)输 出6 位小数 , 指 数 部分占5 位或 4位。%m. ne和-m. ne: m、n和I- II字符含义与前相同。此处n指数据的数字部分的小数位数,m 表示整个输出数据所占的宽度。g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。4 、 关 于 pri ntf 函 数
49、的 进 一 步 说 明 :如 果 想 输 出 字 符 “ %” ,则 应 该 在 “ 格 式 控 制 ” 字 符 串 中 用 连 续 两 个 %表 示 , 如 :pri ntf( 一%f% % 11,1.0/3);输 出 0.333333%。( 十 六 ) scanf 函 数scanf 函 数 可 以 用 来 输 入 任 何 类 型 的 多 个 数 据 。1 、 scanf 函 数 的 一 般 格 式scanf( 格式控 制,地址表 列) “格式控制”的含义同printf函数。普 通字符即需要原样 输入 的 字 符 。 地址表列是指由若干个地 址 组成的表列 ,它们之间用“,”隔 开 。2 、格式控制的完整格式:% *ml或 h格式字 符格式字符与pri ntf函数中的使用方式相同,以%d、o、x、c、s、f、e,无u格式、%g格式可以指定输入数据所占列宽,系统自动按它截取所需数据。如:scanf( 一%3d%3d |,&a ,&b );输 入 :123456系 统 自 动 将 123 赋 给 a,456 赋 给b。 %后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年苏科版小学信息技术四年级下册第五单元《数据的收集组织》综合测试卷及答案
- 钳工及其工艺基础训练 2
- 导游年终工作总结与计划
- 校园寝室管理月考核量化细则
- 白血病患者的疼痛评估与护理
- 学校防汛安全检查责任卡
- 白内障手术患者术前并发症预防
- 消渴康复期中医护理指导
- 山西大学附中2025-2026学年第二学期高三5月模块诊断(第十六次)政治+答案
- 社区护理概述与基本原则
- 26年类器官药敏联合基因检测用药
- 2026年西安建筑科技大学《绿色建筑学报》编辑部招聘(3人)笔试参考题库及答案解析
- 2026年北京市东城区高三二模生物试卷(含答案)
- T/CSMTNY 003-2026管输掺氢天然气质量分析与流量计量技术指南
- (2026年)压疮的预防及护理课件
- 2026届广西南宁市4月高中毕业班质量调研英语试卷(含答案无听力音频无听力原文)
- 侍茄师(雪茄服务师)初级测试题
- 2026届上海市中考化学模拟试卷(含答案解析)
- 宠物泪痕去除清洁护理专业指南
- 2025年危险品管理培训
- 2026年吉林吉视传媒股份限公司招聘9名工作人员易考易错模拟试题(共500题)试卷后附参考答案
评论
0/150
提交评论