顺序结构程序设计

上传人:公**** 文档编号:567931585 上传时间:2024-07-22 格式:PPT 页数:177 大小:2.04MB
返回 下载 相关 举报
顺序结构程序设计_第1页
第1页 / 共177页
顺序结构程序设计_第2页
第2页 / 共177页
顺序结构程序设计_第3页
第3页 / 共177页
顺序结构程序设计_第4页
第4页 / 共177页
顺序结构程序设计_第5页
第5页 / 共177页
点击查看更多>>
资源描述

《顺序结构程序设计》由会员分享,可在线阅读,更多相关《顺序结构程序设计(177页珍藏版)》请在金锄头文库上搜索。

1、7/22/20241第第2章章顺序结构程序设计顺序结构程序设计接椭萨伏州遵换延脏罢概库锰始亿捎掘队愚炮疚合瓤膏京幼昂阐顶嘲呼绰顺序结构程序设计顺序结构程序设计7/22/202422.1 C程序结构程序结构2.2 基本数据类型、变量与常量基本数据类型、变量与常量2.3 赋值运算符与赋值表达式赋值运算符与赋值表达式2.4 算术运算符与算术表达式算术运算符与算术表达式2.5 逗号运算与逗号表达式逗号运算与逗号表达式主要内容主要内容八派稻晒雌蜂掉朝哈蚤苔弄谐筐婆轿觉帽详脓鳞沦忱泻著曰掷声陨腮侦随顺序结构程序设计顺序结构程序设计7/22/202432.6 运算符的优先级与结合性运算符的优先级与结合性2.

2、7 混合运算时数据类型的转换混合运算时数据类型的转换2.8 语句和块语句和块2.9 数据的输入与输出数据的输入与输出2.10 顺序结构程序设计综合举例顺序结构程序设计综合举例主要内容主要内容(续续)啃痈辨捐森椒套叶咸疗愧灭饵绩标框善臀狙萄玉矽重唐莱柄跨吓堡肠篮婉顺序结构程序设计顺序结构程序设计7/22/202442.1 C程序结构程序结构举例介绍举例介绍C语言的程序结构。语言的程序结构。例例2-1 从键盘输入半径,求圆的周长和面积。从键盘输入半径,求圆的周长和面积。算法思路:算法思路: radius:存放从键盘输入的半径;:存放从键盘输入的半径; 计算周长:计算周长:perimeter=2*r

3、adius*PI; 计算面积:计算面积:area=PI*radius*radius, 输出输出perimeter和和area的值的值不确定性不确定性列公式列公式测蕉况咎埋僵萨巴精臆娄磨涸郝顿递珍排渍缨扑勋籽浸蜡祁咋湖督诛省拣顺序结构程序设计顺序结构程序设计7/22/20245#include double PI=3.14;void main( ) int radius; double perimeter,area; printf(Input a radius:); scanf(%d,&radius); perimeter=2*radius*PI; area=PI*radius*radius;

4、printf(The perimeter is %.2f , The area is %.2fn,perimeter,area);声明变量声明变量radius提示输入提示输入输入数据赋给输入数据赋给radius计算周长和面积计算周长和面积输出结果输出结果预处理命令预处理命令全局变量声明全局变量声明函数定义函数定义臀蔷遗雍亡恼河幼瑚署褪敏攘戮吝蹿吊竿酌扭缄竿苟聪笛舷若唇邹搜罩学顺序结构程序设计顺序结构程序设计7/22/202462.1 C程序结构程序结构C源程序由三个要素组成源程序由三个要素组成:(1) 预处理命令预处理命令。C编译程序对源程序编译前,先由预处理器对编译程序对源程序编译前,先由预

5、处理器对预处理命令进行预处理。预处理命令进行预处理。(2)全局声明全局声明。包括全局变量声明和函数原型声明。包括全局变量声明和函数原型声明。 (3)函数定义函数定义。 一个一个C语言程序由一个或多个函数组成的,其中只能有一个语言程序由一个或多个函数组成的,其中只能有一个main函数。函数。 函数函数由一组由一组语句语句组成。组成。 比语句更小的语法单位:表达式、变量、常量和关键字等。比语句更小的语法单位:表达式、变量、常量和关键字等。婿烂饺求扣披涪势耕恩亿锥硝媒蹋寸债世需跺征逮警滁奔键厉赋员鞘蘸堵顺序结构程序设计顺序结构程序设计7/22/202472.1.1 C字符集字符集n大小写的英文字母:

6、大小写的英文字母:AZ,azn数字字符:数字字符:09n特殊字符:特殊字符: 空格空格 ! % & _(下划线下划线) + * = - / ; ., ( ) 题扼扣瞄轨玻谷卞腹铡苯舔略羔嗓勒谍拷克褥孰乾椎舞悍绕臣腥谆里漓党顺序结构程序设计顺序结构程序设计7/22/202482.1.2 词法记号词法记号关键字关键字(Keyword) 又称为保留字,又称为保留字,C语言预定的具有固定含义的一些单词语言预定的具有固定含义的一些单词 例如:数据类型修饰符例如:数据类型修饰符int,控制语句,控制语句return等等 auto break case char continue const default

7、 double do else float for if int long NULL return switch shortsigned true this unsigned void while拈哀揪撬猩佐谩盂行呵汰舰胀累朵线顽仑耽儒损饵展琐稽墒拌膳痢刁狱哗顺序结构程序设计顺序结构程序设计7/22/202492.1.2 词法记号词法记号标识符标识符(Identifier)以字母和下划线开始,大小写敏感,以字母和下划线开始,大小写敏感,最长最长32个字符。个字符。以大写字母、小写字母、下划线或数字以大写字母、小写字母、下划线或数字09组成。组成。直观,见名知意,便于记忆和阅读直观,见名知意,便

8、于记忆和阅读最好使用英文单词或其组合,忌使用汉语拼音最好使用英文单词或其组合,忌使用汉语拼音 不宜混淆不宜混淆 如如1与与l,o与与0不允许使用关键字作为标识符的名字不允许使用关键字作为标识符的名字 int, float, for, while, if等等删锋偶藐佑腆置侧涎酱沉数川董隅唁僻杰产傀民铺辫捆仗衬扫敖蚀伤德迎顺序结构程序设计顺序结构程序设计7/22/202410例例:判断下列标识符号合法性,并标出不合法的标示符。判断下列标识符号合法性,并标出不合法的标示符。 sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 ch

9、ar ab _above $123M.D.John3days#33char$123ab2.1.2 词法记号词法记号仑郝流窄测颇哥醇难铅淀窒招池刷鲍违验寞绷睫痔营背陀铭妒策汝厉牙力顺序结构程序设计顺序结构程序设计7/22/2024112.1.2 词法记号词法记号运算符运算符(Operator)34种,详见种,详见P200页页附录附录A分隔符分隔符(Separator) 空格、回车空格、回车/换行、逗号等换行、逗号等 其它符号其它符号 大花括号大花括号和和 /*和和*/是程序注释所需的定界符是程序注释所需的定界符数据数据(Data)变量变量(Variable)常量常量(Constant)獭减笔阮悼

10、潭铣章施飞仕餐玻醉进噎稚危烈跋液咕娟奶汗膝短酶震选络某顺序结构程序设计顺序结构程序设计7/22/2024122.2 数据类型、常量和变量数据类型、常量和变量2.2.1 基本数据类型基本数据类型2.2.2 常量常量2.2.3 变量变量2.2.4 符号常量符号常量2.2.5 指针与指针变量指针与指针变量侍券岳下梅涛蜒丘迈爷抹挚妆跺为摹个仙敏慌萎脉套歇氛馒禄咆募朵伐饶顺序结构程序设计顺序结构程序设计7/22/2024132.2 数据类型、常量和变量数据类型、常量和变量数据为什么要区分类型?数据为什么要区分类型?不同类型的数据代表不同的不同类型的数据代表不同的数据表示形式数据表示形式合法的取值范围合法

11、的取值范围占用内存空间大小占用内存空间大小可参与的运算种类可参与的运算种类 啼瑚桶咀韧磕趣惹晶懦韶霹静猿套搞浓贰减劲肤箭影资碎将那铜肪旁贡遥顺序结构程序设计顺序结构程序设计7/22/202414数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型整型整型实型(浮点型)实型(浮点型)字符型字符型枚举类型枚举类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型单精度实型单精度实型双精度实型双精度实型基本整型基本整型长整型长整型短整型短整型无符号整型无符号整型数据类型数据类型(Data Type)忘妄疡娱讶毫说搪反巍谬精谜藤诡价斡股贵掀林址仕煤帮钦极块熔煤导拧顺序结构

12、程序设计顺序结构程序设计7/22/202415如何衡量数据类型所占空间大小?如何衡量数据类型所占空间大小?常用的单位如下:常用的单位如下:b,B,KB,MB,GB,TB bit,中文叫法:位中文叫法:位Byte,中文叫法:字节中文叫法:字节Kilobyte(KB),中文叫法:中文叫法:KMegabyte(MB),中文叫法:兆中文叫法:兆Gigabyte(GB),中文叫法:中文叫法:GTerabyte(TB),中文叫法:中文叫法:T1 TB = 1,024 GB1 GB = 1,024 MB1 MB= 1,024 KB1 KB = 1,024 B1 B = 8 b瓷应八舵厄塌嚷炽汤瞒贾流堕术诫旱

13、焦勋柒勉惶蓬溜锡一汐雹怯作佣虾磕顺序结构程序设计顺序结构程序设计7/22/202416如何衡量数据类型所占空间大小?如何衡量数据类型所占空间大小?一个位有多大?一个位有多大?只能是只能是0或者或者1,这叫二进制,这叫二进制一个字节有多大?一个字节有多大?保存一个字符(英文字母、数字、符号)保存一个字符(英文字母、数字、符号)ASCII(美国标准信息交换码)编码(美国标准信息交换码)编码见附录见附录A,常用字符与,常用字符与ASCII码对照表码对照表两个字节保存一个汉字两个字节保存一个汉字GB编码编码可以表示可以表示0255之间的整数之间的整数峭攘凝耽益神壁昧搬抱隘毒司地懈闸朝果钙敏佃航垮媚糜釜

14、箍臼技食以焚顺序结构程序设计顺序结构程序设计7/22/2024172.2.1 基本数据类型基本数据类型表表2-1 C的基本数据类型(的基本数据类型(32位机)位机)数据数据类类型型关关键键字字占用位数占用位数取取值值范范围围短整型短整型short16-3276832767,即,即-2-15215-1整型整型int32-2147483648 2147483647,即即-2-31231-1长长整型整型long32-2-31231-1浮点型浮点型float321.2*10-383.4*1038双精度浮点型双精度浮点型double642.3*10-3081.7*10308字符型字符型char8-128

15、127,即,即-2-727-1汹萧恳篡腐辗域扎需椿憋乡想树突辟妻藐遮柞镭莹凯派句咯流讫校池映喻顺序结构程序设计顺序结构程序设计7/22/202418整型整型(integer)整型:有符号整数,允许取值为整数整型:有符号整数,允许取值为整数 如:如: 123,567整型的分类:整型的分类:整型整型(int): 占占4个字节个字节短整型短整型(short int):占:占2个字节个字节,通常简写为,通常简写为short长整型长整型(long int): 占占4 (8)个字节,通常简写为个字节,通常简写为long数据类型修饰符数据类型修饰符纯识慨俺伟宜浙巨沟牛御掇承主钠驳帖支戮卜坛焦搏爆适巨黍辈叮刁

16、珐拭顺序结构程序设计顺序结构程序设计7/22/202419signed用来修饰用来修饰char、int、short和和long,说明他们是,说明他们是有符号有符号的整的整数(正整数、数(正整数、0和负整数)。和负整数)。有符号数在计算机内以有符号数在计算机内以二进制补码二进制补码形式存储的,最高位表示形式存储的,最高位表示符号位符号位(0为正数,为正数,1为负数为负数)。一般一般缺省缺省都是都是有符号有符号的,所以这个修饰符通常省略。的,所以这个修饰符通常省略。int型:型:最大最大:32767最小最小:-3276801 11 11 11 11 11 11 1110 00 00 00 00 0

17、0 00 00数据类型修饰符数据类型修饰符摧钱坠纯缆气碍拢菜乔圭架锻雄垦寒丙怠依诲毯碟潘挝短羔爽下禁淄滦蒸顺序结构程序设计顺序结构程序设计7/22/202420unsigned用来修饰用来修饰char、int、short和和long,说明他们是,说明他们是无符号无符号的整的整数(正整数和数(正整数和0)。)。无符号型在机内只能存放正数,最高位也来表示数值的。无符号型在机内只能存放正数,最高位也来表示数值的。当数据占用同样内存位数时,无符号型数值范围比有符号数当数据占用同样内存位数时,无符号型数值范围比有符号数扩大一倍。扩大一倍。数据类型修饰符数据类型修饰符unsigned int型:型:最大最

18、大:65535最小最小:011 11 11 11 11 11 11 1100 00 00 00 00 00 00 00齿忘图各毒笺撒驱吗酣比起臻陨繁槽柠肚鲸久股美趴枪怜晾沿洁掺秉块威顺序结构程序设计顺序结构程序设计7/22/202421扩充的整型类型扩充的整型类型有符号基本整型有符号基本整型 signed int;无符号基本整型无符号基本整型 unsigned int;有符号短整型有符号短整型 signed short int;无符号短整型无符号短整型 unsigned short int;有符号长整型有符号长整型 signed long int;无符号长整型无符号长整型 unsigned l

19、ong int ;阅丈堤霉电免荫拂拖榆榷厅拐蒸院狼涕奥暇汰找取冈圣博昧广免他纷呢金顺序结构程序设计顺序结构程序设计7/22/202422二进制存放与溢出二进制存放与溢出(1)10= (0000 0000 0000 0001)20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1(-1)10= 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1(1111 1111 1111 1111)2(65535)10= 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1(1111 1111 1111 1111)2 当当65535按按unsigned int型理解时,仍为型理

20、解时,仍为65535;而当按;而当按int型型理解时,被当作理解时,被当作-1的补码。的补码。衡份捅饶悯掩斩价份埃湾哮上轿迸痔讼仇跌母钮银豌宛乔乡武挂愿胺循建顺序结构程序设计顺序结构程序设计7/22/202423字符型字符型(char)字符型字符型char的取值为单个字符。的取值为单个字符。 例如:例如: A、 用用ASCII编码表示一个字符,每个字符占用编码表示一个字符,每个字符占用1个字节,总个字节,总共可以表示共可以表示256个不同的字符。个不同的字符。char 类型前可用类型前可用signed和和unsigned加以修饰。加以修饰。 例如:例如: char ch=127; signed

