c语言期末复习知识要点.docx
- 文档编号:11380296
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:16
- 大小:131.75KB
c语言期末复习知识要点.docx
《c语言期末复习知识要点.docx》由会员分享,可在线阅读,更多相关《c语言期末复习知识要点.docx(16页珍藏版)》请在冰豆网上搜索。
c语言期末复习知识要点
2012-2013【2】c语言期末复习知识要点
一、基本概念的基础知识(p5)
∙构成c的基本单位是函数
∙main函数是c语言中的一个函数,c语言写的程序,可以有多个函数构成,c程序中有且只有一个main函数,c程序的执行总是从main函数开始,在main函数中结束。
∙c程序中注释可以出现在任何空格可以出现的地方
o注释的作用:
帮助理解和备忘程序的功能
o注释方法两种:
///**/
o注释书写位置:
可以写在任何空格可以出现的地方,原则上,写在代码后面,不影响程序的可读性
∙c语句都要用分号;结束
∙函数由函数的首部和函数体构成
∙函数可以嵌套调用,但是不可以嵌套定义
∙函数之间的书写位置没有固定的要求
∙其他函数,只有被调用的时候,main调用了它,它才会被执行。
二、变量和常量(p22)
(一)常量是不可以改变的量
✓常量分为整型、实型、字符型
✓整型常量分为:
十进制:
125;八进制:
0125;十六进制:
0x12(后面加l的是长整型常量)
✓实型常量分为:
3.14(小数),1.23e+3(科学计数)
o3.14,可以省略小数点前的整数:
.13可以省略小数点后的小数:
5.
omEn,科学计数法,e前必须有数字,e后必须是整数
✓字符型常量分为:
字符常量‘a’,字符串常量“abcd”,转义字符(p29)
o字符型:
'a'字符常量,它可以存在一个字符变量中,它存储的是该字符的ascii码值,其实是一个整数,一个ascii码在内存中占用一个字节
o"afjdslkgjfk":
字符串常量,它不可以存入一个字符变量中。
那如果要表示或者存储一个字符串,怎么办?
字符数组来办
o转义字符:
▪\ddd:
代表1-3位八进制数为ascii码值的那个字符。
如\7表示ascii码值为7的字符;\25表示ascii码值为21(十进制)的字符;\101表示ascii码值为65(十进制)的字符。
▪\xhh:
代表1-2位十六进制数为ascii码值的那个字符。
如\x41表示ascii码值为65(十进制,4*16+1)的字符;
▪\\输出一个\,\双引号输出双引号。
o字符串长度判定:
“abc\\d\n\123”长度为7;“abcd\n\183”长度为8
✓算法的5个特性
(二)变量是在程序执行过程中其值可以改变的量
✓变量要先定义,后使用
✓变量要分类型:
类型决定变量存储在哪个区,占几个字节,可以参加什么运算
✓变量有地址:
&x
✓变量的值的获得(赋值,从键盘接收)
(三)符号常量:
宏
(四)标识符命名规则:
✓变量命名,函数命名等都是标识符:
数字,字母,下划线构成,其中数字不能开头。
关键字不可以用来作为用户的标识符。
✓下面标识符中完全合法的标识符是:
▪a)max_234m44x
▪b)32ak-uintgfk
▪c)minprintfk3hj(printf是函数名不是关键字,语法上,可以用来作标识符,但是强烈建议不要使用库函数名作为标识符,容易使代码混乱)
三、运算符(p31)
(一)算术运算符:
+、-*、/、%(除法运算:
两个数都是整数,结果取整5/9;求余运算:
参加运算的两个数必须都是整数)
(二)++,--:
变量的值自增1或者自减1
✓++运算符:
是使得变量的值+1
✓--运算符:
使得变量的值-1
✓++,--:
只能用于变量的运算,不可以用于常量,5++,x++
✓++,--:
参加运算的操作数是几个?
1个,单目运算符
✓c=a++;里面有两个运算符,=和++:
如果++在变量的后面,先取变量的值付给c,在将变量a+1;
✓c=++a;先将变量a+1,再将计算后,a的值给变量c
✓while(y--){}for(;x--<4;)
(三)赋值运算符:
=,左边必须是变量,右边可以是变量、常量、表达式。
复合的赋值运算(+=、-=、*=、/=、%=、&=、|=、^=、《=、》=)特例:
赋值运算左右类型不匹配时,如何执行?
✓整给实:
直接在整数后面加小数点和若干0;
✓实给整:
舍弃小数,不执行四舍五入
✓字符型给整型:
原样赋值,数据由原来的一个字节变成了4个字节
✓整给字符:
取地址最小的一个字节给字符型变量
(四)关系运算符:
>,<,>=,<=,==,!
=
✓y=0;if(y=12)printf();elseprintf();
(五)逻辑运算符:
&&,||,!
✓逻辑与运算:
如果左边的表达式,值为假,则运算结果必然是假,右边表达式将不被判断和执行;
✓逻辑或运算:
如果左边的表达式,值为真,则运算结果必然是真,右边表达式将不被判断和执行;
(六)条件运算符:
?
:
(七)自动类型转换:
intx=1;floaty=3.5;x+y-2.0结果是double型:
当不同数据类型做混合运算时,字节少的类型要自动转换成字节多的类型参加运算,结果为字节多的类型
(八)强制类型转换:
(类型)intx=1;floaty=3.5;x+(int)y-2.0
(九)运算符的优先级别(p31)要会比较
(十)sizeof(x):
测量某量在内存中占用的字节数。
x可以是变量,常量,数据类型
(十一)输出函数:
printf(p37)能处理任何类型的数据。
printf函数的两种使用形式:
✓一、原样输出字符串
▪printf("djhskhgf");
✓二、按照某种格式来输出一个数据
▪intc=30;
▪printf("%d",c);
▪printf("c=%d",c);
▪%d十进制整数
▪%o八进制整数
▪%x十六进制整数
✓printf输出的时候,可以人为的控制小数的位数,和数据输出所占的屏幕宽度%10d
▪>实际数据的宽度,补空格
▪<实际数据宽度,原样输出
▪=原样输出
(十二)输入函数:
scanf(p39)能处理任何类型的数据
(十三)字符输出函数:
putchar,只能处理字符类型的数据,并且处理的是单个字符(p41)
✓1.作用:
输出一个字符
✓2.它的参数c,可以是:
字符型变量,字符型常量,整形变量,整形常量,表达式
▪intx=108;
▪charc='k';
▪putchar(c);//字符型变量
▪putchar('\n');//字符型常量
▪putchar(x);//整形的变量
▪putchar(100);//整形的常量
▪putchar(x+1);//表达式
(十四)字符输入函数:
getchar,只能处理字符类型的数据,并且处理的是单个字符
✓1.从键盘接收一个字符型的数据
✓2.函数的参数为空
✓3.函数的返回值通常需要存储给另外一个变量
▪例如:
c=getchar();
四、程序设计的基本结构
(一)顺序结构
✓定义:
有几个变量?
都是什么类型?
✓输入:
已知条件是什么?
有几个?
如何输入
✓计算:
程序要计算的量是什么?
如何计算?
✓输出:
输出什么?
(二)选择结构(p58)
✓单个分支的选择结构
✓两个分支的选择结构:
绝对值问题
✓三个分支的选择结构:
一元二次方程求根问题
✓多个分支的选择结构:
分数等级问题
✓if的嵌套:
出租车计费问题
✓switch语句
▪switch后面括号中的表达式必须是整型或字符型数据
▪case后面的常量不能重复
▪case后面的常量:
可以是整型、字符常量如:
case8或case‘a’
▪一个case分支,可以有多条语句,要括起来构成复合语句
▪case和default语句的顺序没有要求,但要注意break的使用
▪default是可以省略不写
▪break是用来结束switch语句的
✓if-else配对原则:
else总是和离它最近的、未配对的if配成一对
(三)循环结构,三种循环结构的比较
while
do…while
for
①循环变量赋初值;
while(②循环条件)
{
④循环体语句
③循环变量增值
}
①循环变量赋初值;
do
{
④循环体语句
③循环变量增值
}while(②循环条件);
for(①循环变量赋初值;②循环条件;③循环变量增值)
④循环体语句
n=1;
while(n<=100)
{s+=n;
n++;
}
n=1;
do
{s+=n;
n++;
}while(n<=100);
for(n=1;n<=100;n++)
s+=n;
初始条件为假,循环一次也不做
初始条件为假,循环体执行一次
初始条件为假,循环一次也不做
“循环条件”为0,即是假;非0,即是真。
因此若有语句:
for(n=1;1;n++)s+=n;循环为死循环。
(四)break和continue:
结束循环,提速循环
五、数组
(一)一维数组:
存储一组数据类型相同的数。
✓1.使用这些数据的话,就要引用数组元素,a[i]
✓2.数组名除了作为一个名字存在,还是数组的首地址,也就是第一个元素的地址,a等价于&a[0],输出地址,使用的格式控制符号是:
%x,%p(十六进制表示)
✓3.数组中所有的元素地址是连续的
(二)定义
✓数据类型数组名[元素的个数]
✓inta[10];
✓[]中,不可以是变量,必须是常量或常量表达式,可以是符号常量:
#defineM10
voidmain()
{
inta[M];可以
intx=5;intb[x];不可以
}
✓元素就有a[0],a[1]......a[9],但是在这个数组中,没有a[10]这个元素
(三)初始化
✓1.全部元素初始化:
inta[10]={1,2,3,4,5,6,7,8,9,10};
✓2.当你定义一个数组,对全部元素都初始化的时候,可以在定义的时候省略数组的长度:
inta[]={1,2,3,4,5};
✓3.部分初始化:
inta[10]={1,2,3};
✓4.完全不进行初始化(数组元素的值是不确定):
inta[10];(static,全局的:
0)
(四)接收
✓for(i=0;i<10;i++)
✓scanf("%d",&a[i]);
(五)冒泡排序算法分析:
✓k表示趟数i表示数组元素的下标
✓if(a[i]>a[i+1]){jiaohuan}
✓k=1i=0,.....8n-1-k
✓k=2i=0,.....7
✓k=3i=0-6
✓k=4i=0-5
✓k=5
✓for(k=1;k<10;k++)
✓for(i=0;i<=n-1-k;i++)
✓if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}
✓#include
✓voidmain()
✓{
✓inti,j,t;
✓inta[10];
✓for(i=0;i<10;i++)
✓scanf("%d",&a[i]);
✓for(j=1;j<10;j++)
✓for(i=0;i<10-j;i++)
✓if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}
✓for(i=0;i<10;i++)
✓printf("%4d",a[i]);
✓}
(六)一维数组的地址关系
a
&a[0]
a+1
&a[1]
a+2
&a[2]
a+3
&a[3]
……
……
a+i
&a[i]
(七)二维数组的地址
✓关系一:
按行讨论
▪inta[10][10];//初始化了,行号可以省略,但列号绝对不可以省略
▪a[0]是第一行的数组名,是第一行的地址,是&a[0][0]。
▪a[0]+3是第一行,第四个元素的地址,即&a[0][3]
▪结论:
a[0]+i等价于&a[0][i]
∙a[2]+2等价于&a[2][2]
✓关系二:
按列来讨论
▪inta[3][4];
▪数组名是a,是数组的首地址,是数组的第一个元素的地址
▪首地址是a等价&a[0]、a+1等价于&a[1]、a+i等价于&a[i]
inta[]={1,2,3,4};
intb[][3]={1,2,3,5,8,9};
intc[][2][3]={1,2,3,4,5,6,7,8,9}
(八)字符数组
✓定义(一维)
▪charc[20];chark[100];
✓初始化
▪charc[10]={'a','b','c','d','e','f','g','h','i','j'};
▪charc[]={"hello"};
▪charc[]="hello";(字符数组长度:
字符串的个数+1)
✓不可以的初始化:
charc[10];c="hello";(数组名是常量,不可以写在赋值左边)
✓从键盘接收
▪1.scanf()%c格式:
逐个处理字符数组元素,要使用循环
▪2.scanf()%s格式:
用数组名处理字符数组(不做边界检查)
∙scanf("%s",f);//不需要使用循环,直接使用数组名f就可以用%s的格式来输入整个字符串
∙1)系统会在接收的字符串的末尾加上字符串结束的标志字(\0)
∙2)至于输入字符串的长度是大于、等于、小于数组定义的长度,系统并不做检查和管理。
∙3)合法的形式:
是输入的字符串的长度要小于或等于数组的长度-1.留出一个元素,装\0
▪3.getchar():
逐个处理字符数组元素,要使用循环
▪4.gets():
gets(数组名);
✓输出
▪1.printf()%c格式:
逐个处理字符数组元素,要使用循环
▪2.printf()%s格式:
不用循环,用数组首地址做函数参数
∙printf("%s",f);//不需要使用循环,直接使用数组名f就可以用%s的格式来输出整个字符串
∙会从字符数组的第一个元素开始输出,遇到\0结束。
▪3.putchar():
逐个处理字符数组元素,要使用循环
▪4.puts():
puts(数组名);
✓字符串处理函数string.h
▪gets()
▪puts()
▪strlen():
测量字符串长度,遇到‘\0’结束
▪strcat():
连接两个字符串,两个参数,都可以是数组名,第二个参数还可以是字符串常量,例如strcat(s1,”hello”);
▪strcpy():
复制两个字符串,两个参数,都可以是数组名,第二个参数还可以是字符串常量,例如strcpy(s1,”hello”);
▪strcmp():
比较两个字符串,两个参数,都可以是数组名或字符串常量,如果两个字符串相等,函数值为0;否则非0。
六、函数
函数构成四要素,定义函数的时候,只要给出四要素,就完成定义
①类型②名字(③参数)
{
④函数体
}
(一)类型
✓1.有返回值,类型尽量同返回值一致
✓2.无返回值,类型void
(二)名字:
随便起,最好见名知意
(三)参数:
函数之间消息传递的载体。
✓1.有没有?
✓2.有几个?
✓3.什么类型?
(四)函数体
✓函数的功能(这个函数干什么)
(五)调用函数的时候:
✓1.函数值
▪有没有返回值,
▪没有,这样调用:
sum(a);
▪有,这样调用:
要用一个变量来接收函数返回值,b=sum(a);
✓2.参数
▪有没有参数,
▪有几个?
什么类型?
实际参数要有确定的值,才可以调用函数。
(六)函数的调用方式
✓嵌套调用:
a调用b,b调用c。
函数可以嵌套调用,但不能嵌套定义:
即不可以在一个函数的函数体中定义另外一个函数;
✓递归调用:
一个函数调用了它自身。
(七)函数的值传递:
实际参数将它的值(可以是变量的值,也可以是变量的地址)传递给形式参数。
✓变量的值:
实参将变量的值传递给形参,形参的改变,不影响实参
✓传递的地址:
实参和形参拥有相同的地址,对形参地址中的修改,等同于对实参的修改,如数组名作为函数的参数
(八)变量的分类
✓全局变量:
在函数外部定义的变量,作用域:
从定义的位置开始,直到文件末尾
✓局部变量:
在函数内部定义的变量,作用域:
从定义的位置开始,直到函数末尾
(九)变量的存储类别
✓auto:
自动存储类别,变量的生存期为本函数的生存期。
默认缺省的存储类型。
✓static:
静态存储类别,变量的生存期为整个程序。
✓extern:
扩展
✓register:
寄存器
七、指针
(一)指针变量的定义
✓int*p1;
✓char*p2;
✓float*p3;
✓指针就是地址,指针变量就是可以装地址的变量
(二)指针变量的引用
✓inta;int*p;p=&a;指针变量p中装了整型变量a的地址,则可以说:
p指向了a
(三)指针变量与数组
✓inta[10]={1,2,3,4,5,6,7,8,9,10};int*p;若有p=a;则可以说:
p指向了数组a,则p里面是数组的首地址,即a[0]的地址。
则有如下关系
a
&a[0]
p
a+1
&a[1]
p+1
a+2
&a[2]
p+2
a+3
&a[3]
p+3
……
……
……
a+i
&a[i]
p+i
p+i等于a+i等价于&a[i]
✓如果有p=a;则数组元素的表示有两种形式:
▪数组名表示:
a[i]
▪指针变量表示:
p[i]
▪a[0]永远是数组的第一个元素;p[0]是以它指向的地址为第一个元素,如有p=&a[3],则p[0]即是a[3]。
(四)指针运算符
✓可以参加指针运算的运算符有两个:
*,&
✓*p表示,p所指向的变量的值
✓&表示,取一个变量的地址
✓*,&是两个互逆的运算符
✓若有代码:
inta[10]={1,2,3,4,5,6,7,8,9,10};int*p;p=a;则有
*a
a[0]
*p
*(a+1)
a[1]
*(p+1)
*(a+2)
a[2]
*(p+2)
*(a+3)
a[3]
*(p+3)
……
……
……
*(a+i)
a[i]
*(p+i)
*(p+i)等于*(a+i)等价于a[i]
八、结构体、共用体、枚举
类型
结构体
共用体
枚举
定义
structstudent
{
intnum;
charname[20];
intcomp;
intmath;
inteng;
};
unionlevel
{
intgrade;
charposition[10];
};
enumwd{m,t=2,f,n};
特征
结构体变量长度等于所有成员的长度和
共用体变量的长度等于长度最长的成员的长度
{}中是枚举元素,都是常量,默认从0开始
应用
上述三种类型,都要先定义类型,再定义相应的变量
九、文件
(一)文件分类
(二)文件操作过程
(三)文件打开和关闭
(四)文件打开方式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 期末 复习 知识 要点