计算机C-C语言编程结构化程序的开发课件.ppt

上传人:牧羊曲112 文档编号:4084534 上传时间:2023-04-03 格式:PPT 页数:47 大小:247KB
返回 下载 相关 举报
计算机C-C语言编程结构化程序的开发课件.ppt_第1页
第1页 / 共47页
计算机C-C语言编程结构化程序的开发课件.ppt_第2页
第2页 / 共47页
计算机C-C语言编程结构化程序的开发课件.ppt_第3页
第3页 / 共47页
计算机C-C语言编程结构化程序的开发课件.ppt_第4页
第4页 / 共47页
计算机C-C语言编程结构化程序的开发课件.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《计算机C-C语言编程结构化程序的开发课件.ppt》由会员分享,可在线阅读,更多相关《计算机C-C语言编程结构化程序的开发课件.ppt(47页珍藏版)》请在三一办公上搜索。

1、1,提纲,3.1 一些常用的转义序列3.2 再论C语言中的数据类型3.3 混合运算时各种数据类型之间的转换3.4 格式化输出3.5 赋值运算符3.6 自增和自减运算符3.7 条件运算符和逗号运算符3.8 算术运算符的优先级和结合性,2,3.1 一些常用的转义序列,转义字符:反斜杠;转义序列:反斜杠后面加上特定的一个字符;,%:打印一个百分号printf(比例是%f,percentage);,更多转义序列见C程序设计教程299页,3,main()printf(123456781234567812345678n);printf(1t12t123tHello!n);/*t的使用*/printf(tH

2、ello!n);printf(1234567890);printf(bbHello!n);/*b的使用*/printf(1234r%n);/*打印、和*/printf(“a”);/*使系统发出一声*/system(pause);return 0;,转义字符举例,1234567812345678123456781 12 123 Hello!Hello!12345678Hello!%4请按任意键继续.,4,提纲,3.1 一些常用的转移序列3.2 再论C语言中的数据类型 掌握:数据类型的种类、取值范围和格式说明符3.3 混合运算时各种数据类型之间的转换3.4 格式化输出3.5 赋值运算符3.6 自增

3、和自减运算符3.7 条件运算符和逗号运算符3.8 算术运算符的优先级和结合性,5,C语言中只有以下几种基本数据类型:char:字符型,可以存放字符集中的一个字符 int:整型 float:单精度浮点型 double:双精度浮点型此外,还有用于限定这些基本类型的类型限定符:short(限定int)、long(限定int 和double)signed和unsigned(限定char和任何整数类型),3.2 C语言中的数据类型,6,3.2 C语言中的数据类型,一、short、long限定整数类型示例:short int age;long int counter;long long int popul

4、ation;short int、long int、long long int可分别简写为short,long和 long long。如:short age;int数据一般为16位或32位,long数据一般为32位,long long 为64位。各个编译程序可以根据硬件情况自由选择int、short、long的长度,唯一限制是short和int数据至少要有16位,而long数据至少要有32位;short数据长度int数据长度 long数据长度 long long数据长度。,7,3.2 C语言中的数据类型,三、signed、unsigned限定char类型和任何整数类型 signed char、u

5、nsigned char signed short、unsigned short signed int、unsigned int signed long、unsigned long signed long long、unsigned long long,经unsigned限定的类型取值范围必须是正的或者为0。一般省略signed,如signed char通常写成char。,二、long可限定double类型 long double,8,所以,C语言支持2种不同的字符类型:signed char、unsigned char转换说明符:signed char:c unsigned char:u取值

6、范围:signed char:128127(1字节)unsigned char:0255(1字节),3.2 C语言中的两种字符类型,9,所以,C语言支持8种不同的整形:short、unsigned shortint、unsigned intlong、unsigned long long long、unsigned long long转换说明符:short:hd,unsigned short:huint:%d,unsigned int:ulong:%ld,unsigned long:lu long long:%lld unsigned long long:%llu,3.2 C语言中的八种整形类型

7、,10,取值范围和具体硬件有关。在short是16位、int和long是32位、long long是64位的机器上数值范围如下:signed short:-3276832767(16位)unsigned short:065535(16位)signed int:-2147483648 2147483647(32位)unsigned int:04294967295(32位)signed long:-2147483648 2147483647(32位)unsigned long:04294967295(32位)signed long long:(64位)-9223372036854775808922