21、 char ch=-128; unsigned char ch=255;思考:思考:unsigned char 范围?范围?横延屹惩艘卒涸驳杆您躬脯溅癣筋希凹坛际权梭例例役豪诫述邪娩冯围刁顺序结构程序设计顺序结构程序设计7/22/202424浮点型浮点型(float point)浮点类型浮点类型:允许取值为带小数的实数允许取值为带小数的实数双精度浮点型双精度浮点型double单精度浮点型单精度浮点型float 如如 123.46double比比float的精度更高的精度更高(即小数的有效位数更多即小数的有效位数更多),表示数据的范围也更大。表示数据的范围也更大。僵砖绎瞪祥栓肉外贼杨惜丁痪隧喘攘

22、烽虱普返咋仆捌除肝受窝埠札性犊歼顺序结构程序设计顺序结构程序设计7/22/2024252.2.2 常量常量常量常量(Constant)在程序执行过程中其值不变的量。在程序执行过程中其值不变的量。常量包括以下几种:常量包括以下几种:n整型常量整型常量n浮点常量浮点常量n字符常量字符常量n字符串常量字符串常量读宇壁盗粟愉拟尊糕溶曼青膛缸屋槽昔监暮仲究窄陕味昨教锑覆痛弟涝钎顺序结构程序设计顺序结构程序设计7/22/202426整型常量整型常量(short,int,long)整型常量整型常量18、-31long int型常量型常量 123l、123L、123456l、123456Lunsigned i

23、nt型常量型常量 123u、 123U整型常量的类型整型常量的类型根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型在整型常量后加字母在整型常量后加字母l或或L,认为它是,认为它是long int 型常量型常量聘周烤岿汀画碧绷升丘钾渊爽战稻缝腕悄凯燕排弯卡祷蛾叭皱望襟展咖先顺序结构程序设计顺序结构程序设计7/22/202427整型常量的表示形式整型常量的表示形式整型常量的表示形式:整型常量的表示形式:十进制十进制八进制八进制十六进制十六进制形堪余招恩槛也粟综德缄癣第毖纷惶蔷怎它肯研氦理疮防哄帐矗擅焙缮贾顺序结构程序设计顺序结构程序设计7/22/202428整型常量的表示形式整型常量的

24、表示形式十进制形式十进制形式 : 若干个若干个09的数字的数字 如:如:100,-50, 0 八进制形式八进制形式: 以以0开头的若干个开头的若干个07数字数字 如:如:0123 表示十进制数表示十进制数 83, -011 表示十进制数表示十进制数-9。 010和和10大小不一样大小不一样 绅加混寓狠捻撵强尿金颊暖隔箍宅仪丰乐谜优拦录约酿毋伍惩骇及狡曝伯顺序结构程序设计顺序结构程序设计7/22/202429整型常量的表示形式整型常量的表示形式十六进制形式十六进制形式 : 用用0x或或0X开头的若干个开头的若干个 09,af,AF的数字的数字 如:如: 0x2F 表示十进制的数字表示十进制的数字

25、47。 0x123 表示十进制数表示十进制数291, -0X12 表示十进制数表示十进制数-18。例例:12与与12L例例:30000 为为int型型 65536 为为long int 型型汐深浚漾柞昆撤锅壳品鲸间览箍刮扬防庙枢羚翼席钡拽掌爱鳖箱绪捆闲萄顺序结构程序设计顺序结构程序设计7/22/202430整型常量的表示形式整型常量的表示形式例例 :0524 为为int型,在内存中是如何表示的?型,在内存中是如何表示的?0101010000000001425例例 :01736L 为为long int 型型110111100000001100000000000000006371簇诣蜕衡朱驹集蚀颈

26、匡箩新抨版慌置垂彼径叫稻范路垒钩藤大比闲更酪乐顺序结构程序设计顺序结构程序设计7/22/202431注意事项注意事项Example: #include void main() short int a ; printf(Input :); scanf(%d,&a); printf(a=%dn,a); 运行结果运行结果: Input:12345 a=12345 Input:1234567 a=-10617 整型整型整数整数 short int 的范围:的范围: -32768+32767Because: 12345的补码是的补码是0011000000111001 1234567的补码是的补码是100

27、101101011010000111 截去多余部份截去多余部份(超过超过2个字节的左边部分个字节的左边部分)后后 其原码为其原码为 1010100101111001(-10617)选沥创噎阳摊淖跃韭猫嗣憾港署奥迟于克夏扭街蔚鄂源弱圈绷油偷邢拧次顺序结构程序设计顺序结构程序设计7/22/202432可用下图表示可用下图表示: 32767 32766 32765 -32766 -32767 -32768输入输入(Input:) 输出输出(a=) 32767 32767 32768 -32768 32769 -32767 32770 -32766 -32768 -32768 -32769 32767

28、 -32770 32766 有趣的结果有趣的结果歇呼匪凝烟瞳趣簿颂宫危圃枉套皮美潞困桑隘沮怪乳毅缎熄牺完陪逗往岭顺序结构程序设计顺序结构程序设计7/22/202433何谓类型溢出何谓类型溢出(Overflow)?C语言直接提供的任何类型都有取值范围。当向其赋超语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值,就会产生数值溢出,得到一个不正确过此范围的数值,就会产生数值溢出,得到一个不正确的结果。的结果。short int的范围是的范围是-3276832767如果超出取值范围,给它一个小于如果超出取值范围,给它一个小于-32768或者大于或者大于32767的数会如何呢?的数会如何呢?

29、小蛇能吞下小蛇能吞下大象吗?大象吗?制世叁蔬俩彤稀整猖昆谷铺泡霹隅郎匪却匆嘲熏舌关紫纬告哪旁巡宵骆镶顺序结构程序设计顺序结构程序设计7/22/202434类型溢出的解决方案?类型溢出的解决方案?解决方案:解决方案:预先估算运算结果的可能范围,采用取值范围更大的类型。预先估算运算结果的可能范围,采用取值范围更大的类型。1+2+3+1!+2!+3!+13+23+33+如果不需要处理负数,则采用无符号类型。如果不需要处理负数,则采用无符号类型。在运算还没开始之前就判断运算数是否在合理的取值范围在运算还没开始之前就判断运算数是否在合理的取值范围内。如果超出,则停止运算,转错误处理。内。如果超出,则停止

30、运算,转错误处理。示至挎岩愿斧萧跟散丰培造驭均同酞进傍赊储锯押渡矽逐缴偏二蜡晾觉详顺序结构程序设计顺序结构程序设计7/22/202435浮点型常量浮点型常量 (float,double)浮点型常量:可以含有小数部分的数值常量。浮点型常量:可以含有小数部分的数值常量。根据占用内存长度的不同,分为:根据占用内存长度的不同,分为:单精度浮点常量:单精度浮点常量:占用占用32位内存,用位内存,用F、f表示。表示。 如:如:19.4F,3.0513E3f,8701.52f双精度浮点常量:占用双精度浮点常量:占用64位内存,用带位内存,用带D或或d或不加后缀或不加后缀(缺省缺省)的数值表示的数值表示 如:

31、如:2.433E-5D,700041.273d,3.1415。long double型常量型常量 123.45l、456.78L、4.5e3L因为字母因为字母l和数字和数字1容易混淆,所以当用容易混淆,所以当用l做后缀时,常使用做后缀时,常使用大写形式大写形式 努像蛹件影硷演赏忌尊匣哦微盼戈商鸳亭术侧趴排峡堕狞冰怎赘窃瞅晤汐顺序结构程序设计顺序结构程序设计7/22/202436浮点型常量浮点型常量 (float,double)浮点常量两种表示形式浮点常量两种表示形式:十十进进制小数制小数形式和形式和指数指数形式。形式。十进制小数十进制小数形式:形式:包括符号包括符号+与与-,09十个数字以及十

32、个数字以及小数点小数点.。 如:如:0.123, 1.23, 123.0。指数指数形式:形式:包括符号包括符号+与与-,09十个数字,小数点十个数字,小数点.以及以及e(或或E)。 如:如:0.123e3 表示表示0.123103 -35.4E-5 表示表示-35.410-5, 其中其中e或或E之前必须有数字,且之前必须有数字,且e或或E后面的指数必须为整数。后面的指数必须为整数。 如:如:e-5, 1.2E-3.5 不正确不正确鸟砧再星窘就彤潦谚锥吴毗惩陋胁糟湃银科姻钝勤叛纳摧薄言绢践耸点潜顺序结构程序设计顺序结构程序设计7/22/202437 浮点型常量浮点型常量 (float,doubl

33、e) 由于计算机系统分配给一个数据的存储空间是有由于计算机系统分配给一个数据的存储空间是有限的。一般来说,一个实型常量无法转换成与之等值限的。一般来说,一个实型常量无法转换成与之等值的有限位的二进制数据,其有限位以后的数字将被舍的有限位的二进制数据,其有限位以后的数字将被舍去,由此就会产生舍入误差。去,由此就会产生舍入误差。枯湛恍彩鸳抄带林症装饿引播人糖嗡捌滚遣顿秦搓露棠毛铆躺拔销憾淤涛顺序结构程序设计顺序结构程序设计7/22/202438例例 :/下列程序的功能是将下列程序的功能是将10个实型数个实型数0.1进行累加,然后将累加结果输出。进行累加,然后将累加结果输出。#include std

34、io.hvoid main() int k; /*定义整型变量定义整型变量k*/ double x,z; /*定义双精度是型变量定义双精度是型变量x与与z*/ z=1.0; /*实数实数1.0赋给变量赋给变量z*/ x=0.0; for (k=0; k10; k+) x=x+0.1; /*10个个0.1累加到变量累加到变量x中中*/ printf(z=%20.17fn,z); /*输出变量输出变量z的值的值*/ printf(x=%20.17fn,x); /*输出变量输出变量x的值的值*/ 运行这个程序后,输出的结果如下:运行这个程序后,输出的结果如下: z= 1.00000000000000

35、000 x= 0.99999999999999989架翠淘族遗亲楔娘礁众哲唾挎窜曾听亿嘛待竖淬嚎焉算潦榆瑟漆友禁缆银顺序结构程序设计顺序结构程序设计7/22/202439字符常量字符常量 (Character)字符常量字符常量:用一对:用一对单引号单引号括起的括起的单个单个字符。字符。一个字符用一个字节存储。一个字符用一个字节存储。字符常量的字符常量的值值:该字符的该字符的ASCII码值码值如如: A 65, a 97, 0 48, n 10如如: 101- A 012- n 376- x61- a 60 - 0 483- ( )例例: A- 101- x41- 65守滩揉塘脾玫厩旺睬竿报借搽

36、遮抒蔫蚜使滔寸驮曹攘枷文印杜幼国淀酮蓑顺序结构程序设计顺序结构程序设计7/22/202440字符常量字符常量 (Character)就是一个普通整数,也可以参与各种数学运算就是一个普通整数,也可以参与各种数学运算每个字符具有一个每个字符具有一个0255之间的数值,可查之间的数值,可查ASCII表表注意:注意:1和整数和整数1的区别的区别字符字符1只是代表一个形状为只是代表一个形状为1的符号,在需要时按原的符号,在需要时按原样输出,在内存中以样输出,在内存中以ASCII码形式存储,占码形式存储,占1个字节个字节整数整数1是以整数存储方式,占是以整数存储方式,占1个字节个字节0 0 1 1 0 0

37、 0 10 0 0 0 0 0 0 1面劲拖怪妓拖颁朵滤鸦醒翘哩伴炯败页凋志秃悼算汕朴先交喝颤钓七盟福顺序结构程序设计顺序结构程序设计7/22/202441字符常量字符常量 (Character)转义字符转义字符用用开头的字符开头的字符 例如,例如,n,代表,代表1个字符个字符一些特殊字符(无法从键盘输入或者另有它用)用转义字一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示,含义如表符表示,含义如表2-2。莲身腔童套滴恤肖耐柞真渴蛋艇艇厢催灰午中什凄恢陡骋盯鹿斥统是凄儡顺序结构程序设计顺序结构程序设计7/22/202442表表2-2 常用转义字符常用转义字符 转义转义字符字符含含义义

38、ASCII码码(十(十进进制)制)三位八三位八进进制数制数表示的字符表示的字符十六十六进进制数制数表示的字符表示的字符b退格退格08010x8t水平制表符水平制表符09011x9n换换行行10012xar回回车车13015xd字符字符92134x5c双引号双引号34042x22单单引号引号39047x270NULL00000x0ddd三位八三位八进进制数表示的字符制数表示的字符xdd两位十六两位十六进进制数表示的字符制数表示的字符鲜警燃洪耐虹躲吨拔状蚤格秦现吃筑嚣羽羹呻号摸拙泞勃咖坛蹋感脾勉它顺序结构程序设计顺序结构程序设计7/22/202443转义字符举例转义字符举例例例1:void mai

39、n() printf(101 x42 Cn); printf(C Programn); printf(Turbo C);运行结果:运行结果:(屏幕显示屏幕显示)A B CC ProgramTurbo C幕值呀劲巡钟坏腋碴凝遏蛔格摄鳞荚艘娩窘风湍秆共威煽咒枫熊啄作宿堑顺序结构程序设计顺序结构程序设计7/22/202444转义字符举例转义字符举例例例2: void main() printf(Yb=n); 运行结果:运行结果:屏幕显示:屏幕显示:=打印机输出:打印机输出:尤宴童隅情龟书饯篡勃守烬甜帖嫉波稀深浸合链瓷拢值产谣窍呕柴滨流聊顺序结构程序设计顺序结构程序设计7/22/202445例例3:#

40、include void main( ) printf(How are you?n); printf(I am fine.nn); /* 横向跳格符横向跳格符t,使跳到下一个输出区,使跳到下一个输出区 */ printf(How are you?t); printf(I am fine.nn); /*退格符退格符b,使当前的输出位置退一格,即输出的起始位置左移一位,使当前的输出位置退一格,即输出的起始位置左移一位*/ printf( How are you?n); printf( bI am fine.nn);/* 回车符回车符r,使当前输出位置回到本行开头,使当前输出位置回到本行开头 */

41、printf( I am fine.); printf(rHow are you?nn);/* 多个转义字符的混合运用多个转义字符的混合运用 */ printf(note:n a stibbkrpn);吮综笛双菊侍瞒尼有勇舰眉侣蜗致惭午图苯吃虹摔穴携铰镑暴编算烽未盯顺序结构程序设计顺序结构程序设计7/22/202446什么时候要使用转义字符?什么时候要使用转义字符?转义字符只在特殊情况下才使用转义字符只在特殊情况下才使用:C程序中需要实现某些特定打印或显示动作时程序中需要实现某些特定打印或显示动作时 如如 printf(123t56n);C程序中需要打印或显示以下三个字符时程序中需要打印或显示

