最新C语言程序设计基础知识期末复习.docx
- 文档编号:27436466
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:29
- 大小:34.50KB
最新C语言程序设计基础知识期末复习.docx
《最新C语言程序设计基础知识期末复习.docx》由会员分享,可在线阅读,更多相关《最新C语言程序设计基础知识期末复习.docx(29页珍藏版)》请在冰豆网上搜索。
最新C语言程序设计基础知识期末复习
C语言程序设计基础知识期末复习
一、C语言与算法
1.程序:
一组计算机能识别和执行的指令。
2.C语言的特点:
运算符丰富(共有34种运算符)、数据类型丰富、具有结构化的控制语句。
3.C语言程序的结构特点:
(1).一个程序由一个或多个源程序文件组成:
一个源程序文件中可以包括三个部分:
预处理指令、全局声明、函数定义
(2).函数是C程序的主要组成部分:
一个C程序是由一个或多个函数组成的必须包含一个main函数(只能有一个);每个函数都用来实现一个或几个特定功能;被调用的函数可以是库函数,也可以是自己编制设计的函数。
(3).一个函数包括两个部分函数首部和函数体(声明部分:
定义在本函数中所用到的变量;对本函数所调用函数进行声明;执行部分:
由若干个语句组成,指定在函数中所进行的操作)
(4).程序总是从main函数开始执行
(5).C程序对计算机的操作由C语句完成
(6.)数据声明和语句最后必须有分号
(7.)C语言本身不提供输入输出语句
(8.)程序应当包含注释,增加可读性
4、算法
(1)算法+数据结构=程序
(2)顺序结构、选择结构、循环结构是表示一个良好算法的基本结构
(3)算法的特性:
有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性
(4)算法流程图:
一个流程图包括以下几部分:
表示相应操作的框;带箭头的流程线;框内外必要的文字说明。
流程线不要忘记画箭头,否则难以判定各框的执行次序。
算法流程图的结构特点:
只有一个入口;只有一个出口(一个判断框有两个出口;一个选择结构只有一个出口)结构内的每一部分都有机会被执行到。
也就是说,对每一个框来说,都应当有一条从入口到出口的路径通过它;结构内不存在“死循环”。
2、顺序结构设计
5、标识符:
用来标识变量名、符号常量名、数组名、类型名、函数名等的有效字符序列。
C语言对标识符的规定:
(1)只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线
(2)长度:
在TC中最多允许32个字符,建议不要超过8个
如果系统规定标识符长度为8,那么x1234567A和x1234567B会被视为同一标识符。
(3)在C语言中,标识符大小写敏感。
如ABC、aBC、abc分别代表3种不同的标识符
(4)标识符不能与C语言的保留字、系统标准库函数同名。
programto__tofile_2ab1_c3为合法标识符
非法字符举例:
yes?
(含有不合法字符“?
”)123(第一个字符不能为数字)goto(标识符中不允许有空格)
a_80%(出现非法字符“%”)if与关键字相同)
6、常量与变量
注意:
以下变量定义形式是错误的inta,intb;inta;b;
(1)整型常量
·十进制整型:
能出现数字0~9,可带正负号如:
0,11,95,-2
·八进制整型:
以数字0开头的数字串,能出现数字0~7如:
011(十进制9),0111(十进制73)
·十六进制整型:
以0x开头的,能出现数字0~9,字母a~f或A~F如:
0x11(十进制17),0xa5(十进制165)
(2)整型变量基本类型int
(3)浮点型
·浮点型常量十进制小数形式:
由数字与小数点组成(必须有小数点)。
如1.23,-123.,0.0123,.0,0.
指数形式,如123e3或123E3都代表123×103注意字母e或E之前必须有数字,后面必须是整数E-5,.1234e1.2,6.5E为非法的浮点型常量
·浮点型变量floatdouble
(4)字符型
1)字符常量:
分为两类
·用单撇号括起来的一个字符如:
’a’,’9’,’’(空格)是合法字符常量
”a”,’99’是非法字符常量
·转义字符:
以\(反斜杠)开头的特殊形式的字符。
如:
’\n’,’\r’,’\123’,’\x3b’
2)字符变量:
char,占1个字节空间,只能存放一个字符。
存储特点:
在字符变量中实际上存储的是字符的ASCII码,其存储形式与整数的存储形式相同。
注意:
I.字符数据与整型数据可相互赋值,直接运算。
II.大小写字母转换
小写字母减32得到相应的大写字母,如:
‘a’-32得到‘A’
大写字母加32得到相应的小写字母如:
‘B’+32得到‘b’
(5)字符串常量
定义:
用一对双撇号(””)括起来的字符序列。
如:
”hello””Mary””\\aaa\’\n”
存储:
每个字符串尾自动加一个‘\0’作为字符串结束标志
(6)变量赋初值
格式:
类型说明符变量1=常数1[,变量2=常数2[,···]];intx=1,y=1,z=1;
intx=y=z=1;(语法错误)
7、算数运算符和算术表达式
(1)运算符的注意事项
·除法运算符“/”进行求商运算。
对于不同类型的运算对象,除法表达式计算结果的类型也会不同。
如果x,y是整型,则结果为整型,小数部分被略去。
如果x,y其中一个为浮点型量,则结果为浮点型。
·“%”是求余运算。
a%b计算a除以b后的余数,也是a模b的值。
它要求两个运算对象必须是整型,其结果也是整型量。
(2)书写算术表达式的注意事项
·将方括号改成圆括号,即算术表达式内所有的括号均为圆括号,*(乘法)不能省略
·其中π为非字母字符,要用浮点型常量代替
·其中不能出现分数,改用除法运算符,圆括号不能缺少
(3)算数运算符的优先级
优先级:
高----->*/%----->+-低注意:
可以用()来改变运算的顺序.
(2)(3)(4)
8、自增、自减运算符
后缀i++(i--)先使用i的值,再使i的值加(减)1
前缀++i(--i)先使i的值加(减)1,再使用i的值
自增、自减运算只能用于变量,不能用于常量和表达式。
自增、自减运算符高于基本算术运算符。
9、赋值运算符
(1)简单赋值运算符运算符:
=表达式格式:
变量=表达式
·赋值运算符左边必须是变量而不能是表达式;
·赋值表达式的值是赋值号左边变量被赋值后的值;
(2)算术运算符“+—*/%”和赋值运算符“=”结合起来,形成复合赋值运算符。
+=:
加赋值运算符;如a+=3,等价于a=a+3-=、*=、/=、%=与此类似
·复合运算符在书写时,两个运算符之间不能有空格。
·复合运算符右边的表达式计算完成后才参与复合赋值运算;
10、当表达式中的数据类型不同时,要进行类型转换。
转换方式自动(隐式)转换:
系统自动把数据由低级类型向高级转换。
强制转换:
将表达式的运算结果强制转换成指定的数据类型。
自动转换规则强制转换格式:
(目标类型名)(表达式)
double←long←unsigned←int
↑↑
float高←低charshort
逗号运算符与逗号表达式:
运算优先级最低为15级
求解过程先求表达式1的值,再求表达式2的值,···,直至求出表达式n的值。
整个表达式的值为表达式n的值。
x=5*8,6+9先把x赋值为40,表达式的值为15
11、字符数据的简单输入和输出
(1)putchar函数(字符输出函数)形式:
putchar(c)
·c可以是字符常量、字符变量或整型变量。
putchar(100);
·用putchar函数也可输出转义字符。
putchar(‘\n’);/*输出一个换行符*/
putchar(‘\\’);/*输出一个反斜杠\*/
·该函数包含在stdio.h库中,因此应在使用该函数的程序开头加入:
#include
(2)getchar作用:
从终端(如键盘)输入一个字符。
形式:
getchar()无参数
说明:
该函数只能接收一个字符,其函数值可以赋给一个字符变量或整型变量,也可作为表达式的一部分,该函数包含在stdio.h中。
(3)格式输出函数格式:
printf(格式控制,输出表列)
格式控制是用双撇号括起来的字符串,也称“转换控制字符串”,包括2种信息。
1)格式说明:
%[<附加格式字符>]格式字符
将输出列表中的数据转换为指定格式输出。
2)普通字符:
原样输出。
输出表列:
需要输出的数据列表,彼此间用逗号分隔。
它可是任意合法的表达式。
printf("a+b=%5.2f",c)
(4)格式字符
1)d格式符,用来输出十进制整数
%d按整型数据的实际长度输出。
%mdm代表某个数字,指定输出数据的最小宽度。
若数据的位数小于m,则左侧补空格(右对齐),若大于m则按实际位数输出。
%-md与%md类似,只是左对齐
2)c格式符:
用来输出一个字符%c%mc%-mc
3)f格式符:
用来以十进制小数形式输出实数(float,double)
%m.nf输出数据最小占m列,其中包括n位小数和1位小数点,右对齐(小数点也算占一列)%-m.nf与上面类似,只是左对齐
4)S格式符:
用来输出一个字符串
%s按字符串原长输出%ms输出字符串最小占m列,右对齐,左补空格
%-ms输出字符串最小占m列,左对齐,右补空格
%m.ns字符串占m列,但只取左端n个字符,右对齐
%-m.ns字符串占m列,但只取左端n个字符,左对齐
使用说明:
1)格式控制中的格式说明符,必须按从左到右的顺序,与输出表中的每个数据一一对应,否则出错。
printf(“f=%d,i=%f\n”,5.6,3);显示:
f=1717986918,i=0.000000
2)格式字符紧跟在“%”后面就作为格式字符,否则将作为普通字符使用(原样输出)。
printf(”c=%c,f=%ff\n“,‘a’,1.5);其中的第一个c和f,第三个f,都是普通字符。
(5)scanf函数scanf(格式控制字符串,地址列表)
格式控制与printf函数类似。
地址列表是由若干个地址组成的表列(以逗号隔开),可以是变量的地址,或字符串的首地址。
scanf(“%d%d%d”,&a,&b,&c);
1)格式符中无普通字符时,可用空格、Tab键、回车键作分隔符。
最后的回车键代表输入结束
2)用c格式符输入字符时,空格、回车、转义字符等均为有效字符。
例:
chara,b,c;
scanf("%c%c%c",&a,&b,&c);
正确的输入方法:
键入ABC则a=‘A’,b=‘B’,c=‘C’
若键入:
ABC则a=‘A’,b=‘’(空格),c=‘B’
若键入ABC未送,系统已经认为输入结束了则:
a=‘A’,b=‘\n’(换行符),c=‘B’
若不同类型输入则综合上述规则
3)在格式控制中除格式说明符外若还有其它字符,则应按顺序原样输入。
4)可以指定输入数据所占列数,系统自动按它截取所需数据。
5)%后的“*”附加说明符,用来表示跳过相应的数据。
如:
scanf(“%2d%*3d%2d”,&a,&b);输入1234567则将12↔a,67↔b,345被跳过
6)输入数据时不能规定精度。
如:
scanf(“%7.2f”,&a);错误
7)double类型的变量输入时,要用%lf%le(必须记住!
!
!
)
如:
doublex;
scanf(“%lf”,&x);
3、选择结构程序设计
1、if语句实现选择
if(表达式)语句1表达式可以是关系表达式、逻辑表达式、数值表达式
else语句2
最常用的3种if语句形式:
(1)if(表达式)语句1(没有else子句)
(2).if(表达式)语句1
(3)else语句2(有else子句)
(4)if(表达式1)语句1
elseif(表达式2)语句2
elseif(表达式3)语句3
┆
elseif(表达式m)语句m
else语句m+1
(在else部分又嵌套了多层的if语句)
说明:
(1)整个if语句可写在多行上,也可写在一行上,但都是一个整体,属于同一个语句
(2)“语句1”…“语句m”是if中的内嵌语句内嵌语句也可以是一个if语句
(3)“语句1”…“语句m”可以是简单的语句,也可以是复合语句
2、关系运算符
(1)关系运算符:
用来对两个数值进行比较的比较运算符
C语言提供6种关系运算符:
①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)优先级高
⑤==(等于)⑥!
=(不等于)优先级低
(2)关系表达式
用关系运算符将两个数值或数值表达式连接起来的式子,关系表达式的值是一个逻辑值,即“真”或“假”,在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”
3、逻辑运算符与逻辑表达式
3种逻辑运算符:
&&(逻辑与)||(逻辑或)!
(逻辑非)
判断年龄在13至17岁之内?
age>=13&&age<=17
逻辑运算符的优先次序!
→&&→||(!
为三者中最高)
逻辑表达式的值应该是逻辑量“真”或“假”
编译系统在表示逻辑运算结果时以数值1代表“真”,以0代表“假”
但在判断一个量是否为“真”时以0代表“假”,以非0代表“真”注意:
将一个非零的数值认作为“真”
在进行逻辑表达式的求解中,并不是所有的逻辑运算都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的值时,才执行该运算符。
4、条件运算符与条件表达式
条件表达式的一般形式为:
表达式1?
表达式2:
表达式3
条件运算符的执行顺序:
求解表达式1
若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值
若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值
条件运算符的结合方向为“自右至左”
5、switch语句
switch语句的作用是根据表达式的值,使流程跳转到不同的语句
switch语句的一般形式:
switch(表达式)整数类型(包括字符型)
{case常量1:
语句1;break
case常量2:
语句2
┇┇┇
case常量n:
语句n
default:
语句n+1
}
优先级顺序:
赋值运算符→&&和||→关系运算符→算术运算符→!
4、循环结构程序设计
1、用while语句实现循环
while语句的一般形式如下:
while(表达式)语句→循环体
↓
循环条件表达式“真”时执行循环体语句“假”时不执行
while循环的特点是:
先判断条件表达式,后执行循环体语句
while循环的作用:
实现“当型”循环
使用说明:
在while的循环体中一定要有使循环趋于结束的语句;否则将形成死循环;
注意循环操作的范围、花括号、分号的使用;
注意给循环变量赋初值的位置及初值的正确性
2、用do...while语句实现循环
do---while语句的特点:
先无条件地执行循环体,然后判断循环条件是否成立
do---while语句的一般形式为:
do
语句
while(表达式);
while和do...while语句的比较
当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则不相同
(1).循环体内必须有使循环趋于终止的条件
while(i<=100)do
{sum=sum+i;{sum=sum+i;
i++;i++;
}}while(i<=100);
(2)注意循环初值与循环条件
i=1;i=0;
while(i<=100)while(i<100)
{sum=sum+i;{i++;
i++;sum=sum+i;
}}
(3)do_while循环的循环体至少执行一次,while循环的循环体可能一次也不执行。
(4)在循环体至少执行一次的前提下,do_while与while循环等价。
3、for语句实现循环
for语句的一般形式为
for(表达式1;表达式2;表达式3)
语句
表达式1:
设置初始条件,只执行一次。
可以为零个、一个或多个变量设置初值执行
表达式2:
循环条件表达式,用来判定是否继续循环。
在每次执行循环体前先执行此表达式,决定是否继续执行循环
表达式3:
作为循环的调整器,例如使循环变量增值,它是在执行完循环体后才进行的
for语句说明:
1)表达式1可省略,但分号不能省;
如:
inti=1,sum=0;
for(;i<=100;i++)
sum=sum+i;
2)若表达式2省略,循环条件永远为真;
如:
for(i=1;;i++)
printf(“%d,”,i);死循环自己编程序时不建议采用,3)表达式3也可省略,但应设法保证循环正常结束;但要能看懂别人的程序
如:
for(i=1;i<=100;)
{sum=sum+i;
i++;
}
4)可只给循环条件;
i=1;
for(;i<=100;)
{sum=sum+i;
i++;
}
5)三个表达式都可省;
for(;;)相当于while
(1)
6)表达式1和表达式3可以是逗号表达式;
如:
for(i=1,sum=0;i<=100;i++)
sum=sum+i;
7)表达式2一般为关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非零就执行循环体。
如:
for(;(c=getchar())!
='\n';)
printf("%c,",c);
注:
尽量避免用实型变量控制循环次数。
4、改变循环的执行状态
(1)用break语句提前终止循环
break语句作用:
1)从循环体内跳出,即提前结束循环,接着执行循环下面的语句;
2)break语句只能用于循环语句和switch语句
注意:
在循环中使用了break语句后,循环语句的结束可能有两种:
1.正常结束(正常出口):
由于循环条件表达式为假
2.非正常结束(异常出口):
由break语句引起
(2)continue语句提前结束本次循环
结束本次循环,即跳过循环体语句中下面尚未执行的语句,接着执行下一次是否执行循环的判定
for(n=100;n<=200;n++)
{ if(n%3==0)continue;
printf(”%d”,n);这段程序等价于if(n%3!
=0)printf(”%d”,n);
}
for语句中执行的是表达式3
(3)break语句和continue语句的区别
continue语句只结束本次循环,而不是终止整个循环的执行
break语句结束整个循环过程,不再判断执行循环的条件是否成立
4、利用数组处理批量数据
1、一维数组
(1)定义一维数组
定义一维数组的一般形式为:
类型符数组名[常量表达式];
说明:
类型符:
数组元素的类型。
数组名:
即数组的名称,其命名方法同变量名。
在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。
注意:
1)在定义数组时,只能使用整常量表达式表明数组的大小,即数组元素的个数,不能是变量。
也就是说,C语言不允许对数组的大小作动态定义.
注意:
intn=10;
intarr[n];
错误,n不是常量而是变量
数组说明中其他常见的错误:
①floata[0];/*数组大小为0没有意义*/
②intb
(2)(3);/*不能使用圆括号*/
③intk,a[k];/*不能用变量说明数组大小*/
一维数组的存储方式:
每个元素都有一个编号(从0开始),称为下标。
(2)引用一维数组
一次只能引用一个数组元素不能引用整个数组所有元素!
也不能引用多个元素
引用数组元素的表示形式为:
数组名[下标]
一个数组元素就是一个普通变量,跟普通变量一样使用。
a[3]=a[2]%4
注意:
引用数组元素时,下标可以是整型常量、变量或整型表达式
对数组中所有元素逐个引用时,通常可使用循环结构。
(3)一维数组的初始化
数组的初始化:
在定义数组的同时,给各数组元素赋值
格式:
类型符数组名[表达式]={初值表};
给部分元素赋初值。
例inta[8]={0,1,2,3,4};后面的用0补齐
给全部元素赋初值时可不指定数组的长度。
inta[]={0,1,2,3,4};注意:
只有在初始化时[]中可以空着。
其他情况不行,例如:
inta[],b[];是错误的
2、二维数组
(1)定义二维数组二维数组定义的一般形式为类型符数组名[常量表达式][常量表达式];
(2)引用二维数组数组名[行下标][列下标]行、列下标都是从0开始
二维数组的存储方式二维数组在内存中按行存放
(3)二维数组的初始化二维数组初始化通常是按行进行的
类型符数组名[表达式1][表达式2]={初值表};
给全部元素赋初值。
例inta[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};
或写成:
inta[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}
给二维数组的全部元素赋初值,可以不指定第一维的长度,但第二维的长度不能省略。
#defineN10
#defineM6
若有定义:
inta[N][M];
二维数组按行输入标准模板:
for(i=0;i for(j=0;j scanf("%d",&a[i][j]); 二维数组按行输出标准模板: for(i=0;i {for(j=0;j printf("%d",a[i][j]); printf("\n"); } 3、字符数组 (1)字符数组的定义: 定义字符数组的方法与定义数值型数组的方法相同,使用关键字char 格式: char数组名[常量表达式],···; (2)字符数组的初始化一维字符数组初始化1)逐个字符赋给数组中的各元素 2)用字符串常量初始化数组中的各元素 字符串在实际存储时,是用字符数组存储的,系统会自动的在其尾部添加一个结束标志’\0’二维字符组初始化二维字符数组的初始化,可以采用逐个字符式或者字符串常量的方式 (3)引用字符数组引用字符数组中的元素,与引用其他类型数组元素相同 只能是一个一个字符地引用 (4)字符数组的输入输出 1、利用getchar、putchar逐个处理(用循环结构) 利用格式符%c逐个输入、输出字符for(i=0;i<9;i++) scanf("%c",&str[i]); 当字符数组存字符串时,可利用格式符%s,可以一次输入、输出整个字符串。 (不用循环结构) scanf(“%s”,字符数组名);用于输入一个字符串 printf(“%s”,字符数组名);用于输出一个字符串 如果一个字符数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 语言程序设计 基础知识 期末 复习