8、3372036854775807unsigned long long:(64位)0 18446744073709551615,3.2 C语言中的八种整形类型,11,所以,C语言支持支持三种不同长度的浮点数据类型:float、double和long double。其中float一般占字节(2位)、提供位有效数字;double一般占8字节(64位)、提供1516位有效数字;long double 占12字节(96位)。转换说明符:float:fdouble:lf long double:lf,3.2 C语言中的三种浮点类型,12,3.2 C语言中的三种浮点类型,取值范围:float:-3.4*10

9、38 3.4*1038 double:-1.7*10308 1.7*10308 long double:-1.2*104932 1.2*104932,13,提纲,3.1 一些常用的转移序列3.2 再论C语言中的数据类型3.3 混合运算时各种数据类型之间的转换3.4 格式化输出3.5 赋值运算符3.6 自增和自减运算符3.7 条件运算符和逗号运算符3.8 算术运算符的优先级和结合性,14,3.3.1 隐式转换,C编译器只知道计算操作数的数据类型相同的表达式。如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。类型

10、转换分成两种:隐式转换和显式转换。隐式转换的基本原则是将低类型数据转换成高类型数据(数据类型提升)。各种类型的高低顺序如下:,15,高,低,数据类型提升的顺序,16,long doublefloat doubleunsigned long longunsigned int unsigned char、unsigned short int char、short,转换原则:1)所有char及short int 型变量转为int型,所有float转换为double。2)操作数中 较低类型数据转换成较高类型数据后再进行运算。,注意:箭头方向只表示数据类型由低向高转换,int型数据和double型数据混

11、合运算时,int型直接转换为double型,而不是转换成unsigned int型,再转换成long型、再转换成unsigned long int型,最后转换成double型。,17,类型转换实例,char ch=Q;int i=2;float f=12.34;double d=15.4;result=(ch/i)+(f*d)(f+i);,18,赋值中的类型转换,在一个赋值语句中,如果赋值运算符左侧变量的类型和右侧表达式的类型不一致,则赋值时将进行自动类型转换,将右侧表达式的值转换成左侧变量的类型。int n;char ch;float f;double d;,则执行语句“ch=n;”后,整型

12、变量的高位字节将被切掉;执行语句“n=f;”后,n只接收f的整数部分,相当于取整运算。,19,3.3.2显式转换,total/counter的运算结果是整型数;为了得到浮点值,使用类型转换运算符,形式为:(类型说明符)表达式 或者(类型说明符)(表达式),用于将表达式的运算结果类型转换为类型说明符指定的数据类型;类型转换运算(float)建立了操作数total的浮点值拷贝;存储在total值的值仍然是一个整型值;思考:下面语句的效果 average=(float)(total/counter);使用类型转换运算符将高类型数据强制转换为低类型数据时,会引起精度损失(例如浮点转换成整型)或改变数据

13、的值(例如long转换成short)。,20,提纲,3.1 一些常用的转移序列3.2 再论C语言中的数据类型3.3 混合运算时各种数据类型之间的转换3.4 格式化输出3.5 赋值运算符3.6 自增和自减运算符3.7 条件运算符和逗号运算符3.8 算术运算符的优先级和结合性,详见C程序设计教程 第9章,自学,21,1.类型转换字符d以带符号的十进制整数形式输出。可以指定输出场宽(总位数)和对齐方式(左对齐还是右对齐)。%5d:场宽为5,右对齐,左补空格。%-5d:场宽为5,左对齐,右补空格。若实际位数超出指定位数,则按实际位数输出假设有变量定义如下:int num1=123;long num2=

14、123456需要程序运行结果如下:num1=123,num1=123,num1=123,num1=123num2=123456,num2=123456,num2=123456,3.4 格式指示符,22,3.4 格式指示符,则对应的程序为:#include#includemain()int num1=123;long num2=123456;printf(num1=%d,num1=%5d,num1=%-5d,num1=%dn,num1,num1,num1,num1);printf(num2=%ld,num2=%8ld,num2=%ldn,num2,num2,num2);system(“pause

