《第2章 C语言程序设计基础2017年3月(第3周).ppt》由会员分享,可在线阅读,更多相关《第2章 C语言程序设计基础2017年3月(第3周).ppt(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、12022-7-16第第2 2章章 C C语言程序设计基础语言程序设计基础主要内容主要内容n2.1 2.1 数据类型数据类型n2.2 2.2 常量和变量常量和变量n2.3 2.3 常用函数常用函数n2.4 2.4 算术运算符和算术表达式算术运算符和算术表达式n2.5 2.5 赋值运算赋值运算n2.6 2.6 逗号表达式逗号表达式n2.7 2.7 数据类型转换数据类型转换n2.8 2.8 数据的输入、输出数据的输入、输出n例例: :已知圆的半径已知圆的半径, ,求面积求面积#include int main( ) float r,s; scanf(“%f”, &r); s=3.1415*r*r;
2、 printf(“面积是:面积是:%f n”,s); return 0; 对本函数中的数据进对本函数中的数据进行说明,行说明,名字名字、类型类型上次课内容提要:数据类型说明上次课内容提要:数据类型说明3C C数数据据类类型型基本类型基本类型构造类型构造类型指针类型指针类型 * *空类型空类型 voidvoid自定义类型自定义类型 typedeftypedef字符型字符型 charchar枚举类型枚举类型 enumenum整型整型实型实型单精度型单精度型 floatfloat双精度型双精度型 doubledouble数组数组 结构体结构体 structstruct共用体共用体 unionunio
3、n短整型短整型 shortshort长整型长整型 longlong整型整型 intint数据类型数据类型决定:决定:1.1.值的值的集合集合2.2.这个值集上可进行的一组这个值集上可进行的一组操作操作3.3.系统分配给它的系统分配给它的存储空间长度存储空间长度4.4.在存储单元里的在存储单元里的存储形式存储形式布尔型布尔型 boolbool4类型类型符号符号关键字关键字数的表示范围数的表示范围所占字节数所占字节数整型整型字符型字符型实型实型有有无无(signed) int4-21474836482147483647(signed) short2-3276832767(signed) long
4、int4-214748364821474836474unsigned int04 294 967 295404 294 967 295unsigned longunsigned short2065535有有float4|3.4e-38|3.4e38|有有double8|1.7e-308|1.7e308|有有(signed) char1-128127无无unsigned char10255说明说明:上表以上表以Visual C+6.0Visual C+6.0编译环境为例编译环境为例,32,32位位PCPC机。机。(1616位位PCPC机中,机中,int 所占字节数为所占字节数为2 2,其他相同,
5、其他相同)n基本数据类型的表示范围基本数据类型的表示范围这这3 3种是重点种是重点52022-7-16n类型修饰符类型修饰符nsigned 、unsignednlong、shortn测试所占空间长度的运算符:测试所占空间长度的运算符:nsizeof ( )n例如:例如:sizeof (int);62022-7-16n根据数据的根据数据的表示范围表示范围分为:分为:n整型整型、实型实型、字符型字符型 等等n根据在程序运行过程中根据在程序运行过程中数值能否改变数值能否改变分为:分为:n常量常量、变量变量n整型常量整型常量和整型变量和整型变量n实型常量和实型变量实型常量和实型变量n字符常量和字符变量
6、字符常量和字符变量n字符串常量字符串常量72022-7-162.2.1 整型常量和整型变量整型常量和整型变量n整型常量整型常量n表示方式表示方式 3 3 种种n十进制十进制:由由0909和正负号表示和正负号表示, 如如 123123、-7-7、10241024n八进制八进制:由由0 0开头开头, ,后跟后跟0707表示表示,如如 01230123、0202、02370237n十六进制十六进制:由由0 x0 x开头开头,后跟后跟0909、AFAF、afaf表示表示,如如 0X1230X123 、 0 xff0 xff注意区别注意区别问题问题:0123 = ( )100 x123 = ( )100
7、Xff = ( )108329125582022-7-16n整型常量类型确认方式整型常量类型确认方式n根据其值所在根据其值所在范围范围确定其数据类型确定其数据类型nint 、 short 、 long n例如:例如: 在在1616位机器中位机器中 常量值范围常量值范围 在在 - 3276832767 内内 时被看作时被看作 int 或或 short 型型, , 超出超出则被看作是则被看作是 long 型型n在整常量后加字母在整常量后加字母l l或或L L,认为它是,认为它是 long int 型常量型常量n从数值上看从数值上看123123与与123L123L大小没有变化,但是它们占用的存储空间
8、是大小没有变化,但是它们占用的存储空间是不同的不同的n常量后跟常量后跟u u或或U U来表示是来表示是无符号型整型常量无符号型整型常量, ,不能表示成负数不能表示成负数如如123、-76是是int型型123l、-76L是是long int型型123u、76lu是是unsigned型整数型整数-30u不合法不合法92022-7-16n整型变量整型变量n基本定义方式:基本定义方式:int a ;n分为分为 int 、 short 、 long n也可分为也可分为 有符号型、无符号型有符号型、无符号型n例如:例如:long int a; / /* *长整型长整型* */ /long a; / /*
9、*长整型,等价于上面长整型,等价于上面* */ /signed int b; / /* *有符号整型有符号整型* */ /signed b; / /* *有符号整型,等价于上面有符号整型,等价于上面* */ /unsigned int c; / /* *无符号整型无符号整型* */ /unsigned c; / /* *无符号整型,等价于上面无符号整型,等价于上面* */ /short int d; / /* *短整型短整型* */ /short d; / /* *短整型,等价于上面短整型,等价于上面* */ /unsigned short int m; / /* *无符号短整型无符号短整型*
10、 */ /unsigned short m; / /* *无符号短整型,等价于上面无符号短整型,等价于上面* */ /n占字节数随机器不同而不同占字节数随机器不同而不同, ,一般占一般占一个机器字一个机器字wordwordn可用可用 sizeof( (类型标识符)类型标识符)测量测量再次强调下:再次强调下:3232位机器位机器 int 占占3232位位(也就是(也就是4 4个字节)个字节)1616位机器位机器 int 占占1616位位(也就是(也就是2 2个字节)个字节)其他类型都一样其他类型都一样102022-7-162.2.2 实型常量和实型变量实型常量和实型变量n实型常量实型常量n表示形
11、式:表示形式:小数形式小数形式、指数形式指数形式n小数形式小数形式:由数字和小数点组成的:由数字和小数点组成的n注意注意: 小数点是必不可少的小数点是必不可少的n如如: : 12300.0 -3.15-3.15 1.01.0 1.1. 0.10.1 . 1. 1n指数形式指数形式: : 以以e e或或E E代替代替1010做底数做底数,e e前是前是尾数尾数,e e后是后是指数指数n注意注意: : e e前必须有数字,前必须有数字,e e后数字必须是整数后数字必须是整数n如如: : 12.3e3 12.3e3 123E2 123E2 1.23e4 1.23e4 e-5 1.2E-3.5e-5
12、1.2E-3.5n规范化的指数形式规范化的指数形式n尾数部分:尾数部分:小数点前的数字为小数点前的数字为0 0、小数点后第一位不为、小数点后第一位不为0 0n如如: : 12300.0 的规范化的指数形式是的规范化的指数形式是 0.123e6 或或 0.123E6112022-7-16n实型变量实型变量n基本定义方式:基本定义方式: float a ; / /* *单精度型单精度型* */ /n分为分为 float、 double 、 long doublenfloat: 占占4 4字节,提供字节,提供7 7位有效数字位有效数字ndouble:占占8 8字节,提供字节,提供15161516位有
13、效数字位有效数字n例如:例如:float a; / /* *单精度型单精度型* */ /double b; / /* *双精度型双精度型* */ /long double c; / /* *长双精度型长双精度型* */ /n默认默认将带小数的实数将带小数的实数为为 double 型型n浮点型都是浮点型都是有符号有符号的的122022-7-162.2.3 字符常量和字符变量字符常量和字符变量n字符常量字符常量n定义:定义: 用用单引号单引号括起来的括起来的单个普通字符单个普通字符或或转义字符转义字符n例如例如: A 、 a、 0、n、x2f、013其中:其中:x 表示后面的字符是十六进制数表示后
14、面的字符是十六进制数0 表示后面的字符是八进制数表示后面的字符是八进制数n转义字符转义字符:反斜线后面跟一个字符或一个代码值,:反斜线后面跟一个字符或一个代码值, 表示有特殊意思的控制字符(非显示字符),表示有特殊意思的控制字符(非显示字符), 参考参考P29P29 A65 , a97, 0 48 , n10132022-7-16转义字符及其含义转义字符及其含义14如如 101 -A 012 -n 60 -0 x61 -a 483例例: : 一个字符的多种表示一个字符的多种表示 A-101-x41-65例例 转义字符举例转义字符举例#include int main() printf(101
15、x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C); return 0;运行结果:运行结果:A B CI say:How are you? C ProgramTurbo C记住!记住!152022-7-16n字符变量字符变量n定义方式:定义方式: char ch ; ch=A; 或者或者 char ch=A ;n作用:存放字符作用:存放字符ASCIIASCII码码nchar与与int数据间可进行算术运算数据间可进行算术运算例例 ch= A; /* 相当于相当于ch=65; */x= A +5; /*
16、 相当于相当于x=65+5; */s= A + a ; /* 相当于相当于s=65+97; */n字符变量通常作为字符变量通常作为01270127之间的一个整数来处理之间的一个整数来处理162022-7-162.2.4 字符串常量字符串常量n定义定义:双引号双引号 括起来的字符序列括起来的字符序列n如:如:CHINA、hello、123、A n存储:每个字符串尾自动加一个存储:每个字符串尾自动加一个0作为作为字符串结束标志字符串结束标志n0的的ASC值是值是0 0, ,其含义是其含义是“空操作空操作”, ,即不产生任何动作即不产生任何动作n字符串在机器中占用内存长度字符串在机器中占用内存长度=
17、 =字符串的的实际长度字符串的的实际长度+1+1n字符常量字符常量与与字符串常量字符串常量不同不同h e l l o 0 例例 字符串字符串“hello” 在内存中在内存中例例 空串空串 “”“” 在内存中在内存中0a a 0例例 a“a”例例: : char ch; ch=“A”; 例例: : char ch; ch=A; 没有没有字符串变量字符串变量,用用字符数组字符数组存放存放记住!记住!记住!记住!17n模块化程序设计模块化程序设计n基本思想:将一个基本思想:将一个大程序大程序按功能按功能分割成分割成一些一些小模块小模块n分而治之分而治之2.3 常用函数常用函数源程序文件1预编译命令说
18、明部分执行部分函数1函数n源程序文件i源程序文件nC程序C C程序结构程序结构n一个完整的一个完整的语言程序:语言程序:2 2种种1 1、是由一个、是由一个main( )函数(又称主函数)和若干个其函数(又称主函数)和若干个其它函数结合而成的,它函数结合而成的, 如:如: 例例1.21.22 2、或仅由一个、或仅由一个main( )函数构成,函数构成,如:引例,例如:引例,例1.11.1192022-7-16n什么是函数?什么是函数?n预先编好的一段能实现特定功能的程序预先编好的一段能实现特定功能的程序。 n函数名:通常以该功能命名。函数名:通常以该功能命名。例例 int max( int x
19、 , int y) / /* *定义定义maxmax函数函数*/ int z ; if( xy) z=x; else z=y; return z; n作用:简化程序,增加程序的可读性。作用:简化程序,增加程序的可读性。函数名函数名(名字而已)(名字而已)函数体:函数体:对对需要实现的需要实现的功能的详细功能的详细描述描述(本质)(本质)202022-7-16n分类:分类: 1. 1.标准函数标准函数(库函数)(库函数)nC C语言中语言中事先编好事先编好一批常用的功能一批常用的功能n分若干个分若干个头文件头文件存放,如:存放,如:stdio.h, math.h, string.h, time.
20、h等,参考等,参考P317P317n使用标准函数前,必须加其所在的头文件,即使用标准函数前,必须加其所在的头文件,即预编译命令预编译命令例如:例如: 要用要用 printf( )函数函数 必须要用必须要用 # include / / 表示包含头文件表示包含头文件 “stdio.h” 2. 2.用户自定义函数用户自定义函数n用户用户根据需要自己编写根据需要自己编写的函数,如:例的函数,如:例1.2中中 max( ) 第第5章详解章详解212022-7-16头文件名头文件名函数列表函数列表函数用途函数用途stdio.h(输入输出函数)(输入输出函数)printf ( )格式输出(控制台)格式输出(
21、控制台)scanf ( )格式输入(控制台)格式输入(控制台)fgets ( )字符串输入字符串输入fputs ( )字符串输出字符串输出getchar ( )字符输入(控制台)字符输入(控制台)putchar ( )字符输出(控制台)字符输出(控制台)gets ( )字符串输入(控制台)字符串输入(控制台)puts ( )字符串输出(控制台)字符串输出(控制台)常用函数及其用途常用函数及其用途222022-7-16232022-7-162022-7-162.4 算术运算符和算术表达式算术运算符和算术表达式2.4.1 算术运算符算术运算符例:例: = = =例:例: 5%2 5%2 = = -
22、5%2 -5%2 = = 1%101%10 = = 5%1 5%1 = = 5.5%25.5%21-110 ( )25n运算符的优先级和结合性(参考运算符的优先级和结合性(参考P315P315)n结合方向:从左结合方向:从左向右向右(“-” 为为取负取负运算符时运算符时, ,右结合性)右结合性)n优先级优先级: - * / % + - 高高 (14) (14) (13(13) ) (12) (12) 低低262022-7-162. 自增、自减运算符自增、自减运算符 + -n作用:使变量自己的值加作用:使变量自己的值加1 1或减或减1 1, n i+ 等价于等价于 i=i+1 +i 等价于等价于
23、 i=i+1n区别:区别:n后置后置 i+, ( (先使用先使用i 值值, , 再执行再执行i+1)例如例如 i=2; j=i+;相当于相当于 j=i; / j=2 i=i+1; / i=3n前置前置 +i, ( (先执行先执行i+1, , 再使用再使用i值)值)n i- ,-i 同理同理272022-7-16例例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3; b=5; c=(+a)*b; a=3; b=5; c=(a+)*b; / k=4,j=4/ k=3,j=4/ 4/ 3/ c=20,a=4,
24、b=5/ c=15,a=4,b=528n说明说明n+ - 不能用于常量和表达式不能用于常量和表达式, , 如如: 5+,(a+b)+n+ - 结合方向:结合方向: 自右向左自右向左n优先级:优先级: - + - * / % + - (14)(14) (13) (13) (12)(12)其中:其中: -i+ 相当于相当于 -(i+)运行结果:运行结果: -3 例例 j+k; (j+)+k;例例 int i=3; printf(“%d”, -i+); 292022-7-16n副作用副作用如如i+j,理解为理解为i+ (+j),还是还是 (i+)+j,不同的系统可能就会有不同的结果不同的系统可能就会
25、有不同的结果必要时加必要时加 (),避免歧义(),避免歧义302022-7-162.4.2 算术表达式算术表达式n定义定义用用算术运算符和括号算术运算符和括号将将操作数操作数连接起来符合连接起来符合C C语言语法规定的式子语言语法规定的式子操作数操作数: :常量、变量、函数常量、变量、函数算术运算符的优先级由高到低算术运算符的优先级由高到低: - + - - + - * * / % / % + -+ - 高高(14)(14) (13) (13) (12)(12)低低若优先级相同则按照若优先级相同则按照由左至右由左至右运算运算 , ,参考参考P315P315括号或函数的优先括号或函数的优先n不用
26、类型间的转换不用类型间的转换若表达式中浮点数参与运算,则按双精度进行计算若表达式中浮点数参与运算,则按双精度进行计算。n如:如: -4.0/8 的结果是的结果是 -0.5(double型)型)若表达式中最高精度是若表达式中最高精度是long型整数,运算时按型整数,运算时按long型进行运算型进行运算n如:如:int m;long n;那么那么 m+n 时,系统中时,系统中 m 和和 n 都被看作是都被看作是 long 型的运算型的运算若表达式中最高精度不高于若表达式中最高精度不高于int 型,运算时按型,运算时按int型算型算n如:如: 4/8 4/8 的结果不是的结果不是 0.5 0.5 ,
27、而是,而是 0 0312022-7-162.5 赋值运算赋值运算n赋值运算符赋值运算符n简单赋值运算符简单赋值运算符n符号:符号: = =n格式:格式:变量标识符变量标识符= =表达式表达式n作用:首先计算作用:首先计算右边的表达式,右边的表达式,再赋给再赋给左边的变量左边的变量n赋值表达式赋值表达式n定义:定义:n用赋值运算符连接起来符合用赋值运算符连接起来符合C C语言法则的式子语言法则的式子例例 a=3; b=a+2; c=max(a,b );a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3n复合赋值运算符复合赋值运算符n种类:种类:+= -= *= /= %=3220
28、22-7-16n说明说明n左侧左侧必须是变量必须是变量,不能是常量或表达式,不能是常量或表达式n运算优先级运算优先级: 2 ( (最低最低1 1 , ) )n结合方向:结合方向: 自右向左自右向左 例例 a=b=1; / 等价于等价于 a=(b=1);n类型转换规则类型转换规则: 运行时运行时赋值号右边表达式值的类型赋值号右边表达式值的类型 自动转换成自动转换成其左边变量的类型其左边变量的类型例例 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;332022-7-16n赋
29、值运算表达式的值赋值运算表达式的值被规定为表达式左操作数的被规定为表达式左操作数的值值, ,且可嵌套且可嵌套例例: a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) / /表达式值为表达式值为5,a,b,c值为值为5 5 / /表达式值为表达式值为5, b=5;a=5 / /表达式值为表达式值为11,c=6,a=11 / /表达式值为表达式值为10,a=10,b=4,c=6 / /表达式值为表达式值为5,a=5,b=10,c=2例例: int a=12; a+=a-=a*a/a=-264 等价于等价于a=a+(a=a-(a*a)例例:
30、 int a=2; a%=4-1; a+=a*=a-=a*=3; /a=0 等价于等价于a=a+(a=a*(a=a-(a=a*3)/a=2 等价于等价于a=a%(4-1)342022-7-162.6 逗号表达式逗号表达式n形式:形式:表达式表达式1 1,表达式表达式2,表达式表达式n nn结合性结合性:从左向右从左向右n优先级优先级: : 1 (1 (最低最低) )n逗号表达式的值:逗号表达式的值:等于等于表达式表达式n n的值的值n先运算先运算表达式表达式1 1,再运算,再运算表达式表达式2 2,用,用逗号逗号分开的分开的表达式的值分别计算,并且表达式的值分别计算,并且最后一个表达式的值最后
31、一个表达式的值就是就是逗号表达式的值逗号表达式的值n例如:例如:x=3, y=x+2; 先计算赋值表达式先计算赋值表达式x=3的值为的值为3, 再计算赋值表达式再计算赋值表达式y=x+2的值为的值为5, 因此因此整个逗号表达式整个逗号表达式的值就是的值就是5。n用途:常用于循环用途:常用于循环forfor语句中语句中352022-7-16例例 a=3*5,a*4 a=3*5,a*4,a+5例例 x=(a=3,6*3) x=a=3,6*a例例 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); /a=15,
32、/a=15,表达式值表达式值6060/a=15,/a=15,表达式值表达式值2020/赋值表达式,表达式值赋值表达式,表达式值1818,x=18x=18/逗号表达式逗号表达式, ,表达式值表达式值18,x=318,x=3/1,2,3/1,2,3/3,2,3/3,2,3362022-7-16例例:#include int main( ) int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x); return 0;运行结果:运行结果:x=3372022-7-162.7 数据类型转换数据类型转换n隐式转换隐式转换( (自动转换自动转换) )n什么情况
33、下发生什么情况下发生? ?n运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时n赋值转换赋值转换-把一个值赋给与其类型不同的变量时把一个值赋给与其类型不同的变量时n输出转换输出转换-输出时转换成指定的输出格式输出时转换成指定的输出格式n函数调用转换函数调用转换-实参与形参类型不一致时转换实参与形参类型不一致时转换n运算转换规则运算转换规则n不同类型数据运算时不同类型数据运算时先自动转换成同一类型先自动转换成同一类型38doublefloatlongunsignedintchar,short低低高高说明说明: :必定的转换必定的转换运算对象类型不同时转换运算对象类型不同时转换 cha
34、r ch; int i; float f; double d; ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+a +i*f - d/l例例2 int i; float f; double d; long l;例例1 139一般一般形式形式:(类型名类型名)(表达式表达式) 例例: (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:说明:强制转换得到所需类型的中间变量,强制转换得到所需类型的中
35、间变量,原变量类型不变原变量类型不变 例例 #include int main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); return 0; 注意:注意:较高类型向较低类型较高类型向较低类型转换时可能发生转换时可能发生精度损失问题精度损失问题n显式转换(显式转换(强制转换强制转换)运行结果运行结果:x=3.600000,i=3402022-7-16小结小结n数据类型(整型、实型、字符型)数据类型(整型、实型、字符型)n常量和变量常量和变量n常用函数常用函数n算术运算符和算术表达式算术运算符和算术表达式n赋值运算赋值运算n逗号表达式逗号表达式n数据类型转换数据类型转换