该【期末知识点【C语言】 】是由【莫比乌斯】上传分享,文档一共【10】页,该文档可以免费在线阅读,需要了解更多关于【期末知识点【C语言】 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。2012-2013【2】c语言期末复习知识要点
基本概念的基础知识(p5)
构成c的基本单位是函数
main函数是c语言中的一个函数,c语言写的程序,可以有多个函数构成,c程序中有且只有一个main函数,c程序的执行总是从main函数开始,在main函数中结束。
c程序中注释可以出现在任何空格可以出现的地方
注释的作用:帮助理解和备忘程序的功能
注释方法两种:///**/
注释书写位置:可以写在任何空格可以出现的地方,原则上,写在代码后面,不影响程序的可读性
c语句都要用分号;结束
函数由函数的首部和函数体构成
函数可以嵌套调用,但是不可以嵌套定义
函数之间的书写位置没有固定的要求
其他函数,只有被调用的时候,main调用了它,它才会被执行。
变量和常量(p22)
常量是不可以改变的量
常量分为整型、实型、字符型
整型常量分为:十进制:125;八进制:0125;十六进制:0x12(后面加l的是长整型常量)
实型常量分为:(小数),+3(科学计数)
,可以省略小数点前的整数:.13可以省略小数点后的小数:5.
mEn,科学计数法,e前必须有数字,e后必须是整数
字符型常量分为:字符常量‘a’,字符串常量“abcd”,转义字符(p29)
字符型:'a'字符常量,它可以存在一个字符变量中,它存储的是该字符的ascii码值,其实是一个整数,一个ascii码在内存中占用一个字节
"afjdslkgjfk":字符串常量,它不可以存入一个字符变量中。那如果要表示或者存储一个字符串,怎么办?字符数组来办
转义字符:
\ddd:代表1-3位八进制数为ascii码值的那个字符。如\7表示ascii码值为7的字符;\25表示ascii码值为21(十进制)的字符;\101表示ascii码值为65(十进制)的字符。
\xhh:代表1-2位十六进制数为ascii码值的那个字符。如\x41表示ascii码值为65(十进制,4*16+1)的字符;
\\输出一个\,\双引号输出双引号。
字符串长度判定:“abc\\d\n\123”长度为7;“abcd\n\183”长度为8
算法的5个特性
变量是在程序执行过程中其值可以改变的量
变量要先定义,后使用
变量要分类型:类型决定变量存储在哪个区,占几个字节,可以参加什么运算
变量有地址:&x
变量的值的获得(赋值,从键盘接收)
符号常量:宏
标识符命名规则:
变量命名,函数命名等都是标识符:数字,字母,下划线构成,其中数字不能开头。关键字不可以用来作为用户的标识符。
下面标识符中完全合法的标识符是:
a)max _234 m4 4x
b)32a k-u int gfk
c)min printf k3 hj(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=;x+y-:当不同数据类型做混合运算时,字节少的类型要自动转换成字节多的类型参加运算,结果为字节多的类型
强制类型转换:(类型)intx=1;floaty=;x+(int)y-
运算符的优先级别(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)
:输出一个字符
,可以是:字符型变量,字符型常量,整形变量,整形常量,表达式
intx=108;
charc='k';
putchar(c); //字符型变量
putchar('\n'); //字符型常量
putchar(x); //整形的变量
putchar(100); //整形的常量
putchar(x+1); //表达式
字符输入函数:getchar,只能处理字符类型的数据,并且处理的是单个字符
例如: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:结束循环,提速循环
数组
一维数组:存储一组数据类型相同的数。
,就要引用数组元素,a[i]
,还是数组的首地址,也就是第一个元素的地址,a等价于&a[0],输出地址,使用的格式控制符号是:%x,%p(十六进制表示)
定义
数据类型数组名[元素的个数]
inta[10];
[]中,不可以是变量,必须是常量或常量表达式,可以是符号常量:
#defineM10
voidmain()
{
inta[M];可以
intx=5;intb[x];不可以
}
元素就有a[0],a[1]......a[9],但是在这个数组中,没有a[10]这个元素
初始化
:inta[10]={1,2,3,4,5,6,7,8,9,10};
,对全部元素都初始化的时候,可以在定义的时候省略数组的长度:inta[]={1,2,3,4,5};
:inta[10]={1,2,3};
(数组元素的值是不确定):inta[10];(static,全局的:0)
接收
for(i=0;i<10;i++)
scanf("%d",&a[i]);
冒泡排序算法分析:
k表示趟数 i表示数组元素的下标
if(a[i]>a[i+1]){jiaohuan}
k=1 i=0,.....8n-1-k
k=2 i=0,.....7
k=3 i=0-6
k=4 i=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";(数组名是常量,不可以写在赋值左边)
从键盘接收
()%c格式:逐个处理字符数组元素,要使用循环
()%s格式:用数组名处理字符数组(不做边界检查)
scanf("%s",f);//不需要使用循环,直接使用数组名f就可以用%s的格式来输入整个字符串
1)系统会在接收的字符串的末尾加上字符串结束的标志字(\0)
2)至于输入字符串的长度是大于、等于、小于数组定义的长度,系统并不做检查和管理。
3)合法的形式:是输入的字符串的长度要小于或等于数组的长度-,装\0
():逐个处理字符数组元素,要使用循环
():gets(数组名);
输出
()%c格式:逐个处理字符数组元素,要使用循环
()%s格式:不用循环,用数组首地址做函数参数
printf("%s",f);//不需要使用循环,直接使用数组名f就可以用%s的格式来输出整个字符串
会从字符数组的第一个元素开始输出,遇到\0结束。
():逐个处理字符数组元素,要使用循环
():puts(数组名);
gets()
puts()
strlen():测量字符串长度,遇到‘\0’结束
strcat():连接两个字符串,两个参数,都可以是数组名,第二个参数还可以是字符串常量,例如strcat(s1,”hello”);
strcpy():复制两个字符串,两个参数,都可以是数组名,第二个参数还可以是字符串常量,例如strcpy(s1,”hello”);
strcmp():比较两个字符串,两个参数,都可以是数组名或字符串常量,如果两个字符串相等,函数值为0;否则非0。
函数
函数构成四要素,定义函数的时候,只要给出四要素,就完成定义
①类型②名字(③参数)
{
④函数体
}
类型
,类型尽量同返回值一致
,类型void
名字:随便起,最好见名知意
参数:函数之间消息传递的载体。
?
?
?
函数体
函数的功能(这个函数干什么)
调用函数的时候:
有没有返回值,
没有,这样调用:sum(a);
有,这样调用:要用一个变量来接收函数返回值,b=sum(a);
有没有参数,
有几个?什么类型?实际参数要有确定的值,才可以调用函数。
函数的调用方式
嵌套调用: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开始
应用
上述三种类型,都要先定义类型,再定义相应的变量
文件
文件分类
文件操作过程
文件打开和关闭
文件打开方式
期末知识点【C语言】 来自淘豆网m.daumloan.com转载请标明出处.