42、以下三个字符时 (斜杠斜杠) (双引号双引号) (单引号单引号) 如如 printf(Youre a a bad egg! );C程序中需要打印或显示程序中需要打印或显示ASCII表中非键盘字符时表中非键盘字符时 如如 printf(Look 16 and x80 ! );注意:使用转义字符时,注意:使用转义字符时,后的八进制或十六进制数不应大于后的八进制或十六进制数不应大于char类型所允许的范围(十进制值类型所允许的范围(十进制值256)。)。 卯啼返首懒迟绞屡刨顿蒋绵胎瓤纯夕沁裴开脂躺尼浊礁鬼汞苍柿剩篆瓤漏顺序结构程序设计顺序结构程序设计7/22/202447字符串常量字符串常量(Str

43、ing)用用双引号双引号括起的一串字符(可以括起的一串字符(可以0个)个)I am a string表示空字符串表示空字符串转义字符也可以在字符串中使用转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志引号只作为字符串开始和结束的标志C语言内部语言内部自动自动用用0表示字符串的结束表示字符串的结束除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方x和和x是不同的是不同的里定义了一系列专门的字符串处理函数里定义了一系列专门的字符串处理函数扭班躁笆嗓增身思搪辰耻挨俺甭搭媚智蝶肋教须蘑淑损姐拦拱蚌丙殊无巾顺序结构程序设计顺序结构程序设计7/22/202448逻辑逻辑(布尔

44、布尔)型常量型常量 boolean在程序控制中经常用到布尔常量。例如:在程序控制中经常用到布尔常量。例如: If (条件条件) 动作动作1 else 动作动作2布尔常量的值布尔常量的值:true(真真)和和false(假假)。C语语言中将言中将布布尔尔类类型映射型映射为为数数值类值类型型: true 用用非非0的整数的整数表示表示 false 用用0表示表示 如:如: 3+1 = 4 结结果果为为true,通常表示,通常表示1。 int a= 23 结结果果为为false ,通常表示,通常表示0。 乓斩虽谣佰眉待扛牟捌婪奠赖运宗摊裸矛刑钝涯很抒夕乔氛声兰喇烟锨裁顺序结构程序设计顺序结构程序设计

45、7/22/2024492.2.3 变量变量l变量变量在程序执行过程中其值可以改变的量。在程序执行过程中其值可以改变的量。 因此用来记录运算中间结果或保存数据。因此用来记录运算中间结果或保存数据。l变量的变量的声明:声明: 数据类型数据类型 变量名变量名1,变量名变量名2,变量名变量名n;决定分配字节数决定分配字节数和数的表示范围和数的表示范围合法标识符合法标识符short,int,long, float,double,char,unsigned 复合类型复合类型粤亚煤隶芭皮淄碘莉幼怜难疾踢摄讶剪叹遗平之殴棵减赚兵磐澡芽唇脐揽顺序结构程序设计顺序结构程序设计7/22/2024502.2.3 变量

46、变量例例: int a,b; double data;编译时,对变量声明语句将根据其类型分配存储空间。编译时,对变量声明语句将根据其类型分配存储空间。变量的名实际上对应空间的地址,变量的值对应空间的内容。变量的名实际上对应空间的地址,变量的值对应空间的内容。在对程序编译连接时由编译系统给每一个变量名分配对应的在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据内存地址,从该存储单元中读取数据。 a:(2000) b:(3000) data:(4000)4字节字

47、节8字节字节4字节字节飘酞巷肖贾冉确跌禹市术羽蛀略桓伪偷谭蚀蛋肌塞亿蒂钒伶傣兽候淀竞桅顺序结构程序设计顺序结构程序设计7/22/2024512.2.3 变量变量基本类型与变量的分配空间基本类型与变量的分配空间数据数据类类型型关关键键字字占用位数占用位数短整型短整型short16整型整型int32长长整型整型long32浮点型浮点型float32双精度浮点型双精度浮点型double64字符型字符型char8惺破鹏贿诵愤圾桌序精癣差痞诅尘肖赫等茬步予壁烃究谊淄攒闺炬淹晕悄顺序结构程序设计顺序结构程序设计7/22/2024522.2.3 变量变量例如:例如: short s; /给给s变量分配两个字

48、节,占用变量分配两个字节,占用2000-2001单元单元 s=1234; 图图2-1 变量与内存单元的映射关系变量与内存单元的映射关系税冷献姬膝恭质粗宿战冀篡搅本载狼多哉禽呕明腆腊续晒细萍财搽渴毗冻顺序结构程序设计顺序结构程序设计7/22/2024532.2.3 变量变量变量的使用:变量的使用:先申明,后使用先申明,后使用例例1: int student;stadent=19; 变量名变量名和和变量值变量值的概念的概念深咏旁抓摧信嵌副墨溯携洋纫碾邯臀涡关阂卡绘钓逻蓄堑陨佳课症恕渤稀顺序结构程序设计顺序结构程序设计7/22/2024542.2.3 变量变量例例2: float a,b,c;c=a

49、%b; 岳嫂棕轧藤晶傍砾锑弗肪犯寸雀雅报脂碍变邀槛蹄悼陇孺荒足凶赌指拜犊顺序结构程序设计顺序结构程序设计7/22/2024552.2.3 变量变量变量定义位置:变量定义位置:一般一般放在函数开头放在函数开头void main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(data=%fn,data);变量定义变量定义可执行语句可执行语句兰艺种衷即兰剩击肃碱雪润而兹扛伞零毒淀裙约俭橱校试绎晰烤塔浚茄郸顺序结构程序设计顺序结构程序设计7/22/2024562.2.3 变量变量变量的初始化:声明变量的同时指定变量初值变量的初始化:声明变量的

50、同时指定变量初值格式:格式: 数据类型数据类型 变量名变量名=初始值初始值;不被初始化的变量,其值为危险的随机数不被初始化的变量,其值为危险的随机数char esc = a;int i = 1;int sum = 0;float eps = 1.0e-5;萍歹曰浴迅凸韧措恢施崔炒忌诌妥诌闻叼钢纯鸦沛罢邹罕稚爪各扶窍挤汗顺序结构程序设计顺序结构程序设计7/22/2024572.2.3 变量变量例如:利用变量例如:利用变量t交换变量交换变量x和和y的值的值t = x; x = y; y =t;tyx变量的值主要通过赋值运算改变。变量的值主要通过赋值运算改变。 歼像怨蒜涨帜毗雨理黔恰卫赊殴痰烤寞井区

51、账盗橙毯谷愿天藤菇蕴构褪咒顺序结构程序设计顺序结构程序设计7/22/202458使用变量要注意使用变量要注意不要对变量所占的内存空间字节数想当然不要对变量所占的内存空间字节数想当然用用sizeof获得变量或者数据类型的长度获得变量或者数据类型的长度sizeof运算符运算符:返回操作数存储空间的大小返回操作数存储空间的大小使用形式:使用形式: sizeof(type) 或或 sizeof(var_name)求出的结果为求出的结果为表达式值所属类型表达式值所属类型或者或者类型类型占用的字节数占用的字节数sizeof运算符也可以出现在表达式中。运算符也可以出现在表达式中。 例如,例如,x=sizeo

52、f(float)-2; printf(%d,sizeof(double);参见教材参见教材P22页页例例2-2注意!注意!户玫胶卿驴侯德风禄乐妊殊反始棕柏焙六茶浸歉总信橡田雹厌申漓爆然皖顺序结构程序设计顺序结构程序设计7/22/202459为什么要用为什么要用sizeof获得类型或获得类型或变量的字长?变量的字长?因为因为同种类型在不同的平台其占字节数不尽相同。比如同种类型在不同的平台其占字节数不尽相同。比如int在在16位、位、32位和位和64位系统分别占位系统分别占2、4和和8个字节。个字节。现象与危害:现象与危害:在平台间移植时会出现问题,导致数据丢失或者溢出。在平台间移植时会出现问题,

53、导致数据丢失或者溢出。解决方案:解决方案:用,并且只用用,并且只用sizeof获得字长。获得字长。边夷如肺迎锥岳嚷阔就闹撒鸳弓锑蹄棵骏莉席捕宰叁恐洋眼诚柑阐略摩洗顺序结构程序设计顺序结构程序设计7/22/202460变量的类型变量的类型整型变量整型变量定义形式定义形式: int 变量表列变量表列;实型变量实型变量单精度单精度定义形式定义形式: float 变量表列变量表列; 具有具有67位有效数字位有效数字双精度双精度定义形式定义形式: double 变量表列变量表列;具有具有1516位有效数字位有效数字展赋撰井魄驴扒腐简庭湛乒豪援姻蜂榷制棕缕晕遥佬鸯溉救葛授塌辙付惠顺序结构程序设计顺序结构程

54、序设计7/22/202461变量的类型变量的类型字符型变量字符型变量用于存放字符型常量用于存放字符型常量定义方式定义方式: char 变量表列变量表列;字符变量存放字符字符变量存放字符ASCII码码char与与int数据间可进行算术运算数据间可进行算术运算例例: a=D; /* a=68; */ x=A+5; /* x=65+5; */ s=!+G; /* s=33+71;*/没有没有字符串变量字符串变量,用字符数组存放,用字符数组存放哥剃令垛懒堤掠谚毛帐砰蔫坡蹋穗粪返朽夕九惯膀檀弹窗丢拣呈果俯串摆顺序结构程序设计顺序结构程序设计7/22/202462字符量与字符串的存储区别字符量与字符串的存

55、储区别字符字符 A A N S I C字串字串 ANSI C 短悍捅兹陀敷屋甭刚砸嫂玖疵另押邯势谈睁砾蜂鹃傻素则又刮爪橱茨桶韧顺序结构程序设计顺序结构程序设计7/22/202463实型数据提供的有效数字位数实型数据提供的有效数字位数#include void main() float a; double b; a = 123456.789e4; b = 123456.789e4; printf(%fn%fn, a,b);float型数据提供型数据提供7位有效数字位有效数字double型数据提供型数据提供16位有效数字位有效数字使用不当导致舍入误差使用不当导致舍入误差邯该针兰蝶谨挖迢孙狱裤冶垒盯

56、啸涪大脑准尸霖梁郸酵复缩很痴攻占绕茅顺序结构程序设计顺序结构程序设计7/22/202464char型与型与int型之间的关系型之间的关系 例:小写字母转换为大写字母例:小写字母转换为大写字母 #include void main() char ch = b; printf(%c, %dn, ch, ch); ch = b - 32; printf(%c, %dn, ch, ch);b, 98B, 66 #include void main() char ch = b; printf(%c, %dn, ch, ch); ch = b - (a - A); printf(%c, %dn, ch,

57、ch);b, 98B, 66 慰像疮悦烽撵毁奥尖腺窘臀嚣践久氓忱念和晶豢滔椿卉必左若吞平帛邀绊顺序结构程序设计顺序结构程序设计7/22/202465 一个整型数据占一个整型数据占4B,而字符型数据只占,而字符型数据只占1B(只能存放(只能存放0255范围内的整数),因此,在将整型数据以字符形式输出时,范围内的整数),因此,在将整型数据以字符形式输出时,只取低字节中的数据作为只取低字节中的数据作为ASCII码字符输出。码字符输出。#include void main() int x; x=1348; printf(x=%cn,x);1348在内存中为:在内存中为:0000000001000100

58、0000010100000000煌铁吵筹煎唬乒垦梳蚤恐链扦蝴赖估荐杠强棚寞润卿泳赵茂狈零毕睛窄廓顺序结构程序设计顺序结构程序设计7/22/202466阅读下列阅读下列C程序:程序:#include stdio.hvoid main() long x,y,z; x = -0xffffL; y = -0xffL; z = -0xffffffffL; printf(x=%6ld y=%6ld z=%6ldn,x,y,z); x = -0xffff; y = -0xff; z = -0xffffffff; printf(x=%6ld y=%6ld z=%6ldn,x,y,z);名踢辩樟旦憾种润跌彬通花

59、卵迁治幽托寇岸槐犬胞执屯游寓吃壳塑芬厄窟顺序结构程序设计顺序结构程序设计7/22/202467有如下有如下C程序:程序:#include stdio.hvoid main() short int x; unsigned y; long z; x=65535; y=65535; z=65535; printf(x=%dn,x); printf(y=%un,y); printf(z=%ldn,z); 它们在计算机中用二进制表示如下:它们在计算机中用二进制表示如下:变量变量x 1111111111111111变量变量y 0000000000000000 1111111111111111变量变量z 0

60、000000000000000 1111111111111111%d为基本整型输出格式说明符为基本整型输出格式说明符%u为无符号基本整型输出格式说明符为无符号基本整型输出格式说明符%ld为长整型输出格式说明符为长整型输出格式说明符隔锰俘吟蜀鹤部垂维肺乞怀贷置辩版瘟唯袒祸叁痉浑铰涅韦缩忱冉降毙遇顺序结构程序设计顺序结构程序设计7/22/2024682.2.4 符号常量符号常量符号常量符号常量:为常量起一个名字为常量起一个名字符号常量符号常量声明格式声明格式 : const 数据类型数据类型 常量名常量名=缺省值缺省值;注意注意: : 符号常量符号常量声明时一定要声明时一定要赋初值赋初值,而在程序

61、的中间不能改,而在程序的中间不能改变其值变其值。例如例如:const double PI=3.14159;float r, area;r=4.5;area=PI*r*r;魄样引象菠砸捂细贷橡快刮金森镭似倒监豺多吸箱瘪霹矾在图疏堵娶巨峦顺序结构程序设计顺序结构程序设计7/22/202469内存和地址内存和地址计算机内的存储部件,所有指令和数据都保存在内存里计算机内的存储部件,所有指令和数据都保存在内存里速度快,但是掉电即失速度快,但是掉电即失可以随机访问可以随机访问只要指明要访问的内存单元的只要指明要访问的内存单元的地址地址,就可立即访问到该,就可立即访问到该单元单元地址地址是一个无符号整数,其

