C语言复习.docx
《C语言复习.docx》由会员分享,可在线阅读,更多相关《C语言复习.docx(19页珍藏版)》请在冰豆网上搜索。
C语言复习
C语言的特点
一.语言间洁、紧凑、使用方便、灵活。
二.运算符丰富,共有34运算符。
三.数据结构丰富。
四.具有结构化的控制语句。
用函数(子程序)作为程序的模块单位,便于实现程序模块化。
五.语法限制不太严格,程序设计自由度大。
六.C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的
大部分功能,可以直接对硬件进行操作。
七.生成目标代码质量高,程序执行效率高。
八.用C语言写的程序可移植性好。
C程序的介绍
例:
main()
{SP=0x80;/*sp=80H*/
delay05ms;//调用函数delay05ms
}
本程序执行后单片机的(SFR)SP=80H,再延迟0.5MS。
一.本例说明:
1.C程序是由函数构成的。
一个C源程序至少包含一个主函数main,除了main
外还可包含其它函数。
2.每一个C程序只能有一个主函数main,后面要带括号()。
3.函数体要用大括号(花括弧){}括起来。
4.每个语句后必须用;号结束。
分号是C语句的必要组成部分。
5.用/*…….*/或//………二种方式表示注释部分。
6.一个C程序总是从main函数开始执行的,且不论main函数在整个程序中的位置如何(即与位置无关)。
二.算法
1.用流程图表示算法。
2.三种基本结构和改进的流程图
(1)三种基本结构:
顺序结构
选择(分支)结构
循环结构:
*当型(while)循环结构
*直到型(until)循环结构
(2)N_S流程图
1973年由美国学者I.Nassi和B.Shnaiderman提出的一种新型流程图。
数据类型
一.常量和符号常量
二.变量:
变量名实际上是一个“符号地址”
三.整型数据:
1.基本整型(int)
2.短整型
3.长整型
四.字符型(char):
长度为一个字节
分为sighedchar和unsighedchar,默认为sighedchar
五.实型数据(浮点型)
六.指针型(*):
指针变量的长度为1—3个字节
七.位标量(bit):
C51扩充的数据类型
八.特殊功能寄存器(SFR):
占用一个字节,域值为0—255(C51扩充的数据类型)
例.sfrSP=0x80;
九.16位sfr(sfr16):
占用二个字节,域值为0—65535(C51扩充的数据类型)
一十.可寻址位(sbit):
C51扩充的数据类型
例.sfrP1=0x90;
sbitP1_1=P1^1;
顺序程序设计
一.程序的构成
数据描述----定义数据结构(用数据类型表示)和数据初值
程序:
数据操作-----由语句来实现,是对巳提供的数据进行加工
二.C语句种类
1.控制语句:
(1)if()~else~(条件语句)
(2)for()~(循环语句)
(3)while()~(循环语句)
(4)do~while()(循环语句)
(5)continue(结束本次循环语句)
(6)break(中止执行switch或循环语句)
(7)switch(多分支选择语句)
(8)goto(转向语句)
(9)return(从函数返回语句)
其中:
()表示括号中是一个条件
~表示内嵌的语句
例:
if(x>y)z=x;
elsez=y;
2.函数调用语句
例:
printf(“goodbye“);
3.表达式语句:
由一个表达式构成的一个语句
例:
a=3是一个表达式
a=3;是一个表达式语句
注意,任何表达式都可以加上分号而成为语句,分号是语句中不可缺少的一部分。
4.空语句:
;即只有一个分号的语句,它什么也不做。
5.复合语句:
可以用{}把一些语句括起来成为复合语句,又称分程序
例:
{z=x+y;t=z/100;
printf(”%f”,t);
}
注意,C语言允许一行有几个语句,复合句中最后一个分号不能忽略。
三.赋值语句
1.C语言中的赋值号“=”是一个运算符。
2.赋值表达式与赋值语句的概念:
例:
if((a=b)>0)t=a;
其中:
a=b是赋值表达式,不能写成(a=b);>0
因为if的条件中不能包含赋值语句。
注意,要清楚“表达式”与“语句”的区别。
四.顺序结构程序的特点
顺序结构程序的特点是按顺序执行程序,在程序中无判别、分支语句
和循环语句。
选择结构(分支)程序
一.关系运算符和关系表达式
1.关系运算符:
(1)<小于
(2)<=小于或等于
(3)>大于
(4)>=大于或等于
(5)==等于
(6)!
=不等于
2.关系表达式:
用关系运算符将二个表达式连接起来的式子就是一个关系表达式。
例:
a>b
a+b>b+c
(a=3)>(b=5)
注意,关系表达式的值是一个“逻辑值”,即“真”或“假”,以
“1”表示“真”,以“0”表示“假”。
二.逻辑运算符和逻辑表达式
1.逻辑运算符:
(1)&&逻辑与(相当于AND)例:
a&&b
(2)||逻辑或(相当于OR)例:
a||b
(3)!
逻辑非(相当于NOT)例:
!
a
2.逻辑表达式
逻辑表达式由逻辑运算符组成
逻辑表达式是一个逻辑值,以“1”表示“真”,以“0”表示“假”。
三.if语句(三种形式)
1.if(表达式)语句:
例:
if(ACC=0)TR0=0;
temp1=temp2;
2.if(表达式)语句1else语句2:
例:
if(P1-1=1){temp6=6;gotoINIT;}
elsegotoSTART;
3.if(表达式1)语句1
elseif(表达式2)语句2
elseif(表达式3)语句3
.
.
.
例:
if(acc==1)temp=1;
elseif(acc==2)temp=2;
elseif(acc==3)temp=3;
elseif(acc==4)temp=4;
elsetemp=0;
四.switch语句:
switch语句是多分支选择语句
1.形式:
switch(表达式)
{case常数表达式1:
语句1
case常数表达式2:
语句2
.
.
.
case常数表达式n:
语句n
default:
语句n_1
}
2.用法:
(1)switc后面括号内的“表达式”可以是任何类型。
(2)当“表达式”的值与某一个case后面的常数表达式相符时,执行后面的语句,若无匹配时就执行default后面的语句。
(3)每一个case后面的常数表达式必须各不相同。
(4)各个case和default出现的次序不影响执行的结果。
(5)执行完case后面的语句后,流程控制转移到下一个case继续执行。
即”case常数表达式”只是起语句标点作用,并不在该处进行条件判断。
因此,应该在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行,可以用一个break语句达到此目的。
例:
把上例中用if……else完成的任务用switch语句来表达,显得更间洁、明了。
switch(ACC)
{case1:
temp=1;break;
case2:
temp=2;break;
case3:
temp=3;break;
case4:
temp=4;break;
default:
temp=0;
}
(6).多个case可以共用一组执行语句
switch(ACC)
{case1:
case2:
case3:
case4:
temp=4;
default:
temp=0;
}
循环控制
一.构成循环控制的方法:
1.用goto语句和if语句构成循环;
2.用while语句;
3.用do-while语句;
4.用for语句。
二.goto语句,及循环控制的构成:
1.形式:
goto语句标号;//不能用整数做标号
2.与if语句一起构成循环控制:
例:
if(P0_6==0)
gotoINIT;
elsegotoSTART;
三.while语句(当型)
1.形式:
while(表达式)语句
当表达式为非“0”值时,执行while语句中的内嵌语句。
特点是先判断表达式,后执行语句。
2.用法:
(1)循环体如果包含一个以上的语句,应该用{}括起耒。
(2)在循环体中应有使循环趋于结束的语句。
例:
while(a<=100)
{b=b+1;
a++;
}
3.无限循环的方法:
用while
(1)表示无限循环。
例:
while
(1)
{b=b+1;
a++;
}
四.do—while语句(直型)
形式:
do循环体语句
while(表达式);
特点是先执行一次语句,然后判断表达式。
即先执行,后判断。
例:
do
{b=b+1;
a++;
}
while(a<=100);
while和do…while的差别是前者是先判断再执行,
后者是先执行再判断。
五.for语句
1.形式:
for(表达式1;表达式2;表达式3)语句
2.执行过程:
(1)先求介表达式1。
(2)求介表达式2:
若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行(3)。
如果其值为假(值为0),则结束循环,转到(5)。
(3)求介表达式3。
(4)转回
(2)继续执行。
(5)循环结束,执行for语句下面的一个语句。
所以for语句最容易理解的形式如下:
for(循环变量赋初值;循环条件;循环变量增值)语句
例:
for(i=1;i<=100;i++)
sun=sun+1;
注意,for语句后面没有分号。
若内嵌语句为“复合语句”,必须用{}括起耒。
例:
时延函数(延迟0.5ms)
voiddelay05ms(void)
{for(i=250;i>0;i--)
{;}//空操作,每次执行用时2us
}
用流程图表示:
六.break语句和continue语句
1.相同处:
两语句都是结束循环。
2.不同处:
continue只是结束本次循环,而不是终止整个循环的执行。
Break是结实整个循环过程,不再判断执行循环的条件是否成立。
注意,break语句不能用于循环语句和switch语句之外的任何语句中。
数组
一.一维数组的定义:
类型说明符数组名[常量表达式];
例:
chartab[10];
说明:
1.数组名后用方括号括起“常量表达式”。
2.常量表达式表示元素的个数,即数组的长度。
上例中tab[10]中的10表示有10个元素
但要注意,下标是从“0”开始的,10个元素是:
tab[0],tab[1],tab[2],……tab[9]
不能出现和使用tab[10]
3.常量表达式中只可以是常量,不能是变量。
二.一维数组的引用:
1.数组必须先定义,后使用。
2.只能逐个引用数组元素,不能一次引用整个数组。
数组元素的表示形式为:
数组名[下标]
注意,下标为整型常数或整型表达式。
例:
tab[0]=tab[1]+tab[7];
Tab[2*3]=I;
三.一维数组的初始化
1.在定义数组时对数组元素赋以初值
例:
chartab[5]={12,42,64,62,52};
2.可以只给一部份元素赋值
例:
chartab[5]={1,2,3};
表示只给前面3个元素赋值,后2个元素为“0”
3.如果想使一个数组中全部元素值为同一个数,必须全部写出耒
例:
chartab[5]={0,0,0,0,0};
4.在对全部元素赋初值时,可以不指定数组长度
例:
chartab[]={1,2,3,4,5};
函数
一.概述
1.在C语言中,子程序的作用是由函数完成的。
2.一个C语言程序可由一个“主函数”和若干个“函数”构成的。
3.由主函数调用其它函数,其它函数也可以互相调用。
4.所有的函数都是独立的,即函数不能嵌套。
5.函数不能调用主函数“main”。
6.从用户使用的角度看,函数有二种:
(1)标准函数,即在“函数库”中的函数。
(2)用户自己定义的函数。
7.从函数的形式看,函数分二类:
(1)无参函数:
在调用无参函数时,主调函数并不将数据传送给被调函数。
(2)有参函数:
在调用有参函数时,在主调函数和被调函数之间有数据传递。
二.函数定义的一般形式
1.无参函数的定义形式:
类型标识符函数名()
{声明部分
语句
}
注意,“类型标识符”指定函数值的种类,即函数返回“值”的类型。
2.有参函数的定义形式:
类型标识符函数名(形式参数表列)
{声明部分
语句
}
例:
intmax(intx,inty)
{intz;
z=x>y?
x:
y;
return(z);
}
说明:
1.第一行关键字int表示函数值是整型的,括号中是二个形式参数x和y。
2.花括号内是函数体,包括声明部分和语句部分。
3.在声明中,定义在函数中要用到的“变量”。
4.return(z)的作用是将z的值作为“函数值”带回到主调函数中,z被称为“函数返回值”。
5.若不指定函数类型,系统会“隐含”指定函数类型为int型。
3.可以有空函数
(1)形式
类型标识符函数名()
{}
(2)作用:
不做任何工作,只为以后扩充时用,目前只占用一个位置。
三.函数参数和函数的值
1.形参和实参:
在定义函数时,函数名后面的括号中的变量称为“形式变量”,间称为“形参”。
在主调函数中调用一个函数时,函数名后面括号中的参数(可以是一个表达式)称为“实际参数”,间称为“实参”。
2.函数的返回值:
’
希望通过调用函数,使主调函数能得到一个确定的值,这个值就是“函数返回值”。
(1)“函数返回值”是通过函数中的return语句得到的。
如果不需要返回值,可以不要return语句。
(2)函数值的类型
函数的返回值应当是定义函数时指定的函数值的类型。
(3)为了明确表示“不带回值”,可以用void(空)来定义“空类型”(无类型)。
例:
voiddelayo5ms(void)
为了使程序减少出错,保证正确调用函数,凡是不要求带回函数值的函数,一般都应定义为void类型。
四.函数的调用
1.函数调用的一般形式:
函数名(实参表列);
若调用无参函教,则“实参表列”可以没有,但()不能省略。
例:
Delay05ms();
2.函数调用的方式:
(1)把函数调用作为一个语句。
(2)作为函数表达式。
例:
比如巳有函数max(x,y)
c=2*max(a,b);
(3)作为函数参数。
把函数调用作为另一个函数的“实参”
例:
m=max(a,max(b,c));
其中,max(b,c)是一次函数调用,它的函数返回值作为另一次函数调用的“实参”。
m的值是a、b、c三者中的最大者。
五.局部变量和全局变量
1.局部变量
在一个函数内部定义的变量是内部变量,只在本函数范围内有效。
2.全局变量
在函数之外定义的变量称为外部变量,外部变量是“全局变量”(也称为全程度量),它的有效范围从定义变量的位置到本源文件结束。