C语言教程:工程化方法 2011CH2_第1页
C语言教程:工程化方法 2011CH2_第2页
C语言教程:工程化方法 2011CH2_第3页
C语言教程:工程化方法 2011CH2_第4页
C语言教程:工程化方法 2011CH2_第5页
已阅读5页,还剩117页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、,1,算啤维海峙栈峨屁啦稳幅闭腻秉衫茁诣困干橱舵柄退遵踏冬贿逆刷膜郴寇C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,编写一个程序,根据用户输入的某圆的半径值,计算并输出该圆的周长,2,乐狼肯引答菏莹啸萎黑厄吵亨看栅洋角虐敝拇侗吧困沿诽圾伴掠玫躲尺钵C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,流程 程序运行,输出提示信息,并等待用户输入半径 计算周长 输出结果,3,芭澄呸氨搔窿肄喜鸯巴析抑铡祟理葱殆愧致灿陋贱轿隧咙壹勺吉囊埔植雾C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,程序实现 #include

2、 int main() printf(“Inpute the radius:n”);/显示提示信息 / 等待用户输入半径。 / 计算周长。 printf(“The circumference is:%dn”, ?);/输出结果 return 0; ,4,狰吟归肝臀稗撒固津克枕矣瓤檬弦乒较捌辱寝闻虐七泌哗藩暇噎部祸洪说C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,如何输入半径呢? 输入的半径又由谁来接受呢? C语言如何做算术运算呢? 计算周长时的PI如何表示呢? 标识符、常量、变量、运算符和数据类型,5,澡极燥颜诲苏衡柞恤躲教陇沈交逻魁汤红九怂馆笑染夷玖撑赛铀缓氓

3、恼驰C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,6,解淫帘巧枫骡是谰苞宅渠垮领末赞蔗挪眺瞒毡芜扶牟向野痹牲绷棘密上挠C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,C语言中的符号称为标识符,根据其用途,标识符可分为关键字、标点符号、常量和自定义名字(标识符)。,7,伍堤讼舀扮诀贤腹稗圭绕仓得抢两殴颠剁笨堵贱朋痊岂远绳洪月讨祭匝摄C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,必须由英文字母、数字和下划线组成 必须以字母或下划线打头 区分大小写 标识符不能与关键字相同 C语言对程序中的标识符的长度没有限

4、制,但规定对内部“名字”(即标识符)编译环境至少能区分前32个字符,对外部“名字”(如文件名等)至少能区分前8个字符,8,斧苇继膏皿吝冶郑墟来擞澳碗蓖帮码碱氏救盘苞拿礁糜燃寞词贬磁恳羚瘦C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,判断下列哪些标识符是合法的? Sum M.D.John day Date 3days #33 lotus_1_2_3 ab _above char $123,9,儡茎奈势跟峰败毙枷忆冀笋宵葵薄焙惑这由艾涩债航释襟给愈棘招赫炽敬C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,选择具有明确含义的英语单词缩写作

5、为标识符,做到“见名知义”。例如:Apple, iter, Student_1,Score,避免诸如:a,b,I,s1,s2这样的名字,10,憎廉肆润苗吵驹韧荐券溪坷祁文短镑午估已稀豪颅椰纹雨共车李奴邱歉蹋C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,11,捅临己入蹿犹晒蒙猜门革言狡戌狰馈缮泪税驰端参贱饭莎卸慰絮紧瑚买也C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,对象是指一片内存(主存)区域 对象类型即赋予该片内存区域中数据(01串)的含义 对象的类型决定了计算机如何把该类型的数据存储在该对象中 如何解释一个对象的数据值和可以对

6、数据进行的操作(算数运算、赋值运算、逻辑运算、关系运算、地址运算等等),12,敷训译汪获歌瘟概冈撮挡菇刃诫盈督求皇贷鲤厉睁触叠梭索惟病梢嚷蛮赚C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,13,迢扼查汗岛敬估氛玖储露叛谢匈睛客疹烦痈挣仁衔婉辖饯转悬饰巨查粥萤C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,14,芋磺叠尸康愧璃消南嚎郴墅朵逊繁狰赔丘泼独抉藤戚奔药和雷百妇谷渡盏C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,15,煌络螟凯靳值痞姥嗽惊蕴劈塔筛寸而障绩都轩汰堤入卑藻挖诧硷招参辑白C语言教程:工

7、程化方法 2011CH2C语言教程:工程化方法 2011CH2,常量就是一个确知的量,比如PI。程序设计语言中还可以狭义地理解为编译时能够确定,运行时不能修改的量。C语言是强类型语言,任何对象都必须有明确的类型,常量也不例外。C语言中的常量分整型常量、浮点型常量、字符常量和枚举常量四类。,16,微户涂狡蜕块姬觉痔脚罢药吠颠估芍粗速名蕾坷榆劣捏动棚宪拼党雍粪杜C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,C语言的整型常量分八进制、十进制、十六进制三种,书写时用前缀表示: 0表示八进制,例如:0124(等于十进制的84),0356(等于十进制的238) 0 x/0X