15、”);return 0;,23,2.类型转换字符f以小数形式、按系统默认的宽度,输出单精度和双精度实数。,%f:默认方式下输出小数点后6位;如:123.556000。%12f:总共占据12位(包括小数点),其中保留小数点后面6位。不足位左补零。若实际长度超出指定场宽,按实际输出。%12.2f:总共占据12位(包括小数点),其中保留小数点后面2位。不足位左补零,若超出则按实际输出。%e:总共占据13位。如:1.235560e+002,分尾数(1.235560)和指数(+002)两部分。其中尾数占据8位(包括小数点),最高位不为0,小数点后面保留6位;指数占据4位,1位是符号位。%12.2e:共占

16、12位(包括小数点和e),其中尾数保留小数点后2位。,指定输出场宽、对齐方式、小数点后位数,24,main()float f=123.556;double d1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf(%f,%12f,%12.2f,%-12.2f,%.2fn,f,f,f,f,f);printf(%e,%12e,%12.2e,%-12.2e,%.2en,f,f,f,f,f);printf(d1=%lfn,d1);/输出为d1=1111111111111.111100 printf(d2=%lfn,d2);/输

17、出为d2=2222222222222.222200 printf(d1+d2=%fn,d1+d2);printf(d1+d2=%en,d1+d2);system(pause);,2.类型转换字符f以小数形式、按系统默认的宽度,输出单精度和双精度实数。,25,程序运行结果如下:123.556000,123.556000,123.56,123.56,123.561.235560e+002,1.235560e+002,1.24e+002,1.24e+002,1.24e+002d1=1111111111111.111100d2=2222222222222.222200d1+d2=33333333333

18、33.333000d1+d2=3.333333e+012,26,main()char c=A;int i=65;printf(c=%c,%5c,%dn,c,c,c);printf(i=%d,%c,i,i);程序运行结果如下:c=A,A,65 i=65,A,3.类型转换字符c输出一个字符,在C语言中,整数可以用字符形式输出,字符数据也可以用整数形式输出。将整数用字符形式输出时,系统首先求该数与256的余数,然后将余数作为ASCII码,转换成相应的字符输出。假设i的值为65+256,则用%c输出的是A,27,提纲,3.1 一些常用的转移序列3.2 再论C语言中的数据类型3.3 混合运算时各种数据类

19、型之间的转换3.4 格式化输出3.5 赋值运算符3.6 自增和自减运算符3.7 条件运算符和逗号运算符3.8 算术运算符的优先级和结合性,28,3.5 赋值运算符,=+=、-=、*=、/=和%=c+=3等价于c=c+3;i/=(j-1)等价于i=i/(j-1);变量=变量 运算符 表达式 可写成:变量 运算符=表达式,29,提纲,3.1 一些常用的转移序列3.2 再论C语言中的数据类型3.3 混合运算时各种数据类型之间的转换3.4 格式化输出3.5 赋值运算符3.6 自增和自减运算符3.7 条件运算符和逗号运算符3.8 算术运算符的优先级和结合性,30,3.6 自加和自减运算符,+a:前置自增

20、运算符-a:前置自减运算符a+:后置自增运算符a-:后置自减运算符,编译带有自加(自减)运算符的表达式(如i+)比编译等价的展开的表达式(i=i+1)快,因为第一个表达式中的i只分析了一次,而第二个表达式中的i被分析了两次。,31,3.6 自加和自减运算符,如:以下两条语句效果相同i;i;设i当前值为5,则他以下两条语句效果不同if(i+5)/先判断i5,然后i值加1 if(+i5)/先将i值加1,然后判断i5,32,3.6 自加和自减运算符,main()int i;i=5;if(i+5)printf(i=%d,i+5 is truen,i);printf(i=%dn,i);i=5;if(+i

21、 5)printf(i=%d,+i5 is truen,i);printf(i=%dn,i);system(pause);,i=6i=6,+i5 is truei=6请按任意键继续.,判断i5,然后i值加1,i值先加1,然后判断i5,33,3.6 自加和自减运算符,main()int i;i=5;if(i+4)printf(i=%d,i+4 is truen,i);printf(i=%dn,i);i=5;if(+i 5)printf(i=%d,+i5 is truen,i);printf(i=%dn,i);system(pause);,i=6,i+4 is truei=6i=6,+i5 is

