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

上传人:b****4 文档编号:4211219 上传时间:2022-11-28 格式:DOCX 页数:16 大小:47.54KB
下载 相关 举报
《C语言程序设计II》期末复习.docx_第1页
第1页 / 共16页
《C语言程序设计II》期末复习.docx_第2页
第2页 / 共16页
《C语言程序设计II》期末复习.docx_第3页
第3页 / 共16页
《C语言程序设计II》期末复习.docx_第4页
第4页 / 共16页
《C语言程序设计II》期末复习.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

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

《《C语言程序设计II》期末复习.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计II》期末复习.docx(16页珍藏版)》请在冰豆网上搜索。

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

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

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

一、复习内容:

⏹第1~4讲指针

●指针的概念:

内存单元的排列方式、地址的概念、不同数据类型内存单元的个数、存储方式不同,两种变量的存取方式,指针即是地址,NULL;

●指针变量:

概念和定义方法(空悬指针、空类型与空指针),指针的两个特殊运算符(*与&),指针变量作为函数参数(通过函数调用得到n个要改变的值);

●指针运算:

指针与整数的运算、++(--)、比较、相减;

●指针与一维数组:

对数组名的理解,指针与一维数组(指向数组元素的指针、引用数组元素时的指针运算、通过指针引用数组元素的几种方法、用数组名作函数参数);

●指针与二维数组:

理解二维数组中行指针、列指针的类型,加减1所移动的字节数,如何利用它们访问二维数组元素,用作函数参数参数时在主调函数中如何给出实参。

●通过指针引用字符串:

字符串的引用方式,字符指针作函数参数,使用字符指针变量和字符数组的比较;

●指向函数的指针:

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

●返回指针值的函数:

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

●指针数组和多重指针:

什么是指针数组,指向指针数组的指针,指针数组作main函数的形参;

●动态内存分配:

动态内存分配的概念、必要性,与动态内存分配相关的4个函数,动态数组的建立;

●有关指针的小结:

指针、指向、指针变量,void*类型与NULL的比较,指针与数组的关系,各类指针类型的比较,指针的几类运算;

●结构体指针:

什么是结构体指针,用结构体指针访问成员的简便写法,指向结构体数组的指针,结构体变量与结构体指针作函数参数;

●用指针处理链表:

什么是链表,建立静态链表,建立动态链表,输出链表。

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

⏹第5讲位运算和预处理指令

●位运算与位运算符:

位运算概念,6种基本的位运算符(&、|、^、~、<<、>>),&和^运算符的一些用法,位运算的复合赋值运算符;

●位段:

问题的提出,位段的概念与定义,位段的使用,注意事项;(这一部分内容不考)

●预处理:

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

●宏定义:

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

●“文件包含”处理:

格式,作用,带<>与””的差别;

●条件编译:

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

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

⏹第6~8讲文件操作与综合案例

●C文件的有关基本知识:

文件的概念与组成,文件的分类,读文件与写文件,缓冲文件系统,文件类型指针;

●文件的打开与关闭:

文件打开与关闭的含义,文件打开的多种方式,打开文件出错时处理,fopen()、fclose()的使用;

●顺序读写数据文件:

顺序读写的概念,文件操作的主要步骤,fputc()与fgetc()、fputs()与fgets()、fprintf()与fscanf()、fread()与fwrite()的使用,文件是否结束的判断(EOF和feof());

●随机读写数据文件:

文件读写位置指针,文件定位函数(rewind()、fseek()和ftell())的用法;

●文件读写出错检测函数(ferror()和clearerr())的用法;(这一部分内容不考)

●综合案例:

设计与实现的基本思路

二、考核的知识点:

●考核的主要知识点:

指针、结构体、位运算、预处理、文件操作、综合案例

●涉及的知识点:

程序结构、表达式、程序控制结构、数给、字符串、函数等

三、样题

单选题:

1、变量的指针,其含义是该变量的【】

A)值B)地址C)名D)一个标志

2、下面程序段的运行结果是【】

char*s=”abcde”;

s+=2;printf(“%d”,s);

A)cdeB)字符’c’C)字符’c’的地址D)无确定的输出结果是

3、现有定义:

int(*p)[4];下列关于标识符中,正确的是【】

A)定义不合法B)是一个指向整型变量的指针

C)是一个指针,它指向一个函数,该函数的形参、返回值均为int类型

D)是一个指针变量,该变量指向由4个int型元素组成的一维数组

4、数字9与14进行“位异或”运算(即9^14)的结果是【】