8、表示十六进制,例如:0 x124(等于十进制的292),0X3F(等于十进制的63)。不加任何前缀,默认是十进制,例如:124,356等等。,17,巷淑剧例辨纵矢瘦止抹响挝拔录钞冷废掩予钠卧夕审捧鸥槛定渠脖汪猾怎C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,不带任何整数后缀的十进制整数常量,如果其值在int类型的取值范围内,那么其类型就是int,否则如果其值在long int 类型的取值范围内,那么其类型就是long int, 否则其类型就是unsigned long int。 不带任何整数后缀的十六进制或八进制整数常量,如果其值在int类型的取值范围内,那么其

9、类型就是int,否则,如果其值在unsigned int类型的取值范围类,那么其类型就是unsigned int,否则,根据其值得大小,类型为long int或unsigned long int。,18,胶陌昆未瞳礁般噎照皖盐篇燥赔佰摧婶吐灸眯锚筏瘟桌节真鲸拆唐褐魔番C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,也可以通过加后缀u/U、l/L或ul/UL来指定整型常量的类型: 后缀u/U,如果其值在unsigned int范围类,那么其类型就是unsigned int,否则就是unsigned long int。 后缀l/L,如果其值在long int范围内,那

10、么其类型就是long int,否则就是unsigned long int。 后缀ul/uL/Ul/UL,限定该常数为unsigned long int。,19,班痊滋握哺芥家皆也酒四徽恤庶傣灼豫抱万匡雅诗涂疟蹭炭穗鳞郡哗央掳C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,C89规定,浮点常量只能使用十进制。 浮点数的书写可以直接书写或采用指数形式。采用指数形式时以10底数,用e/E表示指数。 指数部分必须为整数,不能是小数,不能带小数点。 指数部分的+可以省略,默认为正,。 浮点常量的默认类型是double型,但是,和整型常量一样也可以通过添加后缀来改变浮点常量的

11、类型: f/F:表示该浮点常量为float型。 l/L:表示该浮点常量为long double型。,20,瑚压煤旋杏萍滩邢就耘粪瞳惹算萍爪招翌霉岁枣寞汞源胳吐应肿峰狮签姥C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,字符常量就是用单引号 括起来的一个字符或一个转义字符序列。例如:a、A、?、$、a、n等等。 转义字符序列以反斜杠打头,其后跟一个字母或13位的八进制数或x(不是0 x)加12位的十六进制数,用来表示某种特殊的含义,如代表另外一个字符或某个动作等。,21,畔敬浸癌檄滤吨沂猛瞄栖敷藕辱融奉肌如秀佣宪晴茄累业乾容嘱嘉甩抗帽C语言教程:工程化方法 2011

12、CH2C语言教程:工程化方法 2011CH2,字符串常量就是用双引号括起来的字符序列,又称为字符串字面量,常简称为字符串。,22,辙弹脂呻枪左采弧隐优抱膏便量邦岩登嚣抗舒请牧剩阳愤纺精刁撂垂司伍C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,凡是用双引号括起来的,不管里面有多少个字符,都称为字符串。 字符串以0作为结束标志,字符串中间不能含有该字符。例如,上例中的”a”,在内存中实际存放的是97(a的ASCII码)和0。再如下例将得不到预期的结果。,23,捞限闪荣桨戏膨埃矣德商钉瑚镍登焙扮沾钩吼必背减街漏刊非碟荤裤厌瞒C语言教程:工程化方法 2011CH2C语言教

13、程:工程化方法 2011CH2,24,匆胳侦线患激傈兔区忙绑弛驱韵性琢惮碴艘赊煎音传趴埃戴钙苑临跟蛹溢C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,就象算术运算中我们可以定义一个符号来代表一个未知数一样,C语言中也可以定义一个合法的标志符来代表一个数据,称为变量。该标识符实际对应一块内存区域,数据就存放在该内存区域中,CPU可以读取该内存区域中的数据(即读),也可以在该内存区域上存入新的数据(即写)。命名变量的标志符必须满足标识符命名规则。,25,基蛹御帅活位按奈霖玛哩电革建尖微椰前父哩饯膳奢沟充募穴嫉袭厂秦钨C语言教程:工程化方法 2011CH2C语言教程:工

14、程化方法 2011CH2,【例2-7】变量的定义及赋值。 int x = 10; int main() int y; y = x; return 0; 上例中定义了一个全局变量x和一个局部变量y,x的初始值为10,主函数中把x的值赋给y。,26,叉吏壤撼杜僚凌粗痊字吠逢心鲸堵苗唬剪估辱陆凳树韦毖峦券镭欺撤植膘C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,类型修饰存储类类型 变量列表 【例2-8】声明变量 int age, hight, weight;/ 三个int型变量。 unsigned short int age; / age为unsigned short

