华中科技大学 C语言考试最后一堂课期末复习PPT_第1页
华中科技大学 C语言考试最后一堂课期末复习PPT_第2页
华中科技大学 C语言考试最后一堂课期末复习PPT_第3页
华中科技大学 C语言考试最后一堂课期末复习PPT_第4页
华中科技大学 C语言考试最后一堂课期末复习PPT_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言复习一、一、C语言的数据表示语言的数据表示n1. 1 常量常量和和变量变量n1. 2 表达式表达式n1. 3 输入、输出输入、输出1.1 常量和变量常量和变量n1.常量常量n常量是在程序执行中,值不发生改变的数据。其值预先决定,之后不变。有不同的数据类型。 (1)常数 例如的: 整数:+5 、-3、017(八进制)、0 x1f(16进制) 实数(浮点数):3.14 、-1.2E-3 、1E10 单个字符: A,占一个字节 ,转义字符 非法 77 (八进制ASCII码63, ? ), 78非法 x3f (十六进制ASCII码63, ? ) x3g非法 字符串: ” A” 后面有0,占两个字

2、节(2)符号常量 给常量起标识符名字。 C语言的符号常量(用宏定义): #define PI 3.14159265 好处:提高程序易读性;方便修改常量的值;注意:1.一般用大写字母。2, #define M 3 不是C语句,后面不能加“;”。3.可以做M+1,不能做M+.(3)地址常量 当数组在定义时,其变量名为其首地址,是地址常量。 int a10;可以做a+1,不能做a+. 1.1 常量和变量2 变量变量n用各种操作来改变值数据。n从“名名”和“值值”两个角度认识变量(1)变量名 每个变量,要在使用前定义变量的名字,遵循标识符命名规则。 只能用字母、数字和下划线组成。 不能以数字开头。 不

3、能用关键字(int, long.)。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。n(2)变量的值)变量的值 n 变量值就是由变量名所指定空间上的存储数据内容。即变量的当前值。n 数据内容用语言的操作语句来改变。n赋值语句;键盘输入语句;n char chx; int m; /* 变量的定义 */n chx=A; m=12*3; /* 赋值语句 */n scanf(“%d”,&m); /* 键盘输入语句 */n在程序运行时,将数据存入指定内存空间。 变量初始化:变量初始化:定义变量时同

4、时确定变量初值。 例如: char chy=a; int weight=2; 1.2 C语言的表达式n1 1、算术表达式、算术表达式n2 2、关系表达式、关系表达式n3 3、逻辑表达式、逻辑表达式n4 4、赋值表达式、赋值表达式n5 5、逗号表达式、逗号表达式n6 6、条件表达式、条件表达式n7 7、其他表达式、其他表达式C语言的语言的表达式表达式:使用规定的运算符运算符,将常量、变量、函数(调用)连结的一个有意义的式子。 1、算术表达式、算术表达式n用算术运算符来表示对数据的算术运算求值过程。n算术运算符: + - * / %n2/3结果是0,2%3结果是2,2.0%3错 注意不同类型运算问

5、题:doublelongunsignedint floatchar short高低强制类型转换:强制类型转换: 一定是一定是 (int)a 不是不是 int(a),注意类型上),注意类型上一定有括号的。一定有括号的。 注意(注意(int)()(a+b)和)和(int)a+b 的区别。的区别。 前是前是把把a+b转型,后是把转型,后是把a转型再转型再加加b。2 2、关系表达式、关系表达式 关系运算符: = 0 , sin(x)=0.5, (a+b)=(c*d) 注意语法合理与数学逻辑错误问题: 分析:10=a=15 a=910=a=1510=a 假 00=15 真所以要写成10=a&a=

6、15a=bc等价于a=(bc)3、逻辑表达式3 3、逻辑表达式、逻辑表达式n用逻辑表达式来表示对数据的逻辑关系判断,运算结果是逻辑值“真”1或者“假”0。nC逻辑运算符包括:n ! & | n 参加逻辑运算的数据必须是逻辑量,可以是逻辑类型的变量、常量,关系表达式或逻辑表达式。nC语言中,没有专门的逻辑量,语言中,没有专门的逻辑量,1是真值,是真值,0是是假值。也认为假值。也认为非零非零的值为真值。的值为真值。n如:int a=3, b=4, c=-5; n (1) ! (ab) & ! c | 1) n (2) if(a)printf(“n yes”);a,c均按非0(即真)