A)9B)15C)7D)8

填空题

1、设变量a的二进制数是11010010,若想通过运算a^b使结果中高四位是a对应位取反、低四位不变,则b的二进制数应是___________。

2、能使用两字节变量x的低8位全置1、高8位不变的表达式是___________。

3、一个函数的原型是voidfunc(int),现要求定义一个函数指针p指向该函数,那么p的正确定义格式是___________________。

写出下列程序的运行结果

#include

intmain()

{

inti,a[10];

int*p;

p=a;

for(i=0;i<10;i++)

scanf("%d",p++);

for(p=a;p

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

printf("%3d",*p);

return0;

}

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

13579111315 1721

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

程序填空

以下程序的功能是:

将一个已经存在的文本文件内容复制到一个目标文件中,即进行文本文件拷贝。

#include

#include

intmain()

{

FILE*in,*out;

charch,infile[80],outfile[80];

printf("请输入源文件名:

");

gets(infile);

printf("请输入目标文件名:

");

gets(outfile);

in=fopen(infile,"r");

if(in==NULL)

{

printf("不能打开源文件!

\n");

exit(0);

}

out=fopen(outfile,

(1));

if(out==NULL)

{

printf("不能打开目标文件!

\n");

exit(0);

}

ch=fgetc(in);

while(

(2))//判断是否到源文件尾

{

(3)(ch,out);//将读取的源文件内容写入目标文件中

ch=fgetc(in);

}

printf("\n文件复制完毕!

\n\n");

fclose(in);

fclose(out);

return0;

}

}

编程题:

(说明:

加颜色的题目与考题相似度大一些)

1、课件第1讲例3:

对输入的两个整数按大小顺序输出。

现用函数处理,而且用指针类型的数据作函数参数。

2、课件第1讲例4:

对输入的两个整数按大小顺序输出

3、课件第1讲例5:

输入3个整数a,b,c,要求按由大到小的顺序将它们输出,用函数实现。

4、实验_15、(基础题)请参考教材P226-229图示,请说明下列函数中,哪些能实现主函数的实参数据交换功能,哪些不能实现或程序存在问题,为什么?

(最好上机验证)

(1)

voidswap1(int*p1,int*p2)

{

inttemp;

temp=*p1;

*p1=*p2;

*p2=temp;

}

(2)

voidswap2(int*p1,int*p2)

{

int*temp;

*temp=*p1;

*p1=*p2;

*p2=*temp;

}

(3)

voidswap3(intx,inty)

{

inttemp;

temp=x;x=y;y=temp;

}

(4)

voidswap4(int*p1,int*p2)

{

int*p;

p=p1;

p1=p2;

p2=p;

}

5、课件第2讲例1:

验证不同数据类型,每一数据单元所占用的存储空间不同

6、课件第2讲例2:

用自增运算改写前一程序(部分)

7、课件第2讲例4:

将数组a中n个整数按相反顺序存放。

8、课件第2讲例5:

用指针方法对10个整数按由大到小顺序排序。

9、课件第2讲例6:

有一个3×4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值。

10、课件第2讲例7:

有一个3×4的二维数组,要求用指向一维数组元素的指针变量输出任一行任一列元素的值

11、课件第2讲例8:

有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。

12、实验_22、(基础题)使用指针编程实现:

输入3个正整数,按由小到大顺序输出。

程序运行结果如下所示:

13、实验_23、(基础题)分析、运行下列程序,理解二维数组“行指针”、“列指针”的类型,加减1所移动的字节数,熟悉二维数组元素的间接访问方法,并回答相关问题

14、课件第3讲 例1:

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

15、课件第3讲 例3:

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

16、课件第3讲 例7:

将若干字符串按字母顺序(由小到大)输出。

17、课件第3讲例9:

有一个指针数组,其元素分别指向一个整型数组的元素,用指向指针数据的指针变量,输出整型数组各元素的值。

18、实验_31、(基础题)以下程序的功能是:

在主函数中定义一个int型4行5列的数组并初始化,然后调用print_array()、change_values()来输出、修改数组元素的值,请根据题意填写所缺代码,再运行程序,体会数组元素的不同访问方法。

程序运行结果如下所示:

#include

#include

#include

intmain()

{

inta[4][5]={0};

voidchange_values(int*p,intn);

voidprint_array(int(*p)[5],intm);

printf("修改前,二维数组各行各列元素:

\n");

(1)

(2)//调用change_values函数修改数组元素的值

printf("修改后,二维数组各行各列元素:

\n");

(3)

return0;

}

//函数change_values功能:

生成1-100之间的随机整数修改数组各元素的值

//形参:

p是数组的首地址,n是数组元素个数

voidchange_values(int*p,intn)

{

srand(time(0));

//代码段1

}

//函数print_array功能:

输出二维数组各行各列元素的值

//形参:

p是数组的首行地址,m是数组的行数(列数为5,以下不再重复)

voidprint_array(int(*p)[5],intm)

{

inti,j;

//代码段2

printf("\n");

}

19、实验_34、(基础题)指针数组的应用:

学院现有10系2部,建立一个char型指针数组指向这些单位名称,之后用冒泡排序法排序,并输出排序后的单位名称,如下图所示:

补充程序所缺代码:

#include

#include

intmain()

{

voidbubble_sort(char*name[],intn);//函数声明,下同

voidprint(char*name[],intn);

char*dept[]={"管理系","国际经贸系","财会系","计算机系","电子系","数码媒体系","外语系","软件工程系","网络技术系","游戏系","基础部","思政部"};

(1);//调用冒泡排序函数

(2);//调用输出多个字符串函数

printf("\n");

return0;

}

voidbubble_sort(char*name[],intn)//冒泡排序函数

{

//程序代码段1

}

voidprint(char*name[],intn)//输出多个字符串函数

{

//程序代码段2

}

20、课件第4讲例1:

建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩。

21、课件第4讲例2:

通过指向结构体变量的指针变量输出结构体变量中成员的信息。

22、课件第4讲例4:

有n个结构体变量,内含学生学号、姓名和3门课程的成绩。

要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)

23、课件第5讲例2:

输入一个整数,使它扩大16倍,不允许用乘法。

24、课件第5讲例4:

取一个整数a从右端开始的4~7位。

25、课件第5讲例5:

循环移位。

要求将a进行右循环移n位

26、课件第5讲例7:

输入半径,计算圆的周长、面积和球体的体积。

27、实验_51、(基础题)编写程序实现:

先输入两个整数x、y,然后计算出x&y、x|y、x^y、~x、x<<3、x>>2六种基本的位运算的结果,并输出。

28、课件第6讲例1:

从键盘输入一些字符,逐个把它们送到磁盘上去,直到用户输入一个“#”为止

29、课件第6讲例2:

编写一个程序,实现文本文件的复制功能。

30、课件第6讲例5:

编程序构成一个九九表,写入文件file99.txt。

再从该文件把九九表中的数据读入二维数组a[9][9],并显示输出。

31、课件第6讲例6:

从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去

32、课件第6讲例7:

将上题生成的f:

\stu.dat文件内容读出,然后在屏幕上显示

33、实验_61、(基础题)以下程序的功能是从键盘输入一个文件名,然后再输入一些字符,依次存放到该文件中,用@作为输入结束标志。

请先填充程序所缺代码,之后按要求操作,最后回答问题:

#include

#include<____

(1)____>

intmain()

{

FILE*fp;

charch,fname[51];

printf("请输入文件名:

");

____

(2)____;

if((fp=____(3)____)==NULL)

{

printf("文件不能打开!

\n");

exit(0);

}

while(____(4)____)

{

fputc(____(5)____);

}

printf("文件保存完毕!

\n\n");

____(6)____;//关闭文件

return0;

}

操作要求:

(1)文件指定为F:

盘根目录下test.txt,请输入以下内容:

1234567890

abcdefghij

C语言@

(2)请查看test.txt文件的长度,用“记事本”打开该文件,再用UltraEdit查看该文件各字节的内容;

问题:

(1)文件操作的顺序是什么?

怎样打开、关闭文件?

(2)文件类型指针有什么作用?

(3)当打开文件不成功时,该如何处理?

(4)怎样向文件写入字符?

34、实验_62、(基础题)以下文件的功能是进行文本文件的复制。

源文件名、目标文件名由键盘输入。

请将程序所缺代码补充完整,之后按要求操作,最后回答问题:

#include

#include

intmain()

{

FILE*in,*out;

charch,infile[60],outfile[60];

printf("输入源文件的名字:

");

scanf("%s",infile);

printf("输入目标文件的名字:

");

scanf("%s",outfile);

if((in=fopen(____

(1)____))==NULL)//打开输入文件

{

printf("无法打开源文件\n");

exit(0);

}

if((out=fopen(____

(2)____))==NULL)//打开输出文件

{

printf("无法打开目标文件\n");

exit(0);

}

ch=fgetc(____(3)____);

while(____(4)____)

{

fputc(____(5)____);

ch=fgetc(in);

}

printf("\n文件复制完毕\n\n");

____(6)____;//关闭输入文件

____(7)____;//关闭输出文件

return0;

}

操作要求:

(1)请将实验6目录下的文件myfile.txt、test.exe拷贝到F:

\目录中;

(2)运行程序,输入源文件名:

F:

\\myfile.txt,目标文件名:

F:

\\myfile2.txt。

查看myfile.txt与myfile2.txt是否完全相同?

(可通过比较文件大小、用UltraEdit比较两文件的内容来判定);

(3)再次运行程序,输入源文件名:

F:

\\test.exe,目标文件名:

F:

\\test2.exe。

这两个文件完全相同吗?

请分析其中的原因,并加以改进。

问题:

(1)打开源文件、目标文件时,打开方式各是什么?

(2)文本文件、二进制文件的打开方式有什么不同?

(3)对于文本文件、二进制文件,如何判断遇到了文件尾?

35、实验_63、(基础题)分析、运行下列程序,指出其功能,熟悉文件读写函数的使用:

(1)

#include

#include

#include

intmain()

{

FILE*fp;

charstr[101];

inti,n=5;

if((fp=fopen("F:

\\strings.txt","w"))==NULL)

{

printf("不能打开此文件!

\n");

exit(0);

}

printf("请输入几个字符串:

\n");

while(strlen(gets(str))>0)

{

fputs(str,fp);

fputs("\n",fp);

}

printf("\n字符串内容已保存!

\n");

fclose(fp);

 

if((fp=fopen("F:

\\strings.txt","r"))==NULL)

{

printf("不能打开此文件!

\n");

exit(0);

}

printf("\n文件中保存的字符串有:

\n");

while(fgets(str,101,fp)!

=NULL)

printf("%s",str);

fclose(fp);

printf("\n");

return0;

}

(2)

#include

#include

intmain()

{

FILE*fp;

inti,k;

intnum[]={100,101,102,103,104,105,106,107,108,109};

if((fp=fopen("F:

\\myarray.txt","w"))==NULL)

{

printf("不能将数据保存到myarray.txt文件中!

\n");

exit(0);

}

for(i=0;i<=9;i++)

{

fprintf(fp,"%5d",num[i]);

fprintf(fp,"\n");

}

fclose(fp);

if((fp=fopen("F:

\\myarray.txt","r"))==NULL)

{

printf("不能打开myarray.txt文件!

\n");

exit(0);

}

for(i=0;i<=9;i++)

{

fscanf(fp,"%d",&k);

printf("%-5d",k);

}

printf("\n\n");

fclose(fp);

return0;

}

(3)

#include

#include

intmain()

{

FILE*fp;

inti,k;

intnum[]={100,101,102,103,104,105,106,107,108,109},b[10];

if((fp=fopen("F:

\\myarray.dat","wb"))==NULL)

{

printf("不能将数据保存到myarray.dat文件中!

\n");

exit(0);

}

fwrite(num,sizeof(int),10,fp);

fclose(fp);

if((fp=fopen("F:

\\myarray.dat","rb"))==NULL)

{

printf("不能打开myarray.dat文件!

\n");

exit(0);

}

fread(b,sizeof(int),10,fp);

fclose(fp);

for(i=0;i<=9;i++)

printf("%-5d",b[i]);

printf("\n\n");

return0;

}

36、实验_64、(基础题)编程实现:

有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生学号,姓名,三门课成绩),计算出平均成绩,将原有数据和计算得到的平均分数存放在磁盘文件D:

\stud.dat中。

程序运行结果如下图所示:

37、课件第7讲例1:

对一个文本文件先显示输出其内容,再复制到另一个文件中去。

38、课件第7讲例2:

在磁盘文件stu.dat上已存有10个学生的数据。

要求将第1,3,5,7,9个学生数据输入计算机,并在屏幕上显示出来。

39、课件第7讲综合案例

(1)——通讯录信息管理系统

40、实验_62、(基础题)建立一个C项目,请将文件夹“通讯录管理系统(源代码)”下的my_contact.c文件复制、添加到项目中,之后分析、运行程序,并回答下列问题:

(1)该系统操作、管理的数据(信息)是什么?

怎样表示?

(2)怎样才能长期保存这些数据(信息)?

(3)本系统包含哪些功能?

(4)程序代码通过什么方式来组织?

并举例说明。

(5)如何让用户方便操作?

怎样设计、实现系统的主菜单?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1