《C语言程序设计II》期末复习

巡山小妖精
877次浏览
2021年02月12日 21:38
最佳经验
本文由作者推荐

-

2021年2月12日发(作者:陪我拣蛋壳)


《


C


语言程序设计


II


》期末复习




一、



复习内容:





第


1~4


讲



指针




< /p>


指针的概念


:内存单元的排列方式、地址的概念、不同数据类型内 存单元的


个数、存储方式不同,两种变量的存取方式,指针即是地址,

< br>NULL


;





指针变量:


概念和定义方法


(


空悬指针、空类型与空指针


)


,指针的两个特殊


运算符


( *


与


&)


,指针变量作为函数参数


(


通过函数调用得到n个要改变的


值


)


;





指针运算:


指针与整数的运算、


++(--)


、比较、相减;

< p>




指针与一维数组:


对数组名的理解,指针与一维数组


(


指 向数组元素的指针、


引用数组元素时的指针运算、通过指针引用数组元素的几种方法、用 数组


名作函数参数


)


;





指针与二维数组:


理解二维数组中行指针、列指针的类型,加减


1

所移动的


字节数,如何利用它们访问二维数组元素,用作函数参数参数时在主调函< /p>


数中如何给出实参。





通过指针引用字符串:

< p>
字符串的引用方式,字符指针作函数参数,使用字符


指针变量和字符数组的 比较;





指向函数的指针:


什么是函数指针,怎样定义和使用指向函数的指针变量,


用指向函数的指针作函数参数;





返回指针值的函数:


函数的返回值是一个地址,定义格式,使用;





指针数组和多重指针:

< p>
什么是指针数组,指向指针数组的指针,指针数组作


main


函数的形参;





动态内存分配:


动态内存分配的概念、必要性,与动态内存分配相关的


4


个


函数,动态数组的建立;





有关指针的小结 :


指针、指向、指针变量,


void *


类型与


NULL


的比较,指


针与数组 的关系,各类指针类型的比较,指针的几类运算;





结构体指针:

什么是结构体指针,用结构体指针访问成员的简便写法,指向


结构体数组的指针,结 构体变量与结构体指针作函数参数;





用指针处理链表:什么是链表,建 立静态链表,建立动态链表,输出链表。


(


理解链表的概念,本 次考试不包含这一部分内容


)


。






第


5


讲



位运算和预处理指令





位运算与位运算符:


位运算概念,


6


种基本的位运算符

< br>(&


、


|


、

^


、


~


、


<<


、


>>)


,


&


和


^


运算符的一些用法,位运算的 复合赋值运算符;





位段:问题的提出,位段的概念与定义,位段的使用,注意事项;


(


这一部


分内容不考


)




预处理:


概念,主要工作,功能类型,书写要求;





宏定义:


不带参数的宏定义,带参数的宏定义;





“文件包含”处理


:格式,作用,带


<>


与


””


的差别;





条件编译


:概念,好处,几种基本格式。



(


理解条件编译的概念,本次考试不包含这一部分内容


)


。






第


6~8


讲



文件操作与综合案例





C


文件的 有关基本知识:


文件的概念与组成,


文件的分类,


读文件与写文件,


缓冲文件系统,文件类型指针;





文件的打开与关闭


:文件打开与关闭的含义,文件打开的多种方式,打开文


件出错时处理,


fopen()


、


fclose()


的使用;





顺序读写数据文件:


顺序读写的概念,文件操作的主要步骤,


fputc()


与


fgetc()


、


fputs()


与


fg ets()


、


fprintf()


与


fscanf()


、


fread()


与


fwrite()


的使用,文件是否 结束的判断


(EOF


和


feof())


;





随机读写数据文件:


文件读写位置指针,文件定位函数


(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

< p>
使结果中高四位是


a


对应


位取反、低四位不变,则


b


的二进制数应是

___________


。



2< /p>


、


能使用两字节变量


x

< br>的低


8


位全置


1


、


高


8


位不变的表达式是


___________


。



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 (





for (p=a; p



if((*p)%3==0)











printf (







return 0;


}


运行时假定键盘输入数据为:


1



3



5



7



9



11



13



15



17



21



则程序运行后的输出结果是




程序填空



以下程序的功能是:将一个已经存在的文本文件内容复制到一个目标文件中,


即进行文本 文件拷贝。



#include


#include


int main()


{



FILE *in, *out;






























}


char ch,infile[80],outfile[80];


printf(

< p>
请输入源文件名:



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


、


(


基础题


)


请参考教材


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


个整数按相反顺序存放。




8


、课件第< /p>


2


讲



例


5:


用指针方法对


10


个整数按由大到小顺序排序。




9


、


课件第


2


讲



例


6:


有一个


3


×


4


的二维数组,


要求用指向元素的指针变量输出


二维数组各元素的值。




10


、课件第


2


讲



例


7:


有一个


3


×


4


的二维数组,要求用指向一维 数组元素的指


针变量输出任一行任一列元素的值




11


、课件第


2


讲



例


8:


有一个班,

< br>3


个学生,各学


4


门课,计算总 平均分数以


及第


n


个学生的成绩。




12


、实验


_2

2、


(


基础题


)

< br>使用指针编程实现:输入


3


个正整数,按由小到大顺


序输出。程序运行结果如下所示:



int *p;


p=p1;


p1=p2;


p2=p;




13


、实验


_2



3


、


(


基础题


)


分析、运行下列程序,理解二维数 组“行指针”


、


“列


指针”的类型,加 减


1


所移动的字节数,熟悉二维数组元素的间接访问方法,


并回答相关问题




14


、课件第


3


讲

< br>


例


1:


通过字符指针变量输出一个字符串。





15


、课件第


3


讲



例


3:


用函数调用实现字符串的复制




16


、课件第


3


讲



例


7:


将若 干字符串按字母顺序


(


由小到大


)


输出。




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)


















-


-


-


-


-


-


-


-