7、处理逻辑运算规律n 在&(与)表达式中,若&的左端为假, 则不再计算另一端,该表达式值肯定为 0(假)。n 在|(或)表达式中,若|的左端为真,则不再计算另一端,表达式的值必定为 1(真)。 nint a=5,b=1n(k=a0假,后面不算了n4、赋值表达式=,+=,-=,*=,/=, +(单目),- (单目)级别仅高于逗号表达式,右结合 变量变量=表达式表达式int a=3,c=2,ba=b=c;n*=m+2 相当于 n=n*(m+2)k=i+; 先k=i,再i=i+1k=+i; 先i=i+1,再k=I思考:int y=-4,z=4;printf(%d,y+z);c赋值给b,

8、b=2b赋值给a,a=2n5、条件表达式 e1?e2:e3若e1为真,表达式的值为e2,否则为e3. (- -a=b+)? -a : b +5-1=4 T a=4-a a=3 表达式的值为3a=5,b=44-1=5 F b=6b + b=7表达式的值为6a=4,b=5思考:(- -a=b+)? -a : (- -a=b+)? -a : b + 结合方向:从右向左n6、逗号表达式 表达式的值等于最后一个表达式的值,运算等级最低! a=5,b=2,c=3 a=7+b+c, a+ a=(7+b+c, a+) a=12a=57、强制类型转换表达式(单目) int m; sqrt(float) m);并

9、没有改变m的类型和数值位运算n总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。n例1:char a = 6, b;nb = a x + y & 38 % 5 = y的值的值在容易出错或不确定的地方按照自己的本意给表达式加括号在容易出错或不确定的地方按照自己的本意给表达式加括号 38 + 5 x + y & 38 % 5 = y 43 30 表达式的求值过程表达式的求值过程 3 01运算符的优先级和结合性运算符的优先级和结合性01.3 输入、输出n输入: scanf(“.”, .)n %d, %ld 对应int longn %c, %

10、s 对应char char strn %f , %lf 对应flaot doublescanf(“%d%d%*d%d”,&a,&b,&c); 跳过输入的第三个数据。 常见错误 int a,b;char d,e20; scanf(%d,%fn”,&a,&b); scanf(%d,%f”,a,b); scanf(%7.2f,&a); scanf(%s,&e); scanf(%c,d);格式控制符格式控制符对输入的要求对输入的要求举例举例%d输入一个十进制整数输入一个十进制整数int a ; scanf(%d, &a) ;%x输入一个十

11、六进制整数输入一个十六进制整数int a ; scanf(%x, &a) ;%o输入一个八进制整数输入一个八进制整数int a ; scanf(%o, &a) ;%u输入一个十进制无符号整数输入一个十进制无符号整数unsigned int a ; scanf(%u, &a) ;%c输入一个字符输入一个字符char ch ; scanf(%c, &ch) ;%s输入一个字符串输入一个字符串char *str ; scanf(%s, str) ;%f以小数形式输入一个单精度实数以小数形式输入一个单精度实数float x ; scanf(%f, &x) ;%e

12、以指数形式输入一个单精度实数以指数形式输入一个单精度实数float x ; scanf(%e, &x) ;%lf以小数形式输入一个双精度实数以小数形式输入一个双精度实数double x ; scanf(%lf, &x) ;%le以指数形式输入一个双精度实数以指数形式输入一个双精度实数double x ; scanf(%le, &x) ;格式化输入函数格式化输入函数scanf输入/输出输出输出数据数据格式格式控制符控制符输出格式输出格式整数整数%d以十进制形式输出一个整数以十进制形式输出一个整数(正数不输出符号)(正数不输出符号)int a = 5 ; printf(%d

13、, a) ;%mdint a = 5 ; printf(%3d, a) ;%-mdint a = 5 ; printf(%-3d, a) ;%ld以十进制形式输出一个长整数以十进制形式输出一个长整数long a = 5 ; printf(%ld, a) ;%o以八进制形式输出一个整数以八进制形式输出一个整数int a = 5 ; printf(%o, a) ;%x以十六进制形式输出一个整数以十六进制形式输出一个整数int a = 5 ; printf(%x, a) ;无符号无符号整数整数%u以十进制形式输出以十进制形式输出一个无符号整数一个无符号整数unsigned a = 5 ; print

14、f(%u, a) ;%muunsigned a = 5 ; printf(%5u, a) ;%-muunsigned a = 5 ; printf(%-5u, a) ;实数实数%f以小数形式输出一个实数以小数形式输出一个实数double x = 3.5 ; printf(%f, x) ;%m,nfdouble x = 3.5 ; printf(%5,2f, x) ;%-m,nfdouble x = 3.5 ; printf(%-5,2f, x) ;%e以指数形式输出一个实数以指数形式输出一个实数double x = 3.5 ; printf(%e, x) ;输入/输出格式化输出函数格式化输出函

15、数printf字符字符%c输出字符输出字符char ch = a ; printf(%c, ch) ;%mcchar ch = a ; printf(%3c, ch) ;%-mcchar ch = a ; printf(%-3c, ch) ;字符串字符串%s输出字符串输出字符串char *str = abc; printf(%s, str) ;%mschar *str = abc; printf(%3s, str) ;%-mschar *str = abc; printf(%-3s, str) ;说明:(说明:(1)负号)负号“-”表示该输出项以左对齐方式输出,缺省表示该输出项以左对齐方式输出

