C语言程序设计
2022-05-27 16:42:01 0 举报
AI智能生成
初学者C语言程序设计思维导图
作者其他创作
大纲/内容
第一章 程序设计与C语言
程序与程序设计语言
程序与程序设计语言
机器语言:由0和1组成,
汇编语言:由符号组成(缺点不同设备不统一,硬件依赖程度较高,可读性和可移植性较差),
高级语言:由结构化(C语言)、非结构化的语言,面向对象语言组成(JAVA)
程序设计语言的功能
数据表达、流程控制
1,顺序控制结构(自然顺序执行)
2,分支控制结构(根据不同的条件选择执行不同的语句)
3,循环控制结构(条件满足,重复执行)
2,分支控制结构(根据不同的条件选择执行不同的语句)
3,循环控制结构(条件满足,重复执行)
共同点:①只有单一的入口和单一的出口;
②结构中的每个部分都有被执行的可能;③结构内不应出现永不终止的死循环
②结构中的每个部分都有被执行的可能;③结构内不应出现永不终止的死循环
程序的算法表示
(1)软件的主体是程序,程序的核心是算法。
(2)算法具备的特征:①确定性;②有穷性;③可行性;④有零个或多个输出;⑤有一个或多个输出。
(3)算法的表示形式有文字表示,流程图表示,伪代码和程序设计语言表示等。
(2)算法具备的特征:①确定性;②有穷性;③可行性;④有零个或多个输出;⑤有一个或多个输出。
(3)算法的表示形式有文字表示,流程图表示,伪代码和程序设计语言表示等。
C语言程序设计的特点
C语言的发展史(源于一种称为B的语言演变而来,后进行了制定标准和扩充。)
C语言的特点
优点
①C语言语句简洁紧凑,使用方便灵活;
②运算符丰富,表达能力强;
③C语言程序可移植性好;
④生成的目标代码质量高,运行效率高;
⑤语言处理能力强;
⑥C语言是一种结构化语言;
②运算符丰富,表达能力强;
③C语言程序可移植性好;
④生成的目标代码质量高,运行效率高;
⑤语言处理能力强;
⑥C语言是一种结构化语言;
缺点
①语法检察不严格,需要程序员保证程序的正确;
②运算符较多,需要程序员掌握运算的优先级和结合性等等;
②运算符较多,需要程序员掌握运算的优先级和结合性等等;
C语言的约定
标识符:
①用来标识数据类型,变量,函数,语句的符号称为标识符;
②C语言的标识符是由字母,数字,和下划线组成,第一个字符不可以是数字;
③英文字母的大小写是不同的标识符,标识符最好见名知意;
④标识符的有效字符长度是1~255个字符。
②C语言的标识符是由字母,数字,和下划线组成,第一个字符不可以是数字;
③英文字母的大小写是不同的标识符,标识符最好见名知意;
④标识符的有效字符长度是1~255个字符。
关键字
①C语言一共有32个关键字,其中数据类型关键字12个,控制语句关键字12个,存储类型关键字4个,其他类型关键字4个。
②C语言的关键字都用小写字母书写。
③用户自定义标识符。
④预定义标识符
⑤分隔符,有逗号和空格两种
②C语言的关键字都用小写字母书写。
③用户自定义标识符。
④预定义标识符
⑤分隔符,有逗号和空格两种
C语言的语法成分
常量、变量
运算符
①算术运算符如+,-,*,/,%等,
②关系运算符如>,<,>=,<=,==等,
③参与运算时要求有一个数据对象的称为单目运算符,要求有两个数据对象的称为双目运算符,要求有三个数据对象的称为三目运算符。
④表达式;由运算符将常量,变量,函数组合在一起的有意义的式子称为表达式
⑤语句;在C语言中,语句是最基本的执行单位,以分号结尾。
⑥函数定义与调用;函数是完成特定功能的小模块,是C语言中唯一的一种子程序,常常在一个C程序中包含若干个函数,复杂的任务通过调用这些函数来完成。
⑦输入与输出;C语言没有提供用于数据输入及输出的语句,所有的输入与输出都是通过系统提供的有关函数如scanf(),printf()函数来实现的。
②关系运算符如>,<,>=,<=,==等,
③参与运算时要求有一个数据对象的称为单目运算符,要求有两个数据对象的称为双目运算符,要求有三个数据对象的称为三目运算符。
④表达式;由运算符将常量,变量,函数组合在一起的有意义的式子称为表达式
⑤语句;在C语言中,语句是最基本的执行单位,以分号结尾。
⑥函数定义与调用;函数是完成特定功能的小模块,是C语言中唯一的一种子程序,常常在一个C程序中包含若干个函数,复杂的任务通过调用这些函数来完成。
⑦输入与输出;C语言没有提供用于数据输入及输出的语句,所有的输入与输出都是通过系统提供的有关函数如scanf(),printf()函数来实现的。
C程序的编辑、编译、连接与运行
程序设计的任务
①分析问题
②设计算法
③程序设计
④运行并调试程序
⑤分析程序运行结果
⑥编写程序文档
②设计算法
③程序设计
④运行并调试程序
⑤分析程序运行结果
⑥编写程序文档
运行C程序的步骤与方法
一般步骤:
①编辑源程序;(.c源程序)
②对源程序进行编译;
(生成.obj程序,有错返回编辑源程序)
③与库函数链接;(生成.exe程序)
④运行目标函数。
①编辑源程序;(.c源程序)
②对源程序进行编译;
(生成.obj程序,有错返回编辑源程序)
③与库函数链接;(生成.exe程序)
④运行目标函数。
第二章 数据类型、运算符和表达式
C语言的数据类型
数据类型有三种:
1,基本类型;基本类型还可以分解为其他类型,主要为整型、字符型和浮点型。
2,构造类型; C语言中构造类型包括:数据类型、结构体类型、共用体类型和枚举类型。构造类型是根据已定义的一或多个数据类型、用构造的方法来定义的。
3,指针类型是C语言中一种特殊的,同时又具有重要作用的数据类型。
4,空类型(void)。
2,构造类型; C语言中构造类型包括:数据类型、结构体类型、共用体类型和枚举类型。构造类型是根据已定义的一或多个数据类型、用构造的方法来定义的。
3,指针类型是C语言中一种特殊的,同时又具有重要作用的数据类型。
4,空类型(void)。
C语言的常量、变量
常量
常量
常量是指程序执行过程中,其值不发生改变的量,分为直接常量和符号常量两种。
直接常量
直接常量又分为整型常量、实型常量、字符型常量和字符串常量。
整型常量
即为整数,包括正、负整数和零。C语言中,整型常量可以用十进制、八进制和十六进制表示。
十进制表示:由数字0~9,正、负号组成。
八进制表示:以0(数字0)为前缀,其后由数字0~7组成。八进制数一般是无符号数。
十六进制表示:以0x或0X为前缀,其后数字由0~9和字母A~F(字母大小写均可)组成。十六进制一般是无符号数。
十进制表示:由数字0~9,正、负号组成。
八进制表示:以0(数字0)为前缀,其后由数字0~7组成。八进制数一般是无符号数。
十六进制表示:以0x或0X为前缀,其后数字由0~9和字母A~F(字母大小写均可)组成。十六进制一般是无符号数。
实型常量
即为实数,又称浮点数。C语言中,实数只能用十进制表示,实数表示的方法有两种:小数形式和指数形式
(1)小数形式:由整数部分、小数点和小数部分组成,如12.345,3.,-.123。整数、小数部分为0可省略不写,小数点不可省略。
(2)指数形式:由尾数部分、字母E或e和指数部分组成,格式为:±尾数E指数。以指数形式表示实数时,字母E (或e)的前后必须有数字,并且指数部分只能是整数。如12.-E3、1.5E、E6都是不正确的实数。
(2)指数形式:由尾数部分、字母E或e和指数部分组成,格式为:±尾数E指数。以指数形式表示实数时,字母E (或e)的前后必须有数字,并且指数部分只能是整数。如12.-E3、1.5E、E6都是不正确的实数。
字符型常量
(1) 字符常量只能用单引号括起来,不能用双引号或其它括号。
(2) 字符常量只能是单个字符,不能是多个字符组成的字符串。
(3) 字符可以是ASCII字符集中的任意字符。按ASCII码的大小,不同的字符之间存在着次序,以字符的ASCII码值按升序连续排列。另外,对于控制符(如回车、换行等)与不可见字符,在C语言中通过转义字符来表示。
(2) 字符常量只能是单个字符,不能是多个字符组成的字符串。
(3) 字符可以是ASCII字符集中的任意字符。按ASCII码的大小,不同的字符之间存在着次序,以字符的ASCII码值按升序连续排列。另外,对于控制符(如回车、换行等)与不可见字符,在C语言中通过转义字符来表示。
转义字符
字符串常量
(1)字符串常量是由一对双引号””括起来的零个或多个字符序列,如:”HelloWorld”。
(2)字符串中可以使用空格字符、转义字符和其他字符,也可以使用汉字等文字符号。如:"china、""你好Visual C"等。字符串中还可以使用空字符,如:”” 表示空串,即不包含任何字符。
(3)字符串常量"Hello \n world"占用12字节的内存空间
(2)字符串中可以使用空格字符、转义字符和其他字符,也可以使用汉字等文字符号。如:"china、""你好Visual C"等。字符串中还可以使用空字符,如:”” 表示空串,即不包含任何字符。
(3)字符串常量"Hello \n world"占用12字节的内存空间
字符串长度等于该字符串中所包含的有效字符的个数,如“HelloWorld”的长度为10。
在字符串中如遇到`\0(`\0`是字符串的结束符)则认为该字符串结束)。如果字符串有转义字符则一个转义字符作为一个字符。
在字符串中如遇到`\0(`\0`是字符串的结束符)则认为该字符串结束)。如果字符串有转义字符则一个转义字符作为一个字符。
符号常量
在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。
符号常量在使用之前必须先定义,其一般形式为:
#define 标识符 常量值
一个#define命令只能定义一个符号常量,若要定义多个符号常量,需使用多个#define命令。
符号常量在使用之前必须先定义,其一般形式为:
#define 标识符 常量值
一个#define命令只能定义一个符号常量,若要定义多个符号常量,需使用多个#define命令。
符号常量的使用对编程的好处:
(1)增加程序的可读性:通过标识符就知道该常量的意义。
(2)提高程序的可维护性:通过符号常量使得改常量很方便,只在常量的定义处修改即可。
(4)简化程序代码:通过符号常量可以简化复杂表达式的重复输入。
(4)方便数组的定义:可以将整型符号常量作为数组的长度。
(2)提高程序的可维护性:通过符号常量使得改常量很方便,只在常量的定义处修改即可。
(4)简化程序代码:通过符号常量可以简化复杂表达式的重复输入。
(4)方便数组的定义:可以将整型符号常量作为数组的长度。
变量
变量
在程序的运行过程中,其值可以被改变的量称为变量。变量用于从外部接收数据、保存一些不断变化的值、保存中间结果及最终结果,而这些都无法用常量来实现。一个变量应该有一个名字即变量名,在内存中占用一定的储存单元,在该储存单元中存放变量的值。
变量的定义与使用
在C语言中,所有的变量必须先定义后使用。
变量的定义
(1)类型说明符必须是C语言中的有效数据类型,如int、float、double、char等,用于指定变量的类型,该类型决定了编译时分配给变量的内存单元的多少。
(2)变量名表可以由一个或多个变量名组成,各变量名之间用“,”分隔。变量名必须是合法的C语言标识符,变量名一般使用小写字母。
(3)变量的定义必须放在变量的使用之前,一般在函数体的开头部分进行定义。
(2)变量名表可以由一个或多个变量名组成,各变量名之间用“,”分隔。变量名必须是合法的C语言标识符,变量名一般使用小写字母。
(3)变量的定义必须放在变量的使用之前,一般在函数体的开头部分进行定义。
变量的初始化
C语言允许在定义变量的同时对变量赋值,这个过程称为变量的初始化。
(1)对一个变量赋初值之后,该值被存储在分配给该变量的内存空间中。
(2)不允许对多个未定义的同类型变量连续初始化。
(3)初始化时,“=”右边表达式的数据类型和“=”左边的变量的类型如果不一致,系统会进行自动赋值转换。
(4)没有进行初始化的变量,其值是由定义时所使用的存储类型决定的。
(2)不允许对多个未定义的同类型变量连续初始化。
(3)初始化时,“=”右边表达式的数据类型和“=”左边的变量的类型如果不一致,系统会进行自动赋值转换。
(4)没有进行初始化的变量,其值是由定义时所使用的存储类型决定的。
变量的使用
使用变量时,变量应该先赋值,后引用。
整型变量
整型数据关键字、字节数和取值范围
(1)各种无符号整数所占的字节数与相应的有符号整数相同。但由于省去了符号位,故不能表示负数。
(2)有符号整数以二进制补码形式存储。最左边第1位表示符号,该位为0,表示正数,该位为1,表示负数。
(3)无符号整数以二进制原码形式存储
(4)常用关键字:int,unsigned int。
(2)有符号整数以二进制补码形式存储。最左边第1位表示符号,该位为0,表示正数,该位为1,表示负数。
(3)无符号整数以二进制原码形式存储
(4)常用关键字:int,unsigned int。
实型变量
C语言中实型变量分单精度(float型)和双精度(double型)两类。
实型的关键字及占用内存字节数和取值范围表
(1)单精度型数据能保留7位有效数字。
(2)双精度型数据能保留16位有效数字。
(2)双精度型数据能保留16位有效数字。
字符型变量
(1)字符型变量的值是字符常量,即用单引号引起来的单个字符。
(2)字符型变量的类型说明符是char,其类型说明的格式和命名规则与整型变量相同。
(3)由于字符常量在内存中占用一个字节,用于存储它的ASCII码值,所以C语言中的字符具有数值特征,可以像整数一样参加运算。允许对整型变量赋以字符值,也允许对字符变量赋以整型值。
(2)字符型变量的类型说明符是char,其类型说明的格式和命名规则与整型变量相同。
(3)由于字符常量在内存中占用一个字节,用于存储它的ASCII码值,所以C语言中的字符具有数值特征,可以像整数一样参加运算。允许对整型变量赋以字符值,也允许对字符变量赋以整型值。
大小写字母的ASSCII值相差32
运算符和表达式
运算符和表达式
C语言中,运算符和表达式数量之多,在其他高级语言中是很少见的,
正是丰富的运算符和表达式使C语言功能十分完善,这也是C语言的特点之一。
正是丰富的运算符和表达式使C语言功能十分完善,这也是C语言的特点之一。
赋值运算符和赋值表达式
赋值运算符有“=”、“+=”、“-=”、“*=”、“/=”和“%=”等。
用赋值运算符将运算对象连接而成的表达式称为赋值表达式。
用赋值运算符将运算对象连接而成的表达式称为赋值表达式。
简单赋值运算符
最简单的赋值运算符就是“=”,它的作用是将一个数值赋给一个变量。如r=2的作用是执行一次赋值操作(或称赋值运算)。 把常量2赋给变量r。也可以将一个表达式的值赋给一个变量。
变量赋值的例子:
int a,b,c= 3;定义a,b,c为整型变量,但只对c进行了賦值操作,c的值为3。如果对几个变量赋子同个初值,应写成:int a=3,b=3,c=3;表示a,b,c的初值都是3。如果写成int a=b=c= 3;的格式,则是错误的。
int a,b,c= 3;定义a,b,c为整型变量,但只对c进行了賦值操作,c的值为3。如果对几个变量赋子同个初值,应写成:int a=3,b=3,c=3;表示a,b,c的初值都是3。如果写成int a=b=c= 3;的格式,则是错误的。
复合赋值运算符
在简单赋值运算符前面加上算术运算符就构成复合算术赋值运算符。
复合算数赋值运算符
赋值表达式
在C语言中,由赋值运算符将一个变量和一个表达式连接起来的式子所组成。
一般形式为:变量 =表达式
一般形式为:变量 =表达式
赋值表达式的例子:
v=4.0*PI*r*r*r/3.0
a=15+(i=6)
b=(x=3)+(y=4)
而" 3=x"和“a+b=4”都是错误的赋值表达式。
v=4.0*PI*r*r*r/3.0
a=15+(i=6)
b=(x=3)+(y=4)
而" 3=x"和“a+b=4”都是错误的赋值表达式。
赋值表达式的执行过程:
(1)计算赋值运算符右侧表达式的值。
(2)将所计算出的值赋给赋值运算符左侧的变量。
注意:如果“=”左右两边类型不同,系统会按照赋值类型转换的原则将右边的类型转换成左边的类型。配值表达式的右边也可以是一个赋值表达式,如"a=b=c=6"。
(2)将所计算出的值赋给赋值运算符左侧的变量。
注意:如果“=”左右两边类型不同,系统会按照赋值类型转换的原则将右边的类型转换成左边的类型。配值表达式的右边也可以是一个赋值表达式,如"a=b=c=6"。
算数运算符和算数表达式
基本的算术运算符 (双目运算符)
(1)+加法运算符,为双目运算符,其功能是进行求和运算,如3+4的值为7。
(2)-作为单目运算符使用时,是取负运算,如-3;作为双目运算符使用时,是进行求差运算,如3-4的值为-1。
(3)*乘法运算符,为双目运算符,功能是进行求乘积运算,如3* 4的值为12。
(4)/除法运算符,为双目运算符,功能是进行求商运算,如a/b。
在计算a/b时,如果a和b都是整型,则其商也为整型,小数部分被舍去,如3/4的结果为0,4/3的结果为1。如果a和b中有一个是实型,则a和b都转换为double类型,然后相除,结果为double类型,如3.0/2的结果为1.5.
(5)%求余运算符,为双目运算符,功能是进行求余数的运算,如a%b,其结果为a 除以b后的余数。
求余运算要求参与运算的两个运算对象都必须是整型,其结果也是整型。如4%3的结果为1。求余运算结果的符号与第一个操作数符号相同, 如-4%3的值为-1,4%-3的值为1。
(2)-作为单目运算符使用时,是取负运算,如-3;作为双目运算符使用时,是进行求差运算,如3-4的值为-1。
(3)*乘法运算符,为双目运算符,功能是进行求乘积运算,如3* 4的值为12。
(4)/除法运算符,为双目运算符,功能是进行求商运算,如a/b。
在计算a/b时,如果a和b都是整型,则其商也为整型,小数部分被舍去,如3/4的结果为0,4/3的结果为1。如果a和b中有一个是实型,则a和b都转换为double类型,然后相除,结果为double类型,如3.0/2的结果为1.5.
(5)%求余运算符,为双目运算符,功能是进行求余数的运算,如a%b,其结果为a 除以b后的余数。
求余运算要求参与运算的两个运算对象都必须是整型,其结果也是整型。如4%3的结果为1。求余运算结果的符号与第一个操作数符号相同, 如-4%3的值为-1,4%-3的值为1。
自增、自减运算符(单目运算符)
1、++ 自增运算符:使变量的值自加1
2、-- 自减运算符:使变量的值自减1
2、-- 自减运算符:使变量的值自减1
有两种使用形式:
(1)前缀方式:用于变量前面,它是 “先计算,后使用”
(2)后缀方式:用于变量后面,它是 “先使用,后计算”
(1)前缀方式:用于变量前面,它是 “先计算,后使用”
(2)后缀方式:用于变量后面,它是 “先使用,后计算”
算术运算符的优先级和结合性
(1)单目运算符的优先级高于双目运算符
(2)双目算术运算符中*、/、%的优先级高于+、-
(3)在优先级相同的情况下,按规定的“结合方向”进行处理
(2)双目算术运算符中*、/、%的优先级高于+、-
(3)在优先级相同的情况下,按规定的“结合方向”进行处理
算术表达式
1.算术表达式是由算术运算符、运算对象和括号连接起来的式子,运算对象可以是常量变量和函数等。
2.通常数学表达式均可写成C语言的算术表达式,但是有些数学表达式无法直接用C语言的算术表达式写出,此时需要调用C语言中的数学函数来实现。
2.通常数学表达式均可写成C语言的算术表达式,但是有些数学表达式无法直接用C语言的算术表达式写出,此时需要调用C语言中的数学函数来实现。
算术表达式使用注意:
(1)表达式中的乘号不能省略,且表达式中的所有字符均应写在同一行上。
(2)在表达式中还可以使用多层圆括号(不能使用中括号[]和花括号{}),但是要注意括号的配对。
(3)在数学中,5X6÷4 的运算结果与6÷4X5的结果相同,都是7.5,但是C语言中表达式5*6/4的结果却与6/4*5的结果不一样。 另外,还需注意8/(8/ 10)之类的表达式,因为(8/10)的结果为0,用0做除数将会出现运算溢出的错误,为了不使8/10的结果为0,应将整型常亮改为实型常量8.0/10。
(2)在表达式中还可以使用多层圆括号(不能使用中括号[]和花括号{}),但是要注意括号的配对。
(3)在数学中,5X6÷4 的运算结果与6÷4X5的结果相同,都是7.5,但是C语言中表达式5*6/4的结果却与6/4*5的结果不一样。 另外,还需注意8/(8/ 10)之类的表达式,因为(8/10)的结果为0,用0做除数将会出现运算溢出的错误,为了不使8/10的结果为0,应将整型常亮改为实型常量8.0/10。
逗号运算符和逗号表达式
C语言中逗号“,”也是一种运算符,其功能是把多个表达式连接起来组成一个表达式,称为逗号表达式。
逗号表达式的一般形式为:表达式1,表达式2,…,表达式n。
1.逗号表达式的执行顺序:从左到右依次执行每个表达式,并把最后一个表达式的值作为整个逗号表达式的值。
2.逗号表达式的值为“表达式n”的值。
3.逗号运算符是双目运算符,其优先级最低,是左结合的。
4.并非所有出现逗号的地方都可以作为逗号表达式,如printf("%d%d",&a,&b),其中的 "%d%d",&a,&b 并不是一个逗号表达式,而是printf函数的参数,其中逗号只是作各变量之间的分隔符。
2.逗号表达式的值为“表达式n”的值。
3.逗号运算符是双目运算符,其优先级最低,是左结合的。
4.并非所有出现逗号的地方都可以作为逗号表达式,如printf("%d%d",&a,&b),其中的 "%d%d",&a,&b 并不是一个逗号表达式,而是printf函数的参数,其中逗号只是作各变量之间的分隔符。
求字节数运算符
运算符sizeof用于计算数据类型所占的字节数,它是一个单目运算符,优先级高于双目运算符,其一般格式为:
1. sizeof(表达式)或sizeof 表达式。
2.sizeof(数据类型名)。
1. sizeof(表达式)或sizeof 表达式。
2.sizeof(数据类型名)。
数据类型转换
数据类型转换
C语言规定,各种不同类型的数据进行运算时,不同类型要先转换成相同类型的数据才能进行运算。数据类型的转换可以分为自动转换和强制转换。数据类型转换就是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型。数据类型的各种转换只影响表达式的运算结果,并不改变原变量的定义类型,并且其数据值也不会发生任何改变。
自动类型转换
自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换。
这种转换不需要程序员干预,会由C语言编译系统自动完成。
转换规则是:
把占用内存空间少的(低级)类型向占用空间多的(高级)类型转换,以保证运算的精度。
这种转换不需要程序员干预,会由C语言编译系统自动完成。
转换规则是:
把占用内存空间少的(低级)类型向占用空间多的(高级)类型转换,以保证运算的精度。
分析:
1.将int型变量i和float型变量f转换为double型后,进行i*d/f的运算,结果为double型。
2.将char型常量’a’转换为int型,进行d+’a’的计算,此时“+”左右两边数据的类型不同,则再将int型转换为double型,进行加法运算,结果为double型。
3.将(1)的结果和(2)的结果进行加法计算,最终结果为double型。
1.将int型变量i和float型变量f转换为double型后,进行i*d/f的运算,结果为double型。
2.将char型常量’a’转换为int型,进行d+’a’的计算,此时“+”左右两边数据的类型不同,则再将int型转换为double型,进行加法运算,结果为double型。
3.将(1)的结果和(2)的结果进行加法计算,最终结果为double型。
强制类型转换
强制类型转换采用强制类型转换运算符将某种数据类型强制转换成指定的数据类型
其一般形式为:(类型说明符)(表达式)。
其一般形式为:(类型说明符)(表达式)。
需强制类型转换中的表达式一定要括起来,否则只对紧随括号后的量进行类型转换
强制类型转换是一种不安全的转换,如果是从高级类型转换成低级类型,则会损失数据的精度
强制类型转换是一种不安全的转换,如果是从高级类型转换成低级类型,则会损失数据的精度
(1)需强制类型转换中的表达式一定要括起来,否则只对紧随括号后的量进行类型转换。
(2)强制类型转换是一种不安全的转换,如果是从高级类型转换成低级类型,则会损失数据的精度 。
(3)强制转换类型并不改变表达式中变量的类型和值。(临时性)
(2)强制类型转换是一种不安全的转换,如果是从高级类型转换成低级类型,则会损失数据的精度 。
(3)强制转换类型并不改变表达式中变量的类型和值。(临时性)
第三章 顺序结构程序设计
C语言的语句
在c语言中,语句是以分号结尾的字符序列
1.说明语句:用于定义程序所使用的变量与类型(例如:int a,b; 定义两个整型变量)
2.表达式语句:用于定义程序所使用的变量与类型(例如:c=a+b是一个赋值表达式,而c=a+b;则是一个表达式语句)
3.分支语句:实现分支控制过程,根据条件成立与否执行不同的语句,有两种分支结构,即双分支if-eles;语句分支的switch语句
4.循序语句:c语言中实现循环控制的语句有3种,即for语句和do—while语句
5.转向语句:转向语句有break语句、goto语句、continue语句、return语句
6.复合语句:用一对大括号{}将若干语句循序组合在一起所形成的语句称为复合语句,c语言中除复合语句外都是以分号结束
7.空语句:空语句只有一个分号构成
8.函数定义与调用 :int max(int x,int y)为函数定义头部,由函数的返回值类型、函数名、参数表组成
9.输入与输出:所有的输入与输出都是通过系统提供的有关函数(如 scanf()和printf()函数来实现的
2.表达式语句:用于定义程序所使用的变量与类型(例如:c=a+b是一个赋值表达式,而c=a+b;则是一个表达式语句)
3.分支语句:实现分支控制过程,根据条件成立与否执行不同的语句,有两种分支结构,即双分支if-eles;语句分支的switch语句
4.循序语句:c语言中实现循环控制的语句有3种,即for语句和do—while语句
5.转向语句:转向语句有break语句、goto语句、continue语句、return语句
6.复合语句:用一对大括号{}将若干语句循序组合在一起所形成的语句称为复合语句,c语言中除复合语句外都是以分号结束
7.空语句:空语句只有一个分号构成
8.函数定义与调用 :int max(int x,int y)为函数定义头部,由函数的返回值类型、函数名、参数表组成
9.输入与输出:所有的输入与输出都是通过系统提供的有关函数(如 scanf()和printf()函数来实现的
数据的输入和输出
数据的输入和输出
C语言本身没有提供输人输出语句,所有的数据输人输出功能都是由系统提供的库函数完成的。程序中用到的标准输人输出库函数主要有prntf()、sceanf()等。使用标准输人输出库函数时要用到“stdio. h”文件,因此在源文件开头需要用预处理命令#include <stdio. h>或#include "stdo. h"将头文件stdho. h包括到源文件中。
printf()函数
1、格式控制说明
2、普通字符(在输出数据时,需要原样输出字符)
2、普通字符(在输出数据时,需要原样输出字符)
使用print()函数进行数据输出时需注意:
(1)格式字符与输出项的类型要一一对立,不同类型的数据字符的所使用的格式字符不同。
(2)一般情况下 ,格式字符与输出项的个数应相同,如果格式字符的个数多于输出项的个数,则多余的格式将输出不确定的值,如果格式字符的个数少于输出项,则多余的格式将不不能输出。
(3)printf()函数中可以没有输出项,此时printf()函数只用来输出一个字符串;也可以有多了输出项,多个输出项之间使用逗号进行分隔。若输出项是表达式时,printf()函数将按从右到左的顺序计算出其值后输出。
(4)若要在printf()函数中输出字符“%”,则应在格式控制字符串中使用连续两个“%”。
(2)一般情况下 ,格式字符与输出项的个数应相同,如果格式字符的个数多于输出项的个数,则多余的格式将输出不确定的值,如果格式字符的个数少于输出项,则多余的格式将不不能输出。
(3)printf()函数中可以没有输出项,此时printf()函数只用来输出一个字符串;也可以有多了输出项,多个输出项之间使用逗号进行分隔。若输出项是表达式时,printf()函数将按从右到左的顺序计算出其值后输出。
(4)若要在printf()函数中输出字符“%”,则应在格式控制字符串中使用连续两个“%”。
scnaf()函数
1、格式控制说明
2、普通字符(在输出数据时,需要原样输出字符)
2、普通字符(在输出数据时,需要原样输出字符)
使用scanf()函数进行数据输人时需注意:
(1)格式字符与输人项的类型、个数要一一对应;输出项必须是地址,不能是变量名。
(2)格式字符可以指定输入数据所占用的列数,系统会截取相应列数的数据。
(3)在输人数据时遇到以下情况则认为数据会结束:空格、Tab键、回车键、非法输入、指定宽度。用户也可以自己指定其他字符作为输人间隔。
(2)格式字符可以指定输入数据所占用的列数,系统会截取相应列数的数据。
(3)在输人数据时遇到以下情况则认为数据会结束:空格、Tab键、回车键、非法输入、指定宽度。用户也可以自己指定其他字符作为输人间隔。
整型数据的输入和输出
字符型数据的输入和输出
1.使用scanf()函数和printf()函数对字符型数据进行输入输出
2.使用getchar()函数和putchar()函数对字符型数据进行输入输出
2.使用getchar()函数和putchar()函数对字符型数据进行输入输出
数据库函数
1.指数函数exp(x)计算e^x;<br><br>
2.绝对值函数fabs(x)计算|x|;<br><br>
3.以e为底的对数函数log(x)计算lnx;<br><br>
4.幂函数pow(x,y)计算x^y;<br><br>
5.平方根函数sqrt(x)计算根号x
2.绝对值函数fabs(x)计算|x|;<br><br>
3.以e为底的对数函数log(x)计算lnx;<br><br>
4.幂函数pow(x,y)计算x^y;<br><br>
5.平方根函数sqrt(x)计算根号x
第四章 分支结构程序设计
关系、逻辑、条件运算符
关系运算符和关系表达式
关系运算符
(1)关系运算符都是双目运算符,其结合方向是左结合
(2)关系运算符的优先级低于算术运算符,但是高于赋值运算符
(3)关系运算符中,>,<,>=,<=的优先级相同,==、!=的优先级相同,前者的优先级高于后者,即是“>=”的优先级高于“==”。
(2)关系运算符的优先级低于算术运算符,但是高于赋值运算符
(3)关系运算符中,>,<,>=,<=的优先级相同,==、!=的优先级相同,前者的优先级高于后者,即是“>=”的优先级高于“==”。
关系表达式
用于与运算符跟两个表达是连接起来的式子称为关系表达式。
功能:比较两个表达式的大小,返回一一个逻物值。
注意:
(1)注意区分运算符“=”和“==”。“=”是赋值运算符,“==”是关系运算符。
(2)对实数进行相等判断可能得不到正确的结果,例如“1.0/3*3.0==1.0”
(3)关系表达式中可以出现赋值运算符。如“a>(b=0)",但是不能写成“a>b=0”的形式。因为关系运算符的优先级高于赋值运算符,表达式“a>b=0"相当于“(a>b)=0" ,赋值运算符左边不是变量,会出现编译错误。
(1)注意区分运算符“=”和“==”。“=”是赋值运算符,“==”是关系运算符。
(2)对实数进行相等判断可能得不到正确的结果,例如“1.0/3*3.0==1.0”
(3)关系表达式中可以出现赋值运算符。如“a>(b=0)",但是不能写成“a>b=0”的形式。因为关系运算符的优先级高于赋值运算符,表达式“a>b=0"相当于“(a>b)=0" ,赋值运算符左边不是变量,会出现编译错误。
关系表达式主要用于分支结构中的条件判断。关系表达式的结果是一个逻辑值“真"或“假”,由于C语言中没有逻辑类型的数据,因此用“1”表示“真”,“0”表示“假”。例如关系表达式"(a=3)>(b=8)”的值为0。
逻辑运算符和逻辑表达式
逻辑运算符
关系表达式只能描述单一的条件。对于较复杂的复合条件,例如“x小于10且x大于4”,如果用关系表达式“4<x<10”来描述,则当x=2时,由于关系运算符是左结合的,因此先计算“4<x",其值为0;然后再计算“0<10",其值为1;即说明当x=2时满足关系“4<x<10”,很显然是错误的。此时需要用到逻辑运算符将若千个关系表达式连接起来方能正确书述上述关系。
与运算符&&和或运算符||都是双目运算符,非运算符!为单目运算符。
逻辑表达式
将两个表达式连接起来的式子称为逻辑表达式,逻辑表达式的结果也是逻辑值“真”或“假”,既为1或0。
(1)参与逻辑运算的数据可以是1和0,也可以是非零值和0,还可以是任何类型的数指,但最终都是以非0和0来列渐他们是“真“或“假”。
(2)在逻辑表达式中也可以使用赋值运算符,如“a& &=0”的形式,因为逻辑运算符的优先级高于赋值运算符,表达式“a&&b=0"相当于“(a&&b)=0"、赋值运算符左边不是变量,会出现编译错误。
(3)C语言规定,只对决定整个表达式值所需的最少数目的子表达式进行运算。即在由若干个子表达式组成的逻辑表达式中,从左向右计算,当计算出一个子表达式的值就确定了整个逻辑表达式的值时。此后就不再计算右边剩下的子表达式的值,这种情况称为“短路”。
①对于逻辑与(&&)运算,若“& &”左边的表达式的值为假,则可以得出整个表达式的值为假,那么“&&”右边的表达式将不再进行计算;只有当“&&”左边的表达式值为真时才计算右边表达式的值。
②对于逻辑或(||)运算,若“||”左边的表达式的值为真,则可以得出整个表达式的值力真。那么“||”右边的表达式将不再进行计算;只有当“||”左边的表达式值为假时才计算右边。
(2)在逻辑表达式中也可以使用赋值运算符,如“a& &=0”的形式,因为逻辑运算符的优先级高于赋值运算符,表达式“a&&b=0"相当于“(a&&b)=0"、赋值运算符左边不是变量,会出现编译错误。
(3)C语言规定,只对决定整个表达式值所需的最少数目的子表达式进行运算。即在由若干个子表达式组成的逻辑表达式中,从左向右计算,当计算出一个子表达式的值就确定了整个逻辑表达式的值时。此后就不再计算右边剩下的子表达式的值,这种情况称为“短路”。
①对于逻辑与(&&)运算,若“& &”左边的表达式的值为假,则可以得出整个表达式的值为假,那么“&&”右边的表达式将不再进行计算;只有当“&&”左边的表达式值为真时才计算右边表达式的值。
②对于逻辑或(||)运算,若“||”左边的表达式的值为真,则可以得出整个表达式的值力真。那么“||”右边的表达式将不再进行计算;只有当“||”左边的表达式值为假时才计算右边。
例:若定义“int a=3,b=4,c=5;”则执行表达式“(a>b&&(b+=c||(c+=b)”后a、b和c的值分别是多少?
分析:根据运算符的优先级,表达式 (a>b)&&(b+=c)||(c+=b) 相当于 ((a>b)&&(b+=c))||(c+=b), 因此先计算表达式a>b,结果为假,则子表达式 (a>b)&&(b+=c) 的结果为假,此时表达式“ b + = c ” 不再计算,因此b的值不发生变化,由于或运算左边表达式的值为假,因此还需计算表达式 “c+=b” ”的值,其值为9,非零即为直,因此表 (a>b)&&(b+=c)||(c+=b) ”的值为1,最后 a=3,b=4,c=9 。
各种运算符的优先级从高到低的顺序
条件运算符和条件表达式
条件运算符
条件运算符有“?”和“:”两个符号组成,用于条件求值,它是一个三目运算符,需要三个操作数。条件运算符的优先级低于逻辑运算符,高于赋值运算符,它是右结合。
条件表达式
关于条件表达式的说明:
(1)条件表达式中表达式1的类型可以与表达式2和表达式3不同,表达式2和表达式3的类型也可以不同,此时系统会自动进行转换,结果为表达式2和表达式3中级别类型较高的,并将其作为条件表达式的类型。例如条件表达式“'a'?1:2.0”的结果为double型的1.0.
(2)条件表达式中表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式,如“a> b?b=3:(c= 4)”,但是不能写成“a>b?b=3:c=4"的形式。这是由于在表达式“a> b?b=3:c=4”中,条件运算符的优先级高于赋值运算符,上述表达式相当于“(a >b?b=3:c)=4",因赋值运算符左边不是变量,所以会出现编译错误。
(3)条件表达式允许嵌套 ,例如“a> 3?b:c> 2?1:0”,根据条件表达式的结合性,它相当于“a> 3?b:(c>2?1:0)”。
(1)条件表达式中表达式1的类型可以与表达式2和表达式3不同,表达式2和表达式3的类型也可以不同,此时系统会自动进行转换,结果为表达式2和表达式3中级别类型较高的,并将其作为条件表达式的类型。例如条件表达式“'a'?1:2.0”的结果为double型的1.0.
(2)条件表达式中表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式,如“a> b?b=3:(c= 4)”,但是不能写成“a>b?b=3:c=4"的形式。这是由于在表达式“a> b?b=3:c=4”中,条件运算符的优先级高于赋值运算符,上述表达式相当于“(a >b?b=3:c)=4",因赋值运算符左边不是变量,所以会出现编译错误。
(3)条件表达式允许嵌套 ,例如“a> 3?b:c> 2?1:0”,根据条件表达式的结合性,它相当于“a> 3?b:(c>2?1:0)”。
使用if-else实现分支结构
使用if-else实现分支结构
双分支if语句
双分支i计else语句,其语义是首先求解表达式,如果表达式的值为“真”,则执行语句者表达式的值为“假”,则执行语句2,无论执行完语句1还是语句2,都会结束整个if语句的执行。
单分支结构
双分支if- else语句中,若缺省了“语句2时”,则构成了单分支让语句。其语义是首先计算表达式,如果表达式的值为“真”,则执行语句;否则不执行语句,直接执行if语句的下一语句。
if语句的嵌套
一个if语句中包含一个或者多个if语句的现象称为if语句的嵌套
多分支if语句
多分支if语句是最常用的实现多路分支的方法
使switch语句实现分支结构
使用switch语句实现分支结构
(1)switch后的表达式可以是任何表达式,其值只能为整型,字符型,枚举型之一。
(2)每个case后面的常量表达式互不相同,否则就会出现互相矛盾的现象。
(3)各个case和default的出现次序不影响执行结果。
(4)可以让多个case共用一组执行语句。
(2)每个case后面的常量表达式互不相同,否则就会出现互相矛盾的现象。
(3)各个case和default的出现次序不影响执行结果。
(4)可以让多个case共用一组执行语句。
在switch语句格式中的每个语句后面都使用break语句;
第五章 循环结构程序设计
使用for语句实现循环结构
for语句的基本语法
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
循环题语句;
for(表达式1;表达式2;表达式3)
循环题语句;
大部分情况下,循环体语句为一复合语句。
注意,表达式1只是在进入循环之前计算一次。表达式2、循环体语句和表达式3将会重复执行。
注意,表达式1只是在进入循环之前计算一次。表达式2、循环体语句和表达式3将会重复执行。
使用while语句实现循环结构
使用do-while语句实现循环结构
改变循环结构的跳转语句
循环嵌套
典型算法举例
收藏
收藏
0 条评论
下一页