秋期成人教育本科.docx
《秋期成人教育本科.docx》由会员分享,可在线阅读,更多相关《秋期成人教育本科.docx(42页珍藏版)》请在冰豆网上搜索。
秋期成人教育本科
2008年秋期成人教育(本科)
《C语言程序设计A》期末复习指导
根据市校资料制作
第一部分课程考核说明
1.考核目的
通过本次考试,了解学生对本课程的基本内容、重点和难点的掌握程度,以及运用本课程的基本知识、基本方法和基本理论分析和解决实际问题的能力。
同时还考察学生在平时的学习中是否注意了理解和记忆相结合,理解和运用相结合。
2.考核方式
本课程期末考试为开卷笔试,考试时间为90分钟。
3.适用范围、教材
本复习指导适用于成人教育本科计算机科学与技术专业的课程《C语言程序设计A》。
本课程考试命题依据的教材采用中央广播电视大学出版社出版、任爱华编著的《C语言程序设计》(2008年5月第1版)。
4.命题依据
本课程的命题依据是《C语言程序设计A》课程教学大纲、教材、实施意见。
5.考试要求
考试主要是考核学生对基本理论和基本问题的理解和应用能力。
在能力层次上,从了解、掌握、重点掌握3个角度要求。
主要考核学生对C语言的基本语法规则和基本概念、能够阅读和分析用C语言编写的程序,即能够写出程序的运行结果或指出程序的功能、能够根据解决特定问题的要求利用C语言编写出程序的能力。
6.试题类型及结构
考题类型及分数比重大致为:
填空(20%);选择题(30%);程序阅读题(30%);编程题(20%)。
第二部分复习资料使用说明
一、复习的种类
本次考试主要有三种复习资料,
一是开学时领取的教材,这是考试的来源,这本教材参照清华大学的教材编写,适用性较强,对工作也很有帮助。
二是平时作业,平时作业也是期末考试题目的来源之一,请仔细体会我给的答案。
三是本套复习资料。
二、使用说明
最有价值的是综合练习题与作业讲评。
根据重庆电大历年出题规律,题目基本从综合练习题中来。
尽管教材有八章,但考试大纲只要求前四章,所以在复习资料的第三部分只对前四章的重点进行辅导。
对于第三部分内容,请结合教材仔细阅读。
第四部分是重庆电大给的练习题目,请务必打印来,作为考试资料带进考场。
第三部分各章节要点辅导
第一章C语言概述
1.C语言简单语句和复合语句的语法格式。
简单语句以“;”分号结尾,复习语句用“{}”大括号包括。
2.#include预处理命令的格式与作用。
在一个程序文件中使用一个头文件时,需要使用#include包含命令。
命令格式:
#include<头文件名>
#include"头文件名"
当使用尖括号把头文件名括起来时,表示为系统头文件;当使用双引号把头文件名括起来时,表示为用户自己建立的头文件。
在#include命令的后面不仅可以包含头文件,也可以包含一般的程序文件,即扩展名为.c的程序文件。
3.头文件的文件名格式、在程序中的使用方法和作用。
教材5页
4.程序中两种注释标记的写法和作用。
程序中的注释:
在一个程序中的任何位置都可以加注释内容,以便能够使他人很好的阅读程序。
若加入的注释内容在一行的后面并且不需要换行,则注释内容应以双斜线“//”开始。
若需要换行,或插入在程序行内部则注释内容应以斜线加星号“/*”开始,以星号加斜线“*/”结束。
5.标准输出函数printf()和标准输入函数scanf()的定义格式和具体应用。
printf()函数
函数原型:
intprintf(<字符指针参数>,<形式参数表>);
函数调用格式:
printf(<格式字符串>,<实际参数表>);
函数功能:
将实际参数表中每个数据项的值按照格式字符串所指定的类型和格式输出到显示器屏幕窗口上显示出来。
scanf()函数
函数原型:
intscanf(<字符指针参数>,<形式参数表>);
函数调用格式:
scanf(<格式字符串>,<实际参数表>);
函数功能:
按照格式字符串所指定的类型从键盘缓冲区中读取数据到实际参数表的每个参数中。
第二章数据类型和表达式(本章是重点)
1.C语言中的数据类型的分类。
C语言数据类型:
广义整数型、实数型、引申型、组合型、空类型
广义整数型:
一般整数型、字符型、枚举型
一般整数型:
标准整数型、短整数型、长整数型
标准整数型(int):
每个数据占有4个字节的存储单元,
字符型(char):
每个ASCII码字符数据占有1个字节,即二进制的8位,
枚举型(enum):
是用户自定义的一种简单的数据类型,该类型中的每个值需要在定义时具体罗列出来。
实数类型:
又分为4个字节的单精度实数型(float)和8个字节的双精度实数型(double)两种。
空类型(void):
即无类型,通常用来定义函数的返回类型。
当一个函数不需要返回任何值时,就把该函数定义为void类型。
空类型也作为指针所指向的一种类型,待第5章介绍。
2.字符类型的关键字表示,存储空间的大小和值域范围;字符型常量的表示,回车、换行、单引号、双引号、反斜线、空字符等特殊字符的表示。
字符常量就是用单引号括起来的字符。
字符有一般字符和转义字符之分,如a、5、+等属于一般字符,而\n、\0、\\、\075等属于转义字符,因为它们是以反斜线开始的。
转义字符通常用来表示无法用字面表示的控制字符或特殊字符,如\n表示换行符,对于的ASCII码为10,\0表示ASCII码为0的字符
3.加、减、乘、除、取余、赋值、增1、减1、取数据存储长度等算术运算符的表示、含义、运算对象个数和运算优先级。
(1)双目算术运算符
有+、-、*、/、%(取余)。
如30/8=3,30%8=6,(double)30/8=3.75,
-30/4=-7,-30%4=-2,4.5*2/10=0.9
运算结果值的类型:
同类型的结果同类型,不同取精度高者的类型。
(2)赋值运算符
能够把一个值赋给一个变量或通过运算后赋给一个变量。
赋值运算符分为一般赋值运算符和复合赋值运算符两类。
如a=4;b=5;a+=3和a*=b-2相当于a=a+3和a=a*(b-2)。
//a=21
(3)增1(++)和减1(--)运算符:
单目运算符
前增1:
++i,先增后求值,若i=5,计算结果和i值均为6。
前减1:
--i,先减后求值,若i=5,计算结果和i值均为4。
后增1:
i++,先求值后增,若i=5,计算结果为5,i值为6。
后减1:
i--,先求值后减,若i=5,计算结果为5,i值为4。
如x=2;y=3;z=x++*--y;z为4。
若z=++x*y--;z为9
(4)求类型或数据长度运算符sizeof
它是一个标识符形式的运算符。
如sizeof(int)=4,sizeof(char)=1,sizeof(-30)=4,sizeof(2.5)=8
(5)强制类型转换运算符
(<类型关键字>)<表达式>
如(float)3/2=1.5f,(int)34.8=34,(float)(3/2)=1.0f
(6)关系(比较)运算符
共6个:
>,>=,<,<=,==,!
=
运算结果:
逻辑值0或1,即假或真,如5>4为真,结果为1,3<=2为假,结果为0。
又如若x=2,则x>0为真,x<=5也为真,而x!
=2为假,x-3>=4为假。
关系表达式:
由关系运算符连接而成的式子。
如x+5>=y-z。
优先级:
==、!
=优先于>、>=、<、<=。
//各自同级,从左到右,都低于算术
注意:
x=5是赋值表达式,而x==5是关系表达式。
关系式的相反式:
如x==1,相反式x!
=1;x>y,相反式x<=y。
结果值相反。
(7)逻辑运算符
3个与(&&)、或(||)、非(!
)。
如x&&y>4、a
x
&&:
两个运算对象的值同时为真,其结果为真,否则为假。
||:
两个运算对象的值同时为假,其结果为假,否则为真。
!
:
对其后的运算对象取反,真变假,假变真。
运算对象:
数值(非0为真)、关系式、逻辑表达式
优先级:
!
高于&&,&&高于||。
//&&和||低于算术和关系运算符
逻辑运算的等价关系:
!
!
a与a、!
(a&&b)与!
a||!
b、!
(a||b)与!
a&&!
b。
逻辑运算的相反关系:
a与!
a、(a&&b)与!
a||!
b、(a||b)与!
a&&!
b。
如!
(x>3&&x<8)与(x<=3||x>=8)等价。
如(g==1||g==2)与(g!
=1&&g!
=2)相反。
(8)条件运算符(?
:
)
<表达式1>?
<表达式2>:
<表达式3>
它是三目运算符,如:
x>y?
z=x:
z=y;z=(x>y?
x:
y);
(9)逗号运算符
<表达式1>,<表达式2>,…;
从左到右相继计算每个表达式的值,最后一个表达式的值就是整个逗号表达式的值。
如a++,b++,c--;若a=2,b=3,c=4,则运算结果为4,运算后a,b,c的值分别为3,4,3。
(10)圆括号运算符()
括号内运算优先进行,即先算括号内,后算括号外。
如x/(y+2)。
圆括号也作为函数调用运算符和求类型长度运算符。
如f1(x),(int)-5.4=-5。
第三章流程控制语句
1、if条件语句
●条件语句格式
if(<表达式>)<语句1>[else<语句2>]
表达式给出该语句要处理的条件,通常是关系或逻辑表达式,也可以是数值表达式(0为假,非0为真),语句1称为if子句,语句2称为else子句。
●语句执行过程
Ø首先求出作为条件的表达式的值,得到的结果为逻辑值真或假;
Ø接着,若条件为真则执行语句1,若条件为假同时存在else子句则执行语句2,当不存在else子句时不执行任何操作。
2、switch开关语句
●语句格式
switch(<表达式>){
case<常量表达式1>:
<语句1序列>
case<常量表达式2>:
<语句2序列>
[default:
<语句n序列>]
}
每个case部分称为case子句,其中冒号前面为子句标号,后面为执行语句。
每个switch语句中可以包含多个case子句,当然相应的常量表达式的值各不同;default部分称为default子句,每个switch语句中最多包含一条default子句,该子句也可以被省略。
●语句执行过程
switch语句的执行过程分为以下3步描述。
⏹计算出语句关键字switch后面圆括号内<表达式>的值,假定其值用M表示,若它不是整型,系统将自动舍去其小数部分,只取整数部分作为结果值;
⏹依次计算出每个case子句中常量表达式的值,假定它们的值依次为M1、M2、…,同样若它们的值不是整型,则自动转换为整型;
⏹让M依次同M1、M2、...进行比较,一旦遇到M与某个值相等,则就从对应标号后面的语句序列开始向下执行;在碰不到相等的情况下,若存在default子句,则就执行其冒号后面的语句序列,否则不执行任何操作;当执行到复合语句最后的右花括号时就结束整个switch语句的执行。
注意:
通常在switch语句的每个子句中的语句序列的最后使用break语句,当执行到该语句时立即结束整个switch语句的执行。
3、for循环语句
●for循环语句的格式:
for(<表达式1>;<表达式2>;<表达式3>)<语句>
for和后面括号部分称为循环头,后面的语句称为循环体。
●for循环语句的执行过程:
1.计算表达式1的值;
2.计算表达式2的值,假定其值为M,若缺省其值为1;
3.若M为逻辑真则执行循环体,否则结束整个for循环语句的执行过程;
4.计算表达式3的值,紧接着自动转向第2步继续执行下一次循环。
for循环语句的执行过程的图形表示如教材第3章的图3-3所示。
4、while循环语句
●语句格式
while(<表达式>)<语句>
while(<表达式>)称为循环头,后面紧随的<语句>称为循环体。
while循环和for循环具有类似的功能,都能够通过条件控制循环体重复执行。
所不同的表现在循环头的格式上,在for循环头中有3个表达式,通常第1个表达式为循环变量赋初值,第2个为循环控制条件,第3个为改变循环变量的值(增加或减少)。
而在while循环头中,只有一个表达式,它给出循环控制条件。
●while循环语句的执行过程
(1)计算循环头中表达式的值,假定其值为M;
(2)若M为逻辑值真(非0),则执行循环体,否则结束整个循环的执行;
(3)循环体执行结束后转向第1步继续执行下一次循环。
5、do循环语句
●语句格式
do<语句>while(表达式);
do和while保留字之间的部分<语句>为循环体,while保留字后面表达式为循环控制条件。
特点:
是先执行循环体后进行循环条件的判断。
●执行过程
(1)执行一次循环体语句;
(2)计算表达式的值,若为逻辑真(非0)再继续执行下一次循环体,否则结束整个循环执行过程。
●6、三钟循环语句的比较
Øfor和while语句是先判断循环条件再执行循环体,而do循环是先执行循环体而后判断。
Ø一般情况下,它们之间可以相互转换,编程时可以任选使用,当循环次数固定时采用for循环较简单。
在任一种循环的循环体内都可以使用break语句使之终止循环的执行,使用continue语句结束一次循环体的执行。
第四章数组和字符串
1.数组
●数组:
具有相同数据类型的一组数据。
●数组分类:
按照数据之间的结构:
一维数组、二维数组、三维数组等。
按照数据类型:
数值数组、字符数组、结构数组、指针数组等。
●一维数组:
顺序排列的一组数据,每个数据在数组中用单个下标来区分位置。
如{12,34,56,34,58,44,56}就是顺序排列的一组数据,在C语言中用一个一维数组来表示(存储),它包含有7个整数,每个整数对应的下标依次为0~6,也就是说,它们在数组中的下标位置依次为0~6。
数组中的每个数据又称为元素,则12为数组中下标为0的元素,34是数组中下标为1的元素,依次类推。
●二维数组:
具有行列结构的一组表格数据。
每个数据既对应有行下标,又对应有列下标。
如{{3,5,7},{4,5,9},{2,-3,6}}就是一个二维结构的数据,它分为3行3列,第1行的三个元素为3、5和7,第2行的三个元素为4、5和9,第3行的三个元素为2、-3和6;每行中的3个元素又对应不同的列号,如第1行的三个元素3、5和7的列号分别为1、2和3。
二维表格数据在C语言中用一个二维数组来表示,其中行、列下标都从0开始。
刚才所说的二维表格数据在二维数组中对应的行下标为0-2,列下标也为0-2。
●数组元素:
数组中的一个数据,用数组名和下标来表示。
如a[5]、b2[i][j]等,其中a和b2分别是一维数组名和二维数组名,5为该元素的下标,它是数组a中的第6个元素,i和j分别是行下标和列下标,该元素是二维数组b2中第i+1行和第j+1列位置上的元素。
●数组长度:
数组中所含元素的个数。
如一个数组a中有10个元素,则a数组的长度等于10。
一个二维数组的长度是它的行数与列数的乘积。
假定一个二维数组有5行和6列数据,则数组长度为30,即包含有30个数据。
●下标范围:
对于一维数组来说,只有一个下标,若数组中包含有N个元素,则下标范围是0~N-1。
对于二维数组来说,若数组中包含有M行×N列数据,则行下标的范围是0~M-1,列下标的范围是0~N-1。
2、一维数组
●一维数组定义格式
<类型关键字><数组名>[<常量表达式>][={<初值表>}];
类型关键字为已存在的一种数据类型。
数组名是用户定义的一个标识符,用它来表示一个数组。
常量表达式只能是通过#define命令定义的符号常量,不能是通过const语句定义,常量表达式的值是一个整数,由它标明该一维数组的长度,即数组中所含元素的个数。
每个元素具有类型关键字所指定的类型。
初值表是用逗号分开的一组表达式,每个表达式的值将被依次赋给数组中的相应元素。
●一维数组的存储空间分配
一个数组被定义后,系统将在内存中为它分配一块能够存储n个数据元素的存储空间,其中n为数组长度。
所以数组所占用的存储空间的字节数应等于元素的个数n乘于元素类型的长度。
如对于一个含有10个int型元素的数组,它将对应10*4=40个字节的存储空间。
●一维数组元素的访问
定义了一个数组,就相当于同时定义了它所含的每个元素。
数组中的每个元素又称为下标变量,是通过下标运算符(即一对中括号[])来指明和访问的,具体格式为:
<数组名>[<表达式>]
中括号运算符内的表达式称为下标表达式,下标表达式的值称为该元素下标。
表面上看,这与数组的定义格式类似,但它们出现的位置是不同的,当出现在变量定义语句时则为数组定义,而当出现在一般表达式中时则为一个元素。
3、二维数组
●二维数组的定义格式
<类型关键字><数组名>[<常量表达式1>][<常量表达式2>]
[={{<初值表1>},{<初值表2>},...}];
常量表达式1指定该数组的行数,行下标的取值范围是0-常量表达式1的值减1,常量表达式2指定该数组的列数,列下标的取值范围是0-常量表达式2的值减1。
假定常量表达式1和常量表达式2的值分别为m和n,则行下标的取值范围是0m-1之间的m个整数,列下标的取值范围是0n-1之间的n个整数。
如假定一个整型二维数组a的定义为:
inta[3][4];则所包含的全部12个元素如下:
a[0][0]a[0][1]a[0][2]a[0][3]
a[1][0]a[1][1]a[1][2]a[1][3]
a[2][0]a[2][1]a[2][2]a[2][3]
●二维数组中元素的个数
二维数组中所包含的元素个数又称为该二维数组的大小,它等于该二维数组的行数和列数的乘积。
如:
inta[10][5];//个数:
10*5=50
doublea[5][8];//个数:
5*8=40
chara[5][M+1];//个数:
5*(M+1)
●存储空间分配
系统给一个二维数组中的所有元素分配存储空间时,是首先按行下标从小到大的次序,行下标相同时再按列下标从小到大的次序进行的。
例如,若定义了一个double型的二维数组c[M][N],则c[0][0]元素占有整个数组存储空间的第1个数据单元,c[0][1]元素占有整个数组存储空间的第2个数据单元,…,c[i][j]元素占有整个数组存储空间的第i*N+j个数据单元。
每个数据单元所包含的字节数有数据类型决定。
4.字符串的概念
●定义:
用双引号括起来的一串字符。
如"abc","姓名","a+b=c","2456.0"
●存储:
用一维字符数组存储,最后自动存储一个空字符,即ASCII码为0的字符,此字符数组的长度必须要大于等于所存字符串的长度加1。
例如,chara[10];字符数组a只能存储长度小于等于9的字符串,必须在最后留有一个位置存储空字符'\0'。
如存储"abcd"字符串时,实际上存储的是"abcd\0"。
第四部分综合练习题(以下内容务必打印)
一、填空题
1.若需要定义一个符号常量,并且使C语言能够进行类型检查,则应在定义语句的开始使用保留字__#define_____。
2.C语言中的每条简单语句以____;_____作为结束符。
3.C语言中的每条复合语句以____}______作为结束符。
4.C语言规定,以字符____\0_____来作为字符串的结束标志。
5.在C语言程序的每个程序行后面或单独一行的开始使用注释的标记符为__//__。
6.假定x=5,则表达式2+x++的值为___7______。
7.表达式(float)25/4的值为___6.25___。
8.表达式(int)14.6%5的值为____4______。
9.表达式x=x+1表示成增量表达式为_____++x_____。
10.增量表达式++y表示成赋值表达式为___y+=1_______。
11.关系表达式(x!
=0)的等价表达式为_____(x)_____。
12.带复合赋值运算符的表达式:
x+=4,等价于普通的赋值表达式___x=x+4_______。
13.语句:
y=(x=2+4,x+4,x*2);执行完后x的值是____6____________,y的值是_____12____________。
14.表达式x*=2+4运算后变量x的值为___60_______,其中x的初值是10。
15.表达式x=x>6运算后变量x的值为__1________,其中x的初值是10。
16.逻辑表达式a+b>c&&b==c的值为____0______,其中a=3,b=4,c=5。
17.逻辑表达式a||b+c&&b-c的值为_____1_____,其中a=3,b=4,c=5。
18.假定一维数组的定义为“char*a[8];”,则该数组所含元素的个数为_____8_____。
19.字符常量'\178'在内存中占_______1________字节,字符串"a"在内存中占____2______字节。
20.通过执行x=y;y=z;z=x;可交换变量____y______和变量_____z_____的值
21.已知函数f的定义是:
intf(intn)
{
n=n+2;
returnn+1;
}
则执行
intm=5,n=3;
m=f(n);
后,m的值是___6_______,n的值是____3______。
22.设inta=2,b=3;floatx=3.5,y=2.5;表达式
(1)(float)b/2+(int)x%(int)y的值为:
____2.5______;
(2)(float)((a+b)/2)+(int)x%(int)y的值为:
____3.5______;
23.若intx=3,y=2,z=1;求下列表达式的值:
(1)xy:
x的值为:
_____3_____;
(2)xx++:
y++的值为:
____2______;
(3)z+(xx:
y)的值为:
____3______;
(4)x/y+z的值为:
___2_______;
24.设inta=3,b=5,c=5;表达式
(1)a-=a/b的值为:
___3_______
(2)a+b>c&&b==c的值为:
_____1_____
(3)!
(a+b)+c&&b+a/b的值为:
___1_______
(4)a||b+c的值为:
__1________
25、设inta=2,b=4,c=5;表达式:
(1)a+=a*b的值为:
_______10____;
(2)a+b>c&&b==c的值为:
____0_______;
(3)!
(a+b)+c-1&&b+c/2的值为:
_____1______;
(4)a||b+c的值为:
____1_______;
26.已知数组a定义为inta[]={1,3,5,7};,则a的各元素的值分别是_1,3,5,7______,最小下标是_____0______,最大下标是____3_______。
27、已知数组f定义为doublef[4][3]={{1,2},{5},{6,7,8}};,则f是一个____4_______行_______3____列的二维数组,总共有___12________元素。
28.假定一维数组的定义为