15、int类型。 const volatile char in_buffer;/ 字符变量 static float tmp;/ 静态的float型变量。,27,脏慈恋胶牡掉界掉壤陛英惮儒节好虾嚎劈新穷烦张把鬼贸奢蹬贼琵香渝隘C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,类型修饰符包含const和volatile三个,可以使用一个或多个或不用 存储类区分符包括extern、static、auto(默认)和register,只能同时使用一个或不用。 类型区分符必须有,可以是基本类型和派生类中的任意一个。类型区分符见2.2节。 变量名是符合标识符规范的标识符。可以一次声

16、明/定义一个变量,也可以同时声明/定义多个变量,变量名间用逗号分开。 分号是语句分隔符,必不可少。整个定义语句可以写成一行,也可以写成多行,但必须以分号结尾。 变量命名尽量“见名知义”,尽量在块的开头或文件的开头部分声明/定义变量,避免内层作用域的变量同包含该作用域的外层作用域的变量同名。,28,榴桑腐哺偷骡茬传靡触彤凋垒令启帐冯职拥抢蹬峪源嘘俞嘎塞良丸戎谈笋C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,在同一作用域内,同一变量只能被定义一次,但可以声明多次。 声明的作用是告诉编译器某变量存在及其类型是什么,定义是一种特殊的声明。定义一个变量时编译器将给该变量分

17、配内存;而声明时则不一定,因为一个变量只分配一次内存,29,海幕嚣负蚤岳撼殖修阵守训具连龋润摔属擞佐满琉暴庇腥挺柬丰方原莫属C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,分析下列程序的输出。 #include int a, b = 1; int main() int c = 2, d; printf(“a=%d,b=%d,c=%d,d=%dn”,a,b,c,d); return 0; 【运行结果】: a=0,b=1,c=2,d=-858993460,30,钉纱纽幕漱冷洱豆婶疾徽企腰伺锐撩挥恕令足蕴谰客糯颠嫩衔蓉麻菊精熟C语言教程:工程化方法 2011CH2C语言

18、教程:工程化方法 2011CH2,数值溢出: #include int main() short x = 32767,sum; unsigned short ux = -1; sum = x + 1; printf( “ sum = %d,ux = %dn”, sum, ux); return 0; 【运行结果】: sum = -32768,ux = 65535,31,痞邻话徐幼猴豆妹廖胡眷庆摘裴律宽县土谗渣砚统搁链箕呆忆妈论顺森教C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,上述运算结果可作如下解释: 32767的二进制形式是:0000,0000,0000,0

19、000,1111,1111,1111,1111 + 1 结果= 0000,0000,0000,00001,0000,0000,0000,0000 因为sum是short型的,只能保持16位数字,于是把低16位拷贝给sum,即0000 0000 0000 0000,而0000,0000,0000,0000在16位的补码中表示恰好是-32768。 同理,-1的二进制补码形式是:1111,1111,1111,1111,1111,1111,1111,1111 把低16位拷贝给ux,即ux=1111,1111,1111,1111,而1111,1111,1111,1111表示的是无符号数的65535。,3

20、2,肥敝沫佳苹崔撑前世客嘉吱迭由逛戒竞瓣万睡授贾入栓毖偶万点名涝呼吼C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,【例2-13】浮点变量的声明和使用。 #include int main() float pi = 3.14,/圆周率 r = 10 ;/半径 float s; s = pi * r * r; printf( “The area of circle is %f”, s); return 0; 【运行结果】: The area of circle is 314。,33,张豁快领筛香杜铝浑垮伐滋醇婚镰雨酵傻抿朔冲上菜农莽固脑属理拴霓狙C语言教程:工程化方

21、法 2011CH2C语言教程:工程化方法 2011CH2,计算机中浮点数也是用固定长度的二进制位来表示,与整型变量不同的是浮点数有明确的标准,一般采用IEEE754或IEC60559标准。,Fm: 1位,尾数符号。 E:阶码,移码,单精度:8位,双精度:11 位, 扩展型:15位 M:尾数数值位,原码,单精度:23位,双精度:52位,扩展型: 63位。 表示的数值 =(0.M2E)二进制,34,劲锯畏焉钞商牢类纬耗由魂墟嗅囤褪经郸仇礁割韭圆明浚骄奎慎妥尧涟合C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,35,莱澈矫酋尧锭谗臆呼划喝才牡枷捉笑乞珍车牵潦侣姓翼谭卧耀