16、,缺省表示以右对齐方式输出;表示以右对齐方式输出;(2)m称字段宽度,表示该输出项所占字符个数;称字段宽度,表示该输出项所占字符个数;(3)n表示小数部分占用的字符个数;表示小数部分占用的字符个数;(4)如果输出项的实际位数小于)如果输出项的实际位数小于m,则用空格补足,如果大,则用空格补足,如果大于于m,则按实际的位数输出。,则按实际的位数输出。 输入/输出字符输入输出函数n字符输出函数-putchar(ch) 输出一个字符chn字符输入函数-getchar() 无参数 函数值为从输入设备接收的字符字符串输入输出函数v字符串输出函数-puts(str) 输出一个字符串str 数组 或 指针v

17、字符串输入函数-gets(str) 输入一个字符串str 数组 或 指针n(1)表达式语句表达式语句n(2)流程控制语句流程控制语句n(3)复合语句复合语句C语语言言语语句句 指令语句指令语句 非指令语句非指令语句 数据定义语句数据定义语句 float x; int m; 编译预处理编译预处理宏定义 #define PI 3.14159文件包含处理 #include 二、二、C语言的程序结构与相关语句语言的程序结构与相关语句 完成一定的控制功能。9种控制语句: 判断语句判断语句 条件判断语句 if()else 多分支选择语句 switch()case 循环语句循环语句 循环次数控制语句 for

18、() 先判断后执行循环控制语句while() 先执行后判断循环控制语句dowhile() 转移控制语句转移控制语句 直接转移语句 goto 终止语句 break(用在循环结构、swicth) 跳转语句 continue (仅用在循环结构) 返回语句 return流程控制语句流程控制语句选择结构n单分支结构 if(a=b)printf(“yes”);n双分支结构 if(a=b) printf(“yes”); else printf(“no”); else 是与最接近的if且没有配对else的相组合的。n多分支结构 switch_case for,while,do-while三种结构n循环变量初始

19、化,继续循环条件,改变循环变量是不可缺少的三个环节。nfor常用于循环次数已知的问题中。括号中的两个“;”不可省。ndo-while()循环的最后一个while();的分号一定不能够丢。 nwhile与do-while常用于循环次数未知的问题中。n写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。 注意n在for和while语句之后一般没有分号n有分号表示循环体就是分号之前的内容(空循环体)nwhile (i 100);i+;nfor (i = 0; i 100; i+);printf(%d, i);nif,swtich,while,for后面的语句只能是一句,因此,多句时别忘了

20、。在while( e )和for( ;e ;)中的e是循环继续的条件,不能写其它条件!如果缺省,就是死循环!在if(e),while( e )和for( ;e ;)中e的值是逻辑值(0或非0)e一般是关系表达式,逻辑表达式或变量。if(x=1)if(x=1)main() int i=1; doi-;while(i+); printf(“%d”,i-); A) -1 B) 0 C) 1 D)陷入死循环break,coutinuenbreak只能用于switch和循环语句中,作用提前终止本层次switch和循环。ncoutinue是跳过循环体内尚未执行的语句,接着执行下次循环。三、数组三、数组数组

21、要素:数组要素:1. 数组名:数组的起始地址数组名:数组的起始地址2. 基类型:数组元素的数据类型基类型:数组元素的数据类型3. 数组长度:数组元素的个数数组长度:数组元素的个数4.数组的存储:连续的存储单元。二维数数组的存储:连续的存储单元。二维数组按行存放组按行存放n数组的定义类型标识符 数组名数组长度错误的定义是: 或 int n; int n=10; scanf(%d,&n); int an; int an; 定义int a5时, a0,a1.=?随机数!只有int a5=3后,后面几项自动赋0常量表达式常量表达式数组的初始化 合法:int a=1,2,3,4,5; int i

22、 3=1,2,3,4,5,6; int a5=1,2,3; int b34=1,3;char a4=“boy” char a3=b,o,y不合法: int a5=,2, ,4,5; int i2 =1,2,3,4,5,6; int a5= ;char a4=boy一维数组元素的引用一维数组元素的引用引用数组元素使用数组名和该元素在数组中的引用数组元素使用数组名和该元素在数组中的下标。下标。 数组变量名数组变量名整型常量表达式整型常量表达式 数组下标数组下标数组下标的取值范围是数组下标的取值范围是0, 数组长度数组长度1 二维数组元素的引用与一维数组类似二维数组元素的引用与一维数组类似对a10这

