C语言程序设计课件word版.docx
- 文档编号:4631039
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:38
- 大小:485.07KB
C语言程序设计课件word版.docx
《C语言程序设计课件word版.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课件word版.docx(38页珍藏版)》请在冰豆网上搜索。
C语言程序设计课件word版
程序设计语言一般分为机器语言、汇编语言和高级语言三大类。
.机器语言
对于计算机来说,一组机器指令就是程序,称为机器语言程序。
.汇编语言
为了便于理解与记忆,人们采用能帮助记忆的英文缩写符号(称为指令助记符)来代替机器语言指令代码中的操作码,用地址符号来代替地址码。
.高级语言
机器语言和汇编语言都是面向机器的语言,一般称为低级语言。
例编写一个程序,其功能是显示字符串“!
”。
其程序如下:
""
()
{
("!
\");
}
下面针对一般的程序作几点说明:
()一个完整的语言程序可以由多个函数组成,但必须包含一个且只能包含一个名为的函数(主函数)。
程序总是从函数开始执行。
()在一个函数模块中,由左右花括号{}括起来的部分是函数体,其中的语句系列实现函数的预定功能。
()程序中的每一个语句必须以“;”结束,但书写格式是自由的。
()是编译预处理命令,其作用是将双引号或尖括号括起来的文件内容读到该命令的位置处。
()在程序的任何位置处都可以用*......*作注释,以提高程序的可读性。
2.2.1整型常量及其变量的定义
.整型常量
在语言中,有种类型的整型常量:
基本整型常量、长整型常量、无符号整型常量。
在语言中,不管是哪种类型的整型常量,都可以用种数制表示。
()十进制整型常量。
()十六进制整型常量。
()八进制整型常量。
.整型变量的定义
在程序中,用于存放整型数据的变量称为整型变量。
在语言中,可以定义基本整型、长整型、短整型和无符号整型等种类型的整型变量。
它们的定义方式如下。
()基本整型变量
定义基本整型变量的形式如下:
变量表列;
()长整型
定义长整型变量的形式如下:
[]变量表列;
()短整型
定义短整型变量的形式如下:
[]变量表列;
()无符号整型
定义无符号基本整型变量的形式如下:
[]变量表列;
①一个类型说明语句可以同时定义多个同类型的变量,各变量之间用逗号“,”分隔。
②用类型说明语句定义的变量只是说明了为这些变量分配了存储空间,以便用于存放与之相同类型的数据,在未对这些变量赋值前,这些变量中(即存储空间中)的值是随机的。
③语言允许在定义变量的同时为变量赋初值。
④在为整型变量初始化或赋值时,编译系统自动将被赋数据转换成与相应变量的类型一致。
⑤由于各种整型变量所占的字节数有限,因此,它们所能存放的整数有一定的范围。
实型常量及其变量的定义
.实型(浮点型)常量
()十进制数形式
()指数形式(科学记数法)
.实型变量的定义
在程序中,用于存放实型数据的变量称为实型变量。
在语言中,实型变量有单精度与双精度两种。
单精度双精度
字符型常量及其变量的定义
.字符型常量
'\'换行
'\'回车
'\'退格
'\'制表(横向跳格)
'\''单引号(单撇号)
'\"'双引号(双撇号)
'\'~位八进制数所代表的码字符
'\'~位十六进制数所代表的码字符
'\'走纸换页
‘\\’反斜杠字符
.字符型变量的定义
字符型变量的定义方式如下:
变量表列;
数据的输入与输出应包括以下几项:
①输入(出)的设备
②输入(出)的格式
③输入(出)的内容
格式输出函数
格式输出函数的一般形式如下:
(*“格式控制”,输出表);
其中格式控制部分要用一对双撇号括起来,它用于说明输出项目所采用的格式。
.整型格式说明符
()十进制形式
()八进制形式
()十六进制形式
.实型格式说明符
如果以十进制数形式输出实型数据,其格式说明符为
或
如果以指数形式输出实型数据,其格式说明符为
或
.字符型格式说明符
字符型数据的格式说明符为
或
()输出表中各输出项目之间要用“,”分隔。
()格式控制中的各格式说明符与输出表中的各输出项目在个数、次序、类型等方面必须一一对应。
()格式控制中除格式说明符外的其他字符将按原样输出。
()在输出格式说明符中,如果带有宽度说明,则在左边没有数字的位置上用空格填满(即输出的数字是右对齐)。
但如果在宽度说明前加一个负号(-),则输出为左对齐,即在右边补空格。
格式输入函数
格式输入函数的一般形式如下:
(“格式控制”,内存地址表);
.整型格式说明符
()十进制形式
用于输入十进制形式的整型数据。
()八进制形式
用于输入八进制形式的整型数据。
()十六进制形式
用于输入十六进制形式的整型数据。
.实型格式说明符
用于输入的单精度实型格式说明符为
或
用于输入的双精度实型格式说明符为
.字符型格式说明符
用于输入的字符型格式说明符为
或
赋值运算
赋值运算符为“=”。
赋值表达式为
变量名=表达式
()在语言中,“=”为赋值运算符,而不是等号;
()赋值运算符“=”左边必须是变量名,不能是表达式;
()赋值运算符“=”两端的类型不一致时,系统将自动进行类型转换。
算术运算
在语言中,基本的算术运算符有以下几个:
+加法运算符(双目运算符),或正值运算符(单目运算符)。
如+,+。
-减法运算符(双目运算符),或负值运算符(单目运算符)。
如-,-。
*乘法运算符(双目运算符)。
如*。
除法运算符(双目运算符)。
如。
模余运算符(双目运算符)。
只适用于整型数据,如的值为,的值为等。
关系运算
在语言中,基本的关系运算符有以下个:
<小于
<=小于或等于
>大于
>=大于或等于
==等于
!
=不等于
结果只有两个:
或者
执行=,=;后表达式=(==)的值是()
逻辑运算
在语言中,逻辑常量只有两种:
值非零表示“真”,值为零表示“假”。
其基本的逻辑运算符有以下个:
(逻辑与)两个量都为真时为真(),否则为假()
(逻辑或)两个量中只要有一个为真时为真(),只有都为假时为假()
!
(逻辑非)一个量为真时为假(),假时为真()
自增++与自减--运算符
增运算符“++”和减运算符“--”是两个单目(只有一个运算对象)运算符,它们的运算对象只能是整型或字符型变量。
增运算符是将运算对象的值增;减运算符是将运算对象的值减。
假设定义变量;;
前缀自增;
后缀自增;
运算符
运算符有以下两种用法:
()用于求得表达式计算结果所占内存的字节数。
其一般形式为
表达式
()用于求得某种数据类型的量所占内存的字节数。
其一般形式为
(类型名)
逗号运算符
逗号“,”是程序中常见的符号。
在语言中,逗号除作为分隔符使用外,还可以作为运算符来使用,称为逗号运算符。
逗号表达式的一般形式为
子表达式,子表达式,…,子表达式
在使用逗号运算符(逗号表达式)时,要注意以下几点:
()逗号运算符是所有运算符中级别最低的一种运算符。
()一个逗号表达式又可以与另一个表达式(可以是逗号表达式,也可以不是逗号表达式)连接成新的逗号表达式。
()在许多情况下,使用逗号表达式的目的仅仅是为了得到各个子表达式的值,而并不一定要得到或使用整个逗号表达式的值。
语言中的宏定义有两种形式:
符号常量定义与带参数的宏定义。
符号常量定义
在语言中,允许将程序中多处用到的“字符串”定义成一个符号常量。
在语言中定义符号常量的一般形式如下:
符号常量名字符串
①由于语言中的所有变量名、函数名等都使用小写字母,因此,符号常量名一般用大写字母表示,以便与语言中的保留关键字相区别。
②编译系统对定义的符号常量的处理只是进行简单的替换,不作任何语法检查。
③是一个命令,而不是语句,因此在行末不能加“;”,并且应独立占一行。
④命令一般应出现在程序中函数的外面,其作用域范围是从
符号常量名字符串
到
符号常量名(或文件末)
带参数的宏定义
带参数的宏定义的一般形式为
宏名(参数表)字符串
其中字符串中应包含在参数表中所指定的参数,并且,当参数表中的参数多于一个时,各参数之间要用逗号分隔。
在使用带参数的宏定义时,应注意以下两个问题。
()在使用带参数的宏定义时,一般应将宏定义字符串中的参数都要用括号括起来,否则经过宏展开后,可能会出现意想不到的错误。
()在使用带参数的宏定义时,除了应将宏定义字符串中的参数都要用括号括起来,还需要将整个字符串部分也要用括号括起来,否则经过宏展开后,还会可能出现意想不到的错误。
书写一个求最大值的宏定义
(,)((>)?
(),())
语句与复合语句
在语言中,一个表达式后面跟随一个分号就构成了一个语句,这种语句称为表达式语句。
在语言中,分号(;)是表达式语句的终结符,而不是语句之间的分隔符,也就是说,分号是表达式语句的一个组成部分,只不过它位于表达式的后面。
在一个函数体内部,由左、右花括号括起来的语句称为复合语句,它的一般形式为
{说明部分;语句部分;}
语句
语句的形式为
(表达式)语句
这种选择结构的流程图如图所示。
下面对语句作几点说明:
()语句中的逻辑表达式(即条件)必须要用一对圆括号括起来。
()语句后的语句可以是复合语句。
()一个语句
最后需要强调的是,在使用语句时,一定要注意逻辑表达式的正确写法,特别是在连续使用多个语句时更要注意。
…结构
在语言中,…结构的语句形式为
(表达式)语句
语句
下面对…结构作以下几点说明:
()…结构中的语句与语句都可以是复合语句。
()在…结构中,语句与语句都可以是空语句。
()在…结构中,如果在前面有多个语句,则与最近的配对。
()如果有多个……结构嵌套如下:
(表达式)语句
(表达式)语句
…
(表达式)语句
语句+
则可简写成
(表达式)语句
(表达式)语句
…
(表达式)语句
语句+
在…结构中,如果语句与语句都是单一的赋值语句,并且都是给同一个变量赋值,则可以用条件运算符来进行处理。
下面对条件表达式作几点说明:
()条件运算符优先级要比赋值运算符高。
()条件运算符的优先级比关系运算符与算术运算符都要低,因此,条件表达式中的“表达式”、“表达式”与“表达式”都不必用括号括起来。
()条件运算符的结合方向为“从右到左”。
在语言中提供了一个直接实现多路分支选择的结构,称为结构,其一般形式如下:
(表达式)
{常量表达式:
语句
常量表达式:
语句
…
常量表达式:
语句
:
语句+
}
下面对结构作几点说明:
()结构中的表达式、常量表达式、…、常量表达式必须是整型或字符型。
这是因为,在结构中,其分支数一般是有限的,并且是离散的,因此,其表达式的值也应是有限的,且是离散的。
()同一个结构中的常量表达式值必须互不相同,否则就会出现矛盾的现象,即对于“表达式”的同一个值对应多种执行方案,这是错误的。
()在结构中,与的顺序可以任意,各之间的顺序也可以任意。
()在执行结构时,当执行完某后的语句后,将顺序执行后面后的语句,直到遇语句才退出整个结构的执行。
()在结构中,如果没有且“表达式”值不等于任何后常量表达式的值,则直接退出结构而转到其后的语句执行。
例计算奖金。
当企业利润等于或低于万元时,奖金为利润的;当<≤万元时,超过万元部分的奖金为利润的,万元以下仍按计算;当<≤万元时,万元以下部分仍按前面的方法计算,超过万元的部分其奖金按利润的计算;当<≤万元时,万元以下部分仍按前面的方法计算,超过万元部分的奖金按利润的计算;当<≤万元时,万元以下部分仍按前面的方法计算,超过万元部分的奖金按利润的计算;当>万元时,万元以下部分仍按前面的方法计算,超过万元部分按计算。
其中由键盘输入,计算并输出相应的奖金数。
根据图所示的流程图,用…结构写出程序如下:
""
()
{,;
(":
");
("",);
(<=)=;
(<=)=*;
(<=)=+*(-);
(<=)=+*(-);
(<=)=+*(-);
(<=)=+*(-);
=+*(-);
("=\",);
}
例求解一元二次方程++=。
相应的程序如下:
""
""
()
{,,,,,,;
(",,:
");
("",,,);
(==)
{(==)("\");
("=\",-);
}
(==)
{=;
(<=)
{("=\",(-));
("=\",-(-));
}
{("=+\",());
("=-\",());
}
(==)
{("=\");
("=\",-);
}
{=*-**;
(>=)
{=();
(>)=(--)(*);
=(-+)(*);
=(*);
("=\",);
("=\",);
}
{=(-)(*);
=-(*);
("=+\",,);
("=-\",,);
}
}
}
4.1.1当型循环结构
当型循环结构的流程图如图所示。
循环
实现当型循环结构的语句形式为
(表达式)循环体语句
功能:
当表达式值≠时,执行循环体,执行完后继续判断表达式值,只有当表达式值=时才退出循环。
例从键盘输入各学生成绩,并对分以上(包括分)的学生人数进行计数,直到输入的成绩为负为止,最后输出成绩在分以上的学生人数。
其流程图如图所示。
其中变量为整型,用于对分以上的学生人数进行计数。
相应的程序如下:
""
()
{;
;
=;
("",);
(>=)
{(>=)=+;
("",);
}
("=\",);
}
直到型循环结构
直到型循环结构的流程图如图所示。
循环
循环的执行过程是,首先执行循环体,然后判断条件(即计算逻辑表达式),如果条件满足(即逻辑表达式值为真),则退出循环结构;如果条件不满足(即逻辑表达式值为假),则继续执行循环体。
实现直到型循环结构的语句形式为
循环体语句(表达式);
功能:
先执行循环体,然后判断表达式值,若表达式值≠,则再次执行循环体,如此循环,直到表达式值=为止。
例计算并输出下列级数和:
直到某项的绝对值小于为止
相应的流程图如图所示。
其中用于改变每一项的符号,因为这是一个各项符号相间的级数。
相应的程序如下:
""
()
{;
,,;
=;=;=;
{=+;=-;=(*(+));=+*;}
(>=-);
("=\",);
}
当型循环结构与直到型循环结构的区别与联系
当型循环结构与直到型循环结构既有共同之处,又有区别。
主要体现在以下几个方面。
()在循环中,其循环体可以一次也不执行(即执行循环结构的一开始,其条件就不满足)。
()不管是循环结构还是—循环结构,在循环体内部必须要有能改变条件(即逻辑表达式值)的语句,否则将造成死循环。
()对于有些问题既可以用循环结构来处理,也可以用—循环结构来处理。
()不管是循环结构还是—循环结构,其循环体如果包含一个以上的语句,应以复合语句形式出现。
语言提供的循环属于当型循环结构,其一般形式为
(表达式;表达式;表达式)循环体语句(组)
它等价于下列的当型循环结构:
表达式;
(表达式)
{循环体语句
表达式;
}
下面对循环语句作几点说明:
()在语句中,三个表达式中的任何一个表达式均可省略,但其中的两个“;”不能省略。
()下列两个循环都是死循环:
(表达式;;表达式)循环体
与
(;;)循环体
因为它们都没有用于判断循环是否结束的条件(即表达式)。
()循环本质上也是当型循环结构,只不过它对于事先可以确定循环次数的问题特别方便。
()在循环中,循环体也可以是复合语句(即用一对花括号{}括起来的语句组)。
循环的嵌套
所谓循环的嵌套是指一个循环体内又包含了另一个完整的循环结构。
语言允许循环结构嵌套多层。
循环的嵌套结构又称为多重循环。
例计算并输出以内(包括)所有自然数的阶乘值。
即计算!
,!
,!
,!
,!
,!
,!
,!
,!
,!
。
采用的方法是,对于以内的每一个自然数分别求它们的阶乘值。
其流程图如图所示。
显然,这是一个二重循环结构。
相应的程序如下:
""
()
{,;
;
(=;<=;=+)
{=;
(=;<=;=+)=*;
("!
=\",,);
}
}
语句
语言中的语句有以下两个功能:
()跳出结构;
()退出当前循环结构,包括结构、…结构和循环结构。
语句
语句的功能是结束本次循环的执行,但不退出循环结构。
下面举两个例子来说明语句的使用。
例输出~之间所有能被或整除的自然数。
相应的程序如下:
""
()
{;
(=;<=;=+)
{(!
=)(!
=));*结束本次循环,继续进行下次循环*
("\",);
}
实际上,上述程序等价于
""
()
{;
(=;<=;=+)
{(==)(==))("\",);
}
}
5.1.1函数的概念
在语言中,函数分为以下两种。
()标准库函数
这种函数用户不必定义,但可直接使用。
例如(),(),(),(),(),(),()等都是语言中常用的库函数。
()用户自己定义的函数
这种函数用以解决用户的专门问题,一般由用户自己编写。
例从键盘输入两个正整数与(≥),求的值(即求)。
其程序如下:
""
()*主函数*
{,;
();*说明本函数中要调用的函数()是整型*
(",",,);
(>=)("\",()(-));
("<!
\");
}
()*计算阶乘值的函数*
;
{,;
=;
(=;<=;=+)=*;
();
}
下面对函数作几点说明:
()一个完整的程序可以由若干个函数组成,其中必须有一个且只能有一个主函数()。
()一个完整程序中的所有函数可以放在一个文件中,也可以放在多个文件中。
①在编译命令行中键入各个函数所在的文件名(各文件名之间用空格分隔)。
②在主函数中用语句将各函数所在的文件包含进来。
()语言中的函数没有从属关系,各函数之间互相独立,可以互相调用。
函数的定义
在语言中,函数定义的一般形式为
类型标识符函数名(形参表列)
形参类型说明
{说明部分
语句部分
}
在定义函数时要注意以下几点。
()函数类型标识符同变量类型说明符,它表示返回的函数值类型。
()如果省略函数的类型标识符,则默认为是型。
()语言允许定义空函数。
如
(){}
()函数中返回语句的形式为
(表达式);
或
表达式;
()如果“形参表列”中有多个形式参数,则它们之间要用“,”分隔。
()语言允许在形参表中直接对形参的类型进行说明。
函数的调用
函数调用的一般形式为
函数名(实参表列)
()函数调用可以出现在表达式中(有函数值返回);也可以单独作为一个语句(无函数值返回)。
()实参表中的各实参可以是表达式,但它们的类型和个数应与函数中的形参一一对应。
()在调用函数中,通常要对被调用函数的返回值类型进行说明(一般在调用函数的函数体中的说明部分),包括函数类型、函数名和一对圆括号。
例下列程序的功能是计算输出一个圆台两底面积之和。
""
()
{,;
();
(",:
");
(",",,);
("=\",(,));
}
(,)
,;
{;
=*(*+*);
();
}
但语言规定,在以下几种情况下可以不在调用函数中对被调用函数作类型说明:
①被调用函数为整型或字符型,自动按整型处理。
②被调用函数的定义出现在调用函数之前。
③在调用函数之前已经由别的函数(它可能也要调用该被调用函数)对被调用函数作了类型说明。
()语言虽不允许嵌套定义函数,但可以嵌套调用函数。
形参与实参的结合方式
.地址结合
所谓地址结合,是指在一个模块调用另一个模块时,并不是将调用模块中的实参值直接传送给被调用模块中的形参,而只是将存放实参的地址传送给形参。
.数值结合
所谓数值结合,是指调用模块中的实参地址与被调用模块中的形参地址是互相独立的,在一个模块调用另一个模块时,直接将实参值传送给形参被存放在形参地址中。
例分析下列程序:
(,)
,;
{;
=;=;=;
;
}
""
()
{,;
("=,=",,);
(,);
("=,=\",,);
}
在这个程序中共有两个函数。
在主函数中分别为整型变量与输入数据,然后调用函数(,)。
而函数(,)的功能是实现变量值与值的交换。
但在实际运行该程序时,如果从键盘输入
=,=↵
则输出的结果为
=,=
即没有达到交换的目的。
这是因为在主函数中调用函数()时,只是将实参和的值分别传递给了()函数中的形参和,但由于主函数中的实参和与函数()中的形参和在计算机中的存储地址是不同的,因此,在函数()中虽然交换了形参与的值,但实参与的值实际上没有改变,即它们没有被交换。
由此可以看出,在形参与实参为数值结合的情况下,实参与形参在计算机内存中的存储地址不是同一个,因此,即使在被调用函数中改变了形参值,调用函数中的实参值也是不会被改变的。
局部变量与全局变量
.局部变量
在函数内部定义的变量称为局部变量。
函数内部定义的变量只在该函数范围内有效,因此,不同函数中的局部变量可以重名,互不混淆。
.全局变量
在函数外定义的变量称为全局变量
除非十分必要,一般不提倡使用全局变量,其原因有以下几点:
①由于全局变量属于程序中的所有函数,因此,在程序的执行过程中,全局变量都需要占用存储空间,即使实际正在执行的函数中根本用不着这些全局变量,它们也要占用存储空间。
②在函数中使用全局变量后,要求在所有调用该函数的调用程序中都要使用这些全局变量,从而会降低函数的通用性。
③在函数中使用全局变量后,使各函数模块之间的互相影响比较大,从而使函数模块的“内聚性”差,而与其他模块的“耦合性”强。
④在函数中使用全局变量后,会降低程序的清晰性,可读性差。
动态存储变量与静态存储变量
.用户程序的存储分配
一般来说,用户程序在计算机中的存储分配如图所示。
其中:
程序区用于存放程序;
静态存储区是在程序开始执行时就分配的固定存储单元,如全局变量;
动态存储区是在函数调用过程中进行动态分配的存储单元,如函数形参、自动变量、函数调用时的现场保护和返回地址等。
.变量的存储类型
①数据类型:
如整型()、实型()、字符型()、双精度型()等。
②
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课件 word