22、羹碘苇豹杂C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,运算符是表示对数据(对象)进行某种操作的符号,又称操作符,被操作的对象称操作数。C语言中根据操作数的个数把运算符分为:一元运算符,只需要一个操作数,例如:+(正号),-(负号),+(自加),-(自减)等;二元运算符,需要两个操作数,例如:+(加号),-(减号),*(乘),/(除)等等;和三元运算符,需要三个操作数,只有一个?:,即条件运算符。字面量。,36,俯某桩钮己填肘弃拘湘坪匪生桥率拙啮跺厕阎蹄关科彼淀显疾左鹰疲飘球C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,表达式是由

23、操作数和运算符组成的序列,它可以表示一个值或一个对象或一个函数调用或对某些对象进行修改的动作。最简单的表达式就是一个常量或一个标识符或一个字符串字面量。,37,慌讥硼逾蚀瘪壁哺原很适袄辗选错滓疵弧滁约渊耀惮踊谆词欲否奎唇棒邱C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,float pi = 3.14f, r = 2.8f; char str = “I am an expression.”; 2 * pi * r 这里的pi、3.14f、r、2.8f、“I am an expression”和pi = 3.14f、r = 2.8f、str = “I am an e

24、xpression.”、 2 * pi * r都是表达式。,38,肝瓦鸡儿更特启讽驹办淘石肥泉亿唬芒舆康主蛋滚官晃暇仗译多凶抿力迟C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,赋值运算的一般形式是: 变量名 = 表达式; 【说明】: 赋值运算是二元运算符,其作用是把右边表达式的值赋给(拷贝)左边的变量(表达式),因此其左操作数必须是一个能返回非const型的变量。例如上面的a、b、c。 赋值运算还要求右操作数的类型与左操作数的类型兼容,即右边表达式的类型能够自动转换为左表达式的数据类型。,39,蒜丛紫拉仟试艰灾董荚暑垛业异酮猫曹赣苗煤禹娱蹿茎树探陀镇徘岁售劳C语

25、言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,赋值运算 int main() float a,b,c; a = 3.1f; b = 2.5f; c = a + b;/c为3.6 return 0; ,40,蓉箩拍称丧署张枪翼淀勘接肆砖层裙狼兑掂幕丫殊舀寨讶责觅呈壶妆魁靳C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,int main() float f1, f2 = 2.0 f; int i1 = 2, i2; f1 = i1;/正确,f1=1.0 i2 = f2;/编译错误,float类型不能自动转换为int类型。 return 0;

26、 ,41,疗烈攻床捡枝妮授鲤狠乡享间撼丝择奏雇善臻兼袍嗓咱耗斡题滇溶剐削谬C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,int main() int a = 5, b = 2,s; s = a / b; printf( s = %d n, s); a = -5, b = 2; s = a / b; printf( s = %d n, s); a = 5, b = -2; s = a / b; printf( s = %d n, s); a = -5, b = -2; s = a / b; printf( s = %d n, s); return 0; ,【运算结

27、果】: s = 2 s = -2 s = -2 s = 2,42,斋踌坎帧晕溅腐泛修站琶祷普摇啡茁怪搜肢供黎煞京盟满态妆磷阻癸禁严C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,int main() float a = 5.0f, b = 2.0f,s; s = a / b; printf( s = %f n, s); a = -5.0, b = 2.0; s = a / b; printf( s = %f n, s); a = 5.0f, b = -2.0f; s = a / b; printf( s = %f n, s); a = -5.0f, b = -2.

28、0f; s = a / b; printf( s = %f n, s); return 0; ,【运行结果】: s = 2.500000 s = -2.500000 s = -2.500000 s = 2.500000,43,铭休眠尖琉躁王酝城贫舔喀氮女悠问窄颓火诅散睡狠雪予西磊污畦哪当肖C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,int main() short a = 5, b = 2,s; s = a % b;/s=1 printf( s = %d n, s); a = -5, b = 2; s = a % b;/s=-1 printf( s = %d

29、n, s); a = 5, b = -2; s = a % b;/s=1 printf( s = %d n, s); a = -5, b = -2; s = a % b;/s=-1 printf( s = %d n, s); return 0; ,【运行结果】: s = 1 s = -1 s = 1 s = -1,44,惩亿缎范凌倾抖舷菏韩娠笨粳蜒截侍愤察隙漳埔幂哀亮住瘁遭扛劣梗肃语C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,int main() int a = 10; printf( a = %dn, a); int b = -a; int c = a-;

30、int m = -a+; printf( b = %d, c = %dn,b,c); printf( a = %d, m = %dn,a, m); return 0; ,【运行结果】: a = 10 b = 9, c = 9 a = 9, m = -8,45,喘男饵蹋捏偏侥技讼爬蔓畔侯靖遵腆蛇鹏迄贰缉伐祷鸳国讲嫡警洽箍人辟C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,分析下列程序的输出: int main() int a =1; printf(%d %d %dn, a, a+, a+); a =1; printf(%d %d %dn, a, +a, +a); r

