《C语言程序设计II》期末复习
-
《
C
语言程序设计
II
》期末复习
一、
复习内容:
第
1~4
讲
指针
<
/p>
指针的概念
:内存单元的排列方式、地址的概念、不同数据类型内
存单元的
个数、存储方式不同,两种变量的存取方式,指针即是地址,
< br>NULL
;
指针变量:
概念和定义方法
(
空悬指针、空类型与空指针
)
,指针的两个特殊
运算符
(
*
与
&)
,指针变量作为函数参数
p>
(
通过函数调用得到n个要改变的
值
)
;
指针运算:
指针与整数的运算、
++(--)
、比较、相减;
指针与一维数组:
对数组名的理解,指针与一维数组
(
指
向数组元素的指针、
引用数组元素时的指针运算、通过指针引用数组元素的几种方法、用
数组
名作函数参数
)
;
指针与二维数组:
p>
理解二维数组中行指针、列指针的类型,加减
1
所移动的
字节数,如何利用它们访问二维数组元素,用作函数参数参数时在主调函<
/p>
数中如何给出实参。
通过指针引用字符串:
字符串的引用方式,字符指针作函数参数,使用字符
指针变量和字符数组的
比较;
指向函数的指针:
什么是函数指针,怎样定义和使用指向函数的指针变量,
用指向函数的指针作函数参数;
返回指针值的函数:
函数的返回值是一个地址,定义格式,使用;
指针数组和多重指针:
什么是指针数组,指向指针数组的指针,指针数组作
main
函数的形参;
动态内存分配:
动态内存分配的概念、必要性,与动态内存分配相关的
4
个
函数,动态数组的建立;
有关指针的小结
:
指针、指向、指针变量,
void *
类型与
NULL
的比较,指
针与数组
的关系,各类指针类型的比较,指针的几类运算;
结构体指针:
什么是结构体指针,用结构体指针访问成员的简便写法,指向
结构体数组的指针,结
构体变量与结构体指针作函数参数;
用指针处理链表:什么是链表,建
立静态链表,建立动态链表,输出链表。
(
理解链表的概念,本
次考试不包含这一部分内容
)
。
第
5
讲
位运算和预处理指令
位运算与位运算符:
位运算概念,
6
种基本的位运算符
< br>(&
、
|
、
^
、
~
、
<<
、
>>)
,
&
和
^
运算符的一些用法,位运算的
复合赋值运算符;
位段:问题的提出,位段的概念与定义,位段的使用,注意事项;
(
这一部
分内容不考
)
预处理:
概念,主要工作,功能类型,书写要求;
宏定义:
不带参数的宏定义,带参数的宏定义;
“文件包含”处理
:格式,作用,带
<>
与
””
的差别;
条件编译
:概念,好处,几种基本格式。
(
理解条件编译的概念,本次考试不包含这一部分内容
p>
)
。
第
6~8
讲
文件操作与综合案例
C
文件的
有关基本知识:
文件的概念与组成,
文件的分类,
读文件与写文件,
缓冲文件系统,文件类型指针;
文件的打开与关闭
:文件打开与关闭的含义,文件打开的多种方式,打开文
件出错时处理,
fopen()
、
fclose()
的使用;
顺序读写数据文件:
顺序读写的概念,文件操作的主要步骤,
fputc()
与
fgetc()
、
fputs()
与
fg
ets()
、
fprintf()
与
fscanf()
、
fread()
与
fwrite()
的使用,文件是否
结束的判断
(EOF
和
feof())
;
p>
随机读写数据文件:
文件读写位置指针,文件定位函数
(rewind()
、
fseek()
和
ftell())
的用法;
文件读写出错检测函数
(ferror()
< br>和
clearerr())
的用法;
(
这一部分内容
不考
)
综合案例:
设计与实现的基本思路
二、
考核的知识点:
考核的主要知识点:指针、结构体
、位运算、预处理、文件操作、综合案例
涉及的知识点:程序结构、表达式
、程序控制结构、数给、字符串、函数等
三、
样题
单选题:
1
、变量的指针,其含义是该变量的【
】
A)
值
B)
地址
C)
名
D)
一个标志
2
、下面程序段的运行结果是【
】
char *s=”abcde”;
s+=2;
p
rintf(“%d”,s);
A)cde
B)
< br>字符
’c’
C)
字符
’c’
的地址
D)
无确定的输出结果是
3
、
现有定义:
int
(*p)[4];
下列关于标识符中,正确的是【
】
A)
定义不合法
B)
是一个指向整型变量的指针
C) <
/p>
是一个指针,它指向一个函数,该函数的形参、返回值均为
int
类型
D)
是一个指针变量,该变量指向由
4
个
int
型
元素组成的一维数组
4
、数字
9
与
14
进行
“位异或”
运算
(
即
9^14
)
的结果是【
】
A) 9
B) 15
C) 7
D) 8
填空题
1
、设变量
a
的二进制数是
11010010
,若想通过运算
a^b
使结果中高四位是
a
对应
位取反、低四位不变,则
b
的二进制数应是
___________
。
2<
/p>
、
能使用两字节变量
x
< br>的低
8
位全置
1
、
高
8
位不变的表达式是
p>
___________
。
3
、
一个函数的原型是
void func(int)
,
现要
求定义一个函数指针
p
指向该函数
,<
/p>
那么
p
的正确定义格式是
____________
_______
。
写出下列程序的运行结果
#include
int main()
{
int i, a[10]
int
*p;
p = a;
for (i=0 i<10 i++ )
scanf
(
gets(infile);
printf(
请输入目标文件名:
<
/p>
gets(outfile);
in =
fopen(infile,
if (in==NULL)
{
printf(
不能打开源文件!<
/p>
n
exit(0);
}
out =fopen(outfile,
(1)
);
if
(out==NULL)
{
pr
intf(
不能打开目标文件!
n
exit(0);
}
ch=fgetc(in);
while (
(2)
)
//
判断是否到源文件尾
{
(3)
(ch,
out);//
将读取的源文件内容写入目标文件中
ch=fgetc(in);
}
printf(
文件复制完毕!
nn<
/p>
fclose(in);
fclose(out);
return 0;
}
编程题:
(说明:加颜色的题目与考题相似度大一些)
< br>
1
、课件第
1
讲
例
3
:对输入的两个整数按大小顺序输出。现用函数处理,而
且用指针类型的数据作函数参数。
2
、课件第
1
讲
例
4:
对输入的两个整数按大小顺序输出
3
、
课件第
1
讲
例
5:
输入
3
个整数
a,b,c
,
要求按由大到小的顺序将它们输出,
用函数实现。
4
、实验
_1
5
、
(
p>
基础题
)
请参考教材
P226-229
图示,请说明下列函数中,哪些能
实现主函
数的实参数据交换功能,哪些不能实现或程序存在问题,为什么?
(
最
好上机验证
)
(1)
void swap1(int *p1,int
*p2)
{
}
(2)
void swap2(int *p1,int
*p2)
{
}
(3)
void swap3(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
(4)
void swap4(int *p1,int
*p2)
int *temp;
*temp=*p1;
*p1=*p2;
*p2=*temp;
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
{
}
5<
/p>
、课件第
2
讲
例
1:
验证不同数据类型,每一数据单元所占用的存储空间不同
6
、课件第
2
讲
例
2:
用自增运算改写前一程序
(
部分
)
7
、课件第<
/p>
2
讲
例
4:
将数组
a
中
n
个整数按相反顺序存放。
p>
8
、课件第<
/p>
2
讲
例
5:
用指针方法对
10
个整数按由大到小顺序排序。
9
、
课件第
2
讲
例
6:
有一个
3
×
4
的二维数组,
要求用指向元素的指针变量输出
二维数组各元素的值。
10
、课件第
2
讲
例
7:
有一个
3
×
4
的二维数组,要求用指向一维
数组元素的指
针变量输出任一行任一列元素的值
11
、课件第
2
讲
例
8:
有一个班,
< br>3
个学生,各学
4
门课,计算总
平均分数以
及第
n
个学生的成绩。
p>
12
、实验
_2
2、
(
基础题
)
< br>使用指针编程实现:输入
3
个正整数,按由小到大顺
p>
序输出。程序运行结果如下所示:
int
*p;
p=p1;
p1=p2;
p2=p;
13
、实验
_2
3
、
(
p>
基础题
)
分析、运行下列程序,理解二维数
组“行指针”
、
“列
指针”的类型,加
减
1
所移动的字节数,熟悉二维数组元素的间接访问方法,
p>
并回答相关问题
14
、课件第
3
讲
< br>
例
1:
通过字符指针变量输出一个字符串。
15
、课件第
3
讲
例
3:
用函数调用实现字符串的复制
p>
16
、课件第
3
讲
例
7:
将若
干字符串按字母顺序
(
由小到大
)
p>
输出。
17<
/p>
、
课件第
3
讲<
/p>
例
9:
有一
个指针数组,
其元素分别指向一个整型数组的元素,
用指向指针
数据的指针变量,输出整型数组各元素的值。
18
、实验
_3
1
、
(基础
题)以下程序的功能是:在主函数中定义一个
int
型
4
行
5
列的数组并初始
化,然后调用
print_array()
、
< br>change_values()
来输出、修改数
组元素
的值,请根据题意填写所缺代码,再运行程序,体会数组元素的不同访
问方法。程序运行
结果如下所示:
#include
#include
#include
int main()
{
int
a[4][5]={0};
void
change_values(int *p, int n);
void print_array(int (*p)[5],int m);
printf(
< br>修改前,二维数组各行各列元素:
n
(1)