C语言复习提纲Word文件下载.docx
《C语言复习提纲Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言复习提纲Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
顺序结构(输入输出)
1.单字符输入/出:
putchar(字符变量)、getchar()。
注意getchar()没有参数。
2.字符串:
gets(字符数组名)、puts(数组名)。
3.格式化输入:
scanf(“格式控制符”,地址列表);
格式控制符:
%c、%d、%o、%x、%s、%f
◆若输入long型、double型应加l,如%ld、%lo、%lf
◆格式%s输入字符串不包含空格,且对应地址表列是字符数组名。
◆默认分隔符:
空格、回车、Tab键(也可按域宽截取)
◆格式控制符间不宜加其它字符,如加入其它字符,输入时应原样输入,否则数据接收错误。
如:
scanf(“%d,%d”,&
a,&
b);
输入数据时两数据间要有逗号;
scanf(“%d%d”,&
%d间有两个空格,则输入数据时至少有两个空格。
◆输入函数中%f格式不能带小数,如:
scanf(“%7.2f”,&
a)是错误的。
◆%c格式输入单字符,空格字符和转义字符都作为有效字符接收。
◆%*d表示跳过它对应的输入数据。
4.格式化输出:
printf(“格式控制符”,输出列表);
◆格式控制符部分可加入其它字符,原样输出。
提示语或使输出结果清楚显示
◆输出列表:
可以是变量、常量、表达式、函数调用等。
以斜杠(\)开始,作为一个字符,如求字符串长度:
“jk\\gk\bl\0k\nlj”,长度为7。
◆注意:
输出long、double型数据,用%ld、%lf
◆可设定输出宽度,m和n,如:
%5d、%6.2f、%.2f
◆负号表示域内向左对齐,如:
%-12d
选择结构
1.if语句的三种形式:
◆If(表达式)语句;
◆If(表达式)
{语句1;
}
Else
{语句2;
◆If(表达式1){语句1;
Elseif(表达式2){语句2;
Elseif(表达式3){语句3;
……
Elseif(表达式n){语句n;
Else{语句n+1;
2.if语句的嵌套。
3.switch语句结构
Switch(表达式)
{
Case常量表达式1:
语句1;
break;
Case常量表达式2:
语句2;
Case常量表达式n:
语句n;
default:
语句n+1;
4.if中的表达式,一般是逻辑或关系表达式,也可以是任意类型表达式。
5.逻辑表达式的优化运算:
◆&
&
运算:
只要算出第一个表达式为0,第二个表达式不再运算。
◆||运算:
只要算出第一个表达式为1,第二个表达式不再运算。
inti=0,j=0,a=6;
if((++i>
0)||(++j>
0))a++;
printf(%d%d%d”,i,j,a);
结果i为1,j为0,a为7。
6.如果有多条语句,必须用大括号括起,构成复合语句。
7.switch语句中case后面只能是常量值;
若执行完某case后的语句没遇到break,则继续执行下一个case语句。
8.本章主要是算法构思。
(先考虑好需要那些变量,即数据结构,再考虑怎样求解问题)
循环结构
1.主要的循环结构
◆while(表达式){语句;
◆do
{循环语句序列;
While(表达式);
◆for(循环变量初值表达式1;
循环结束条件表达式2;
循环变量增值表达式3)
{循环语句;
while、for中的表达式,一般是逻辑或关系表达式,也可以是任意类型表达式。
注意for循环表达式里几种形式(P118—120页)
2.如果有多条语句,必须用大括号括起,构成复合语句。
*
***
*****
*******
*
3.循环程序:
注意循环变量的初值、循环条件、修正值等,以及循环中用到的某些变量赋初值,如求累加和变量。
4.一般是先判断条件,再执行循环体;
但do—while语句是先执行一遍循环体,再判断条件。
5.注意循环嵌套。
一般是两个或以上的for循环,典型例子如输出一个如右图的菱形图案。
6.break语句跳出整个循环体,不在执行循环、continue语句结束本次循环,可继续执行下一次循环判断。
7.本章主要是算法构思。
数组
1.数组定义:
inta[10];
或inta[N](N需要事先定义为符号常量:
#defineN10);
数组长度必须是常量值,不能是变量,可以是在程序开始前定义的符号常量,进行长度定义。
2.下标引用:
0~N-1,切记不能引用到N。
(inta[5];
a[5]=10;
这种引用是错误的)
3.数组初始化时可省略长度定义。
4.数组不能整体赋值。
数组中各元素值的输入/出,应使用循环程序逐个输入/出;
字符数组例外(gets、puts)。
6.数组中的排序方法:
冒泡法:
外循环为i=0;
i<
n-1;
内循环为j=0;
j<
n-1-i;
循环中比较a[j]和a[j+1]两个元素,并互换。
7.二维数组:
按行存放;
赋初值的4种情况P137—138页。
8.字符数组:
通常定义较长长度,如:
chars[50];
通常用于存放字符串,结束标志为‘\0’。
可用字符串常量为其初始化,如:
chars[]=“sdkhg”;
也可由键盘输入,如gets(s);
输出用puts(s);
注意:
chars[5]={‘a’,’d’,’f’,’g’,’w’};
此种形式不是字符串,无字符串结束标志,仅仅是普通一维字符数组,不能用puts输出,只能用%c格式逐个输出。
字符数组的输入/出还有两种形式:
%c、%s。
9.字符串函数(P146—150页):
strcpy(s1,s2)、strcat(s1,s2)、strcmp(s1,s2)、strlen(s)、strupr(s)、strlwr(s)
注意参考教材的例题。
函数
1.函数定义:
intfun(inta,inty);
如定义时没指明函数类型,如:
fun(inta);
默认是int型,返回值不确定。
2.声明:
函数定义在前,使用在后,可省略函数声明,反之需要在使用前声明。
函数声明的几种变通形式。
◆函数声明后加分号,而函数定义后没有分号。
3.函数调用:
函数名(实参表);
◆实参与形参个数、类型、位置一致。
◆形参与实参占据不同的存储单元;
形参只在函数调用时才为其分配存储单元,函数调用结束后释放。
◆实参与形参之间是传值调用,单向传递关系,形参值改变,不会影响实参值。
◆补充:
函数可嵌套调用,不可嵌套定义。
◆嵌套调用:
一个函数内部又调用另外一个函数。
◆递归调用:
一个函数调用它自身。
4.从作用域角度,变量分为:
全局变量、局部变量。
◆局部变量:
在函数内部定义,只能在该函数中使用,包括函数的形参和复合语句中定义的变量,main函数中定义的变量也是局部变量,不能被其它函数使用。
◆不同函数内定义的同名变量,互不影响,因其作用域不同,内存空间独立。
◆全局变量:
在函数外部定义,作用域从定义开始到本文件结束。
其间的所有函数都可以使用它,可在各函数间传递值,但容易带来副作用,降低模块独立性。
预处理命令
1.预处理命令以“#”开头,末尾不加分号。
在程序编译之前处理。
1.
2.宏替换:
将函数中出现宏名的地方用宏体进行替换。
◆
#defineSQR(x)x*x
main()
{inta,k=3;
a=++SQR(k+1);
printf("
%d\n"
a);
替换后的表达是为a=++k+1*k+1
结果为9
宏体可以是数字、也可以是组成C表达式或语句的其它字符,还可以引用已定义的其它宏名。
◆宏的作用域:
定义宏之后到本源文件结束,可用#undef提前结束。
◆无参宏(符号常量):
#definePI3.14
函数中双引号内的宏名不替换,如printf(“PI”);
◆有参宏:
#define宏名(形参表)宏体
◆引用:
宏名(实参表)
◆注意有参宏如果宏体和参数没用括号括起,可能有副作用。
◆分析有参宏的程序时,必须先将宏替换后的表达式写到纸上,再分析结果。
◆文件包含:
#include<
文件名>
搜索系统标准目录
#include“文件名”先搜索当前目录,找不到再搜索系统标准目录
指针
1.指针的基本概念:
指针≡地址;
2.指针常量:
某已知变量的地址,或数组名等,:
inta,b[5];
此时&
a和b就是指针常量(固定值)。
3.指针变量:
如inta,*p=&
a;
chars[9],*q=s;
◆赋值:
必须赋地址值,如inta,*p;
p=&
如p=2001;
是错误的。
4.间接访问:
*p=5;
等同于a=5;
5.指针作为函数的参数,传递的是实参变量的地址,
voidfunc(int*p)
◆调用时用某变量的地址常量,或指向该变量的指针作为实参,如主调函数中有定义inta,*q;
q=&
则可用&
a或q作为实参进行调用,即func(&
a);
或func(q);
都是将变量a的地址传递给形参指针p,使指针p指向变量a。
函数中使用*p就是对a的间接访问,就可以改变a的值,或者将结果放入a中。
但形参变量本身改变,反过来不会影响实参指针值。
6.指针与一维数组:
inta[10],*p=a;
则a代表数组首地址,是指针常量,
◆元素的表示方法:
a[i]、*(a+i)、p[i]、*(p+i)
◆元素地址:
a[i]、a+i、&
p[i]、p+I
◆区别:
a实指针常量,只不能变,而p是指针变量,可进行增减运算;
所以常通过p的增减运算来快速访问数组a,如:
while(p<
a+5)scanf(“%d”,p++);
或while(p<
a+5){(*p)++;
printf(“%d,”,*p++);
◆理解(*p)++、*p++、*(p++)、p++的含义。
◆执行p++后指针拨动的单元数(由元素类型决定)
结构体和共同体
1.结构体:
struct,.定义的几种形式P282—284页。
成员可以是任意类型。
成员引用:
结构体变量名.成员名
◆占用内存大小为:
各成员占用内存之和。
2.共用体:
union,定义形式同结构体。
共用体变量名.成员名
共用体中较长的成员的长度。
◆某一时刻只有一个成员起作用,最后一个存放的成员值有效。
◆结构体类型与共用体类型可互相嵌套使用,即结构体成员的类型也可以是共用体类型,反之亦然。
文件
1.流式文件:
文本文件、二进制文件。
◆文本文件:
若干字符序列,较长,可用type命令或记事本查看。
◆二进制文件:
若干字节序列,短,存取速度快,不能用type或记事本等查看。
2.文件操作:
读操作、写操作。
使用有关文件函数来完成,需包含头文件stdio.h
3.操作步骤:
①定义文件类型指针FILE*fp;
②打开文件fp=fopen(文件名,打开方式);
③检测指针if(fp==NULL){……exit(0);
④读/写fgetc(fp)、fputc(ch,fp)
⑤关闭文件。
fclose();
4.打开文件时的使用方式看表13-1,P333页。
”r”、”w”、”a”。
5.fopen()如果不能正确打开文件,则返回值为NULL。
fclose()如果正确关闭文件,则返回值为0,否则返回EOF(-1)。
fputc(ch,fp)以写的方式打开,如果输出成功,则返回值就是输出的字符;
如果输出失败,否则返回EOF(-1)。
fgetc(fp)必须以读或读写的方式打开文件,且文件必须存在。
该函数返回一个字符值。
如果读入的文件遇到结束符,返回EOF(-1)。
7.读入文件控制循环:
while((ch=fgetc(fp))!
=EOF)或while(!
feof(fp))
EOF是在头文件中定义的符号常量,值为-1代表文件结束。
C语言复习重点
大体上必须清楚的:
1)程序结构是三种:
顺序结构,循环结构(三个循环结构),选择结构(if和switch)
2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。
3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.
4)bit是位是指为0或者1。
byte是指字节,一个字节=八个位.
5)一定要记住二进制如何划成十进制。
概念常考到的:
1、编译预处理不是C语言的一部分,不再运行时间。
C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。
2、每个C语言程序中main函数是有且只有一个。
3、在函数中不可以再定义函数。
4、算法的是一定要有输出的,他可以没有输入。
5、break可用于循环结构和switch语句。
6、逗号运算符的级别最低
一、
1)合法的用户标识符考查:
合法的要求是由字母,数字,下划线组成。
有其它元素就错了。
并且第一个必须为字母或则是下划线。
第一个为数字就错了。
关键字不可以作为用户标识符号。
maindefinescanfprintf都不是关键字。
迷惑你的地方If是可以做为用户标识符。
因为If中的第一个字母大写了,所以不是关键字。
2)实型数据的合法形式:
2.333e-1就是合法的,且数据是2.333×
10-1。
考试口诀:
e前e后必有数,e后必为整数。
.
3)字符数据的合法形式:
:
'
1'
是字符占一个字节,"
1"
是字符串占两个字节(含有一个结束符号)。
'
0'
的ASCII数值表示为48,'
a'
的ASCII数值是97,'
A'
的ASCII数值是65。
4)整型一般是两个字节,字符型是一个字节,双精度一般是4个字节:
考试时候一般会说,在16位编译系统,或者是32位系统。
碰到这种情况,不要去管,一样做题。
掌握整型一般是两个字节,字符型是一个字节,双精度一般是4个字节就可以了。
5)转义字符的考查:
在程序中inta=0x6d,是把一个十六进制的数给变量a注意这里的0x必须存在。
在程序中inta=06d,是一个八进制的形式。
在转义字符中,’\x6d’才是合法的,0不能写,并且x是小写。
‘\141’是合法的,0是不能写的。
‘\108’是非法的,因为不可以出现8。
6)算术运算符号的优先级别:
同级别的有的是从左到右,有的是从右到左。
7)强制类型转换:
一定是(int)a不是int(a),注意类型上一定有括号的。
注意(int)(a+b)和(int)a+b的区别。
前是把a+b转型,后是把a转型再加b。
8)表达式的考查:
是表达式就一定有数值。
赋值表达式:
表达式数值是最左边的数值,a=b=5;
该表达式为5,常量不可以赋值。
自加、自减表达式:
假设a=5,++a(是为6),a++(为5);
运行的机理:
++a是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这
个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,
再放到变量a中。
进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。
++在前先加后用,++在后先用后加。
逗号表达式:
优先级别最低;
表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
9)位运算的考查:
会有一到二题考试题目。
总的处理方法:
几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。
例1:
chara=6,b;
b=a<
<
2;
这种题目的计算是先要把a的十进制6化成二进制,再做位运算。
例2:
一定要记住,
例3:
在没有舍去数据的时候,<
左移一位表示乘以2;
>
右移一位表示除以2。
10)018的数值是非法的,八进制是没有8的,逢8进1。
11)%符号两边要求是整数。
不是整数就错了。
12) 三种取整丢小数的情况:
1、inta=1.6;
2、(int)a;
3、
二、
1)printf函数的格式考查:
%d对应整型;
%c对应字符;
%f对应单精度等等。
宽度的,左对齐等修饰。
%ld对应longint;
%lf对应double。
2)scanf函数的格式考察:
注意该函数的第二个部分是&
a这样的地址,不是a;
Scanf(“%d%d%*d%d”,&
b,&
c);
跳过输入的第三个数据。
3)putchar,getchar函数的考查:
chara=getchar()是没有参数的,从键盘得到你输入的一个字符给变量a。
putchar(‘y’)把字符y输出到屏幕中。
4)如何实现两个变量x,y中数值的互换(要求背下来)
不可以把x=y,y=x;
要用中间变量t=x;
x=y;
y=t。
5)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)
这个有推广的意义,注意x=(int)x这样是把小数部分去掉。
三、
特别要注意:
c语言中是用非0表示逻辑真的,用0表示逻辑假的。
1)关系表达式:
表达式的数值只能为1(表示为真),或0(表示假)
当关系的表达是为真的时候得到1。
如9>
8这个是真的,所以表达式的数值就是1;
2)逻辑表达式:
只能为1(表示为真),或0(表示假)
a)共有&
||!
三种逻辑运算符号。
b)!
||优先的级别。
c)注意短路现象。
考试比较喜欢考到。
d)要表示x是比0大,比10小的方法。
0<
x<
10是不可以的(一定记住)。
是先计算0<
x得到的结果为1或则0;
再用0,或1与10比较得到的总是真(为1)。
所以一定要用(0<
x)&
(x<
10)表示比0大比10小。
3)if语句
else是与最接近的if且没有else的相组合的。
4)条件表达式:
表达式1?
表达式2:
表达式3
注意是当非0时候是表达式2的数值,当为0是就是表达式2的数值。
真前假后。
5)switch语句:
a)一定要注意有break和没有break的差别,书上(34页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。
b)switch只可以和break一起用,不可以和continue用。
四、
1)三种循环结构:
a)for();
while();
do-while()三种。
b)for循环当中必须是两个分号,千万不要忘记。
c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。
d)do-while()循环的最后一个while();
的分号一定不能够丢。
(当心上机改错)
2)break和continue的差别
记忆方法:
break:
是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。
continue:
是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。
3)嵌套循环
就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。
4)while((c=getchar())!
=’\n’)和while(c=getchar()!
=’\n’)的差别
先看a=3!
=2和(a=3)!
=2的区别:
(!
=号的级别高于=号所以第一个先计算3!
=2)第一个a的数值是得到的1;
第二个a的数值是3。
考试注意点:
括号在这里的重要性。
五、
函数:
是具有一定功能的一个程序块;
1)函数的参数,返回数值(示意图):
main()
inta=5,b=6,c;
c=add(a,b);
printf(“%d”,c);
调用函数
a,b是实参
整个函数得到一个数值就是
Add函数的返回数值。
intadd(intx,inty)
intz;
z=x+y;
returnz;
被调用函数
x,y是形式参数
函数返回数值是整型
z就是这个add函数计算后得到的结果,就是函数返回给主程序的返回数值。
程序是在从上往下顺序执行,当碰到了函数add后,把a,b的数值穿给调用函数,程序暂时中断等待返回数值。
当得到了返回数值后,再顺序的往下执行
2)一定要注意参数之间的传递
实参和形参之间传数值,和传地址的差别。
(考试的重点)
传数值的话,形参的变化不会改变实参的变化。
传地址的话,形参的变化就会有可能改变实参的变化。
3)函数声明的考查:
一定要有:
函数名,函数的返回类型,函数的参数类型。
不一定要有:
形参的名称。
六、
指针变量的本质是用来放地址,而一般的变量是放数值的。
int*