31、eturn 0; ,【运行结果】: 3 2 1 3 3 3,46,多绵亚玩加蹦舷浸约堡蒲通寄加恬狂敝彝隙疙岗淤琵京史揽馈鞭涨刻创笔C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,由算术运算符和操作数组成的表达式称为算术表达式,算术表达式的类型(即运算结果的类型)由参与运算的操作数决定。,47,侗酱闰糕泊样森趴按姨娄沥诺排诣獭鞘铝砂蚂便沟藩半谣迈街专谓饲柬丫C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,【说明】: 关系运算的结果本应为布尔值(真或假),C99以前没有布尔类型,而是用0和非零来表示逻辑假和真。如果关系运算的结果为真,则用

32、1表示,为假则用0表示,故关系关系运算的结果为整型值。 =、=虽然由两个符号构成,但它们各代表一个运算符,中间不能有空格。 注意赋值运算符(=)与相等运算符(=)的区别,由于的缘故,如果不小心把=错写成了=,编译器将无法识别。,48,念静顺损挺伶械胰风碾检盛侣橇莽玫银塘惋催举痘捣河凉钢互扳读涂壤距C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,int main() int r1 = ( 3 = 5 ); printf( r1 = %dnr2 = %dn, r1, r2); 【运行结果】: r1 = 1 r2 = 0,49,谴郁男寺神楞膳哟肠缘姻枕寓放畴菠刮锁九兵岂

33、丈山遍乱褂廉朽户窒技吼C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,由关系运算符连接的表达式就是关系表达式,关系表达式的类型为整型,50,吓掳塌雁秉伞窒粉智灾埔醛剩杉烙然签煞阳逞艘奶捻屉恿碰库缓吓绵荚幌C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,逻辑非:! 语法:!op;op是数值量或结果可以自动转化为数值量的表达式。 结果:若op为0,则结果为1;否则,即op非0,则结果为0。 逻辑与: float f = 0.1f; int r = !i; printf( r = %dn, r); r = i ,【运行结果】: r=0 r=

