《C语言程序设计》复习全篇指导.docx
- 文档编号:6131521
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:21
- 大小:38.16KB
《C语言程序设计》复习全篇指导.docx
《《C语言程序设计》复习全篇指导.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》复习全篇指导.docx(21页珍藏版)》请在冰豆网上搜索。
《C语言程序设计》复习全篇指导
《C语言程序设计》复习全篇指导
一、C语言基本概念
●C语言特点
1.语言简洁、紧凑,使用方便、灵活。
(有32个关键字,P375)
2.运算符丰富
3.数据结构丰富,具有现代化语言的各种数据结构
4.具有结构化的控制语句
5.语法限制不太严格,程序设计自由度大
6.C语言允许直接访问物理地址
7.生成目标代码质量高,程序执行效率高
8.可移植性好
●三种基本结构
1.顺序结构
2.选择结构
3.循环结构
●头文件,函数的开始和结束标志
●源程序的书写格式
1.一个C程序总是从main()函数开始执行的,而不论其位置。
P6
2.C程序书写格式自由,一行内可以写几个语句,一个语句分写在多行上。
C中没有行号。
3.每个语句和数据定义的最后必须有一个分号。
4.C语言中的输入输出语句由库函数来完成。
5.可以程序中的任何部分作注释。
●算法的概念
为解决某一个特定问题而采取的方法和步骤,叫做”算法”。
算法是问题求解过程的精确描述,一个算法由有限条可完全机械执行的、有确定结果的指令组成。
●算法的特性
1.有穷性
2.确定性
3.有零个或多个输入
4.有一个或多个输出
5.有效性
●怎样表示一个算法
1.用自然语言表示算法
2.用传统流程图表示算法
3.用N-S流程图表示算法
4.用伪代码表示
5.用计算机语言表示
二、数据类型及运算
●基本数据类型及其常量的表示法
整型int
字符型char
单精度型float
基本类型实型(浮点型)float
双精度型double
枚举类型enum
数组string[]
数据类型构造类型结构体struct{}
共用体union{}
指针类型*p
空类型void
Ø常量 在程序运行时,其值不能被改变的量叫常量。
也可用一标识符代表一个常量。
Ø符号常量 通过#define命令实现,P39
它的好处:
1. 含义清楚#definePRICE3.5
2. 需要改变常量时能“一改全改”。
附:
三个预处理命令宏定义#define、文件包含#include、条件编译#ifdef….#endif
Ø标识符命名规则P40
Ø关键字 一些标识符被赋于特定的含义,如main,int等,叫关键字。
一些关键字,被明文规定不许挪作它用,叫保留字。
C语言中,所有的关键字都是保留字,所以这两个词可以混用。
Ø整型常量的表示方法
(1)十进制整数如123,-456,0
(2)八进制整数如0开头是八进数,0123,表示为83。
如:
05,0100等。
(3)十六进制数如0x123,表示291。
如:
0X5,0X100等。
整型常量的值若超过了整型数范围,会自动被认为是长整型常量;整型常量也可以后加'L',强制置为长整型,如:
5L,100L等。
实型常量的表示方法
(1)十进制.123,123.0,0.0
(2)指数形式123e3,123E3
注意:
e的前面必须有数字,后面必须为整数。
例:
e3,2.1e3.5,.e3,e均不合法。
规范化指数形式:
小数点左边只有一位非零的数字2.3478e2
字符常量 由单引号括起的单个字符,如'A'-'Z','0'-'9','!
','%'
转义字符p48
●各种变量的定义和初始化
Ø整型
a.有符号整数:
用1bit表示符号,15bit表示数值,表数范围为-32768至32767。
定义如inta;longinta;等
b.无符号整数:
16bit都表示数值,可表示数值范围为0至65535。
unsignedintdate;
定义如unsignedlongdate;unsignedshortc,d;
int:
基本整型,每个基本整型变量分配16bit存储空间定义格式inta,b;
short:
短整型,也可写成shortint
long:
长整型,也可写成longint,每个长整型变量分配32bit存储空间。
(因其固定的存储空间,而出现的溢出现象和数值忽略现象 overflow.c)
Ø实型
数据在内存中的存放形式数符 小数部分 指数
实型变量的分类 float--32,double――64,longdouble――128
Ø字符型
char:
字符型,表示一个字符,如'A'-'Z','0'-'9','!
','%'等。
每个字符型变量分配8bit(1byte)存储空间。
字符型变量用二进制存储字符的ASCII码值。
例如:
一个变量存储字符'A',实际上是存储'A'的ASCII值:
65。
由双引号括起的字符序列,如"Hello,World!
\n",每个字符串均以不可见字符'\0'作:
为字符串结束标志。
C语言用一维字符数组存放字符串。
p52
Ø定义和初始化
各种变量定义赋值格式一致:
方法1:
变量类型 变量名;变量名=数值;
方法2:
变量类型 变量名=数值;
方法3:
通过函数进行赋值。
Eg:
defineandinitialize.cpp
●运算规则和表达式
Ø赋值运算符,算术运算符,关系运算符,逻辑运算符,条件运算符,逗号运算符
1.赋值表达式即由赋值运算符将一变量和一个表达式连接起来的式子
“=”:
作用是将一个数据赋值给一个变量。
P59
注意:
赋值运算符两侧的类型必须一致,否则会出现类型转换和数据改变情况。
2.算术运算符:
“+”,“-”,“*”,“/”,“%”(求余运算符,两侧均为整型数据)
3.关系运算符:
“>”,“>=”,“<”,“<=”,“==”,“!
=”
4.逻辑运算符:
“&&”,“||”,“!
”
5.条件运算符:
表达1?
表达式2:
表达式3P96
6.逗号运算符:
表达式1,表达式2,表达式3……表达式n
7.自增、自减运算符:
++I,――I,I++,I――***
8.复合赋值运算符:
+=,-=,*=,/=,%=
Ø运算符优先级,类型的自动转换和强制类型转换
运算符优先级
关系运算符:
>、>=、<、<=优先级相等,==、!
=优先级相等,前者高于后者。
!
算术运算符关系运算符&&||赋值运算符逗号
例:
a
例:
5>3&&2||8<4-!
0
类型的自动转换
P54图3.10
(横向箭头表示必定的转换,纵向箭头表示当运算对象为不同类型时,自动转换方向。
)
强制类型转换P56
格式:
(转换类型)变量、常量或表达式eg.(double)a;
注意:
强制类型转换时得一所需类型的中间变量,原变量的类型并未改变。
Ø位运算&^|~<<>>
所谓的位运算指的是进行二进制位的计算。
“按位与”运算符(&),“按位或”运算符(|),“异或”运算符(^),“取反”运算符(~)
“左移”运算符(<<)(相当于乘2运算),“右移”运算符(>>)(相当于除2运算),
位运算赋值运算符如&=,|=,>>=,<<=,^=
三、C语言基本语句
●基本语句:
表达式语句,空语句,复合语句
Ø任何表达式都可以加上分号而成为语句
Ø表达式语句:
由一个表达式构成的一个语句;如:
赋值语句a=1;
Ø空语句:
只有一个分号的语句,什么也不做;
Ø复合语句:
用{}把一些语句括起来成为复合语句,又称分程序。
●数据的输入输出,输入输出函数的调用
ØC中数据的输入输出是通过函数来实现,这些标准输入输出函数都放于stdio.h文件中
其中有:
putchar(输出字符)、getchar(输入字符)、printf(格式输出)、scanf(格式输入)、puts(输出字符串)、gets(输入字符串)。
P71
Øputchar函数:
向终端输出一个字符。
例:
chara=’B’;putchar(a);
Øgetchar函数:
从终端输入一个字符。
例:
charc=getchar();
Øprintf函数:
printf(格式控制,输出表列) 例:
printf(“%d,%c”,i,c);
格式控制由两部分组成:
a.格式说明由%和格式字符组成,如%d,%f,作用是将输出的数据转换为指定的格式输出
b.普通字符,即需要原样输出的字符。
输出表列是需要输出的一些数据。
例:
printf(“a=%d,c=%f”,a,c);
格式字符 P77P85-4.5作业题
(1)%d,按整型数据的实际长度输出
(2)%md,%-md,按指定的宽度输出
(3)%ld,输出长整型数据
(4)%o,以八进制输出数,不带符号位
(5)%x,以十六进制数输出的数,不带符号位
(6)%u,以十进制无符号形式
(7)%c,以字符形式输出,只输出一个字符
(8)%s,输出字符串
(9)%f格式,用来输出单、双精度的数
有以下3种用法:
%f,%m.nf,%-m.nf
(10)%e格式
若用%e,由系统自动指定给出6位小数,指数部分占4位,如(e+02),数值部分按规范指数形式输出
(11)%g格式,自动选取f或e格式,且不输出无意义的零
Øscanf函数:
scanf(格式控制,地址表列)
(1)%d%d,按十进制整型输入数据时,以一个或多个空格间隔,或用回车,Tab键;
(2)若用格式输入l:
长整型h:
短整型
(3)若使用了格式说明以外其他字符,则输入数据时应保持一致
scanf(“%3d%3d”,&a,&b)
若:
123456a=123,b=456
scanf(“%2d%*3d%2d”,&a,&b);
若:
1245678
a=12,b=78
(4)%c,输入单个字符
Øputs函数(只处理一个字符数组)
基本用法:
puts(数组名)、puts(字符串常量)
Øgets函数(只处理一个字符数组)
基本用法:
gets(数组名)
Eg:
io.cpp
●选择结构语句
Øif语句
标准形式:
if(关系表达式) 语句1; else语句2;
简化的if语句:
if(表达式)一个语句;
复合的if语句:
if(表达式)
{
语句;...
语句;
}
else
{
语句;...
语句;
}
多种if语句:
if(表达式1)语句一;
elseif(表达式2)语句二;
elseif(表达式3)语句三;
……..
else语句n;
if语句嵌套
if()
if()语句一;
else语句二;
else
if()语句三;
else语句四;
if()
if()语句1;
else
if()语句2;
else语句3;
if与else的配对关系P94
Øswitch语句
switch(表达式)
{
case常量表达式1:
语句11;...语句1n;break;
case常量表达式2:
语句21;...语句2n;break;
...
case常量表达式3:
语句31;...语句3n;break;
default:
语句k1;...语句kn;
}
Ø选择结构的嵌套
eg.If_else.cswitch.c
●循环结构语句
Øfor语句
for(表达式1;表达式2;表达式3)
一个语句;
一般各表达式用途:
for(循环变量赋初值;循环条件;循环变量增量)语句体
for语句首先执行表达式1,然后执行表达式2,如果表达式2的值为真,执行for的“一个语句”;然后执行表达式3,然后执行表达式2,如果表达式2的值为真,再执行for的“一个语句”;然后执行表达式3,然后执行表达式2,如果表达式2的值为真,再执行for的“一个语句”;当表达式2的值为假时,结束for语句,执行for语句后面的语句。
流程图在P110;
可以改写为while语句
表达式1;
while(表达式2)
{
语句;
表达式3;
}
注意:
for中的三个表达式中的任何一个都可以省略,但分号不能省略。
Øwhile语句和do-while语句
while语句基本形式:
while(表达式)语句;
while语句首先计算表达式,如果表达式的值为真,执行“一个语句”;然后再执行表达式,如果表达式的值为真,再执行“一个语句”;直到表达式的值为假时,结束while语句,执行while语句后面的语句
若有多个语句,则用复合语句形式
do-while语句基本形式:
do
循环体语句;
while(表达式);
Øcontinue语句和break语句
continue语句:
continue;
用于结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行的判定。
break语句:
break;
在循环中用于结束本次循环,即提前结束循环。
在switch结构中可使流程跳出switch结构。
Ø循环的嵌套 一个循环体中又包含另一个完整的循环结构。
Ø用goto语句和if语句构成循环
基本形式goto 语句标号;
Ø几种循环比较P114
(1)几种循环都可以用来处理同一个问题,一般情况下它们可以互相代替。
(2)goto和if搭配不提倡使用
(3)while,do….while的循环变量初始化操作应在while和do….while之前,而for循环可在表达式1中完成;在循环体中包含趋于结束条件,在while后指定循环条件
(4)for功能最强大
(5)while,do..while,和for可以使用break和continue
●语句标号和Goto语句
语句标号用标识符表示,语句标号的命名规则与标识符的命名规则是一样的
goto语句的用途:
(1)与if语句一起构成循环结构;
(2)从循环体中跳到循环体外。
注意:
结构化程序设计方法主张限制使用goto语句,滥用将使流程无规律、可读性差。
eg.circulate.cpp
四、构造类型和指针类型数据
●数组、结构、联合类型的说明及使用
Ø数组
一维数组的定义、引用和初始化
定义形式:
类型说明符 数组名[常量表达式]
说明:
1.数组名与变量名、标识符、语句标号命名规则一样;
2.数组名后面为方括号;
3.数组大小由常量表达式确定,不能为变量;
4.数组a的第一个元素为a[0];
5.引用下标是从0开始
引用形式:
数组名[下标];数组名;
初始化:
整体赋值inta[10]={0,1,2,3,4,5,6,7,8,9};,单个赋值inta[10]={3};
整体赋值说明:
1.可以只赋一部分初值,其余值默认为0;
2.若所赋值的个数超过数组长度,编译系统会提示出错;
3.可以不指定数组长度inta[]={1,2,3,4,5}
二维数组的定义和引用和初始化
定义形式:
类型说明符数组名[常量表达式1][常量表达式2];
多维数组在内存中的排列顺序 P126
引用形式:
数组名[下标][下标];数组名;
初始化:
单个赋值inta[2][3]=3;
整体赋值inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
1.所有元素写在一起inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
2.对部分元素赋初值inta[3][4]={{1},{5},{9}};
3.提供全部元素:
inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
4.提供部分元素:
inta[][4]={{0,0,3},{},{0,10}}
字符数组定义和引用和初始化
定义:
charc[10];
初始化:
1.charc[10]={‘I’,’’,’a’,’m’,’‘,’h’,’a’,’p’,’p’,’y’};
2.charstr[]={”china\nbeijing”};
3.可以部分赋初值,其余自动赋为空’\0’.
4.可以省略数组长度
引用:
可以单独引用一个元素
输入输出:
逐个输出:
以“%c”为输入输出格式控制
将整个字符串一次输入输出:
以%s输出,遇’\0’停止输出
说明:
字符串和字符串结束标志:
’\0’字符数组并不要求它的最后一个字符为’\0’
Eg:
defineandinitialize.cpp
字符串处理函数:
puts(字符数组),gets(字符数组),
strcat(字符数组1,字符数组2)将串2接到串1的后面,结果放在字符数组1中,函数调用后得到一个函数值,即字符数组1的地址。
strcpy(字符数组1,字符数组2)
说明:
1.str1必须是数组名,str2可以是数组名也可以是字符串常量;
2.连同后面的’\0’一起复制;
3.不能直接赋值str1=”china”;str1=str2;
strcmp(字符串1,字符串2)
说明:
1.不能直接比较if(str1==str2)printf(“yes”);
2.strcmp(str1,str2)str1与str2 相同0
大于正整数
小于负整数
strlen(字符数组)用于测量字符串的实际长度
strlwr()
strupw()
Ø结构
定义结构体类型变量的三种方法
1.先声明结构体类型再定义变量名
struct结构体名
{成员表列};
structstudent
{
intnum;
charname[20];
charsex;
intage;
structdatebirthday;
charaddr[30];
}student1,student2;
structdate
{
intmonth;
intday;
intyear;
};
structstudentstudent1,student2;
2.声明类型的同时定义变量
struct结构体名
{成员表列}变量名表列;
3.直接定义变量
struct
{成员表列
}变量名表列;
说明:
a.对结构体类型不分配存储空间,对变量分配存储空间;
b.成员名可以与程序中的变量名同名,互不影响;
c.成员也可以是另外一个结构体变量。
结构体变量的引用
三种方式,可以通过指向结构体类型数据的指针
一般通过结构体成员运算符
结构体变量名.成员名
结构体变量不能作为一个整体进行输入和输出
printf(“%d%s%c%d%f%s”,student1);
若成员本身又是一个结构体类型,则引用如下
student1.birthday.month=3;
可参与作为普通变量运算,也可以引用成员变量的地址
初始化 单个赋值、整体赋值
Eg:
defineandinitialize.cpp
结构体数组
指向结构体类型数据的指针
三种引用形式(等价):
结构体变量.成员名
(*p).成员名
p->成员名
用结构体变量和指向结构体的指针作函数参数
Ø联合
union共用体名
{
成员表列;
};
定义、初始化和引用方式
特点a.每一瞬间,只有一个成员起作用
b.起作用的成员是最后一次有效的成员
c.各成员的地址都一样
d.不能在定义共用体变量时对它初始化
e.不能用共用体变量作函数参数,但可用共用体变量的指针
Eg:
defineandinitialize.cpp
Ø枚举类型
enumweekday(sun,mon,tue,wed,thu,fri,sat);
enumweekdayworkday,week_end;
workday=mon;
week_end=sun;
enum{sun,mon,tue,wed,thu,fri,sat}workday,week_end;
说明:
a.枚举元素是常量,不是变量;如写法:
sun=0,mon=1是错误的。
b.默认值为从0开始,递增值为1
c.枚举值可以用来做判断;
d.一个整型数不能直接赋给一个枚举变量。
●指针
Ø指针与指针变量的概念,指针与地址运算符
变量的指针就是变量的地址;存放变量地址的变量是指针变量
&:
取地址运算符*:
指针运算符(代表指向)
Ø变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量。
通过指针引用以上各类型数据。
变量的指针和指向变量的指针变量
定义基本格式:
基类型*指针变量名;float*pointer;
赋值:
指针变量名=变量地址pointer=&I;
*指针变量名=变量名*pointer=I;
指针变量引用通过指针运算符*引用
注意:
(1)若已经执行了”pointer_1=&a;”语句,pointer_2=&*pointer_1的含义;
(2)(*pointer_1)++与*pointer_1++的区别。
指针变量作为函数参数P207
Eg:
defineandinitialize.cpp
一维数组的指针和指向数组的指针变量
定义基本格式:
基类型*指针变量名; float*pointer;inta[10];
赋值:
指针变量名=数组名pointer=a;
指针变量名=数组元素地址pointer=&a[4];
通过指针引用数组元素*(指针变量名+偏移地址)*(数组名+偏移地址)
说明:
A.p+i和a+i代表a[i]的地址
B.*(p+i)和*(a+i)代表数组元素
C.指针变量也可以带下标,如p[i]与*(p+i)等价
指向由m个元素组成的一维数组的指针变量 int(*p)[3];
数组名作函数参数:
这种方式是地址传递
main()
{intarray[10];f(intarr[],intn)f(intarr,intn)
f(array,10);} {}{ }
多维数组的指针和指向数组的指针变量
多维数组的地址(主要是二维)
二维数组名是指向行的,P226
在指向行的指针前面回一个*,就转换为指向列的指针;
在指向列的指针前面加&,就成为指向行的指针.
P226图10.26
inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
表示形式
含义
地址
指针类型
a
数组名,首地址,0行首地址
2000
行指针
a[0],*(a+0),*a
第0行第0列元素地址
2000
列指针
a+1,&a[1]
第1行首地址
2008
行指针
a[1],
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 复习 全篇 指导