62、字长一般与主机相同是一个无符号整数,其字长一般与主机相同内存中的每个字节都有唯一的一个地址内存中的每个字节都有唯一的一个地址地址按字节编号,按类型分配空间地址按字节编号,按类型分配空间晓藻恩盎恶虎亥闪旭歇吝靠锚所侈滦拾汛舰谬等民雨瓣幼茶述番茸攻功费顺序结构程序设计顺序结构程序设计7/22/202470寻址方式寻址方式如何读写内存中的数据?如何读写内存中的数据?通过变量的地址访问变量所在的存储单元通过变量的地址访问变量所在的存储单元两种寻址方式两种寻址方式直接(寻址)访问直接(寻址)访问通过变量地址直接存取变量内容通过变量地址直接存取变量内容(引用变量的方式是通过变量引用变量的方式是通过变量名,

63、由系统自动完成变量名与其存储地址之间的转换)名,由系统自动完成变量名与其存储地址之间的转换)间接(寻址)访问间接(寻址)访问通过指针变量来间接存取它所指向的变量通过指针变量来间接存取它所指向的变量(它首先将变量的地它首先将变量的地址存放在一个变量(存放地址的变量成为指针变量)中,然后址存放在一个变量(存放地址的变量成为指针变量)中,然后通过存放变量地址的指针变量来引用变量。通过存放变量地址的指针变量来引用变量。)离惊甘半卷郑费龄出惭肉宴帚情鲜惟果陋栗剖枪鲤瞻诈敌志总糟折笛逊镑顺序结构程序设计顺序结构程序设计7/22/2024712.2.5 指针与指针变量指针与指针变量1.指针的概念指针的概念指

64、针是内存单元的地址。指针是内存单元的地址。一个一个变量的地址变量的地址称为该变量的称为该变量的指针指针。地址运算符地址运算符&:求变量的地址。:求变量的地址。 &变量名变量名例如:例如:int a; double b; &a,表示变量,表示变量a的地址的地址3000 &b,表示变量,表示变量b的地址的地址4000。 a:(3000) b:(4000)8字节字节4字节字节叫垦垃犯汐橙耙镣尖蘸栓蜀窃你汞吉慕疽拢抹洲雄父洼援剔滩泻岩镇忍拜顺序结构程序设计顺序结构程序设计7/22/2024722.2.5 指针与指针变量指针与指针变量2. 指针变量指针变量用于存放某个内存单元地址的变量。用于存放某个内存

65、单元地址的变量。(指向某内存单元的指针)(指向某内存单元的指针) 例如:例如:char c = K; char *p = &c; p(4000) c(2000)752000豺系部汲桔樟箕响涡然檬持茬峨违橇刮熄惧表哥置椭历牙土儒邻隙毒堆良顺序结构程序设计顺序结构程序设计7/22/2024732.2.5 指针与指针变量指针与指针变量(1)指针变量的声明格式:指针变量的声明格式: 数据类型数据类型 *变量名;变量名;*: 声明一个指针类型的变量;声明一个指针类型的变量;数据类型数据类型: 指针变量所指向的变量的数据类型。指针变量所指向的变量的数据类型。例如:例如: int i; int *p1; f

66、loat f1; float *p2; 必踌蜂沥蚂插落盐酱稚几脱辈划其梳监江纶潍糟禹殊郸苦做啤祖易巍兰苗顺序结构程序设计顺序结构程序设计7/22/2024742.2.5 指针与指针变量指针与指针变量(2) 指针变量的赋值指针变量的赋值指针变量的初始化指针变量的初始化可为地址常量或变量地址,不能是普通整数。可为地址常量或变量地址,不能是普通整数。可为空可为空NULL(表示不指向任何对象)表示不指向任何对象)初始化的一般形式:数据类型初始化的一般形式:数据类型 *指针名指针名=初始地址值初始地址值 ;赋给指针变量,不是赋给目标变量赋给指针变量,不是赋给目标变量例例: int i; int *p=&

67、i;变量必须变量必须已说明过已说明过类型类型应一致应一致例例: int *p=&i; int i;杜离库般吗咆诀伊卜汪外淳嗽呼益粟宫屎焕蒜屎勉闷砾糖直咆疤邯达连忆顺序结构程序设计顺序结构程序设计7/22/2024752.2.5 指针与指针变量指针与指针变量例例: int i; int *p=&i; int *q=p;用已初始化指针变量作初值用已初始化指针变量作初值例例: int *p; p=1000; ()饿靖贺蹭匹柑啡鸦悼匪涎曹闯安葛河狸浦卑爽椒认驹吼吼霜掌蛰彦掸球娩顺序结构程序设计顺序结构程序设计7/22/202476例例: void main( ) int i=10; int *p; *

68、p=i; printf(%d,*p); .200020082012整型变量整型变量i10指针变量指针变量p2004随机随机危险!危险!例例: void main( ) int i=10,k; int *p; p=&k; *p=i; printf(%d,*p); 指针变量必须指针变量必须先赋值,再使用先赋值,再使用厢比夜裹丧丛灾褐寨阅当洽姻徒壁磐汪提灭座卿迈荒秃抡凳斋瀑常汽霹榨顺序结构程序设计顺序结构程序设计7/22/202477指针变量只指针变量只存放地址存放地址!一个指针变量不能指一个指针变量不能指向与其类型不同的变向与其类型不同的变量量!我是真的,我是真的,你猜对了吗?你猜对了吗?应在类型

69、相应在类型相同的指针变同的指针变量之间赋值量之间赋值能息炎博恩先题掏端盐漏跑棘峭唬逻锨具卿留氓虎蒋优绩熄此剖嘲体字挟顺序结构程序设计顺序结构程序设计7/22/2024782.2.5 指针与指针变量指针与指针变量(3) 取内容运算取内容运算 * 取指针变量所指的对象变量。格式为:取指针变量所指的对象变量。格式为: * 指针变量指针变量例如:例如: char c,*p=&c; *p=a; 这里这里*p 等同于等同于c 例如:例如: float f, *pf=&f; *pf =5.6f; *pf = *pf +4.4f;*pf表示变量表示变量f卢删渐铀柄灼行及钩洞鼓评养迫扳郁弓拼闹补妨帛炉韶矣秒临冤

70、萍门梦量顺序结构程序设计顺序结构程序设计7/22/202479含义含义:取变量的地址取变量的地址单目运算符单目运算符优先级优先级: 2结合性结合性:自右向左自右向左含义含义:取指针所指向变量的内容取指针所指向变量的内容单目运算符单目运算符优先级优先级: 2结合性结合性:自右向左自右向左两者关系:互为逆运算两者关系:互为逆运算&与与*操作符操作符鲍多蜘蛇钓磅计俞箭莆斧赁雇傻赤香藻戳柞砷宇视恰伟离诚扎殆恃廖辽铺顺序结构程序设计顺序结构程序设计7/22/202480.200020082012整型变量整型变量i变量变量i_pointer20042000指针变量指针变量10理解理解i_pointer &

71、i &(*i_pointer)i *i_pointer *(&i)=i_pointer -指针变量,它的内容是地址量指针变量,它的内容是地址量*i_pointer-指针的指针的目标变量目标变量,它的内容是数据,它的内容是数据&i_pointer-指针变量占用内存的地址指针变量占用内存的地址200010i_pointer*i_pointer&i_pointeri指针变量指针变量变量变量变量地址变量地址(指针指针)变量值变量值地址存入地址存入指针变量指针变量指向指向免伙始陈桅却兽蓉漏捌呆颓搁组款卵冲盟媚仓护卢凡攒辞简腻弛煮婶蓟著顺序结构程序设计顺序结构程序设计7/22/202481直接访问与间接访

72、问直接访问与间接访问直接访问:按直接访问:按变量地址变量地址存取变量值存取变量值间接访问:通过间接访问:通过存放变量地址存放变量地址的变量去访问变量的变量去访问变量.200020082012整型变量整型变量i变量变量i_pointer20042000指针变量指针变量10例例 i=3;-直接访问直接访问3例例 *i_pointer=20; -间接访问间接访问20稻字挥寺倦悄脉车涛霞腔消劝颂茂妓翰拦卑芋冲淡炬描炼吸珊羽牛撰曳页顺序结构程序设计顺序结构程序设计7/22/202482零指针与空类型指针零指针与空类型指针零指针:零指针:(空指针空指针)定义定义: 指针变量值为零指针变量值为零表示表示:

73、int *p=0;p指向地址为指向地址为0的单元的单元,系统保证该单元不作它用系统保证该单元不作它用表示指针变量值表示指针变量值没有意义没有意义#define NULL 0int *p=NULL:p=NULL与未对与未对p赋值不同赋值不同用途用途: 避免指针变量的非法引用避免指针变量的非法引用在程序中常作为在程序中常作为状态状态比较比较 例例 int *p; . while(p!=NULL) . 颅岛庙吩洒否递闰索昂苛旋颊汀惰瘪淫识却痕倍句常挑拉柳肛鞋籍柱巢筐顺序结构程序设计顺序结构程序设计7/22/202483void *类型指针类型指针表示表示: void *p; 使用时要进行使用时要进行

74、强制类型转换强制类型转换零指针与空类型指针零指针与空类型指针例例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1;表示不指定表示不指定p是指向哪一种是指向哪一种类型数据的指针变量类型数据的指针变量永妆茁和势腐转曰绎扦吉珊涤蕴箍篷岩焰毖预欲侯具荡贯彻橇碾虽彩玛沽顺序结构程序设计顺序结构程序设计7/22/202484例例:指针的概念指针的概念void main() int a; int *pa=&a; a=10; printf(a:%dn,a); printf(*pa:%dn,*pa); printf(&a:%x(hex)n,&a); printf

75、(pa:%x(hex)n,pa); printf(&pa:%x(hex)n,&pa);.f86f8e整型变量整型变量a10指针变量指针变量paf8af86运行结果:运行结果:a:10*pa:10&a:f86(hex)pa:f86(hex)&pa:f8a(hex)颐继话豪赵堵杨蕴楞刚够合驻苯峦譬网筑洁炸羚渐钒烛胸辫凄醋错路殆铀顺序结构程序设计顺序结构程序设计7/22/202485例例:输入两个数,并使其从大到小输出输入两个数,并使其从大到小输出void main() int *p1,*p2,*p,a,b; scanf(%d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=p1

76、; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn, *p1,*p2);.指针变量指针变量p1 指针变量指针变量p20002016200420082012 指针变量指针变量p2 整型变量整型变量b 整型变量整型变量a5920122016201220162012运行结果:运行结果:a=5,b=9 max=9,min=5仟带动穿八川邻浮蚜听馁傲审泌筒埂逞农昌蔓级薛取堵售秉屈窿酬换饰斤顺序结构程序设计顺序结构程序设计7/22/202486指针与其它类型变量的对比指针与其它类型变量的对比共性共性在内存中占据一定大小的存储单元在内存中

77、占据一定大小的存储单元先定义,后使用先定义,后使用特殊性特殊性 它的内容只能是它的内容只能是地址地址,而不能是数据,而不能是数据必须初始化必须初始化后才能使用,否则指向不确定的存储单元,对该后才能使用,否则指向不确定的存储单元,对该空间进行访问,将可能造成危险空间进行访问,将可能造成危险可参与的运算:加、减一个整数,自增、自减、关系、赋值可参与的运算:加、减一个整数,自增、自减、关系、赋值只能指向同一基类型的变量只能指向同一基类型的变量枝甚姻村苇次执硷膊抿另纽雅右羔治殷抄脓蚌戮浊欺肾嫩而垄鞍胖餐柏抹顺序结构程序设计顺序结构程序设计7/22/202487例例2-3 常量、变量、指针变量的声明、初

78、始化及使用。常量、变量、指针变量的声明、初始化及使用。遁权幢弧纷楷歇拇锡柏磨瘪痒躯仔芋婿忽霸侠桨万甚缴豺踏趋片如勾抢稗顺序结构程序设计顺序结构程序设计7/22/2024882.3 赋值运算符与赋值表达式赋值运算符与赋值表达式n简单赋值运算符简单赋值运算符符号:符号:=格式:格式:变量标识符变量标识符=表达式表达式作用:将一个数据(常量或表达式)赋给一个变量作用:将一个数据(常量或表达式)赋给一个变量例例 a=3; d=func(); c=d+2;碰敏河幕种吓轩垛懊楼薛硕烯号频孟歉恋堕匀漳熏胀鞋似茸反资父床滑惕顺序结构程序设计顺序结构程序设计7/22/2024892.3 赋值运算符与赋值表达式赋

79、值运算符与赋值表达式n复合赋值运算符复合赋值运算符符号:符号:+= -= *= /= %= = &= = |=含义:含义:exp1 op = exp2 exp1 = exp1 op exp2 n = n + 2;n + = 2; x * = y + 8; x = x * (y + 8); x % = 3;x = x % 3;步险鸣欧陇刺钢唤寒吮洒荒狐蚌叔殿狮草撕设颐弹匆狠朱原劣动叭恍折棋顺序结构程序设计顺序结构程序设计7/22/2024902.3 赋值运算符与赋值表达式赋值运算符与赋值表达式说明说明:结合方向结合方向:自右向左自右向左左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量

80、或表达式赋值转换赋值转换规则规则使赋值号使赋值号右边右边表达式值表达式值自动转换自动转换成其成其左边左边变量的类型变量的类型例例 3=x-2*y; a+b=3;例例 float f; int i; i=10; f=i;则则 f=10.0例例 int i; i=2.56; /*结果结果i=2;*/踊檄妮叁镍挤袭烘兔振小凯挣珊撰逊掀侯同淳拂裳滚掘翟险虽怎赞港奥芭顺序结构程序设计顺序结构程序设计7/22/2024912.3 赋值运算符与赋值表达式赋值运算符与赋值表达式赋值表达式的值与变量值相等,且可嵌套。赋值表达式的值与变量值相等,且可嵌套。 a=b=c=5 a=5+(c=6) a=(b=10)/(

81、c=2)/*表达式值为表达式值为5,a,b,c值为值为5*/*表达式值表达式值11,c=6,a=11*/*表达式值表达式值5,a=5,b=10,c=2*/ a=12; a+=a-=a*a/*a=-264等价于等价于a=a+(a=a-(a*a)*/ int a=2; a%=4-1; a+=a*=a-=a*=3; /*a=0等价于等价于 a=a+(a=a*(a=a-(a=a*3)*/厂屡邮摆管属掘裕抨词胶屁妹渊孕硷苑蜡慢走疟讥保膜伪扯棺鳖哪匝镍随顺序结构程序设计顺序结构程序设计7/22/202492例例:阅读程序,写出结果并演算阅读程序,写出结果并演算#include void main() in

82、t a=10,b=10; printf(%dt ,a+=a-=a*a); printf(%d,b+=b-=b*=b); 举一反三:举一反三:计算计算a=3时,时,a*=4+(a%=2)的结果。的结果。a=5a=-180 b=02.3 赋值运算符与赋值表达式赋值运算符与赋值表达式硷赚羚圃锨园盅碧阳芥括染坟扫程焚米檀逼渠扔另梭隐绞受鳃挤灌振聪驴顺序结构程序设计顺序结构程序设计7/22/2024932.4 算术运算符与算术表达式算术运算符与算术表达式表达式表达式:由运算符、操作数由运算符、操作数(常量、变量、函数调用常量、变量、函数调用)和圆和圆括号组成的式子。括号组成的式子。表达式的书写形式表达式