23、个数组的讨论。、a表示数组名,是第一个元素的地址,也就是元素a0的地址。、a是地址常量,所以只要出现a+,或者是a=a+2赋值的都是错误的。、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。对a33的讨论、a表示数组名,是第一个元素的地址,也就是元素a0的地址。、a是地址常量,所以只要出现a+,或者是a=a+2赋值的都是错误的。、a是二维数组名,所以它是行指针,也就是说a+1是跳一行。、a0、a1、a2也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a0+1,a1+1,a2+1都是跳一列。、注意a和a0 、a1、a2是不同的,它们的基类型是不同的。前者是一行元素,后三者是一

24、列元素。数组的操作往往用循环结构.数值数组#define M 10int aM;for(i=0;iM;i+)字符数组#define M 10char aM;for(i=0;ai!=0;i+)数值数组倒序#define M 10main()int i,j,aM;for(i=0;iM;i+) scanf(“%d”,ai);for(i=0,j=M;ij;i+,j-) 交换ai,aj字符数组倒序main()int i,j;char a50;gets(a);for(i=0,j=strlen(a);ij;i+,j-) 交换ai,aj字符数组char str50;int i;for (i=0;stri!=0

25、,i+)构造新的字符数组(删除,插入,复制,连接,倒序)。 1.用和不用字符串函数实现上述功能。 2.用指针实现。 3.必须注意最后一项一定是: stri =0;或 *p=0;字符串函数n要用#include n字符串拷贝函数strcpyn字符串连接函数strcatn字符串比较函数strcmpn测字符串长度函数strlenn函数函数strlen的值为的值为0之前的全部字符个数之前的全部字符个数.它与数组它与数组长度不是一个概念长度不是一个概念.char s6=H,o,w,0,o,kstrlen (s) =3字符串函数的应用字符串赋值字符串比较s1=s2strcpy(s1,s2)s1=s2str

26、cmp(s1,s2)=0s1s2strcmp(s1,s2)0s1s2strcmp(s1,s2)0一 函数定义的形式: 存储类型存储类型 数据类型数据类型 函数名函数名(形式参数表形式参数表) 变量数据定义语句序列;变量数据定义语句序列; 可执行语句序列;可执行语句序列; int fun(int x,int y) int z; z=x+y; return z;函函数数首首部部 函函数数体体四四 、函数、函数函数定义函数定义1. 有返回值函数有返回值函数有返回值函数在函数执行结束后向调用者返回一个有返回值函数在函数执行结束后向调用者返回一个执行结果执行结果,称为函数的返回值。称为函数的返回值。【语

27、法语法】有返回值有返回值return语句的一般形式如下:语句的一般形式如下:return (表达式表达式) ; 括号可以省略括号可以省略【语义语义】计算表达式的值,结束函数的执行并将表达式的值作计算表达式的值,结束函数的执行并将表达式的值作为返回值返回给调用者。为返回值返回给调用者。函数定义函数定义2. 无返回值函数无返回值函数无返回值函数只完成某种特定的处理,函数执行后不向调用无返回值函数只完成某种特定的处理,函数执行后不向调用者返回函数值。者返回函数值。函数首部必须将返回值的类型说明为空类型函数首部必须将返回值的类型说明为空类型(void),函数体中的),函数体中的return语句只结束函

28、数的执行。语句只结束函数的执行。【语法语法】无返回值无返回值return语句的一般形式如下:语句的一般形式如下:return ; 【语义语义】结束函数的执行。结束函数的执行。函数声明函数声明类型标识符类型标识符 函数名函数名(形参表形参表) ;以分号结束以分号结束【语义语义】对函数原型进行声明,说明函数的参数和返回值类型对函数原型进行声明,说明函数的参数和返回值类型等情况。等情况。 C 语言规定:函数必须先定义后调用,因此,程序中要确保函语言规定:函数必须先定义后调用,因此,程序中要确保函数调用之前已经完成函数定义,否则编译器没有关于函数的数调用之前已经完成函数定义,否则编译器没有关于函数的任

29、何信息,不能正确地完成翻译工作。任何信息,不能正确地完成翻译工作。为了避免函数在定义前调用,在调用前为了避免函数在定义前调用,在调用前声明这个函数的原型声明这个函数的原型。 【语法语法】函数声明的一般形式如下:函数声明的一般形式如下:基本知识:(1)调用格式:主调函数 函数名函数名(实参表列实参表列) 被调函数 返回类型返回类型 函数名函数名(形参说明形参说明 形参表列形参表列)(2)地址传递 主调函数 函数名函数名(地址表列地址表列) 被调函数 返回类型返回类型 函数名函数名(形参说明形参说明 地址表列地址表列)(3)一维数组 主调函数 函数名函数名(a,n) 被调函数 返回类型返回类型 函数名函数名(int *b,int n)n 函数名函数名(int b,int n)(4)二维数组 主调函数 函数名函数名(a,3,4)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论