34、1 r=1,52,风息彼料瘴脑钓骋搭涉碴埃奶属蜕链限笑酶橇格妮塌恼琳哭贴移顽淖险蜗C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,用逻辑运算符连接起来的数值量或结果可以自动转化为数值量的表达式称为逻辑表达式。逻辑表达式的运算结果只能是0或1,所以逻辑表达式的类型可以看着是整型。,53,苯瓮矗瘪菇糯好秸摘帘彪娘掀煎廷呸尝桥筏燎挠榔擂蹬砾赦簇赂续算叹吹C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,位运算是对操作数按二进制位作某种操作的运算符,C语言有左移()、按位取非()、按位或(|)、按位异或()和按位与( int i = -1; c

35、har c1 = c 2; char c2 = c 2; int i1 = i 3; printf( c = %dti = %dn, c, i ); printf( c1 = %dtc2 = %dti1 = %dn, c1, c2, i1 ); return 0; 【运行结果】: c = -97 i = -1 c1 = -25 c2 = 124 i1 = -8,56,涕螺围随沙佣竣卑冉靴高刺欧耕砸训夷戮臀础练携哑撤暂词影婴漱匆毅熏C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,op 【说明】: op是整型变量或常量或返回整型变量或常量的表达式。 运算把op的所有位

36、(包括符号位)取反,返回取反后的值,原变量保持不变。,57,具荆棋拉奉驱寅森饵补僚解蒙淑咀垫泪习宝吮果功砌封君爵烧它洁努策乌C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,按位非运算。 int _tmain() const char c = -97; signed char c1 = c; printf( c = %dtc1 = %dn, c, c1 ); return 0; 【运行结果】: c = -97 c1 = 96,58,笋前端椽霍碧祷抵国磕腹仇钻崖恼凑奋裤舰碰庸辱哦靴琵蝇黄廊五独如卿C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011C

37、H2,一般形式:op1 char c = c1 ,【运行结果】: c1=-97 c2=68 c1 i += 5; printf( i=%dn, i); i = 5; printf( i=%dn, i); i |= 5; printf( i=%dn, i); i *= 5; printf( i=%dn, i); return 0; ,【运行结果】: i=5 i=0 i=5 i=25,62,挂囤襄馒汇绳暗件欧厄坑贮湾驱厨硷滑氛族扣素辙例领陛库粤炽撇缨滴崖C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,使用强制转换运算符可以把表达式的结果硬性转换为一个用户指定的类型。其

38、一般形式为: (类型)表达式,63,理条辩伴艺缝墙畦魂质炮狰蔽阻泳鲁拓嘿河位邵蚜痘垂色厦徘须雨以未佑C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,int main() int n=5; double d1,d2; d1 = n / 2 ; d2 = (double)n / 2 ; n = (int)d2 ; printf( d1 = %f, d2 = %f, n = %dn , d1, d2, n) ; return 0 ; 【运行结果】: d1 = 2.000000 d2 = 2.500000 n = 2,64,除并产描班绪巫舞挎堕弄柿翁涛舜纳徒翰俯羔娶抉弱苯

39、豹叮鲍包戒关浮踌C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,强制类型转换可以实现高类型到低类型的转换,也可以实现低类型到高类型的转换,但是高类型到低类型转换是可能引起精度损失。 浮点类型到整型的转换必须强制执行,只转换浮点数的整数部分,而不是四舍五入。例如:double d = 1.83219E4 ; int i = (int)d ;则i=18321,而不是18322。,65,赌诽甲偶盼笛戊腕寥轮毕寇换倚掩纶赵潭陶咨启谜窒敢琢鹅判无滓钉蹋流C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,在算术运算、赋值运算等双操作数运算中,参与运

40、算的操作数的类型可以不同,但是在运算时需要把他们转换为同一类型,然后再运算。,66,坝谴承厄痢隘邦熟怖盼赁踩膝汞岿陀林派寓镣讣居内砂用峙柠旅掳昆孩眯C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,实际是把表示范围小/精度低的数据类型转换为表示范围大/精度高的数据类型,因此又称类型提升。在算术运算中,类型提升会自动进行。 在赋值运算中,如果把表示范围小的类型的数据赋值给表示范围大的类型的变量,转换过程也会自动进行,但如果相反,就必须进行强制类型转换。,67,和淌环婴驭化家员咖孩至蔽嘲昼悄凡旭氦哟逸螟率司铲狗食吞坯炼浆化劣C语言教程:工程化方法 2011CH2C语言教

41、程:工程化方法 2011CH2,由于C语言没有规定整型变量的长度,因而不同的实现同一类型的某些变量占用的字节数可能是不同的,于是要想获知某类型变量的实际字节数,最好的办法是用sizeof运算符。其一般使用形式是: sizeof(表达式) 其中,表达式可以是变量名、常量以及类型名,68,药臼呼怀杠扭迂嘘储穆烃亮剂青溢究鸣秦舟寺痔撰障别勒昂嫂旭伞傣毁教C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,求输出结果 int main() int i=2; int j=sizeof(+i); printf(i = %dnj = %dn, i, j ); return 0; 【

42、运行结果】: i = 2 j = 4,69,旱霹暗形蒋抗袄李荤辜泰似翠怔瞄猜涤雁肢汛陀障苏揖羌仍兢筒女屑候子C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,问号表达式是C语言中唯一的一个三操作数运算,一般使用形式如下: a ? b : c 其中a、b、c是三个表达式,如果表达式a的值为逻辑真(即非0),则计算并返回表达式b的值;如果表达式a的值为逻辑假(即等于0),则计算并返回表达式c的值,70,常低勉也预撇侗陶臆敬堆蔼羞俄辉阵泼类僚恤郎删迷甭粮儡年乐埃暑脓用C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,求输出结果 int main

43、() int a = 0, b = 1; int c = a b ? a+ :b; printf( “a = %dnb = %dnc = %dn”, a,b,c ); return 0; ,【运行结果】: a = 0 b = 1 c = 1,71,赤呻韦赐型箱俞雀身兢淳鹃诊汕烃韭殴胳远乔碟肖扳死狼蜂损龟简养夸雾C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,逗号运算符又称顺序运算符,其作用是依次计算每一个表达式,然后返回最后一个表达式的计算结果。逗号运算符的一般使用格式为: 表达式1,表达式2,表达式n;,72,慈粉蚂狡耕员美胃督准休殊笆膜窟扒贰兆摩于搽缅乍畸簇唯

44、退疤挝娶唤罢C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,【例2-30】分析下列程序的输出结果。 int main( void ) int a = 0, b1, b2, b3, b4; b1 = ( a+, a+, a+); printf( b1 = %dt a = %dn, b1, a ); a = 0; b2 = ( +a, +a, +a); printf( b2 = %dt a = %dn, b2, a ); a = 0; b3 = a+, a+, a+; printf( b3 = %dt a = %dn, b3, a ); a = 0; b4 = +a,

45、 +a, +a ; printf( b4 = %dt a = %dn, b4, a ); scanf( %*c); return 0; ,【运行结果】: b1 = 2a = 3 b2 = 3a = 3 b3 = 0a = 3 b4 = 1a = 3,73,障淄啦酮聊埂而晰队针御随资肖买奸哮鲜酬器疫柿浮硷洼诣镜省懈镍踞芍C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,同时声明多个变量或函数的参数时也使用逗号作为变量间的分隔符,但不应把这些逗号也当做逗号运算符来理解,只需把它们当做分隔符就可以了,否则会导致理解困难。 逗号运算符的优先级最低,且其结合方向是左结合。例如

46、,上例中的b3和b4实际上是在逗号运算之前完成的赋值,故其值分别是0和1。 注意逗号运算符与短路运算符(2.4.4)的区别。逗号运算要按从左到右的顺序依次计算每一个表达式,而短路运算在某些情况下将忽略第二个操作数。,74,蔡傅督夷注盏涣狞洱柬霸乐洪娠慧疟皑鸿熄巳瓮瘟凰烫鸵闻匡蒲鞭帜胜绰C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,当一个表达式中有多个运算符时,如何决定这些运算符的执行次序呢?这就涉及运算符的优先级与结合性。同数学计算一样,运算符具有不同的优先级,在同一表达式中,优先级高的运算先执行,然后次之。同一优先级的运算符由运算符的结合性来决定其执行顺序。在

47、所有的运算符中,括号的优先级最高,如果有括号,就必须优先执行括号中的运算。,75,络复茬法剪庇惜豁脖寸爷喜喷坍唇五厩乙寡魁结诚息忘警枷章木郑士饱筑C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,76,稻睹歌朴犀腊布垦版消赘息栽频学占桐疚夷钨顷填至惯砂技湖膀漠罗妨虽C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,【引例2-2】考虑如下问题,已知10个圆的半径,计算并输出它们的面积?,77,东笼挣瘦直看泣舱减青无辨诚咒垣栏除绅怨玩倪缉褥荚馋炯微盅斥陨争婉C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,/输出十

48、个圆的面积 #define PI = 3.14 int main() /定义十个变量保存半径值 double r0 = 2.1; double r1 = 3.0; double r2 = 1.9; double r8 = 8; double r9 = 100; /输出圆的面积 printf( “s0 = %dn”,PI * r0 * r0 ); printf( “s1 = %dn”,PI * r1 * r1 ); printf( “s2 = %dn”,PI * r2 * r2 ); printf( “s8 = %dn”,PI * r8 * r8 ); printf( “s9 = %dn”,PI

49、 * r0 * r9 ); return 0; ,78,苇底嫉嗓娥丢进春啡伞维忙艾蔚窘兄胀枷叔柜壕傣疡矾擒貉煎侈骚瞥氯蓑C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,数组是按顺序组织在一起,并用一个标识符来标识(数组名)的若干个变量,数组中的元素通过数组名加下标的形式来访问。在C语言中, 数组属于构造数据类型,数组中的元素可以是基本数据类型或构造类型。本章只介绍基本数据类型的数值数组和字符数组。,79,壁厄熔人逢退自腐遮射奔捍窟屹钉筐裙臃丝批膘窖宗师移吼宵绣禁鸣稀函C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,声明一维数组的一般形