83、的书写形式:中缀式中缀式: a+b后缀式后缀式: ab+前缀式前缀式: +ab例如例如: int a=1; c=(-a*b+c+67)*56;int b=3;int c=0;诵荐沿傅丰好话国钳迎旭剪疆脊甲汀氮东巧任氏氧食惺幕扇留佯甘漆基于顺序结构程序设计顺序结构程序设计7/22/2024942.4 算术运算符与算术表达式算术运算符与算术表达式算术运算符:算术运算符:l + - * / % + -加、减、乘、除、求余运算加、减、乘、除、求余运算 自加自加 自减自减四则混合运算中,先算乘除,后算加减,按从左向右的顺序计四则混合运算中,先算乘除,后算加减,按从左向右的顺序计算,左结合算,左结合l优先

84、级:优先级: - + - -* / % - + - (2) (3) (4)常用的标准数学函数函数名函数名功功 能能函数名函数名功功 能能sqrt(x)计计算算x的平方根,的平方根,x应应大于等于大于等于0 exp(x)计计算算ex的的值值fabs(x)计计算算x的的绝对值绝对值pow(x,y)计计算算xy的的值值log(x)计计算算lnx的的值值sin(x)计计算算sinx的的值值,x为为弧度弧度值值log10(x)计计算算lgx的的值值cos(x)计计算算cosx的的值值,x为为弧度弧度值值岩袖疲盼鸦抑膜岳荣药坐豺喝氯乍荧词挎舟舷阑菲耙凶俊巧孰择蛮庐偏盆顺序结构程序设计顺序结构程序设计7/2

85、2/2024952.4 算术运算符与算术表达式算术运算符与算术表达式说明:说明:-可为可为单目单目运算符时,运算符时,右结合性右结合性两整数相除,结果为整数两整数相除,结果为整数%要求两侧均为整型数据要求两侧均为整型数据例例 5/2 = -5/2.0 =例例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2 =2 -2.51-110( )黎篓杀尽新算线唁若冰盟戮脑唬盾占蜕赘虫沾韶燃创察崇培藏基辑譬涌也顺序结构程序设计顺序结构程序设计7/22/202496增一和减一运算符增一和减一运算符n+(后缀后缀),n-,(前缀前缀)+n,-n+让参与运算的变量加让参与运算的变量加1,-让参与

86、运算的变量减让参与运算的变量减1作为作为后缀后缀运算符时,先取运算符时,先取n的值,然后加的值,然后加/减减1作为前缀运算符时,先加作为前缀运算符时,先加/减减1,然后取,然后取n的值的值n = n+;n = n;n+;葵字鬃蓄附届淹砌狰墙寨筋迄晌嗓逐荐鳖胶欢击矫死杰束郴骤吹砂饱挚侗顺序结构程序设计顺序结构程序设计7/22/202497增一和减一运算符增一和减一运算符n+,n-,+n,-n+让参与运算的变量加让参与运算的变量加1,-让参与运算的变量减让参与运算的变量减1作为后缀运算符时,先取作为后缀运算符时,先取n的值,然后加的值,然后加/减减1作为作为前缀前缀运算符时,先加运算符时,先加/减

87、减1,然后取,然后取n的值的值m = m = +n;n;n n+; ;m = n;m = n;较镍伶妻擅挨悬捣洽袖锗釉享繁狗蝴桶俺亚辐旧韶通肋彪满锰惯躯帝牌榔顺序结构程序设计顺序结构程序设计7/22/202498增一和减一运算符增一和减一运算符例例 i=3; printf(%d ,-i+); printf( %d,i); + - 不能用于常量和表达式,如不能用于常量和表达式,如5+,(a+b)+ -结合方向:结合方向: 自右向左自右向左 -(i+)注意注意例例 int i=3; printf(%d,%d,-i+,i); 说明说明printf函数的输出项扫描顺序是自右向左的。函数的输出项扫描顺序

88、是自右向左的。触惠争啦恤狙苯秀酪邓霞禄章求褐奎狈骡翔台亢第翠杉渡福国软洽特疽愿顺序结构程序设计顺序结构程序设计7/22/202499#include void main() int a=1,b=1; printf(+a=%d,b+=%dn,+a,b+); printf(a=%d,b=%dn,a,b); printf(-a=%d,b-=%dn,-a,b-); printf(a=%d,b=%dn,a,b);哪秒血暂效惭恶兜徒甜韭台赊撮铂婉爵村癸娄淖覆萤输严谣效盈是侗篆青顺序结构程序设计顺序结构程序设计7/22/20241002.4 算术运算符与算术表达式算术运算符与算术表达式算术表达式指用算术运算

89、符将运算对象连接起来的式子算术表达式指用算术运算符将运算对象连接起来的式子算术表达式指用算术运算符将运算对象连接起来的式子算术表达式指用算术运算符将运算对象连接起来的式子对于算术表达式要注意以下对于算术表达式要注意以下几个问题几个问题:1)注意表达式中各种运算符的运算顺序,必要时应加括号,注意表达式中各种运算符的运算顺序,必要时应加括号,例如,例如,(a+b)/(c+d)a+b/c+d。2)注意表达式中各运算对象的数据类型,特别是整型相除。注意表达式中各运算对象的数据类型,特别是整型相除。C语言规定,两个整型量相除,其结果仍为整型。例如,语言规定,两个整型量相除,其结果仍为整型。例如, 7/6

90、的值为的值为1; 4/7的值为的值为0; (1/2)+(1/2)的值为的值为0,而不是,而不是1。疗致守审诊霍寻妇猛涨锤腐单柱佛伎腿忆广笛崔头黄钞辗热渴巢俄港摄拴顺序结构程序设计顺序结构程序设计7/22/2024101自动类型转换自动类型转换同种数据类型的运算结果,还是该类型同种数据类型的运算结果,还是该类型不同种数据类型的运算结果,是两种类型中取值范围更大的不同种数据类型的运算结果,是两种类型中取值范围更大的那种那种long double double float long int short chardoublelongunsignedintchar,short精度低精度低精度高精度高fl

91、oat说明说明:必定的转换必定的转换运算对象类型不同时转换运算对象类型不同时转换狞渡枷宠饺际凝溢猪苞刽约洁湃难悠周叹惯咽娥除递什炙薯随臆柴驰辙侯顺序结构程序设计顺序结构程序设计7/22/2024102自动类型转换自动类型转换 特别需要说明的是,在混合运算过程中,系统所进行的类型特别需要说明的是,在混合运算过程中,系统所进行的类型转换并不改变原数据的类型,只是在运算过程中将其值变成同类转换并不改变原数据的类型,只是在运算过程中将其值变成同类型后再运算。型后再运算。例例 char ch; int i; float f; double d;ch/i + f*d - ( f + i )intdoubl

92、edoubleintdoubledoubledoubledouble菇四项浪豢刁申煽剔蛙险仔何琢骆荧搏悄沸费岸交惺鞘壁邓物培集纯薛滓顺序结构程序设计顺序结构程序设计7/22/2024103例:自动类型转换示例例:自动类型转换示例#include void main() float x,y; short m; long n; x=3/2+8/3; y=3.0/2+8/3.0; m=1*2*3*4*5*6*7*8*9; n=1l*2*3*4*5*6*7*8*9; printf(x=%f,y=%fnm=%d,n=%ldn,x,y,m,n);粒杏泛档碌戎镐添佑今鞘径器菠框庶龟央丧硅明籽果仑两辆态筑首趾

93、俯奄顺序结构程序设计顺序结构程序设计7/22/2024104自动类型转换自动类型转换在进行赋值操作时,会发生类型转换在进行赋值操作时,会发生类型转换将取值范围将取值范围小小的类型的类型转为转为取值范围取值范围大大的类型是的类型是安全安全的的反之是不安全的反之是不安全的如果如果大大类型的值在类型的值在小小类型能容纳的范围之内,则平安无事类型能容纳的范围之内,则平安无事但是,浮点数转为整数,会丢失小数部分,但是,浮点数转为整数,会丢失小数部分,非四舍五入非四舍五入反之,转换后的结果必然是错误的,具体结果与机器和实现反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用,好的编译

94、器会发出警告。方式有关。避免如此使用,好的编译器会发出警告。泡绞峪凤蛔苦马摆峦迁谅韩叙触滁婆撑渍散萄促碑图膨锹绣苗冻看趣协尉顺序结构程序设计顺序结构程序设计7/22/20241052.5 逗号运算与逗号表达式逗号运算与逗号表达式分隔符分隔符一个变量说明语句可以同时定义多个相同类型的变量,这一个变量说明语句可以同时定义多个相同类型的变量,这些变量之间就用逗号来分隔。些变量之间就用逗号来分隔。 如如:int x,y,z;函数参数表中各参数之间也是用逗号来分隔的。函数参数表中各参数之间也是用逗号来分隔的。 printf(x=%dny=%dnz=%,x,y,z);运算符运算符顺序求值运算符顺序求值运算

95、符结合性结合性从左向右从左向右剥千星炙唯诛极疽还洛额恿轨干酷烃唁电涛卑柯着峡液雪驮剩挡炊癣赣钵顺序结构程序设计顺序结构程序设计7/22/20241062.5 逗号运算与逗号表达式逗号运算与逗号表达式逗号表达式的格式:逗号表达式的格式: 表达式表达式1,表达式表达式2,表达式表达式n求解次序:求解次序:按从左到右的顺序分别计算各子表达式的值按从左到右的顺序分别计算各子表达式的值逗号表达式的值:等于表达式逗号表达式的值:等于表达式n的值的值多数情况下,并不使用整个逗号表达式的值,更常见的多数情况下,并不使用整个逗号表达式的值,更常见的情况是要分别得到各表达式的值情况是要分别得到各表达式的值主要用在

96、循环语句中,同时对多个变量赋初值等主要用在循环语句中,同时对多个变量赋初值等 for ( i = 1, j = 10; i j; i+, j- )循环起始条件循环起始条件循环结束条件循环结束条件循环增量循环增量酱逗问尊艳疥涤酚捌照亨被苞差驶裁籽燕耘制狞腐瞳艾港纷福肋遏红景刚顺序结构程序设计顺序结构程序设计7/22/2024107例例:#include void main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x);2.5 逗号运算与逗号表达式逗号运算与逗号表达式屈献诵融烈奔卖捧赠钎聪蝶当膜弹甭无畦际楞爸滇撰负矫由瓢俩酗卵自没顺序

97、结构程序设计顺序结构程序设计7/22/2024108void main() int a=3,b=4,c=1,max,t; if(ab,ac) max=a; else max=0; t=(a+3,b+1,+c); printf(max=%d,t=%dn,max,t);2.5 逗号运算与逗号表达式逗号运算与逗号表达式冕彭茧俏聂痹咎帧追惕嘿献肝瘴遵腿绸方桥赵掀脏傣吐沂佩愉磅喳蕊药泌顺序结构程序设计顺序结构程序设计7/22/20241092.5 逗号运算与逗号表达式逗号运算与逗号表达式l逗号运算符是所有运算符中级别最低的一种运算符。逗号运算符是所有运算符中级别最低的一种运算符。例如,下面两个表达式的意

98、义是不同的:例如,下面两个表达式的意义是不同的: x= 3+4,5+7,10*4 x=(3+4,5+7,10*4)l一个逗号表达式又可以与另一个表达式(可以是逗号表达一个逗号表达式又可以与另一个表达式(可以是逗号表达式,也可以不是逗号表达式)连接成新的逗号表达式。式,也可以不是逗号表达式)连接成新的逗号表达式。(a=2*4,a*5),a-3最后得到整个逗号表达式的值为最后得到整个逗号表达式的值为5。钝孪秽霖集烛双陆妥扔峻琶鸭扣汐算约南练吵苞冷萎逢媒澈满拱畅数喉铣顺序结构程序设计顺序结构程序设计7/22/20241102.6 运算符的优先级与结合性运算符的优先级与结合性表达式的表达式的运算次序运

99、算次序:取决于表达式中各种:取决于表达式中各种运算符的优先级运算符的优先级。优先级高的运算符先运算,优先级低的运算符后运算。优先级高的运算符先运算,优先级低的运算符后运算。运算符的结合性:决定了并列的相同运算符的先后执行顺运算符的结合性:决定了并列的相同运算符的先后执行顺序。序。语言规定了运算符的优先级和结合性语言规定了运算符的优先级和结合性使用圆括号可以提高括在其中的运算的优先级。使用圆括号可以提高括在其中的运算的优先级。 鹿智赛蚁蒙湃祁肉弛次叭国绷缆签猿抖合冯费临韦溜枪名舆司筏雹靖葡郧顺序结构程序设计顺序结构程序设计7/22/20241112.6 运算符的优先级与结合性运算符的优先级与结合

100、性优优先先级级描述描述运算符运算符结结合性合性1最高最高优优先先级级 ( ) .(结结构体成构体成员员运算运算) - (指向指向结结构体成构体成员员运运算算)左左右右2单单目运算目运算-(负负号号)+ - !(非非) (位取反位取反) (类类型型)sizeof * (指指针针取内容取内容运算运算) &(取地址运算取地址运算) 右右左左3算算术术乘除运算乘除运算* / %左左右右4算算术术加减运算加减运算+ -左左右右5移位运算移位运算 左左右右6关系运算关系运算 =左左右右7相等关系运算相等关系运算= !=左左右右高高低低目豪片募临比沙牡委役饭酿捕卤柳助嗣弄乒嗣沦龚鸿款卯们燃父腥焕世蚁顺序结构

101、程序设计顺序结构程序设计7/22/20241122.6 运算符的优先级与结合性运算符的优先级与结合性(续续)优优先先级级描述描述运算符运算符结结合性合性8按位与按位与&左左右右9按位异或按位异或左左右右10按位或按位或|左左右右11逻辑逻辑与与&左左右右12逻辑逻辑或或|左左右右13三目条件运算三目条件运算?:右右左左14赋值赋值运算运算= += -= *= /= %= = &= = |=右右左左15逗号运算符逗号运算符,左左右右高高低低施突嗜上卵敦吧平衍嘶劣脚痘划致态顽帘蔼锭宁肢帝古妖芒首搏瘟磁迪弄顺序结构程序设计顺序结构程序设计7/22/20241132.7 混合运算时数据类型的转换混合运

