《第周.ppt》由会员分享,可在线阅读,更多相关《第周.ppt(58页珍藏版)》请在三一文库上搜索。
1、第1章 C语言概述,本章要点: C语言的发展史 C语言的特点 C语言的语法成分 C语言程序的基本构成 C语言程序的编译过程,1. 语言的字符集 2. 标识符 3. 关键字 4. 运算符 5. 分隔符 6. 注释符,基本语法成分,字符是组成语言的最基本的元素。语言字符集由字母,数字,空格,标点和特殊字符组成。 (1)字母:大小写字母。 (2)数字:09共10个 (3)空白符 空格符、制表符、换行符等统称为空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出现时,只起间隔作用,编译程序对它们忽略,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性。 (4)标点和特殊字符 主要有 !
2、# % ? ” ( ) 等等。,在程序中使用的变量名、函数名、标号等统称为标识符,用来标识各种程序成分。除库函数的函数名由系统定义外,其余都由用户自定义。C语言规定,标识符只能是由字母(AZ,az)、数字(09)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。 在使用标识符时还必须注意以下几点: (1) 在标识符中,大小写是有区别的。例如BOOK和book 是两个不同的标识符。习惯上符号常量用大写字母表示,而变量名等用小写字母表示。 (2) 标识符虽然可由程序员随意定义,但不能与关键字同名,也不能与系统预先定义的标准标识符(如标准函数)同名,关键字是由语言规定的具有特定意义的字
3、符串,通常也称为保留字。如类型说明符int,double等;语句特征if、switch、while等;预处理命令include、define等。关键字是构成C语言的语法基础,用户定义的标识符不应与关键字相同,也不能对关键字进行重新定义。,语言中含有相当丰富的运算符。运算符与变量、函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。根据参加运算对象的个数,运算符可分为单目运算符、双目运算符和三目运算符。,C语言中的分隔符有逗号和空格两种,逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字、标识符之间必须要有一个以上的空格符作间隔, 否则将
4、会出现语法错误。例如把“int a;”,写成“ inta;”,C编译器会把“inta”当成一个标识符处理,其结果必然出错。,注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。在调试程序时,对暂不使用的语句也可用注释符括起来,使编译跳过不作处理,待调试结束后再去掉注释符。,关键字,标识符练习,1、下列选项中,可以作为语言标识符的是( ) A) 3stu B)#stu C)stu3 D)stu.3 2、以下不能定义为用户标识符的是_。 A)Main B)_0 C)_int
5、 D)int 3、以下叙述中错误的是( ) A)用户所定义的标识符允许使用关键字 B)用户所定义的标识符应尽量做到“见名知意” C)用户所定义的标识符必须以字母或下划线开头 D)用户定义的标识符中,大、小写字母代表不同标识 4、以下不合法的用户标识符是 ( ) A) j2_KEY B) Double C) 4d D)_8_,1.3 C语言程序组成,先看几个程序: 例1.1显示:“What is your name?”。 main( ) printf(“What is your name?”); 程序的运行结果: What is your name?,例1.2 计算两个给定整数的和 main(
6、) int a,b,sum; /* 这是定义变量 */ a=8; b=10; /* 变量赋初值 */ sum=a+b; /变量参与运算 printf(“Sum is %d n”,sum); /输出sum的值 程序的运行结果: Sum is 18,例1.3:从键盘输入两个整数,并将最大的数显示出来。 #include /*包含预处理语句*/ int max(int x,int y) int z; if(xy) z=x; else z=y; return(z ); main( ) int a,b,c; printf(“Please input two integers:n”) ; scanf(“%
7、d,%d” , ,程序运行情况: Please input two integers: 8,5 max=8,通过以上例子可以看出: 1.C程序至少要有一个main函数,用户也可以自己根据需要设计自己的函数,像上面的max()函数。 2.一个可执行的C语言程序总是从main函数开始执行,而不论其在整个程序中的位置如何。 3.每条语句和数据定义的最后必须有一个分号( ;)。 说明:在以下三种情况下不允许有分号: a.所定义的函数的名称后面不使用分号; b.在右花括号“”后面不使用分号; c.预处理语句后面不使用分号。,4. C语言中没有专门的输入,输出语句。输入输出是通过scanf和printf两
8、个库函数实现的。 5.C程序书写格式自由,一行内可以写几个语句,一个语句也可以分写在多行上。 6.可用/*/对C程序中的任何部分作注释,注释可以写在程序的任何位置上,“/*”与“*/”也可不在同一行上。 7.在C语言中,大小写字母是有区分的(即大小写敏感)。,由前得出一般C语言程序的构成如下: main() /*主函数*/ 变量定义部分; 变量赋初值部分; 语句执行部分; ,1.4 C程序的执行过程,1.编辑:选择适当的编辑程序,将C语言源程序通过键盘输入到计算机中,并以文件的形式存入到磁盘中(.C) 2.编译:即将源程序翻译成机器语言程序的过程。编译出来的程序称为目标程序(.OBJ) 3.连
9、接:编译后生成的目标文件经过连接后生成最终的可执行程序(.EXE) 4.运行:运行是将可执行的目标程序投入运行,以获取程序的运行结果;在操作系统中可以直接执行扩展名为.EXE的文件,编 辑,程序代码的录入,生成源程序*.c,编 译,语法分析查错,翻译生成目标程序*.obj,链 接,与其它目标程序或库链接装配,生成可执行程序*.exe,运 行,语言的编辑、编译和运行,第2章 C语言程序设计的初步知识,本章要点: 标识符命名规则 常量和变量 基本数据类型 常用运算符及表达式 运算符的优先级及结合性 本章难点: 不同类型数据间的混合运算 运算符的优先级 自增(+)自减(-)运算符的使用,2.1 数据
10、类型,2.1.1 常量与变量 1.标识符 C语言中的标识符可以分为系统定义标识符和用户定义标识符。 系统定义标识符: 关键字 关键字是C语言系统使用的具有特定含义的标识符,不能作为预定义标识符和用户定义标识符使用。C语言定义了32个关键字,如表2.1所示。 2) 预定义标识符 预定义标识符也是具有特定含义的标识符,包括系统标准函数名和编译预处理命令等,如scanf、printf、define和 include等都是预定义标识符。,表2.1 C语言中的关键字,关键字为小写字母;不允许使用关键字为变量、数组和函数等操作对象命名。,用户定义标识符: 用户定义标识符用于对用户使用的变量、数组和函数等操
11、作对象进行命名。例如将一个变量命名为a,将一个数组命名为date,将一个函数命名为fun等。 用户标识符命名时要注意: (1) C语言对英文字母的大小写敏感,即同一字母的大小写被认为是两个不同的字符。例如total与TOTAL是不同的标识符。 (2) 标识符必须由字母或下划线开头,并且除了字母、数字和下划线外,不能含有其他字符。 (3) 标识符的命名要见名知意,即通过变量名就知道变量值的含义。 (4) 标识符的有效长度随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。,2 常量 常量是指在程序运行过程中其值不被改变的量。,1)直接常量 比如程序中的具体数字,字符等。 (1)整型常量
12、的形式 十进制整数 :由数字(0-9)和正负号表示 例如:123、-456、0 等 八进制整数:以0开头数是八进制数 例如: 0123 即(123)8 =( 83) 10 (123) 8=182+2 81+3 80 =( 83) 10 十六进制整数:以0x或0X开头, 例如: 0x123 即 (123) 16 =( 291) 10 main() int a=0123,b=0x123; /*0123是八进制数,0x123是十六进制*/ printf(“a=%d,b=%d“,a,b); 程序运行结果为: a=83,b=291,(2)实型常量:有小数表示形式和指数表现形式两种 小数形式 例如:45.
13、3,0.000744,-623.0等 指数形式 (aEn) 例如: 45.3e0 ,4.53e-3 ,-453e-1等 (3)字符常量: 一个字符常量代表ASCII码字符集里的一个字符. 例如: :a,A,p等。 注意:a,A是两个不同的字符常量。,2)符号常量,例如:#define N 5 #define PI 3.14 符号常量必须先定义,然后才能用它表示一个数值。 符号常量的值在其作用域内不能改变,也不能再被赋值。 符号常量名习惯用大写字母表示。,3. 变量,1) 变量概念:程序执行期间值可以改变的量。 命名规则: 变量名由标识符表示,只能由字母、数字和下划线三种字符组成,且第一个字符必
14、须为字母或下划线。 例如:以下为不合法的变量名: M.D.Jess , 1add ,age /*定义了整型变量a*/,3. 变量的初始化 C语言允许在定义变量的同时给变量赋值,这称为变量的初始化。 变量初始化的一般格式为: 数据类型标识符 变量名1=初值1,变量名2=初值2,变量名n=初值n; 例如: int a=2; /*指定a为整型变量,初值为2*/ float f=3.45; /*指定f为实型变量,初值为3.45*/ char c=A; /*指定c为字符变量,初值A*/ 也可以使被定义的变量的一部分赋初值,如: int a=1, b=-3,c;,注意:int a=b=1;这种初始化方式
15、是错误的!系统会认为b没有定义,在C语言中,变量必须强制定义,其目的是: 1、凡未被事先定义的,不作为变量名。 2、每一个变量被指定为一确定的类型,在编译时就能为 其分配相应的存储单元。 3、指定每一个变量为一确定的类型,在编译时据此检查 该变量所进行的运算是否合法。 * 选变量名时,要做到“见名知意” 例如:name st_age xm nl class sum * 大小写字母是两个不同的字符,C变量名习惯 用小写字母表示。 * 建议变量名的长度不要超过8个字符。,注意:,2.1.2整型数据,基本型:以 int 表示 (VC中4个字节) 短整型:以 short int 或 short 表示
16、1.类型 长整型:以 long int 或 long 表示 (123l、 123L) 无符号基本型(unsigned int) 无符号型 无符号短整型(unsigned short) 无符号长整型(unsigned long),1.整型变量的分类,2. 整型变量的定义 C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”。例如: int a,b; /*指定变量a,b为整型*/ unsigned short c,d; /*指定变量c,d为无符号短整型*/ 1ong e,f; /*指定变量e,f为长整型*/ 对变量的定义,一般是放在一个函数的开头部分(也可以放在程序中间,但作用域只限于
17、某一部分程序)。 例2.4 整型变量的定义与使用。 main() int a,b,c,d; /*指定a,b,c,d为整型变量*/ unsigned u; /*指定为无符号整型变量*/ a=20;b=-40;u=10; c=a+u;d=b+u; printf(“c=%d d=%d“,c,d); ,运行结果为: c30,d= -30,实型变量可分为: 单精度(float型) 如: float x , y ; 双精度型(double型) 如:double a , b , c ;,2.1.3 实型数据,1 .字符常量:用单引号括起来的一个字符。 例如: a B # ! 2. 转义字符 :指不能用符号直
18、接表示的字符常量。 将反斜杠()后面的字符转变成另外的意义。 如n中的“n”不代表字母n而作为“换行”符。 例如: n 换行 t 横向跳格(水平制表) 0 空字符 b 退格,2.1.4 字符数据,注意: 字符常量首尾的单引号是定界符,不占存储空间。 在C语言中,a和a是不同的。前者代表字符常量,后者代表一个标识符。 a和A是不同的字符常量。前者存储的是小写字母a的ASCII码值为97,后者存储的是大写字母A的ASCII码值为65。 转义字符代表一个字符,在内存中只占一个字节的存储空间。 转义字符0就是ASCII码值为0的字符,常用于表示字符串结束的标志符。,字符变量 定义形式: char 标识
19、符1,标识符2, ,标识符n 例如: char c1, c2, c3, ch ; c1=a; c2=b; c3=c; ch= d ; 说明: 1、字符变量在内存中占一个字节。 2、在内存中,是把字符对应的ASCII码值放到存储单元中。 3、字符型数据与整型数据之间可以通用。,main() char c1,c2; c1=97;c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); 输出结果: a b 97 98,main() int i; char c; i=a; c=97; printf(“%c,%dn”,c,c); printf(“%c,
20、%dn”,i,i); 输出结果: a, 97 a, 97,2.1.5 字符串常量,1.定义:括在一对双引号之内的字符序列或转义字符序列称为字符串常量。 例如:“How are you!” “a” “*abcnt” 2.存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空操作字符 0自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占n+1个字节。 例:c=“china”,注意: a是字符常量, “a”是字符串常量,二者不同。前者只占一个字节的存储空间,后者占两个字节的存储空间,分别存放字符a和字符串结束标志0。 字符串常量中包含转义字符时,一定要注意其 长度
21、的计算。例如字符串 “*abcnt”的长度为6,所占空间为7。 在写字符串时不必加0,字符0是系统自动加上的。,2.2 数据类型转换,2.2.1 自动转换与强制转换 1. 自动转换 自动转换发生在不同数据类型混合运算时,由编译系统自动完成。用下例来具体说明数据类型的转换。 int m; float n; double b,d; long e; 计算m*n+b+24-d/e C语言的执行和其它语言一样,从左到右进行扫描,该表达式的运算次序是:见下页图.,图2.1 不同数据类型自动转换,2. 强制类型转换 C语言提供了强制类型转换运算符来实现强制类型转换。 格式: (类型)表达式 例如: (int
22、)3.5 注意:在进行类型转换时,操作数的值并不发生改变,改变的只是表达式值的类型。 例如: float x=3.5;i=(int)x; /* i的值为3*/ 使用强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,(double)a只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。 (int)(x+y); /* 将x+y的值转换为int类型 */ (int)x+y; /* 将x的值转换为int类型,再与y相加 */,2.3 运算符和表达式,2.3.1 算术运算符和算术表达式 1. 基本的算术运算符 在C语言中,基本的算术运算符有5个:
23、 +,-,*,/,%(模运算符) 注意: 除法运算符“/”的运算对象可以是各种类型的数据,但是当进行两个整型数据相除时,运算结果也是整型数据,即只取商的整数部分;而操作数中有一个为实型数据时,则结果为双精度实型数据,即double型。例如,5.0/10的运算结果是0.5,5/10的运算结果是0,而不是0.5,10/4的运算结果是2。 求余运算符“%”要求运算对象必须是整型操作数,它的功能是求两个操作数相除的余数,余数的符号与被除数的符号相同。例如,11%3的值为2,-11%3的值为-2,2%-5的值为2。,2. 算术表达式 算术表达式是指用算术运算符和括号将运算对象(也称操作数,如常量、变量、
24、函数等)连接起来、符合C语法规则的式子,如: a*b/c-1.5+a 在算术表达式中,运算对象可以是各种类型的数据,包括整型、实型或字符型的常量、变量及函数调用。 3.算术运算符的优先级、结合性 在5个算术运算符中,*、/和%的优先级相同且高于+、-。 当运算符的优先级相同的情况下,这5个运算符的结合方向为从左至右(先左后右,简称左结合)。例: a - b + c 由于算术运算符为左结合,故先执行a-b,再执行加c的运算。,C语言运算符的优先级与结合性,C的运算符有以下几类。 (1) 算术运算符 ( + - * / %) (2) 关系运算符 ( = | &) (5) 赋值运算符 (= 及其扩展
25、赋值运算符) (6) 条件运算符 (? :) (7) 逗号运算符 (,) (8) 指针运算符 (* 和 &) (9) 求字节数运算符 (sizeof) (10) 强制类型转换运算符 (类型) (11) 分量运算符 ( -) (12) 下标运算符 ( ) (13) 其他 (如函数调用运算符(),C语言规定了运算符的优先级和结合性。 运算符的优先级别从高到低依次为: 初等运算符,如()、 、 -、.; 单目运算符,如 !、+、-、*(指针)、&、(类型); 算术运算符(先乘除,后加减); 关系运算符; 逻辑运算符(不包括!); 条件运算符; 赋值运算符; 逗号运算符。 所谓结合性是指,当一个操作数
26、两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性;反之,称为右结合性。结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其他运算符都是左结合性。,4.自增、自减运算符 C语言中有两个很有用的运算符是在其它计算机语言中通常没有的,它们是增1和减1运算符+和-。运算符+是给它的操作数加1,而-是减1 。例如: +a:先使a的值加1,再使用变量a; -a: 先使a的值减1,再使用变量a; a+:先使用变量a 的值,再使a的值加1; a-: 先使用变量a的值,再使a的值减1; 例 自增自减运算符的运用。
27、 main() int m=3,n=4,x; x=m+; x=x+8/-n; printf(“%dn”,x); ,本例中,必须对整个过程中变量的变化非常清楚,因为自加运算符在后面,变量x首先被赋值为3后,m的值才自加1,所以x的值是3,m的值为4。下面一个表达式,按照运算符的运算顺序首先对变量n做自减运算得到3,然后8和3整除得到2,3和2再做加法运算,得到最终答案为5。,2. 赋值运算符与赋值表达式 形式:变量名=常量或表达式 作用:将右边常量或表达式的值赋给左边的变量 例如: b=c+d 赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如x=5的作用是执行一次赋值操作,将常
28、量5赋给变量x。 结合方向:从右向左。 例如:“a=b=c=10;”等价于“a=(b=(c=10);”即先将常量10赋给变量c,然后再将10赋给变量b,最后将10赋给变量a。,注意:如果表达式类型与左边的变量的类型不匹配,自动进行类型转换。,复合赋值运算符 复合赋值运算符:在赋值符“=”之前加上其它运算符 共有10种复合赋值运算符 +=,-=,*=,/=,%= /*复合算术运算符5个*/ &=,=,|=,= /*复合位运算符5个*/ 例如:a+=3 a=a+3 x*=y+3 x=x*(y+3) 注意,a=a+b如果b是包含若干项的表达式,则相当于它有括号。如: x=y+3 x=(y+3) x=
29、x%(y+3) /*不要写成x=xy+3*/,2.3.3 逗号运算符与逗号表达式 形式:表达式,表达式2 作用:先计算表达式1的值,再求解表达式2的值。整个表达式的值为表达式2的值。 例如: x=8*2,x*4; 其计算过程为:先计算x=8*2,其值为x=16,再计算x*4,其值为64。整个表达式的值为x*4的值,也就是64 结合方向:从左向右。 逗号表达式的一般形式可以扩展为: 表达式1,表达式2,表达式3,表达式n 例如: x=23,y=12.1,11.20+x,x+y; 可以运用逗号表达式实现一些具体功能,例如,将x,y的值互换: t=x,x=y,y=t;,2. 本章小结,(1) C语言
30、的数据类型有:基本类型、构造类型、指针类型和空类型。其中基本数据类型包括整型、实型(包括单精度实型和双精度实型)、字符型和枚举类型等。构造类型包括数组类型、结构体类型和共用体类型。 (2) C语言标识符的构造规则: 标识符由字母、数字和下划线组成。 标识符必须以字母或下划线开头。,(3) 常量是指在程序运行过程中其值不能被改变的量。常量通常有4种类型,整型常量、实型常量、字符型常量、字符串常量。整型常量有十进制、八进制和十六进制表示。实型常量有小数和指数两种表示形式,均按double类型处理。字符常量是用单引号(即撇号)括起来的单个可视字符或转义字符。字符串常量是用一对双引号括起来的若干字符序
31、列,存储时系统会自动在其末尾加0作为字符串的结束标志,因此字符串常量所占存储空间等于字符串长度加1。,2. 本章小结,(4) 在程序运行时,其值能被改变的量叫变量,变量必须先定义后使用。变量的类型由定义语句中的数据类型标识符指定。系统根据变量类型分配相应的存储空间,存放变量的值。通过变量初始化可以给变量赋初值。不能直接使用未经赋值的变量,因为它的值是一个不确定的数据。 (5) 在C语言中,基本的算术运算符有5个,分别是+、-、*、/、%。其中*、/和%的优先级相同且高于+、-。当运算符的优先级相同的情况下,这5个运算符的结合方向为从左至右(先左后右,简称左结合)。,2. 本章小结,(6) 在进
32、行混合运算时,如果一个运算符两侧的运算对象的数据类型不同,系统则按“先转换,后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。 C语言提供了强制类型转换运算符来实现强制类型转换,其格式为:(类型)表达式,2. 本章小结,第章 基本算法,本章要点: 算法的特征 算法的表示方法 程序设计的基本算法 掌握程序的基本结构,.1 程序与算法,程序包括: (1)对数据的描述 数据结构 (2)对数据处理的描述 算法 算法(algorithm)是对特定问题求解步骤的一种描述。 可将程序总结为: 程序=算法+数据结构+程序设计方法+语言工具和环境,C语言算法的主要特点如下: 1.有穷性
33、 一个算法应该包含有限的操作步骤,而不能是无限的。 2.确定性 算法中的每一个步骤应当是确定的,而不应当是含糊的,应是十分明确无误的。 3.有0个或多个输入。 4.有一个或多个输出。 5.有效性 算法中的每一个步骤都应当有效的执行,并得到确定的结果。,.2 算法的特征,3.3 算法的表示方法,(1) 自然语言描述法 (2) 传统的流程图表示 常用符号有: (3) N-S流程图表示 (4) 伪代码表示算法 (5) 计算机语言表示算法,一、顺序结构,先执行A操作,再执行B操作,两者是顺序执行关系。,N-S结构流程图,结构化程序设计的三种基本结构,二、选择结构,当P条件为真时,执行A模块,否则执行B
34、模块。,三、循环结构,当P条件成立时,反复执行A,直到P为假。,1.当型循环结构,算法举例1:对一个大于2的正整数,判断它是不是一个素数。 方法:将 n (其中n 2) 作为被除数, 将2 到(n-1) 各个整数轮流作为除数,如果都不能被整除,则n为素数。 算法表示如下: S1:输入n的值 S2:2 i ( i 作为除数) S3: n 被 i 除,得余数 r S4: 如果 r 等于 0 , 表示 n 能 被 i 整除,则打印 n “不是素数”,算法结束;否则执行S5 S5:i+1 i S6: 如果 i n-1, 返回S3;否则,打印 n “是素数”,算法结束。,算法举例2:求 1-1/2 +
35、1/3 1/4 + 1/99 1/100。 S1: 1 s S2: 1 sum S3: 2 d S4: (-1)*s s S5: s*(1/d) t S6: sum+t sum S7: d+1 d S8: 若d 100 返回S4;否则算法结束。,算法举例3 : 用伪代码表示算法:用介于自然语言和计算机语言之间的文字和符号来描述算法,算法举例4: 用计算机语言表示算法,main() int s=1; float d=2.0 , sum=1.0, t; while (d=100) s= -s; t=s/d; sum=sum+t; d=d+1; printf(“%f”,sum); ,. 本章小结,(1)算法是程序的灵魂,计算机程序设计的实质是算法的设计 。 (2)C语言算法的特点是: 有穷性 确定性 有0个或多个输入 有一个或多个输出 有效性 (3) 算法的表示 用自然语言表示 用流程图表示算法,三种最基本的程序设计算法为:顺序结构,选择结构和循环结构。,
链接地址:https://www.31doc.com/p-2585237.html