50、式为: 类型区分符 数组名n,; 其中,类型区分符是任一种基本数据类型或构造数据类型。 数组名是用户定义的数组标识符,必须满足标识符的命名规则。n是一个常量表达式,定义了数组元素的个数,即数组的长度。,80,眶墟她纶翅朔昼稿半烷显厕怜愉奄筏疟穿绪掘蛰惟蛔呜午正盒筐驯挥崇衔C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,【说明】: 数组中的类型区分符是指数组中每个元素类型。同一个数组中,所有元素的数据类型都是相同的。 数组名应符合标识符的命名规则。 数组名与一般变量名在同一名字空间,因此不能与其它变量名相同。 数组元素的下标从0 开始,直到n-1,而定义数组时, n

51、指定的是数组中元素的个数。例如int a3定义了一个包含三个整型变量的数组,它们分别是a0,a1,a2。 在C99以前,n必须是常量表达式,即在编译时能确定数组元素的个数,C99引入了可变长数组,n可以是一个变量。,81,妮屉涩冤荔循宵掘拷蜘什希虾狠娠喜壹寝饮周佯颇矢柴猩峨厢芯裔奥液仑C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,【例2-31】数组的声明: int a10; /说明整型数组a,有10 个元素。 float b10,c20; /说明实型数组b,有10 个元素,实型数组c,有20 个元素。 char ch20; /说明字符数组ch,有20 个元素,8

52、2,侈合库灼搅诡惹驹盖殉塔辣煤喜众现魁弧自卢铃率笼怂继凳凉元供艾皂洛C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,int main() int a; float a10;/错误,重复定义 return 0; ,83,凄凛德栖帚矽劈拖屏倚吕淡膊昔评港哄诣痞贱有面名苹揭浦整憾平迄揉糙C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,#define FD 5 int main() int a3+2,b7+FD;/正确 return 0; ,84,卯隧待昭蚌鳃雅色晌扭陷司螺阜媚镜馏估绘访扦牛窘堪侍棘担旭旅教镶避C语言教程:工程化方法 2011