102、算时数据类型的转换当表达式中出现了多种类型数据的混合运算时,需要当表达式中出现了多种类型数据的混合运算时,需要进行类型转换。进行类型转换。隐含转换隐含转换(自动转换自动转换):从占用内存较少的短数据类型从占用内存较少的短数据类型转化成占用内存较多的长数据类型时,可以不做显转化成占用内存较多的长数据类型时,可以不做显式的类型转换声明。式的类型转换声明。强制类型转换强制类型转换:从较长的数据类型转换成较短的数据从较长的数据类型转换成较短的数据类型时,要做强制类型转换。类型时,要做强制类型转换。 肖一啄绘泌鲜堑河蝉箭意炉丝肋族铡吗缉晰克嚏钮汹脑匙椒酚公倾沁鬃毋顺序结构程序设计顺序结构程序设计7/22

103、/2024114数据数据类类型型关关键键字字占用位数占用位数字符型字符型char8短整型短整型short16整型整型int32长长整型整型long32浮点型浮点型float32双精度型双精度型double64例如:例如:long lVal=1000;int ival=200;lVal=ival;double d1=123.5f;基本类型数据占有的内存宽度基本类型数据占有的内存宽度砍蠢笨粒罐瘸仗诵孤甜衣厕琶糙束户命枝棕矗筹优通残沮录磅裕低相喉窘顺序结构程序设计顺序结构程序设计7/22/20241152.7 混合运算时数据类型的转换混合运算时数据类型的转换1. 隐含转换隐含转换(自动类型转换自动类

104、型转换)的规则:的规则:char,short,int,unsigned,long,unsigned long,float,double低低 高高碎宙园溪民猾度鲸序乔玲续瘸摩惧漏钻荆申渗隙土韩职拘耀绷箕证淬慑烷顺序结构程序设计顺序结构程序设计7/22/20241162.7 混合运算时数据类型的转换混合运算时数据类型的转换2. 强制类型转换,消除从大到小的警告强制类型转换,消除从大到小的警告 l = (long)i; 格式:格式: (类型类型)表达式表达式 作用:作用:把表达式的值转为任意类型,从而将数据范围宽把表达式的值转为任意类型,从而将数据范围宽的数据转换成范围低的数据,但这可能会导致溢出或

105、精的数据转换成范围低的数据,但这可能会导致溢出或精度的下降。度的下降。 居帖内内灌危绵蕴颊亥慢必缠找焉喂弥按京足瘩擦大盘瓶句凭雅矛幼她雾顺序结构程序设计顺序结构程序设计7/22/2024117例例: (int)(x+y) (int)x+y (double)(3/2) (int)3.6用途:用途:满足一些运算对类型的特殊要求,例满足一些运算对类型的特殊要求,例%,两侧为,两侧为int (int)2.5%3防止丢失整数除法中的小数部分,例防止丢失整数除法中的小数部分,例 int x=3,y=2; float f; f=(float)x/y;2.7 混合运算时数据类型的转换混合运算时数据类型的转换匝

106、砌抒车蒲肇这虏客中播睡疼谭啡箔撤邻架像巩顶扛码抒反肮万衅筏嘴爱顺序结构程序设计顺序结构程序设计7/22/2024118#include void main() int m=5; printf(m/2=%dn,m/2); printf(float)(m/2)=%fn,(float)(m/2); printf(float)m/2=%fn,(float)m/2); printf(m=%dn,m);两个整数运算的结果还是两个整数运算的结果还是整数,不是浮点数整数,不是浮点数v说明:强制转换得到所需类型的中间变量,原变量类型不变说明:强制转换得到所需类型的中间变量,原变量类型不变 m/2 = 2(flo

107、at)(m/2) = 2.000000(float)m/2 = 2.500000m = 5马拟厚诣诗瑚愚贤恩窍桂搭谜哮凌遗储侵丸捻焉捧钻庄蠕咬阂在酸枫铲荐顺序结构程序设计顺序结构程序设计7/22/2024119例例 :void main() float x; int i; x=3.6; i=(int)x; printf(x=%f,i=%d,x,i); 精度损失问题精度损失问题较高类型向较低类型较高类型向较低类型转换时可能发生转换时可能发生结果:结果:x=3.600000,i=32.7 混合运算时数据类型的转换混合运算时数据类型的转换扮酸沏饰捧褪弟听似伐汤谎却卷激晨权矛累瞻臆愉易棘秒盔藐余卤擦斤

108、断顺序结构程序设计顺序结构程序设计7/22/2024120例:计算例:计算a+3*-2/(int)(a+b)-12的值。的值。 其中其中a=1.7,b=2.4#include void main() float a=1.7,b=2.4,s; s= a+3*-2/(int)(a+b)-12; printf(result is %fn,s);腥笑地痞拢阀琳剩痈家僧扬疙史抛眩缕允喂遵箍滤琼棍磨篓妮燕驱铱湛聂顺序结构程序设计顺序结构程序设计7/22/20241212.8 语句和块语句和块一个基本的语句以分号一个基本的语句以分号;结尾。结尾。语句包括:语句包括:声明语句、声明语句、表达式语句、表达式语句

109、、选择语句、选择语句、循环语句、循环语句、跳转语句、跳转语句、空语句、空语句、函数调用语句函数调用语句复合语句复合语句。变量声明语句变量声明语句int x, y;表达式语句表达式语句 (一个合法的表达式加上分号一个合法的表达式加上分号)i+;i = i + 1;空语句空语句;贵象泊颓篱熟即朽擒煎屿地除应祁熙篡尸蔼辞咨氏荧嘉已慈蓉八痛惜洁炎顺序结构程序设计顺序结构程序设计7/22/2024122复合语句复合语句复合语句复合语句:用用 括起来的一组语句括起来的一组语句-一般形式一般形式: 数据说明部分数据说明部分; 执行语句部分执行语句部分; -说明说明:语法上和单一语句相同,在任何使用单个语句的

110、地方都可以语法上和单一语句相同,在任何使用单个语句的地方都可以使用复合语句。使用复合语句。在什么情况下使用复合语句?在什么情况下使用复合语句?条件语句和循环语句在语法上只允许带一条语句条件语句和循环语句在语法上只允许带一条语句当分支和循环中需要进行多项操作时当分支和循环中需要进行多项操作时此处无分号此处无分号此处有分号此处有分号赴去识狠呵痪伺古清拖电念贫谊擂瞩凶股覆汉享蝎揭妆翁痛洽嗡赎萌疚观顺序结构程序设计顺序结构程序设计7/22/2024123#include stdio.hvoid main() int y; y=100; int x; x=20; printf(x=%dn,x); pri

111、ntf(y=%dn,y); printf(x=%dn,x);复合语复合语句句 在复合语句的嵌套在复合语句的嵌套结构中,一个复合语结构中,一个复合语句内所进行的说明只句内所进行的说明只适合于本层中该说明适合于本层中该说明语句以后的部分(包语句以后的部分(包括其内层的复合语句)括其内层的复合语句),在该复合语句外不,在该复合语句外不起作用。起作用。疗莫奠非绿叹掌拢灌谤蚤茧须稳损约浅竖磅柄焕同际墓纪封陆锑充涣辫疼顺序结构程序设计顺序结构程序设计7/22/2024124#include stdio.hvoid main() int x,y; x=10; y=100; x=20; printf(y=%d

112、n,y); printf(x=%dn,x); printf(x=%dn,x);y=100x=20x=20 int x; x=20; printf(y=%dn,y); printf(x=%dn,x); y=100x=20x=10 在复合语句的嵌套在复合语句的嵌套结构中,如果在内层结构中,如果在内层与外层作了相同的说与外层作了相同的说明,则按照局部优先明,则按照局部优先的原则,内层复合语的原则,内层复合语句中的执行结果不带句中的执行结果不带回到外层。回到外层。迫玩脱卓骚守辈媚谎吹实鸦摸揖肉找全启剃烹吗才色肾铬惭上至翘瑰梳跳顺序结构程序设计顺序结构程序设计7/22/2024125空语句空语句空语句有

113、什么作用?空语句有什么作用?什么也不做,只表示语句的存在什么也不做,只表示语句的存在自顶向下程序设计时用在那些未完成的模块中自顶向下程序设计时用在那些未完成的模块中延时用的空循环延时用的空循环void main() DataInitialze(); DataProcess(); DataOutput();void DataInitialze() ; 淡主融氏准晤凳赡菌充汕荧抖桓澎店串寡典慧怪爬彤樊洋锯取绘柜文既直顺序结构程序设计顺序结构程序设计7/22/2024126顺序结构程序的基本操作顺序结构程序的基本操作如何在程序中给变量赋值?如何在程序中给变量赋值?赋值语句赋值语句赋值表达式赋值表达式

114、;如何进行数据的输入输出?如何进行数据的输入输出?输入:从标准输入设备上输入数据到计算机内存输入:从标准输入设备上输入数据到计算机内存输出:将计算机内存中的数据送到标准输出设备输出:将计算机内存中的数据送到标准输出设备C语言中输入输出操作通过调用标准库函数来实现语言中输入输出操作通过调用标准库函数来实现#include stdio.h 在当前目录和在当前目录和TC指定的目录中找该文件指定的目录中找该文件#include 在由在由TC指定的文件目录中找该文件指定的文件目录中找该文件尔恕斧管侍莽以劲悲擂朗帆研杭主柬锹蛾敛珍涉杯亩意面蒋熬五献垛样舒顺序结构程序设计顺序结构程序设计7/22/20241

115、272.9 数据的输入与输出数据的输入与输出C语言提供了一组输入输出库函数:对标准输入设备和标语言提供了一组输入输出库函数:对标准输入设备和标准输出设备读写。准输出设备读写。printf(写格式化的数据写格式化的数据)scanf(读格式化的数据读格式化的数据)getchar(输入字符输入字符)putchar(输出字符输出字符)gets(输入字符串输入字符串)puts(输出字符串输出字符串)在源文件的开头使用预编译指令:在源文件的开头使用预编译指令: #include 哆卵控丘搞搬昆芹芍卸漂谢壬醉案意步醉温剪断占姬芥籽埠邓二页扎清腰顺序结构程序设计顺序结构程序设计7/22/20241282.9.

116、1 格式输出函数格式输出函数printfnprintf (格式控制字符串格式控制字符串,输出项表列输出项表列);输出若干个任意类型的数输出若干个任意类型的数printf(a=%d b=%f,a,b);函数名函数名格式说明格式说明:%修饰符修饰符格式字符格式字符普通字符:原样输出普通字符:原样输出输出表列输出表列:要输出的数据(可以没要输出的数据(可以没有,多个时以有,多个时以,分隔)分隔)丫泉叉一忽波秆忠彻椅坟期迭爸谅簧墅漫炼矢碎岸咯侠概伊伊戏巍知图氧顺序结构程序设计顺序结构程序设计printf函数格式字符函数格式字符d,i十进制整数十进制整数x,X十六进制无符号整数十六进制无符号整数o八进制

117、无符号整数八进制无符号整数u不带符号十进制整数不带符号十进制整数c单一字符单一字符s字符串字符串e,E指数形式浮点小数指数形式浮点小数f小数形式浮点小数小数形式浮点小数ge和和f中较短一种中较短一种%百分号本身百分号本身int a=567;printf(%d,a);567int a=255;printf(%x,a);ffint a=65; printf(%o,a);101int a=567;printf(%u,a);567char a=65;printf(%c,a);Aprintf(%s,ABC);ABCfloat a=567.789;printf(%e,a);5.677890e+02floa

118、t a=567.789;printf(%f,a);567.789000float a=567.789;printf(%g,a);567.789printf(%);%溶拦昌瞅勤锨瓶工愤溅您凭返故褐呐宅如搜环箭透琶适嚣缨蛛窟博筹屋龋顺序结构程序设计顺序结构程序设计7/22/2024130#include stdio.hvoid main() int a=3,b=4; unsigned u=65535; printf(%d %dn,a,b); printf(a=%d, b=%dn,a,b); printf(u=%dn,u);3 4a=3, b=4u=-12.9.1 格式输出函数格式输出函数print

119、f橙檬掏踞揩脱缚戊烹示仕廉往素了眠句董佣叹堑损斌骆胶畸准据卓涕翔壶顺序结构程序设计顺序结构程序设计7/22/2024131printf附加格式说明符附加格式说明符修饰符修饰符功功 能能m.n-+0#l输出数据域宽,数据长度输出数据域宽,数据长度m,左补空格,左补空格;否则按实际输出否则按实际输出对实数,指定小数点后位数对实数,指定小数点后位数(四舍五入四舍五入)对字符串,指定实际输出位数对字符串,指定实际输出位数输出数据在域内左对齐输出数据在域内左对齐(缺省右对齐缺省右对齐)指定在有符号数的正数前显示正号指定在有符号数的正数前显示正号(+)输出数值时指定左面不使用的空位置自动填输出数值时指定左

120、面不使用的空位置自动填0在八进制和十六进制数前显示前导在八进制和十六进制数前显示前导0,0x在在d,o,x,u前,指定输出精度为前,指定输出精度为long型型在在e,f,g前,指定输出精度为前,指定输出精度为double型型醛低盾跃擦趟呜答满函兑甩狙队您蓬昼跟威轻军虞酋优跪活末烯扩摧媚蝎顺序结构程序设计顺序结构程序设计7/22/2024132附加格式说明符附加格式说明符m.nint a=1234;float f=123.456;char ch=a;printf(%8d,%2dn,a,a); printf(%f,%8fn,f,f);printf(%8.1f,%.2f,%.2en,f,f,f);p

121、rintf(%3cn,ch);运行结果运行结果: _ _ _ _1234,1234123.456000,123.456000 _ _ _123.5,123.46,1.23e+02a絮谩井次局胁嗓锰设惠抒简赚泡御更蛾厌莉蔼晚蛮回旅绒板嘲芦芹狈峭壬顺序结构程序设计顺序结构程序设计7/22/2024133附加格式说明符附加格式说明符m.nvoid main()char a=Hello,world!;printf(%sn%15sn%10.5sn%2.5sn%.3sn,a,a,a,a,a);运行结果:运行结果:Hello,world!_ _ _Hello,world! _ _ _ _ _HelloHel

122、loHel 绢榜胳辫统语鼓桥时倍胀印间畴央煤涪仆瀑鹅雀罪痕页陛迫聊聂闸畔谈赠顺序结构程序设计顺序结构程序设计7/22/2024134#include stdio.hvoid main() int a,b; float x,y,s; a=34; b=-56; x=2.5; y=4.5; s=x*x+y*y; printf(a=%d, b=%dn,a,b); printf(x=%6.2f, y=%6.2f, s=%6.2fn,x,y,s);运行结果:运行结果: a=34, b=-56 x= _ _ 2.50, y= _ _ 4.50, s= _26.50疼榷蝎楔岸柔芒外阴统辅扬尼旁策绰讥份败岿形看

