单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/7/26,*,*,Reading Fun,Sub topics go here,2021/7/26,*,(最新整理)C语言程序设计第四版谭浩强,2021/7/26,1,(最新整理)C语言程序设计第四版谭浩强2021/7/261,上周实验题讲解,P.6例1.1,P15习题5,教材例1.3,增加输入提示,便于用户操作,也可以不用函数,多次运行,测试各种顺序的组合,P15习题6,三个数比较:用max函数比较两次,2021/7/26,2,上周实验题讲解P.6例1.12021/7/262,第3章 顺序程序设计,2021/7/26,3,第3章 顺序程序设计2021/7/263,3.1 最简单的程序结构顺序结构,数据输入,运算处理,结果输出,2021/7/26,4,3.1 最简单的程序结构顺序结构数据输入运算处理结果输出,顺序结构流程,步骤1,步骤2,步骤3,2021/7/26,5,顺序结构流程步骤1步骤2步骤32021/7/265,阅读顺序结构实例,P.37-38例3.1,为什么要写 5.0/9 而不是 5/9?,f 的值可否由用户输入?,本章要点:,数据的类型及运算,输入与输出,2021/7/26,6,阅读顺序结构实例P.37-38例3.12021/7/266,3.2 C语言的数据及运算,数据有类型(type),有具体的值(value)。,不同类型的数据存储格式不同,能够进行的运算也不同。,数据的形式有常量,变量,表达式。,2021/7/26,7,3.2 C语言的数据及运算 数据有类型(type),,常量(Constant),运行过程中值不改变的量(类型也不变),直接常量,整型常量:1246,实型常量:45.96 -2.78e8,字符常量:,A,n(转义字符),字符串常量,Hello World,2021/7/26,8,常量(Constant)运行过程中值不改变的量(类型也不变),常量(Constant),符号常量,#define PI 3.14159,不占内存单元,不可赋值,不指定类型,名称通常大写,使用符号常量的好处 P.41,运行过程中值不改变的量(类型也不变),2021/7/26,9,常量(Constant)符号常量运行过程中值不改变的量(类型,变量(Variable),用于存放数据的一个存储单元,存放的数据即,变量值,变量名,是存储单元地址的一个名称,先定义,后使用 int a,b;,定义时指定,变量类型,编译时分配存储空间,命名规则标识符的命名规则,2021/7/26,10,变量(Variable)用于存放数据的一个存储单元2021/,标识符(identifier),标识一个对象(变量、符号常量、函数、数组、类型等)的名称,关键字不可作为标识符(附录C),系统预定义的标识符如库函数名(附录F) 建议不要再定义,以免混淆,2021/7/26,11,标识符(identifier) 标识一个对象(变量、符,标识符命名规则,只包括字母、数字、下划线,以字母或下划线开头,区分大小写习惯上变量名小写,常量名大写,长度规定各编译系统不同,命名的良好习惯“见名知义”,2021/7/26,12,标识符命名规则只包括字母、数字、下划线,以字母或下划线开头2,常变量,C99新增,存储方式和用法都是变量,但只能在定义时赋值一次,2021/7/26,13,常变量C99新增2021/7/2613,C语言的数据类型,1.基本类型,整型、浮点型、字符型,2.派生类型,数组,结构体,共用体,3.指针类型,4.空类型,5.枚举型,2021/7/26,14,C语言的数据类型1.基本类型2021/7/2614,整型数据(Integer),整型常量,三种数制的表示形式,十进制(Decimal):例如 61,八进制(Octal):例如,0,75,十六进制(Hexadecimal):例如,0x,3D,2021/7/26,15,整型数据(Integer) 整型常量三种数制的表示形式,整型数据(Integer),整型常量的类型确定,根据其值的范围自动确定类型(P51),可赋值给能够容纳其值的各种整型变量,整常量后加l或L视为long int,VC+中int就是long int,整常量后加u或U视为unsigned int,2021/7/26,16,整型数据(Integer) 整型常量的类型确定根据其值的,整型数据(Integer),整型变量,根据占用内存字节数分类(P.45表3.2),基本整型 int(长整型或短整型),短整型 short int,长整型 long int,无符号整型 unsigned ,int在不同编译系统中分配存储字节数各不相同,可用sizeof函数测试,例: printf(%d,sizeof(int);,signed,2021/7/26,17,整型数据(Integer) 整型变量根据占用内存字节数分,浮点型数据,(Floating point,即实型,),浮点型常量,两种表示形式,十进制小数:例如 3.14159,指数形式:例如 1.72e3,main( ), float x;,x=23456.789;,printf(x=%e,x);,2.345679e+004,对照一下%f的格式,2021/7/26,18,浮点型数据(Floating point,即实型)浮点型常,浮点型数据,浮点型变量,单精度 float,双精度 double,长双精度 long double,同一类型在不同的编译系统中分配存储字节数各不相同,可用sizeof函数测试,2021/7/26,19,浮点型数据浮点型变量单精度 float2021/7/2,浮点型常量的类型确定,浮点型常量默认为double类型,浮点型常量后加f或F视为float,浮点型数据的有效范围(P.50-51),2021/7/26,20,浮点型常量的类型确定浮点型常量默认为double类型2021,练习:判断下面程序的运行结果,int main(), float a;,a=12;,printf(%d,a);,格式符与数据类型不相符,2021/7/26,21,练习:判断下面程序的运行结果int main()格式符与数据,字符型数据(character),字符常量,一对单引号(即撇号 )括起的,一个字符,用八进制或十六进制数(ASCII码)表示的字符,如101和x41 (P.40),以 开头的控制字符(P.40表3.1),2021/7/26,22,字符型数据(character)字符常量一对单引号(即撇号,字符型数据(character),字符变量,使用,char,定义,保存,一个字符,占用,1个字节,的内存空间,2021/7/26,23,字符型数据(character)字符变量使用char定义2,字符数据的存储与使用,在存储单元中保存字符的,ASCII码,因此字符数据可以参加算术运算,例如,2021/7/26,24,字符数据的存储与使用在存储单元中保存字符的ASCII码202,字符数据的存储与使用,int main( ), char x, z;,int y;,x=65;,printf(x=%cn,x+32);,y=D;,printf(y=%cn,y);,printf(y=%dn,y);,z=a-32;,printf(z=%cn,z);,2021/7/26,25,字符数据的存储与使用int main( )2021/7/26,字符串(string)概念,一对双引号()括起的,字符序列,字符串长度:字符串中字符的个数,空串:长度为0的字符串(即一个字符都没有的字符串)表示为 ,2021/7/26,26,字符串(string)概念一对双引号()括起的字符序列,字符串(string)存储方式,C,H,I,N,A,0,由5个字符组成的字符串在内存中占用6个字节存储空间,字符串结束符,占一个字节,由系统自动加上,源代码中不写,CHINA,2021/7/26,27,字符串(string)存储方式CHINA0由5个字符组,字符常量,与,字符串常量,的区别,字符常量,字符串常量,定界符,长度,1,非负整数,存储要求,单个字符的ASCII码,有效字符和结束标志0的ASCII码,2021/7/26,28,字符常量与字符串常量的区别字符常量字符串常量定界符长度1,注意:,C语言只有字符变量,没有字符串变量,使用字符数组保存字符串,2021/7/26,29,注意:C语言只有字符变量,没有字符串变量2021/7/262,数值型数据的混合运算,整型,(int, short, long),、浮点型,(float, double, long double),、字符型,(char),数据可混合运算,运算前先,自动转换,成同一类型,必定转换,floatdouble,charint,运算对象类型不同时由较低精度向较高精度转换成相同类型,精度:int unsighed long double,2021/7/26,30,数值型数据的混合运算整型(int, short, long),数值型数据的混合运算,练习:判断下面表达式的值,10 + a 10.1 * b,2021/7/26,31,数值型数据的混合运算练习:判断下面表达式的值2021/7/2,运算符和表达式,C语言的运算符(P.56,Operator,),算术运算符,P.52,关系运算符,P.91,逻辑运算符,P.93,位运算符,待补充,赋值运算符,P.60,条件运算符,P.97,逗号运算符,P.123,指针运算符,Ch8.指针,求字节数运算符,强制类型转换运算符,P.56,成员运算符,Ch9.结构体,下标运算符,Ch6.数组,其他,详见附录D,2021/7/26,32,运算符和表达式C语言的运算符(P.56, Operator),算术运算符和算术表达式,基本算术运算符,+ -,* / % (求余),练习,判断算术表达式的值,5 / 3 5%3,5.1 / 3 5.1 % 3,2021/7/26,33,算术运算符和算术表达式基本算术运算符+ -练习,判断算,算术运算符和算术表达式,自增、自减运算符,使,变量,值加1或减1,i+, i-,先使用i值再使i值加1(或减1),+i, -i,先使i值加1(或减1)再使用i值,可组成复杂的形式,但建议不要滥用,2021/7/26,34,算术运算符和算术表达式自增、自减运算符使变量值加1或减120,算术运算符和算术表达式,自增、自减运算符,例1,main(), int i, j;,i=3;,j=i+;,printf(i=%d,j=%dn,i,j);,i=4,j=3,2021/7/26,35,算术运算符和算术表达式自增、自减运算符例1main()i=4,算术运算符和算术表达式,自增、自减运算符,例2,main(), int i,j;,i=3;,j=+i;,printf(i=%d,j=%dn,i,j);,i=4,j=4,2021/7/26,36,算术运算符和算术表达式自增、自减运算符例2main()i=4,算术运算符和算术表达式,运算符的优先级和结合性,附录D,由优先级别决定运算顺序,不同的运算符有不同的结合性,多为从左向右(左结合性),少数为从右向左(右结合性),2021/7/26,37,算术运算符和算术表达式运算符的优先级和结合性附录D2021/,算术运算符和算术表达式,强制类型转换运算符,系统不能进行自动类型转换时可使用强制转换,(类型符)变量,(类型符)(表达式),例 (int)(12.1/2.5),(int)12.1/2.5,2021/7/26,38,算术运算符和算术表达式强制类型转换运算符系统不能进行自动类型,3.3 C语句,C程序的构成,C程序,源程序文件1,源程序文件2,源程序文件n,预处理命令,全局变量声明,函数1,函数n,局部变量声明,执行语句,2021/7/26,39,3.3 C语句C程序的构成C程序源程序文件1源程序文件2源程,3.3 C语句(statement),C语句的分类 P.57-59,控制语句,函数调用语句,表达式语句,空语句,复合语句,2021/7/26,40,3.3 C语句(statement)C语句的分类 P.57,赋值,(Assignment),语句,赋值运算符 a=3+2,复合赋值运算符 a+=3, a=a+3,自右向左结合,P.61 实例尽量读懂,但建议不要采用太复杂的写法,赋值运算符和赋值表达式,2021/7/26,41,赋值(Assignment)语句赋值运算符 a=3+,赋值语句,赋值中的类型转换,赋值表达式,赋值语句,定义变量时赋初值初始化(initialize),2021/7/26,42,赋值语句赋值中的类型转换2021/7/2642,数据输入输出的概念,输入(input):输入设备主机,输出(output):主机输出设备,C语言的输入输出由函数(function)实现,stdio.h 头文件包含标准输入输出库函数,2021/7/26,43,数据输入输出的概念输入(input):输入设备主机2021,printf(格式控制,,输出表列,),例:printf(,a=,%d, b=,%f,n, ,a , b/2,),普通字符,(原样输出),格式说明,输出列表,常量、变量、表达式,格式输出函数printf,2021/7/26,44,printf(格式控制,输出表列)例:printf(,printf 函数的基本格式符,%d,或,%i,十进制整数,%c,字符(一个字符),%s,字符串,%f,实数(小数形式),%e,实数(指数形式),更多的格式符见P.74,2021/7/26,45,printf 函数的基本格式符 %d 或 %i 十进制整,输入函数scanf,scanf(,格式控制,,,地址表列,),例1:scanf(,%d%f,&a ,&b,),输入时以空格或回车分隔两个数值,scanf(,%d,%f,&a ,&b,),输入时以逗号分隔两个数值,&变量名,&变量名,2021/7/26,46,输入函数scanf scanf(格式控制,地址表列)例1,输入函数scanf,例2:scanf(,%c%c,&a ,&b,),直接输入两个字符,不加空格或回车,例3:,scanf(,%d%c,&a ,&b,),数值后直接输入字符,不加空格或回车,2021/7/26,47,输入函数scanf例2:scanf(%c%c,&a ,&,输入函数scanf,例4:scanf(,a=,%d,b=,%f, ,&a ,&b,),普通字符,(原样输入),格式说明,地址列表,输入 a=34,b=45,2021/7/26,48,输入函数scanf例4:scanf(a=%d,b=%f,输入函数scanf,地址列表中只能是变量名前加地址运算符&的形式,其作用是将数据传送到变量的内存地址,相当于赋值。不能漏写&,也不可使用常量、表达式。,输入数据应与原定格式相符(习题第5题)。,更多的输入格式符见P.76。,2021/7/26,49,输入函数scanf地址列表中只能是变量名前加地址运算符&的形,字符数据的输入输出,putchar(字符)输出一个字符,例1. putchar(a);,例3. char x;,x=x61;,putchar(x);,例2. char x;,x=a;,putchar(x);,注:也可以是整型变量,2021/7/26,50,字符数据的输入输出putchar(字符)输出一个字符例3,字符数据的输入输出,getchar() 输入一个字符,例:,char x;,int y;,x=getchar();,y=getchar();,putchar(x);,putchar(y);,注意:空格、回车等都是字符,2021/7/26,51,字符数据的输入输出getchar() 输入一个字符2,2021/7/26,52,2021/7/2652,