22、truei=6请按任意键继续.,将5改成4,34,3.6 自加和自减运算符,测试:y=2;n=3;nextnum=(+y+n+)*6;num=y+n;求nextnum 和num的值?,nextnum值为36,num值为7,35,自增和自减运算符的操作数只能是一个简单的变量名,而不能是常量或者表达式。5+,+(i+1)都是错误的写法!ANSI没有规定运算符操作数的计算顺序,因此如果在一条语句中将特定变量自增或自减不止一次时,程序员应该尽量避免使用自增或自减运算符。如:(i+)+(i+)+(i+)。,3.6 自加和自减运算符,36,提纲,3.1 一些常用的转移序列3.2 再论C语言中的数据类型3.

23、3 混合运算时各种数据类型之间的转换3.4 格式化输出3.5 赋值运算符3.6 自增和自减运算符3.7 条件运算符和逗号运算符3.8 算术运算符的优先级和结合性,37,条件运算符?:(C语言唯一的三目运算符)条件表达式 含有条件运算符的表达式 执行过程 先求表达式1的值,若值为非0(为真),则计算表达式2的值作为条件表达式的值;若值为0(为假),则计算表达式3的值作为条件表达式的值。,ch=(ch=A,if(ch=A,3.7 条件运算符,38,3.7 逗号运算符,逗号运算符,用于把几个表达式串在一起。逗号表达式 含有逗号运算符的表达式执行过程 逗号表达式中最右边那个表达式的值作为逗号表达式的值

24、。,y=1 0;x=(y=y-5,30/y);/运算后y的值为5,x的值为6。/逗号表达式优先级比赋值表达式低,所以必须加括号,39,提纲,3.1 一些常用的转移序列3.2 再论C语言中的数据类型3.3 混合运算时各种数据类型之间的转换3.4 格式化输出3.5 赋值运算符3.6 自增和自减运算符3.7 条件运算符和逗号运算符3.8 运算符的优先级和结合性,40,main()int a=1,b,c;printf(“-a+=%dn”,-a+);a=b=c=3;printf(“a=%d,b=%d,c=%dn”,a,b,c);a+=b+=3;printf(a=%d,b=%dn,a,b);system(

25、“pause”);return 0;,请考虑以下程序的输出:,要想正确理解表达式,就需要知道运算符优先级和结合性,3.8 目前学过的运算符优先级和结合性,是先对b赋值还是先对a赋值?,这么写可以么?,41,3.8 目前学过的运算符优先级和结合性,运算符优先级:taxRate=income 4000&residency 4000 和residency 4000&residency 5的值,接着求出条件表达式的值,最后进行赋值运算。,42,高,低,单目运算符 高于 算术运算符 高于 关系运算符 高于 逻辑运算符 高于 条件运算符 高于 赋值运算符 高于 逗号运算符,运算符优先级,43,printf

26、(“-a+=%dn”,-a+);-和+优先级相同,怎么计算?结合性:当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。如:-a+是相当于-(a+)还是(-a)+?从右向左结合性:当一个操作数两侧的运算符具有相同的优先级,且这两个运算符的结合性都是从右向左,则操作数与右侧的运算符结合,先进行右侧的运算;如:-和+都是从右向左结合,因此-a+;等价于:-(a+);从左向右结合性:当一个操作数两侧的运算符具有相同的优先级,且这两个运算符的结合性都是从左向右,则操作数与左侧的运算符结合,先进行左侧的运算;如:算数运算符从左向右结合,因此a+b-c等价

27、于(a+b)-c会不会优先级相同的运算符具有不同的结合性?结论:优先级相同的运算符结合性也相同。,3.8 目前学过的运算符优先级和结合性,44,目前学过的运算符优先级和结合性,除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。,45,#includemain()int a=1,b,c;printf(“-a+=%dn”,-a+);/*右结合,相当于-(a+)*/printf(“a=%dn”,a);a=b=c=3;/*右结合,相当于c=3;b=c;a=b,*/printf(“a=%d,b=%d,c=%dn”,a,b,c);a+=b+=3;/*右结合,相当于b+=3;a+=b;*/printf(a=%d,b=%dn,a,b);,单目运算符和赋值运算符右结合性示例:,46,要想根据需求写出正确的表达式、或者读懂别人写的表达式,就必须记清楚运算符的优先级和结合性。,目前学过的运算符优先级和结合性,47,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号