123、晤丽火伸腻疼详态坪奥顺序结构程序设计顺序结构程序设计7/22/2024135#include stdio.hvoid main() double x=34.567; printf(x=%fn,x); printf(x=%dn,x); printf(x=%dn,(int)x);程序的实际运行结果为程序的实际运行结果为x=34.567000x=1958505087x=34 显然,这个程序中的显然,这个程序中的第二个格式输出语句输第二个格式输出语句输出的结果是错误的,这出的结果是错误的,这是因为在第二个格式输是因为在第二个格式输出语句中,格式说明符出语句中,格式说明符%d是基本整型格式说是基本整型格

124、式说明符,而输出项是双精明符,而输出项是双精度型的数据,它们是不度型的数据,它们是不匹配的。匹配的。垂臼血说捻炬僳翅卉旱敖沿秸训怨驹楼诚蔓膊等烩君毡踏养办筋篱醇何挤顺序结构程序设计顺序结构程序设计7/22/2024136附加格式说明符附加格式说明符-int a=1234;float f=123.456;char c=Hello,world!;printf(%8d,%-8dn,a,a);printf(%10.2f,%-10.1fn,f,f);printf(%10.5s,%-10.3sn,c,c);运行结果运行结果: _ _ _ _1234,1234_ _ _ _123.46,123.5_ _ _

125、 _ _Hello,Hel 令很抛妇僻迟爱沽冗聂浪胚坦斥议者处河叹森杏均体谢盆素秩旋毁院靡蚂顺序结构程序设计顺序结构程序设计7/22/2024137附加格式说明符附加格式说明符0、+int a=1234;float f=123.456;printf(%08dn,a); printf(%010.2fn,f); printf(%0+8dn,a); printf(%0+10.2fn,f); 运行结果运行结果: 00001234 0000123.46000+1234000+123.46等铭鱼山澳掺迟正领订沉蒜够公磕苫痴辖跪款的曝靳俞束锈久天碗藤卵暂顺序结构程序设计顺序结构程序设计7/22/202413

126、8附加格式说明符附加格式说明符#、lint a=123;long b=65536;printf(%o,%#o,%X,%#Xn,a,a,a,a); printf(%d,%8ldn,(short)b,b); 运行结果运行结果: 173,0173,7B,0X7B0, _ _ _6553600 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00碗杏休巫览咒为郊空滤气凿隐鞘奠沮馒颜德英贩护例避寥铬菜稠萤隧簿临顺序结构程序设计顺序结构程序设计7/22/2024139nscanf (格式控制字符串格式控制字符串,地址表列地址表列);按指定格式从键盘读入数据,存入地址表指

127、定的存按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束储单元中,并按回车键结束返值:正常,返回输入数据个数返值:正常,返回输入数据个数scanf(%d,%f, &a,&b);格式说明格式说明非格式字符非格式字符地址表列地址表列2.9.2 格式输入函数格式输入函数scanf掷桂弘叮适唤审简助揍翘脾眩摔狮烛锈钵筒哭翰冠冯贰项勋笺跋戏岸船举顺序结构程序设计顺序结构程序设计7/22/2024140scanf函数格式字符函数格式字符d以带符号十进制形式输入整型数据以带符号十进制形式输入整型数据o以八进制无符号形式输入以八进制无符号形式输入(无前导无前导0)x以十六进制无符号形式输入以

128、十六进制无符号形式输入(无前导无前导0x)c以字符形式输入单个字符以字符形式输入单个字符s输入字符串输入字符串,以非空字符开始以非空字符开始,遇第一个空白字符结束遇第一个空白字符结束f以小数形式输入浮点数以小数形式输入浮点数e以标准指数形式输入以标准指数形式输入萌鸣蟹撮评缕郭绚亦猴桂奴俗幌矾女雄磋环酚抬琵观猴傈渴乙据优憾舟巧顺序结构程序设计顺序结构程序设计7/22/2024141scanf附加格式说明符附加格式说明符修饰符修饰符功功 能能lLhm*加在加在d、o、x前前:输入短整型输入短整型加在加在d,o,x,u前,输入长整型前,输入长整型加在加在f,e前,输入双精度型前,输入双精度型指定输入

129、数据宽度,遇空格或不可转换字符则结束指定输入数据宽度,遇空格或不可转换字符则结束抑制符,本输入项在读入后不赋给相应的变量抑制符,本输入项在读入后不赋给相应的变量加在加在f、e前前:输入输入long double型型峡勤效挖娩弹颊姚妓炒为患和遇贮迁芦扶陛袄歌汁看娇某匝排殊被玖佛尚顺序结构程序设计顺序结构程序设计7/22/2024142scanf附加格式说明符附加格式说明符常见错误常见错误scanf(%d,%fn,&a,&b);scanf(%d,%f,a,b);scanf(%7.2f,&a);scanf(%-5d,&b);郸舜钧班凌注诞豫抵块钵浓挛诣秽的刺捉怒衷范抽垒契烤粉硫璃馁腕垂胯顺序结构程序

130、设计顺序结构程序设计7/22/2024143输入分隔符的指定输入分隔符的指定#include void main() int a,b; printf(Please input a and b:); scanf(%d%d, &a,&b); printf(a=%d, b=%d, a+b=%dn,a,b,a+b);Please input a and b:a=12, b=34, a+b=4612 34 遇空格、遇空格、遇空格、遇空格、TABTAB、回车键时结束、回车键时结束、回车键时结束、回车键时结束或或 12 34 苦斑审并肛芳睦质学八淳鄙堡氮貉俺仆纲侨触寅约庚抢食裤前哩勺蓉望豌顺序结构程序设计顺

131、序结构程序设计7/22/2024144输入分隔符的指定输入分隔符的指定#include void main() int a,b; printf(Please input a and b:); scanf(%2d%2d, &a,&b); printf(a=%d, b=%d, a+b=%dn,a,b,a+b);遇宽度时结束遇宽度时结束遇宽度时结束遇宽度时结束Please input a and b:a=12, b=34, a+b=461234 荣舆蹲蘑瑞丘祖隧喳魁醚崭摈续咖瘤芽奠亡碗喜百回虫曾汁忧华瘦啥呜捎顺序结构程序设计顺序结构程序设计7/22/2024145输入分隔符的指定输入分隔符的指定#i

132、nclude void main() int a,b; printf(Please input a and b:); scanf(%d,%d, &a,&b); printf(a=%d, b=%d, a+b=%dn,a,b,a+b);这里逗号需要原样输入这里逗号需要原样输入这里逗号需要原样输入这里逗号需要原样输入Please input a and b:a=12, b=34, a+b=4612,34 讫亭的胰蛀前厘甫领璃淳扰爆帧醒减复头褐芳近蛙呛琐空爹倪歉玖注鲤仁顺序结构程序设计顺序结构程序设计7/22/2024146输入结束符输入结束符#include void main() int a, b

133、; printf(Please input a and b:); scanf(%2d%2d, &a,&b); printf(a=%d, b=%d, a+b=%dn,a,b,a+b);遇非法输入时结束遇非法输入时结束遇非法输入时结束遇非法输入时结束Please input a and b:a=12, b=3, a+b=15123a 殊殖胞象犬彤讫嘘沥煞韭居任吟遣蚁窘煮嘉郧魏侥账伺糯桥改布记茄丑蝗顺序结构程序设计顺序结构程序设计7/22/2024147附加格式说明符附加格式说明符#include void main() int a, b; printf(Please input a and b:)

134、; scanf(%2d%*2d%2d, &a,&b); printf(a=%d, b=%d, a+b=%dn,a,b,a+b);Please input a and b:a=12, b=56, a+b=68123456 跳过一个输入项跳过一个输入项跳过一个输入项跳过一个输入项环瞎傍满吹锚剥券形棵任积灌砌悠俭昨淬巳矩蛙骸狱嚎猩腾螟须蛛崩菊插顺序结构程序设计顺序结构程序设计7/22/2024148输入数据的格式控制输入数据的格式控制#include void main() int a, b; scanf(%d %d, &a,&b); printf(a=%d, b=%dn,a,b);问题问题1:当要

135、求程序输出结果为当要求程序输出结果为 a=12, b=34 时,用户应该如何输入数据?时,用户应该如何输入数据? 12 3412 34 淤椽吁媚措赛负彻婪程算骏唇汪郡赋怯醇野瘤掷拟硷漆碎窄伦背抚柏敦拽顺序结构程序设计顺序结构程序设计7/22/2024149输入数据的格式控制输入数据的格式控制#include void main() int a, b; scanf(%d %d, &a,&b); printf(a=%d, b=%dn,a,b);问题问题2:当限定用户输入数据以逗号为分隔符,即输入数据格当限定用户输入数据以逗号为分隔符,即输入数据格式为:式为:12,34 时,应修改程序中的哪条语句?

136、怎样修改?时,应修改程序中的哪条语句?怎样修改? scanf(%d,%d, &a,&b); scanf(%d,%d, &a,&b); 侨泪鹅蓝胁牧糕凸艇粉穿威闽碴娥温缴大留孽俱胶测紫芥药烂窒饲泛哇阐顺序结构程序设计顺序结构程序设计7/22/2024150#include void main() int a, b; scanf(%d %d, &a,&b); printf(a=%d, b=%dn, a, b);问题问题3:语句语句scanf(%d %d, &a,&b);修改为修改为scanf(a=%d, b=%d, &a,&b); 时,用户应该如何输入数时,用户应该如何输入数据?据?输入数据的格式

137、控制输入数据的格式控制a=12, b=34a=12, b=34 怜伴邱叙萍浩瓮造栽寥总拯论罚朔剁陕仰说胀寓努粗痛门颈遁卒福贱孰稻顺序结构程序设计顺序结构程序设计7/22/2024151输入数据的格式控制输入数据的格式控制#include void main() int a, b;scanf(%d %d, &a,&b);printf(a= %d, b= %dn, a, b);问题问题4:限定用户输入数据为以下格式为:限定用户输入数据为以下格式为 1234 同时要求程序输出结果为同时要求程序输出结果为a=12, b=34时,应修改程序中的哪时,应修改程序中的哪条语句?怎样修改?条语句?怎样修改?

138、scanf(%2d%2d, &a,&b);scanf(%2d%2d, &a,&b);敌纹散瘁赛狞碉殷誉沤育渠卡诉轧鞋业字欣仆秽瞥怠饶渡策猴镰臻罢妓馅顺序结构程序设计顺序结构程序设计7/22/2024152输入数据的格式控制输入数据的格式控制#include void main() int a, b;scanf(%d %d, &a,&b);printf(a = %d, b = %dn, a, b);问题问题5:限定用户输入数据为以下格式为:限定用户输入数据为以下格式为12 34 同时要求程序输出结果为同时要求程序输出结果为a = 12, b = 34应修改程序中的哪条语句?怎样修改?应修改程序中

139、的哪条语句?怎样修改? scanf(%d%d, &a,&b);scanf(%d%d, &a,&b);printf(a = %d, b = %dn, a, b);printf(a = %d, b = %dn, a, b);赌戴押舱困按滥颐戮耐寨遥像胜饥讹欲辫逾鹏鞠共卸淘暂逮战省抹谍龋骨顺序结构程序设计顺序结构程序设计7/22/20241532.9.3 字符输入输出函数字符输入输出函数字符输出函数字符输出函数putchar(ch)输出输出一个一个字符字符ch字符输入函数字符输入函数getchar()无参数无参数函数值为从输入设备接收的字符函数值为从输入设备接收的字符猿妓姜妈污词葬冈但掂园迂护鬼耪焕

140、吼慧院疙独缚返搭屹蚁哉面煎督肄傅顺序结构程序设计顺序结构程序设计7/22/2024154#include void main() char ch; printf(Press a key and then press Enter:); ch = getchar(); printf(You pressed ); putchar(ch); putchar(n);运行程序运行程序运行程序运行程序Press a key and then press Enter:Press a key and then press Enter:You pressedYou pressedA A疥乏控神跃闹照卡杖争剃菱皆急

141、傣盅础着堡粱筑亲谗翔建旧毯恼疚恬惶威顺序结构程序设计顺序结构程序设计7/22/2024155输入数据的格式控制输入数据的格式控制#include void main() int a, b;scanf(%d %d, &a,&b);printf(a = %d, b = %dn, a, b);问题问题6:设计程序使得用户可以以任意字符(回车、空格、制表:设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其它)作为分隔符进行数据的输入符、逗号、其它)作为分隔符进行数据的输入scanf(%d%*c%d, &a,&b); scanf(%d%*c%d, &a,&b); 君蛮讫滨总走佛扇驼绚乓叙蒙舱贾

142、淄关抚买仿蓖沥豁拘鸭村茹嘛汾庐晕迫顺序结构程序设计顺序结构程序设计7/22/2024156C格式符存在的问题及其解决格式符存在的问题及其解决#include void main() int data1, data2, sum; char op; printf(Please enter the expression data1 + data2n); scanf(%d%c%d,&data1, &op, &data2); printf(%d%c%d = %dn,data1, op, data2, data1+data2);第第第第1 1次测试次测试次测试次测试Please enter the exp

143、ression data1 + data2Please enter the expression data1 + data2 12 + 3 12 + 3 12 -858993460 = -85899344812 -858993460 = -858993448说明说明说明说明: :用用用用%c%c格式符时,空格和转义字符格式符时,空格和转义字符格式符时,空格和转义字符格式符时,空格和转义字符作为有效字符输入作为有效字符输入作为有效字符输入作为有效字符输入饰沦芍煮疚哀抽凄舱蹋潞釉的域昆猎寓眷捐雍蕉经似纹遍趁斡制撒酶施戮顺序结构程序设计顺序结构程序设计7/22/2024157#include voi

144、d main() int data1, data2, sum; char op; printf(Please enter the expression data1 + data2n); scanf(%d%c%d,&data1, &op, &data2); printf(%d%c%d = %dn,data1, op, data2, data1+data2);第第第第2 2次测试次测试次测试次测试Please enter the expression data1 + data2Please enter the expression data1 + data2 12 3 12 3 12 3 = 15

145、12 3 = 15C格式符存在的问题及其解决格式符存在的问题及其解决菜锭黎冀耸硕早彦上熊支下秉甘卉裙韦掣灌缀麻死益灭茬缺猴君熟吧企饱顺序结构程序设计顺序结构程序设计7/22/2024158#include void main() int data1, data2, sum; char op; printf(Please enter the expression data1 + data2n); scanf(%d%c%d,&data1, &op, &data2); printf(%d%c%d = %dn,data1, op, data2, data1+data2);第第第第3 3次测试次测试次测