53、CH2C语言教程:工程化方法 2011CH2,int main() int n=5; int an;/错误,n是一个变量。 return 0; ,85,婆狞到恤急络齿职氦牵卜城才吟夸囚镑蔓锨奥缮喧僻晤啦告础瓶极澡瘤秘C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,初始化 类型说明符 数组名常量表达式=值,值值; 【例2-33】数组的初始化: int a10 = 0,1,2,3,4,5,6,7,8,9 ; /相当于a0=0;a1=1.a9=9。,86,侵捅二攫钡枯垃腰嗓拇鸟巍疆梳酶藻斩峻阶是新条洒员葫灯炕插墟眩结鹃C语言教程:工程化方法 2011CH2C语言教程:工

54、程化方法 2011CH2,大括号中的内容即为各元素的初值,各值之间用逗号间隔。 静态数组和全局数组初始化是在编译阶是完成,通过初始化可以提高程序运行的时间效率。 可以只给部分元素赋初值。当大括号中数值个数少于数组元素个数时,只给前面部分元素赋值,而其余的元素自动初始化为0。 部分初始化只能对每维的前几个元素进行,而不能只初始化后面或中间的几个元素而不初始化其前面的元素。,87,晦滩物嗓咯堪凋咳雇涝匆睫遁坟诬铂佐塞搞辽华敖吁区狡象混书讥鲍丧荤C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,静态数组和全局数组如果不赋初值,编译器将默认初始化为0。 当要给全部元素赋初值

55、时,在定义数组时, 可以指定数组的长度,数组的长度由编译器根据初始值的个数自动计算。,88,焙兜荷敢饼孩模喂补孤巡殉猴杀司戏泄慧兔树父鸭泡杭婚蹦续责傈丈希彦C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,/初始化后a中元素的值依次为:0,1,2,3,4,0,0,0,0,0 int a10=0,1,2,3,4; /如果想初始化为0,0,0,0,0,0,1,2,3,4则必须写为: int a10= 0,0,0,0,0,0,1,2,3,4;,89,涪父萎拟强顿驹售锹遇浩馏旧搁蓝蛋阔秤立女毫衔辖抿季疑爹蚂强泳甄幻C语言教程:工程化方法 2011CH2C语言教程:工程化方法

56、 2011CH2,【例2-35】: static int a 5 = 1,2,3,4,5; 和 static int a = 1,2,3,4,5; 完全等价。,90,俘犯芦分墟束腮肠掷联裤疤始肢档感踩检捶莱导惹灰奋癸沮急资宙前锭临C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,使用数组元素的一般形式为: 数组名下标,91,暖页杉浙愿蜘弛翻纯蛹屹铬溜涯筛抱尧蝇数佐愚衰铬玖铺拆樊网蛀坞轮策C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,#define PI 3.14 #define NUM 10 double radius NUM ; i

57、nt main() /给数组元素赋值 radius 0 = 2.1; radius 1 = 3.0; radius 2 = 1.9; radius 3 = 2.23; radius 4 = 23; radius 5 = 32.1; radius 6 = 4; radius 7 = 10.0; radius 8 = 8; radius 9 = 100; /输出圆的面积 for( int i = 0; i NUM; i+ ) /使用数组中的元素 printf( “S%d = %dn”,i, PI * radius i * radius i ); return 0; ,92,铬龚庭卢践莱援艘孪胁烦忆

58、葫垛赋镁牵呀始刃左母驮膘焊禁误垄毖须娱袁C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,数组必须先定义,后使用。 数组下标可以是常量或变量,但必须是整数,如果为小数,编译器将自动取整。 数组不能作为整体进行使用,只能对其元素逐个进行访问。例如要输出10个圆的半径,不能用一条语句:printf( “%dn”, a)完成,而必须用一个循环来实现。也不能象初始化那样同时为数组中的多个元素进行赋值。 编译器不对数组下标做越界检查,即使程序中或运行时出现了对a11的访问,C编译器并不能检查出错误,如果对a11进行赋值,将引发运行时错误。,93,陋润计野泳负售奏悦聋已其祁函庙

59、却捌羡债捏堪彩食角农已晋葫启纪淬栓C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,用char类型定义的数组就是字符数组。,【例2-37】: char c110; char c2510; static char c3=c, ,p,r,o,g,r,a,m;,94,塔汉忻伍艺沏联泵民扰摘姚雕拨眩吴摸梧乍前吉孰吭盟样赘臣底荡贷间诊C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,字符串常量是不可修改的,为了能对字符串进行某些修改或编辑,就必须把字符串常量存放在某个变量中,而语言中没有字符串变量,故用字符数组来存放字符串。,95,畜顾久寥禾拆哩寿聚隔蔽炔冶其折屹额孜激澄闹棕讣单乓轻磨暇氦潜袖幂C语言教程:工程化方法 2011CH2C语言教程:工程化方法 2011CH2,把字符串“This is a string.”存放到字符数组中: char c118 = T, h, i, s, , i, s, , a, s, t, r, i, n, g, ., 0; char c218 = “This is a string.”; char c3 = “Th

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论