函数是构成C源程序的基本单位。,源程序是什么

源程序 12
回顾 函数是构成C源程序的基本单位。
一个函数由函数首部(Head)和函数体(Body)两部分组成。
任何一个C程序中有且只能有一个main函数,也称为主函 数。
C语言源程序需要经过编译连接后才能运行。
结构化程序设计的三种基本结构分别是顺序、选择和循环。
数学与信息技术学院
1 第2章C语言基础知识
一、数据类型
二、标识符与关键字
三、常量
四、变量
五、运算符与表达式
六、数据类型转换 数学与信息技术学院 【例】编程求任意圆的周长和面积。
#include#definePI3.1415926voidmain(void){intr; doublec,s;printf("请输入圆的半径(整数):");scanf("%d",&r);c=2*PI*r;s=PI*r*r;printf("circum=%f\n",c);printf("area=%f\n",s);} 数学与信息技术学院 C语言的主要‚单词‛
1、标识符 标识符是在程序中使用的变量名、常量名、用户自定义函数名和数组名、文件名等的统称。

2、常量 常量是有数据类型的,如123、3.1415926
3、运算符 代表对各种数据类型实际数据对象的运算。
如,+(加)、-(减)、*(乘)、/(除)、%(求余)、>(大于)
4、其他符号 数学与信息技术学院
一、标识符与关键字 C语言的标识符规定由字母、数字以及下划线组成,且第一个字符必须是字母或下划线。
在C语言中标识符是区分大小写的。
C语言的标识符可以分为以下三类。

(1)关键字(Keywords)
(2)预定义标识符(PredefinedIdentifier)
(3)用户自定义标识符 数学与信息技术学院
1、关键字(keyword) 又叫保留字,由C语言规定的、具有特定意义、专门用作语言特定成分、不能作其它用途的一类标识符,通常也称为保留字。
在C语言中所有的关键字都必须小写。
数学与信息技术学院 类型 数基本数据类型据类类型修饰关键字型关键复杂类型关键字字19存储类别关键字个 流程跳转结构控制选择结构关键字循环结构12数个学与信息技术学院 关键字void、char、int、float、doubleshort、long、signed、unsigned 功能声明数据的类型对整型数据进行修饰 struct、union、enum、typedef 声明复杂数据类型 auto、static、register、extern、const、说明变量的存储类别volatile return、continue、break、goto 改变程序的执行流程 if、else、switch、case、default 选择结构的控制语句 for、do、while 循环结构控制语句
2、系统预定义标识符 
库函数名、预编译命令,这类标识符称预定义标识符。
如,系统库函数sin,printf,scanf,预编译命令define, include,undef等。
一般不把这些标识符再定义为用户自定义标识符。
数学与信息技术学院
3、用户自定义标识符(User-definedIdentifier) 用户根据编程需要定义的标识符,用于标识变量、符号常量、用户自定义函数、类型名等。
用户自定义标识符一般应做到‚见名知义‛,以增加程序的可读性。
判断用户标识符的合法性:smart2、_decision、5smart、bomb?
、float 数学与信息技术学院 C语言中的其他符号 数学与信息技术学院
二、数据类型 C语言提供的数据结构是以数据类型形式表示的。
‚数据类型‛是一类数据的抽象表示,这类数据具有相同的形式,遵从相同的运算规则。
同一数据类型有相同的性质。
数学与信息技术学院 12 基本数据类型C(原子类型)语言数据类型 构造类型 指针类型 数学与信息技术学院 C语言的数据类型 有符号短整型(short) 无符号短整型(unsignedshort) 数值类型 整型 有符号整型(int)无符号整型(unsignedint)有符号长整型(long) 无符号长整型(unsignedlong) 实型(浮点型) 单精度型(float)双精度型(double) 非数值类型 字符类型(char)空类型(void) 数组(array) 结构体(struct) 共用体(union) 枚举类型(enum) 13 (一)基本数据类型
1.数值类型数据 主要用于科学计算领域。
分为‚整型‛和‚实型‛。