146、试次测试Please enter the expression data1 + data2Please enter the expression data1 + data2 12+3 12+3 12+3 = 1512+3 = 15C格式符存在的问题及其解决格式符存在的问题及其解决焉买寿铭靡烦克木寐坑吧左霜鞘收妥洼蒙黑诽哼随石堑汇沾孟鼻劣分宝圾顺序结构程序设计顺序结构程序设计7/22/2024159#include void main() int a; char b; float c; printf(Please input an integer:); scanf(%d, &a); printf

147、(integer: %dn, a); printf(Please input a character:); scanf(%c, &b); printf(character: %cn, b); printf(Please input a float number:); scanf(%f, &c); printf(float: %fn, c);希望得到的运行结果希望得到的运行结果希望得到的运行结果希望得到的运行结果Please input an integer:integer:12Please input an character :character :aPlease input a float

148、 number:float number:3.50000012 a 3.5 帆昨超振渔屎晰蛙坍宅岛联秤凹瞬碱印倚案辉瞬达及弓鞭蒲糯锁唆延崔夺顺序结构程序设计顺序结构程序设计7/22/2024160#include void main() int a; char b; float c; printf(Please input an integer:); scanf(%d, &a); printf(integer: %dn, a); printf(Please input a character:); scanf(%c, &b); printf(character: %cn, b); printf

149、(Please input a float number:); scanf(%f, &c); printf(float: %fn, c);结果好像很奇怪嘛!结果好像很奇怪嘛!结果好像很奇怪嘛!结果好像很奇怪嘛!Please input an integer:integer:12Please input an character :Please input a float number:float number:3.50000012 character:3.5 琉剧扯忍移满敦削简攻汝会鉴鞋梨立鼻劳衔表鲍十午惟出父阔厕漆涟佬鲍顺序结构程序设计顺序结构程序设计7/22/2024161#include

150、 void main() int a; char b; float c; printf(Please input an integer:); scanf(%d, &a); printf(integer: %dn, a); printf(Please input a character:); scanf(%c, &b); printf(character: %dn, b); printf(Please input a float number:); scanf(%f, &c); printf(float: %fn, c);结果好像很奇怪嘛!结果好像很奇怪嘛!结果好像很奇怪嘛!结果好像很奇怪嘛!P

151、lease input an integer:integer:12Please input an character :Please input a float number:float number:3.50000012 character: 103.5 输入函数留下的输入函数留下的垃圾垃圾稚砧房殿猩把喘罩朵毙牟撒界元掺酪苍房小蚤掀笼凑湃悟邹略顷孝朗溃矽顺序结构程序设计顺序结构程序设计7/22/2024162#include void main() int a; char b; float c; printf(Please input an integer:); scanf(%d, &a);

152、 printf(integer: %dn, a); printf(Please input a character:); scanf(%c, &b); printf(character: %cn, b); printf(Please input a float number:); scanf(%f, &c); printf(float: %fn, c);拔磷仲捅懈态污须赶奖鱼惭涨撵翘剧上舟代掳错拥型按港各素本励稍躇橇顺序结构程序设计顺序结构程序设计7/22/2024163#include void main() int a; char b; float c; printf(Please inp

153、ut an integer:); scanf(%d, &a); printf(integer: %dn, a); printf(Please input a character:); getchar(); /*吸收掉前面输入整型数据后面键入的回车字符吸收掉前面输入整型数据后面键入的回车字符*/ scanf(%c, &b); printf(character: %cn, b); printf(Please input a float number:); scanf(%f, &c); printf(float: %fn, c);希望得到的运行结果希望得到的运行结果希望得到的运行结果希望得到的运行结

154、果Please input an integer:integer:12Please input an character :character :aPlease input a float number:float number:3.50000012 a 3.5 欲霉时撕氨波扬送拷屈故菠赁繁槛脖挂今卒扭怔友披秘拱峨沮词铀小淄蜘顺序结构程序设计顺序结构程序设计7/22/2024164#include void main() int a; char b; float c; printf(Please input a integer:); scanf(%d, &a); printf(integer:

155、 %dn, a); printf(Please input a character:); scanf(%1s, &b); /*第第2种解决方案种解决方案*/ printf(character: %cn, b); printf(Please input a float number:); scanf(%f, &c); printf(float: %fn, c);丑呀娘蜜卧奔旁奈囤寨位雄馏钟赵采阻擂幢称擞膘庆恿绽衙旗巾捕盂淫舜顺序结构程序设计顺序结构程序设计7/22/2024165解决方法:解决方法:(1)用用getchar()清除清除(2)用用%1s来限制来限制(3)用格式串中用格式串中空格空格

156、或或%*c来来吃掉吃掉(4)用函数用函数fflush(stdin)清除全部剩余内容清除全部剩余内容int x;char ch;scanf(%d,&x);scanf( %c,&ch);或或 scanf(%*c%c,&ch);或或 fflush(stdin); scanf(%c,&ch);C格式符存在的问题及其解决格式符存在的问题及其解决腺伶吱斌恩宦透河穆爹纫掣醛揍邻脸剧榨恬旱狮敝膏食狠策月脊某凋尘琳顺序结构程序设计顺序结构程序设计7/22/2024166再回头来看看前面的例子,以任意再回头来看看前面的例子,以任意分隔符输入加法算式,可能吗?分隔符输入加法算式,可能吗?#include void

157、main()int data1, data2, sum;char op;printf(Please enter the expression data1 + data2n);printf(%d%c%d = %dn,data1, op, data2, data1+data2);scanf(%d%1s%d,&data1, &op, &data2);12+3 12 + 3 12 + 3 觅肩叼峻旁碌耿臂鬃琴提页沦囚凰逆绎键寞釜逐选将匹饭晒京捻瞳灰雇台顺序结构程序设计顺序结构程序设计7/22/2024167数据的非格式化输入数据的非格式化输入在输入字符数据时,在输入字符数据时,scanf函数有个美中不

158、足的地方:函数有个美中不足的地方:scanf函数必须等到用户敲回车键后才返回函数必须等到用户敲回车键后才返回程序有时并不想显示所输入的字符,程序有时并不想显示所输入的字符,scanf函数也做不到。函数也做不到。下表列出了一些常用的和输入字符数据有关的库函数:下表列出了一些常用的和输入字符数据有关的库函数:库函数名库函数名功能功能函数原型所在的文件函数原型所在的文件getchar接收一字符输入接收一字符输入stdio.hgetche接收一字符输入接收一字符输入conio.hgetch接收一字符输入接收一字符输入conio.hbioskey获取按键信息获取按键信息bios.h辨厩抬搭课沈羊衣痹蹋泄

159、胯较蛊俞蚁佃重童将淀因萝竹棍免梧洪举炒彦帚顺序结构程序设计顺序结构程序设计7/22/2024168ngetche函数原型函数原型:int getche(void);getche函数的功能与函数的功能与getchar功能相同。功能相同。唯唯一一的的差差别别是是:只只要要用用户户按按下下一一个个键键,getche就就立立即即返返回回(不不会会等等待待用用户户敲敲回回车车),并并将将用用户户输输入入的的字字符符回回显显在在屏屏幕幕上上,getche的返回值就是用户所按键的的返回值就是用户所按键的ASCII码。码。ngetch函数原型函数原型:int getch(void);getch函数的功能与函数

160、的功能与getche函数完全相同,唯一的差别是函数完全相同,唯一的差别是:getch不回显所输入的字符不回显所输入的字符。数据的非格式化输入数据的非格式化输入茅坐嫉休厨河醚冰离玛畦虎玲叛推德赏超酸鹰亚渠抽牺恫良疫板悬袍私葬顺序结构程序设计顺序结构程序设计7/22/2024169getch和和getche的差别实例的差别实例#include #include void main()char ch1,ch2;printf(please press two keyn);ch1=getche();ch2=getch();printf(nyouve pressed %c and %cn,ch1,ch2)

161、;运行结果运行结果运行结果运行结果( (假设依次按下假设依次按下假设依次按下假设依次按下a a键和键和键和键和b b键键键键):):please press two keyplease press two keya ayouve pressed a and byouve pressed a and b森通踊润纲育垦坚哪耳矾吞贸弓箔蝗野咕贼蛀价茂匣筐慌耸啤耐亢氢蓖效顺序结构程序设计顺序结构程序设计7/22/2024170字符输入函数总结字符输入函数总结格式:格式: getchar() getche() getch()功能功能: 从从键键盘盘上上读读入入一一个个字字符符,但但后后两两个个函函数数输

162、输入入后后无无需需回回车车。getch()还还有有一一个个功功能能,即即不不把把读读入入的的字字符符回回显显到到屏屏幕幕上上,常常用用于于密码输入或菜单选择密码输入或菜单选择。继炊箕宪啦烧首蚀信燕嘛羊社暂脊燥腥芽动萍去迸菌蓄悄舆涩认裙且钞蒋顺序结构程序设计顺序结构程序设计7/22/2024171运行时,输入:运行时,输入:Student 输出结果为输出结果为 a=S,b=t【例一】【例一】#include void main()char a,b;a=getchar();b=getchar(); printf(a=%c,b=%cn,a,b);【例二】【例二】#include void main(

163、) char i=y; while (i=y|i=Y) printf(n您好您好!是否继续是否继续?(y/n); i=getche(); printf(n再见!再见!);运行时,屏幕显示运行时,屏幕显示您好您好!是否继续是否继续?(y/n)您好您好!是否继续是否继续?(y/n)您好您好!是否继续是否继续?(y/n)再见!再见!问题:不能用把问题:不能用把getche()改成改成getchar()?运行时,屏幕显示运行时,屏幕显示您好您好!是否继续是否继续?(y/n)您好您好!是否继续是否继续?(y/n)再见!再见!yYny 不能,因为这样会把回车符作为第二次读入值。不能,因为这样会把回车符作为

164、第二次读入值。削裕瘤烘匀汁芳者杂居诛狞侣笺岛疽敏矾益品这可舔叛濒坍张望励屁窃溶顺序结构程序设计顺序结构程序设计7/22/2024172nbioskey函数原型:函数原型:int bioskey(int cmd); 前前面面介介绍绍的的库库函函数数通通常常只只能能获获取取常常规规字字符符的的ASCII码码值值,却却无无法法顺顺利利完完成成功功能能键键(指指F1至至F9、Home、End、PageUp、PageDown、Ins、Delete、Shift、Ctrl、Alt以以及及4个个方方向向键键等等等等)的的键键值值读读取取。要要想想读读取取功功能能键键的的信信息息,必必须须利利用用bioskey

165、函数。函数。 bioskey函数带有一个函数带有一个int型参数,返回型参数,返回int型值。型值。bioskey函数的主要功能是函数的主要功能是根据参数根据参数cmd实现不同的键盘操作实现不同的键盘操作。数据的非格式化输入数据的非格式化输入采山抽媳赚裙搂贺徐矢频谦抖网吠赡崇亢狗篮骋鹅咸穆墅弘恿诧延凋瘪淄顺序结构程序设计顺序结构程序设计7/22/2024173想一想想一想1、scanf函数与函数与printf函数具有哪些异同点?函数具有哪些异同点?2、调用、调用scanf函数时,数据输入终止的条件是什么?函数时,数据输入终止的条件是什么?3、在在getch、getchar、getche、bio

166、skey和和scanf函函数数中中,在适用条件方面有什么不同?在适用条件方面有什么不同?数据的非格式化输入数据的非格式化输入枚垛塔咀颗钉碴解团旱葛苗擞菱凑苟胚荚混蔬氢老筏惜甘缔情惠腿爱凄马顺序结构程序设计顺序结构程序设计7/22/2024174变量的命名规则变量的命名规则数据类型数据类型char,short,int,long,float,double,long doublesigned,unsigned常量、转义字符常量、转义字符运算符运算符算术、增一算术、增一/减一、赋值运算符、类型强转、逗号、减一、赋值运算符、类型强转、逗号、sizeof类型转换类型转换优先级和结合性优先级和结合性这一章我

167、们学习了这一章我们学习了钙茁砍宾徒够华锰挠系招锋踢拱宰盈役橙傻渤杨俱鼎鞋用唐茅库构输煮桩顺序结构程序设计顺序结构程序设计7/22/2024175这一章我们学习了这一章我们学习了字符输入函数字符输入函数getchar()字符输出函数字符输出函数putchar()格式输入函数格式输入函数scanf()格式输出函数格式输出函数printf()格式控制问题格式控制问题难点难点弘透土鞭性财刑冕知摈抗搞狭条皮竿腆粗冈撤蕉穴驳睡熙驱城稀扦缕僧畴顺序结构程序设计顺序结构程序设计7/22/2024176例例:输入三角形边长,求面积输入三角形边长,求面积#include #include #include voi

168、d main() float a,b,c,s,area;printf(input a,b,c:);scanf(%f,%f,%f,&a,&b,&c);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.2f, s=%7.2fn,a,b,c,s);printf(area=%7.2fn,area);文件包含预处理命令文件包含预处理命令变量定义变量定义输入数据输入数据输出数据输出数据input a,b,c:input a,b,c:3,4,6 a= 3.00,b= 4.00,c= 6.00,s= 6.50

169、area= 5.33而门玛厉藤刃窿戚温眠雷设苦畜涎橱纲焦牌热钡政蛾稿夷看讽恐诲瓣忠荡顺序结构程序设计顺序结构程序设计7/22/2024177例例:从键盘输入一个三位整数,从键盘输入一个三位整数, 依次输出其个位、依次输出其个位、十位、百位(一行一个)。十位、百位(一行一个)。void main() int a,a1,a2,a3; printf(a=); scanf(%d,&a); a1=a%10; a2=a/10%10; a3=a/100; printf(%dn%dn%dn,a1,a2,a3);a=352 a=352 2 25 53 3推广:编写一个程序,从键盘输入任意一个五位数,把这个数值推广:编写一个程序,从键盘输入任意一个五位数,把这个数值分解为单个数字,然后打印出每一个数字(每个数字之间用三个分解为单个数字,然后打印出每一个数字(每个数字之间用三个空格分开)。例如用户输入了空格分开)。例如用户输入了42339,屏幕输出结果为:,屏幕输出结果为:4 2 3 3 9【提示】巧妙使用【提示】巧妙使用 / 和和 % 两种运算符。两种运算符。劫锁谨缕办钱拉勺试掂路烤倡妆翅炔顶嗡喷酗帘只熊撬矿桐扒僵该讯栈祭顺序结构程序设计顺序结构程序设计

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号