计算机CC语言编程结构化程序的开发.ppt_第1页
计算机CC语言编程结构化程序的开发.ppt_第2页
计算机CC语言编程结构化程序的开发.ppt_第3页
计算机CC语言编程结构化程序的开发.ppt_第4页
计算机CC语言编程结构化程序的开发.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第三章 结构化程序的开发 1 提纲 3.1 一些常用的转义序列 3.2 再论C语言中的数据类型 3.3 混合运算时各种数据类型之间的转换 3.4 格式化输出 3.5 赋值运算符 3.6 自增和自减运算符 3.7 条件运算符和逗号运算符 3.8 算术运算符的优先级和结合性 2 转义转义 序列含 义义 描 述 n t r a b “ 换换行。将光标标定位到下一行的开始位置。 水平制表符。把光标标跳到tab键键的下一个输输出区。 回车车。把光标标定位在当前行(而不是下一行)的开始 位置。 响铃铃。使系统铃发统铃发 声。 光标标回退一个字符。 反斜扛。打印一个反斜扛字符。 双引号。打印一个双引号字符。 3.1 一些常用的转义序列 转义字符:反斜杠; 转义序列:反斜杠后面加上特定的一个字符; %:%:打印一个百分号打印一个百分号 printfprintf(“(“比例是比例是%f f“,percentage“,percentage); ); 更多转义序列见更多转义序列见C C程序设计教程程序设计教程299299页页 3 main() printf(“123456781234567812345678n“); printf(“1t12t123tHello!n“); /*t的使用 */ printf(“tHello! n“); printf(“1234567890“); printf(“bbHello! n“); /*b的使用*/ printf(“1234r“%n“); /*打印、和 */ printf(“a”); /*使系统发出一声*/ system(“pause“); return 0; 转义字符举例 123456781234567812345678 1 12 123 Hello! Hello! 12345678Hello! “%4 请按任意键继续 . . . 4 提纲 3.1 一些常用的转移序列 3.2 再论C语言中的数据类型 掌握:数据类型的种类、取值范围和格式说明 符 3.3 混合运算时各种数据类型之间的转换 3.4 格式化输出 3.5 赋值运算符 3.6 自增和自减运算符 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限定整数类型 u示例:short int age; long int counter; long long int population; ushort int、 long int、long long int可分别简写为short, long和 long long。如:short age; uint数据一般为16位或32位,long数据一般为32位, long long 为64位。 u各个编译程序可以根据硬件情况自由选择int、short、 long的长度,唯一限制是short和int数据至少要有16位,而 long数据至少要有32位;short数据长度int数据长度 long数据长度 long long数据长度。 7 3.2 C语言中的数据类型 三、signed、unsigned限定char类型和任何整数类型 signed char 、 unsigned 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 取值范围: signed char:128127(1字节) unsigned char:0255 (1字节) 3.2 C语言中的两种字符类型 9 所以,C语言支持8种不同的整形: short 、 unsigned short int、 unsigned int long、 unsigned long long long、 unsigned long long 转换说明符: short:hd, unsigned short : hu int : %d, unsigned int : u long :%ld, unsigned long : lu long long:%lld unsigned long long:%llu 3.2 C语言中的八种整形类型 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位) - 92233720368547758089223372036854775807 unsigned 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:f double :lf long double: lf 3.2 C语言中的三种浮点类型 12 3.2 C语言中的三种浮点类型 取值范围: float : -3.4*10-3.4*1038 38 3.4*10 3.4*1038 38 double : -1.7*10-1.7*10308 308 1.7*10 1.7*10308 308 long double: -1.2*10-1.2*104932 4932 1.2*10 1.2*104932 4932 13 提纲 3.1 一些常用的转移序列 3.2 再论C语言中的数据类型 3.3 混合运算时各种数据类型之间的转换 3.4 格式化输出 3.5 赋值运算符 3.6 自增和自减运算符 3.7 条件运算符和逗号运算符 3.8 算术运算符的优先级和结合性 14 3.3.1 隐式转换 C编译器只知道计算操作数的数据类型相同的表达式。 如果一个运算符两侧的操作数的数据类型不同,则系统 按“先转换、后运算”的原则,首先将数据自动转换成同一 类型,然后在同一类型数据间进行运算。 类型转换分成两种:隐式转换和显式转换。 隐式转换的基本原则是将低类型数据转换成高类型数据 (数据类型提升)。 各种类型的高低顺序如下: 15 高 低 数据类类型scanf函数的转换说转换说 明符printf函数的转换说转换说 明符 long double double float unsigned long long unsigned int int unsigned short short unsigned char char %lf %lf %f %lu %ld %u %d %hu或%u %hd %u %c %lf %lf %f %lu %ld %u %d %hu或%u %hd %u %c 数据类型提升的顺序 16 long double float double unsigned long long unsigned int unsigned char、 unsigned short int char、short 转换原则: 1 ) 所有char及short int 型变量转为 int型,所有float转换为double。 2) 操作数中 较低类型数据转换成较 高类型数据后再进行运算。 注意:箭头方向只表示数据类型由 低向高转换,int型数据和double型 数据混合运算时, 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;”后,整型变量的 高位字节将被切掉; 执行语句“n=f;”后,n只接收f的整数 部分,相当于取整运算。 19 3.3.2显式转换 utotal/counter的运算结果是整型数; u为了得到浮点值,使用类型转换运算符,形式为: (类型说明符)表达式 或者 (类型说明符)(表达式),用于将 表达式的运算结果类型转换为类型说明符指定的数据类型; u类型转换运算(float)建立了操作数total的浮点值拷贝;存储 在total值的值仍然是一个整型值;思考:下面语句的效果 average = (float)(total/counter); u使用类型转换运算符将高类型数据强制转换为低类型数据时 ,会引起精度损失(例如浮点转换成整型)或改变数据的值( 例如long转换成short)。 int total=1230,counter=35; float average; average = (float)total/counter; 显式转换 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=123456 需要程序运行结果如下: num1=123,num1=123,num1=123,num1=123 num2=123456,num2=123456,num2=123456 3.4 格式指示符 22 3.4 格式指示符 则对应的程序为: #include #include main() 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”); 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:共占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);/输出为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.56 1.235560e+002, 1.235560e+002, 1.24e+002,1.24e+002 ,1.24e+002 d1=1111111111111.111100 d2=2222222222222.222200 d1+d2=3333333333333.333000 d1+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 混合运算时各种数据类型之间的转换 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 a+ -b b- 先将a加1,然后把a的新值值用在出现变现变 量a的表达式中 在出现变现变 量a的表达式中使用a的当前值值,然后将a加1 先将b减1,然后把b的新值值用在出现变现变 量b的表达式中 在出现变现变 量b的表达式中使用b的当前值值,然后将b减1 +a:前置自增运算符 -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 5) printf(“i=%d,+i5 is truen“,i); printf(“i=%dn“,i); system(“pause“); i=6 i=6,+i5 is true i=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 true i=6 i=6,+i5 is true i=6 请按任意键继续 . . . 将5改成4 34 3.6 自加和自减运算符 测试: y = 2; n = 3; nextnum = (+y + n+)*6; num=y+n; 求nextnum 和num 的值? nextnum值为36,num值为7 35 u 自增和自减运算符的操作数只能是一个简单的 变量名,而不能是常量或者表达式。5+, +(i+1) 都是错误的写法! u ANSI没有规定运算符操作数的计算顺序,因 此如果在一条语句中将特定变量自增或自减不止 一次时,程序员应该尽量避免使用自增或自减运 算符。如: (i+)+(i+)+(i+)。 3.6 自加和自减运算符 36 提纲 3.1 一些常用的转移序列 3.2 再论C语言中的数据类型 3.3 混合运算时各种数据类型之间的转换 3.4 格式化输出 3.5 赋值运算符 3.6 自增和自减运算符 3.7 条件运算符和逗号运算符 3.8 算术运算符的优先级和结合性 37 条件运算符 ? :(C语

温馨提示

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

评论

0/150

提交评论