(1)整型(Integer)——int •按内存中整型数据的存储长度,整型分为: 短整型(shortint)、基本整型(int)、 长整型(longint)。
•同样存储长度的整型数据又分为: • 无符号整数(unsigned、有符号整数(signed)。
数学与信息技术学院 14 在VC++中,各种类型变量在内存中占据的空间 数据类型(括号中关键字可省)
字节个数 short(int)
2 short unsignedshort(int)
2 int
4 int unsigned(int)
4 long(int)
4 long unsignedlong(int)
4 取值范围 -32768~+32767(-215~215-1) 0~65535(0~216-1)-2147483648~2147483647(- 231~231-1)0~4294967295(0~232-1)-2147483648~2147483647(- 231~231-1)0~4294967295(0~232-1) 数学与信息技术学院 15
(2)实型(Real)——float和double C中实型数据类型分为:单精度实数(float)和双精度实数(double)两种 数据类型字节个(关键字)数 float
4 double
8 数学与信息技术学院 取值范围 约-3.4×1038~3.4×1038 (6位有效数字)约-1.7×10308~ 1.7×10308(12位有效数字) 16 精度(位)715
2.非数值型数据类型 字符类型(Character)——char 字符数据类型是构建文本数据的‚原子‛。
定义和规范了字符型数据和小数值整型数据。
每个字符型数据在内存中占一个字节。
值域:ASCII码表的所有符号——包括字母、数字、标 点、空格、回车等。
数学与信息技术学院 17 空类型——void void的意思是‚无、没有‛,是空类型关键字,强调函数的返回值类型为空或函数无参数。
C语言中,函数没有返回值,需要用void说明。
凡不加返回值类型限定的函数,会被编译器作为整型返回值处理。
数学与信息技术学院 18 (二)构造类数据类型 构造数据类型:利用已定义的一个或多个其它数据类型来构造新的数据类型的方法。
构造类型数据的值:可以分解成若干个‚成员(Member)‛或‚元素(Element)‛。
每个‚成员‛或‚元素‛都是一个基本数据类型或又是一个构造类型。
C语言中,构造类型有数组类型、结构类型、共用体类型和枚举类型。
数学与信息技术学院 19
三、常量 常量:在程序运行过程中值不会发生变化的数据,如3.1415926、3等。

1.整型常量
2.实型常量(实数)
3.字符(Character)型常量
4.字符串(string)常量
5.符号常量(SymbolicConstant) 数学与信息技术学院 23
1.整型常量
(1)十进制整常数是0~9的一个,或多位十进制数,但首位不能为
0。
如:0、5、100、-200、32767等。

(2)八进制整常数必须以0(不是字母o)作为起始位,是0~7中的一个,或多位八进制数。
例如:八进制数011、023,分别表示十进制的9和19。

(3)十六进制整常数以0X(或0x)作为起始位,由0~9、a~f(或A~F)中的一个,或多位十六制数。
例如0x12、0xaf、0X1e,分别表示十进制数的18、175和30。
数学与信息技术学院 24
2.实型常量(实数) 带有小数点的常量。

(1)十进制小数形式 由数字和小数点组成(必须要有小数点)。
例如3.14、0.5、.5、
5.、7.0、0.0等。
注意:小数点不可单独出现。

(2)指数形式 ‚十进制小数‛+‚e(或E)‛+‚十进制整数‛ 例如:1234.567可表示为:1.234567E3或 注意:C语言的语法规定,字母e(或E)之前必须有数字且其后的数据必须为整数。
数学与信息技术学院 25
3.字符(Character)型常量
(1)字符常量的表示用一对半角单引号括起来的一个字符。
如’A’、’a’、’2’等注意:①单引号中的大、小写字母表示不同的符号常量,如’A’和’a’表示不同的字符。
②单引号引起的空格(’’)也是一个字符常量。
③字符常量只包含一个字符,’AB’是非法的。
数学与信息技术学院 26
(2)字符常量在内存中的存储方式内存中存储的是字符ASCII码值的二进制形式。
如,字符‘A’在内存中存储的65,即01000001 数学与信息技术学院 27
(3)字符常量可以进行的运算 ①字符+整数。
如,‘0’+2是字符‘0’后第2个字符即‘2’的代码值;
某大写字母加上整数32,则转换为相应的小写字母等。
②字符-整数。
如:‘z’-2代表字母‘z’倒数前两个字符‚x‛ ③比较两个字符。
如,‘A’<‘B’,结果为真。
因为字符‘A’的ASCII
值小于字符‘B’的ASCII值 数学与信息技术学院 28
(4)转义字符(EscapeCharacter)常量 字符分为:可打印字符(PrintingCharacter)非印刷字符: 如:退格符、换行符、制表符等,以及一些被用于固定用途的字符。
C语言选用反斜杠(\)作为意义转换引导符,后面紧跟一个有特殊含义的字符或一个数字序列,称为转义序列(EscapeSequence)或转义字符。
反斜杠表示它后面的字符已失去它数学与信原息技来术的学院含义,转变成另外特2定9的含义。
常用的转义字符如下: 字符\n\v\r\\ \” 功能换行竖向跳格回车反斜杠字符 双引号字符 字符 功能 \t 横向跳格 \b 退格 \f 换页 \‟ 单引号字符 \ddd1到3位8进制表示的字符 \xhh1到2位16进制表示的字符\
0 空值 数学与信息技术学院 30
4.字符串(string)常量 字符串常量或串常量(String)是由半角双引号(‛)括起来的零个或多个字符(character)组成的有限序列。
字符串的长度:包含字符的个数字符串结束标志:转义字符\
0。
它在内存中占一个字节, 表示字符的结束,但不记入字符长度。
例:字符串常量‚ABC12342@‛‚‛/*一个空格字符串*/‚‛/*双引号中什么也没有,称为空串*/ 数学与信息技术学院 31
5.符号常量(SymbolicConstant) 符号常量:在程序中用指定的标识符代表某个常量,符号字面不能直接看出数据类型和值。
符号常量必须先定义,后使用。
符号常量定义的一般形式是:#define符号常量常量‚符号常量‛是一个遵循变量命名规则的名字,也称为宏名;习惯上用大写字母表示。
‚常量‛是C语言中的一个常量,简称‚宏体‛,由ASCII字符集中的字符组成。
数学与信息技术学院 32 【例1】阅读程序,理解常量数据。
#include #defineR5.4 /*符号常量R代表实型常量5.4*/ #definePI3.1415926/*符号常量PI代表实型常量3.1415926*/ voidmain() {printf("theradiiis:=%f\n",R); printf(“thevalueofthecircum:%f\n”,PI*R*R); } 数学与信息技术学院 33
四、变量 变量:在程序运行过程中,其值可以变化的数据。
使用不同的标识符来表示不同的变量,如r、
S、V等代表不同的数据,需要占用不同的内存单元。
数学与信息技术学院 34
1.变量的三要素 变量的三个重要属性:变量的名称、值和类型。
变量名应使读者易于明白其中存储的值是什么。
如变量num1表示操作数、sum表示数据和。
例:intx;/*变量类型、名*/  x=5; /*变量值*/ 数学与信息技术学院 35
2.简单变量的说明(Declaring)及使用 C语言中,变量须‚先定义,后使用‛使用变量的三个步骤: 定义声明:用数据类型说明符和变量标识符对变量进行声明定义。
一般,声明定义变量的语句位置放在函数体的开始处。
变量赋值:程序中正确使用变量前,变量必须有确定的值——为变量赋以确定的值。
变量使用:在程序中获得变量中所存储的值进行运算。
数学与信息技术学院 36
(1)变量声明(DeclareVariable) 变量声明的一般格式为: 例如:类型标识符变量名[,变量名,……]; inta,b,c;/*定义三个基本整型变量a,b,c*/ chard;/*定义字符型变量d,变量值未知*/ 说明: –类型标识符是C语言合法的数据类型。
–变量名必须满足C语言中标识符的命名规则。
–在同一程序段中,变量不允许被重复定义。
数学与信息技术学院 37
(2)变量赋值(VariableEvaluate)变量初始化:在声明语句中指定变量的值,称为变量的初 始化(Initialization)。
不占用运行时间。
例,intsum=0;/*对和值变量,一般置初值为0*/ shorta=291,b=-1;注意: 定义而未初始化的变量具有未知的初值。
在变量定义语句中,连续赋初始值是不允许的。
如, inta=b=100;/*错误*/ 数学与信息技术学院 38 变量赋值:在程序的执行语句中指定变量的值,称为变量赋值,占用运行时间。
例, {inta,b;/*变量定义*/ a=10,b=2;/*执行语句中为变量赋值*/ a=a+b;/*执行语句中为变量再赋值*/ …… } 数学与信息技术学院 39
(3)变量的使用(UsingVariable)。
在程序中获得变量中所存储的值进行运算例:inta,b;a=10;/*执行过程中为变量赋值*/b=2*a;/*执行过程中使用变量a并为b赋值*/ 数学与信息技术学院 40 【例2】阅读并分析程序中的数据及其类型 数学与信息技术学院 #include#definePI3.1415926 常量 voidmain(void) {intr;doublec,s; 变量 printf("请输入圆的半径(整数):"); scanf("%d",&r); c=2*PI*r;s=PI*r*r; printf("circum=%6.2f\n",c); printf("area=%6.2f\n",s); }41 程序剖析 ①C语言中的常量。
常量也是有类型的。
直接常量:数据直接写在程序中。
如,例句中的系数2是直接常量,为整数类型。
如,例句中的"请输入圆的半径(整数):"是字符串常量。
符号常量:数据用符号替代。
#definePI3.1415926定义了符号常量PI。
π在C语言中是非法符号。
程序中的PI代替了π。
将常用的常量用宏命令定义为宏符号。
宏符号一般用大写字母。
宏命令格式如下:#define宏符号常量数据宏定义是编译预处理命令。
数学与信息技术学院 42 ②C语言中的变量。
变量也有不同的类型。
语句intr;和doublec,s;定义了不同的变量变量有变量名和数据类型,r是整型int,c,s是实型double。
数学与信息技术学院 43 本讲小结 C语言中的标识符和各种元素C语言中数据的类型C语言用常量和变量来表示数据 数学与信息技术学院 44 作业 复习课堂上讲过的内容(读教材、课件)课后习题预习实验
数学与信息技术学院 45 回顾 C语言中的标识符和关键字C语言中数据的类型C语言表示数据用常量和变量 数学与信息技术学院 46 第2章C语言基础知识
一、数据类型
二、标识符与关键字
三、常量
四、变量
五、运算符与表达式
六、数据类型转换 数学与信息技术学院
一、运算符与表达式
1.运算符(Operator)及表达式(Expression)
(1)运算符的分类按结合操作数的个数:单目运算符(UnaryOperator),双目 运算符(BinaryOperator),三目运算符(TernaryOperator)按运算功能分为:算术运算符、赋值运算符、关系运算符、 逻辑运算符、逗号运算符以及特殊运算符。

(2)运算符的优先级(Priority)和结合性(Combine)分为:左结合(自左至右)和右结合(自右至左) 数学与信息技术学院
(3)表达式(Expression)由运算符和操作对象组成的式子叫表达式。
操作数可以是常量、 变量、函数或表达式。
表达式运算中,不仅要考虑运算符的优先级,还要考虑结合方 向。
数学与信息技术学院 C语言运算符如下: 数学与信息技术学院 (一)算术运算符及算术表达式 算术运算符(ArithmeticOperators)分为:基本算术运算符、正负号运算符和自增/自减运算符三大类。
单目 双目 运算符++--+-+-*/%名称自加自减正负加减乘除求余 结合方向 右结合 左结合 数学与信息技术学院
1.基本算术运算符(+、-、*、/、%)
(1)基本运算符属性:双目运算符;*、/、%为同一优先级,高于+、-;在优先级相同的情况下是左结合。

(2)除法运算(‚/‛)整除:如果除运算的两个操作数都是整型数据,叫‚整除‛ 运算,则运算结果也为整型。
实除:若除数或被除数至少有一个是实数,则被看成是 ‚实除‛,则运算结果为实型。
数学与信息技术学院 例:inta;a=5/2;因为5和2为整数,5/2是整除运算,所以,结果为整 数,取整数
2。
例:intch=101;intb; b=ch/3;b的值为33。
例:floata; a=5/2;a为实型,a的值是2.0,非2.5。
计算5/2时发生了精度丢失,5/2的结果是
2,再赋值给实型变量,转换为2.0。
数学与信息技术学院 例:floata;a=5.0/2.0;或者:a=5/2.0;或者:a=5.0/2;5.0/2.0、5/2.0、5.0/2均是实除,结果均为2.5 a的值为2.5例:求表达式1/2*(a+b)的结果。
因为1/2的结果为整型
0,所以表达式的结果为
0。
数学与信息技术学院
(3)%(求余)运算 求余运算的操作对象只能是整数类型。
例:inta=5%2; /*a值是1*/。
求余用途 例:判断奇/偶数。
如,x%2的结果为
0,则说明x为偶数;x%2的结果不为
0,则说明x为奇数。
例:判断a是否能被3整除。
a%3的结果为
0,则说明a能被3整除;如a%3的结果不为
0,则说明a不能被3整除。
数学与信息技术学院 例:利用整除和求余运算拆分一个整数的各位数字。
如:123%10
3 123/100
1 123%100/102 设a是一个三位数,则: a%10的结果是a的个位数字; a/100的结果是a的百位数字; a%100/10的结果是a的十位数字; 数学与信息技术学院
2.自增(Increment)/自减(Decrement)运算符 符号:++、-- 操作数只能是变量,不能是常量和表达式。

功能:使该变量加1(自增)或减1(自减)。
单目运算符,优先级与正、负号优先级相同,但高于基本算术运算符,结合性为自右向左。
++、--有前置(Prefix)和后置(Postfix)两种运算方式。
前置运算:运算符在变量的前面,如++n,--n;后置运算:运算符在变量的后面,如n++,n—。
数学与信息技术学院 如表达式中仅仅是对单个变量进行自运算(Selfoperation),前置运算或后置运算的结果相同。
例,有语句如下:intn=10;n++;/*或++n;n的值都是11*/n--;/*或--n;n的值都是10*/ 数学与信息技术学院 含有自增(减)运算的复杂表达式中,自增(减)的前置和后置运算是有区别的。

1.前置运算:先加1(或减1),然后用已加1(或减1)的变量参加其它运算。
如:c=++a;
2.后置运算:先用未加1的变量参加其它运算,然后再将该变量加1(或减1)。
如:c=a++; 数学与信息技术学院
3.算术表达式 算术表达式是指用算术运算符将各操作数连接起来的、符合一定语法规则的式子。
算术表达式中可以包含算术运算符、常量、变量、函数和表达式等元素。
如,5%2、a/2、a+b+c、3+6、a*(b/c-d)、++n、sin(a+b) 等都是算术表达式。
数学与信息技术学院 (二)赋值运算符和赋值表达式
1、赋值运算符(Assignment
Operator) 赋值运算符号:=赋值表达式形式为:变量=表达式 说明:
(1)赋值号的左边是任何合法的变量名,右边是任何合法的C语言表达式,它确定了特定的值。

(2)结合方向是自右向左。

(3)优先级别很低(14级),仅高于将学到的逗号运算符。

(4)赋值操作:先计算右边表达式的值,再转换成左边变量对象的类型,存入左边变量代表的内存空间。
数学与信息技术学院 61 注意:
(1)赋值表达式加上分号(;),构成赋值语句。
如,赋值语句:r=2;
(2)‚=‛左边必须是变量名,不能是表达式。
如,a+b=3;/*错误!不能给表达式赋值*/
(3)执行语句中,可以使用连续赋值操作。
如:inta,b;a=b=100;/*等价于a=(b=100),结果a和b的值都为100*/初始化语句中,inta=b=100;是不允许的。
数学与信息技术学院 【例3】简单事务处理问题。
编程实现交换两个变量的值(必记算法)。
#include voidmain(void) {floata,b,t; /*定义3个实型变量*/ a=2;b=3; /*给a和b变量赋值*/ printf("交换前:a=%f,b=%f\n",a,b); t=a;a=b;b=t;/*交换两个变量的值*/ printf("交换后:a=%f,b=%f\n",a,b);/*输出*/ } 数学与信息技术学院 63 程序改进: #include voidmain(void) {floata,b,t; /*定义3个实型变量*/ printf("请输入两个变量的值:\n");/*信息提示语句*/ scanf("%f%f",&a,&b); /*键盘输入a和b变量的值*/ printf("交换前:a=%f,b=%f\n",a,b); t=a;a=b;b=t; /*交换两个变量的值*/ printf("交换后:a=%f,b=%f\n",a,b);/*输出*/ }数学与信息技术学院 64
2、复合赋值运算符 其他双目运算符和赋值号组合成的运算符。
对变量自身进行某种运算再赋值给变量自身的运算。
如:*=、+=、-=、/=、%=等。
例: n+=1;a/=b;m+=3;i-=1; /*n=n+1;*//*a=a/b;*//*m=m+3;*//*i=i-1;*/ 数学与信息技术学院 65 (三)逗号(Comma)运算符 逗号运算符(,)将多个表达式连接起来,称逗号表达式。
逗号表达式的一般形式为:表达式
1,表达式
2,…,表达式n例,交换两变量值的逗号表达式:t=x,x=y,y=t 数学与信息技术学院 66 说明:逗号运算符的优先级别最低(15级),结合性是自左至右。
功能:依次求解每个表达式,即先计算表达式
1,最后计算 表达式n。
整个逗号表达式的值是逗号表达式序列中最后一个表达式的值。
注意:程序中有的地方,逗号仅是作为分隔符使用。
例,printf(‚%d,%d\n‛,x,y); 数学与信息技术学院
二、数据类型转换(TypeConversion) C语言允许不同类型的数据进行混合运算。
计算合法的C语言表达式时,先将表达式中不同类型的数 据转换为同一类型,再进行运算。
类型转换在C语言中也是一种运算。
数据类型转换有时是根据需要由系统自动进行的,称为自 动转换;有时是由编程者强制进行的,称为强制转换。
数学与信息技术学院 68
1、数据类型自动转换(隐式转换)
(1)算术运算中的类型转换 
例:floata=5.0/2 例:V=4/3*PI*r*r*r /*是否能求出球体积?*/ 分析: 表达式中,常量4和3均是整数,4/3结果是整数 (为1),这并不是需要的结果。
为保证结果的有效 性,写为4.0或3.0,变换为实数运算。
数学与信息技术学院
(2)赋值运算中的数据类型自动转换 
若赋值运算符两侧的数据类型不同,则赋值号右侧表达式类型的数据将转换为赋值号左侧变量的类型,再进行赋值。
如,有以下定义:floata=10;/*a的结果值为10.0(数据填充)*/intb=15.5;/*b的结果值为15(数据截取)*/ charc=97;/*c的结果值为字符‘a’*/ 注意:若右侧表达式结果数据类型长度比左侧变量的数据 类型长时,将丢失一部分数据,从而造成数据出错。
数学与信息技术学院
(3)数据输出时的数据类型自动转换 
用输出语句输出数据时,数据将转换为格式控制符所要求的类型如,有以下定义:printf(“%d”,97)/*输出结果为97*/printf(“%d”,„a‟)/*输出结果为97*/ 数学与信息技术学院
2、强制类型转换(显式类型转换) 将一个表达式的值强制转换成所需的数据类型。
强制类型转换一般格式为:(类型说明符)表达式功能:强行将表达式结果的类型转换为括号内要求的类型。
例:floatx=4.9; (int)x+4.2,先将变量x强制转换为整型值
4,和4.2进行加法运算,4转换为4.0,结果为8.2。
(int)(x+4.2),先求x与4.2之和,结果为9.1,再将运算结果 9.1强制转换为整型,结果为
9。
数学与信息技术学院 【例4】输入某学生三门课程的成绩,计算平均值。
#include
voidmain(void) {intsc1,sc2,sc3,sum=0; floatave; printf("请输入三门课程的成绩(整数):"); scanf("%d%d%d",&sc1,&sc2,&sc3); sum=sc1+sc2+sc3; ave=(float)sum/3; printf("平均分为:%.2f\n",ave); } 数学与信息技术学院 73 【例5】输入一个三位整数,将其转换为其逆置数输出。
#include
voidmain(void) {intnum,g,s,b; printf("请输入一个三位整数:"); scanf("%d",&num); g=num%10; s=num/10%10; b=num/100; num=g*100+s*10+b; printf("逆置数为:%d\n",num); }
数学与信息技术学院 74 本讲小结 算术运算符、赋值运算符、逗号运算符及其构成的表达式 数据类型转换C语言的语句 数学与信息技术学院 75 作业 复习课堂上讲过的内容(读教材、课件)课后习题 数学与信息技术学院 76 下讲概要 格式输入输出函数字符输入输出函数C语言的语句 数学与信息技术学院 77

标签: #demo #位置 #文件 #文件 #代理服务器 #工程师 #贵州 #文件