1、则填入p=h-next(2)链表数据排序 15题:2. 不带头结点的链表:p=h(1) 不带头结点链表的表示形式:(2) 讲解P38第42题(和15题类似)3. 链表的返回值:P43第50题(和43题类似)四、 填空题与文件相关1. 文件指针定义(1) 文件定义的形式:FILE *fp;(课本P115)(2) 举例:上机题库P30第28题第一空/*found*/ _1_ fp;分析:在涉及文件类型的上机题目时fp指的就是文件指针,因此在前面填写类型时候直接写入:(3) 类似题目:P32第32题第1个空、P67第88题第2个空2. 文件打开(1) 文件打开的格式:fopen(“文件名”,“打开方
2、式”);P31第30题第1个空void fun(char *filename, STU n) FILE *fp;fp = fopen(_1_, rb+);缺少了文件名,形参filename是实参传过来的文件名,因此这里直接填入:fp = fopen(filename, 表示以“读和写”的方式打开一个二进制文件filename(3) 类似的题目:P41第47题第1个空、P71第94题第1个空、P72第96题第3空3. 文件关闭(1) 文件关闭的格式:fclose(文件指针);(课本P117)上机题库P30第28题第2空fp = fopen(file1.txt, w/*第一次以写的形式打开文件fi
3、le1.txt*/ fprintf(fp, %s %d %fn, s, a, f); _2_ ;r/*第二次以读的形式打开文件file1.txt*/打开文件以后必须将它关闭,因此该空要填:fclose(fp);P72第96题第2空4. 测试文件结束(1) 判断文件结束的feof函数形式:feof(fp)(课本P118)(2) 经常出现在while()的表达式里面,常见形式为:while(!feof(fp)测试指针fp有没有结束(3) 举例:上机题目P26第22题第1空 STU n; int i; fp = fopen(filename, while (!_1_)填写feof(fp)测试fp指针
4、又没有结束(4) 类似题目:P32第32题第2个空、P61第80题第1个空、P71第94题第2个空5. 设置文件位置函数(1) fseek设置文件位置:fseek(文件指针,位移量,移动起始点)(课本P118)(2) 考试一般考查的是移动的起始点:SEEK_SET表示文件开始,SEEK_CUR表示文件当前位置,SEEK_END表示文件末尾上机题库P31第30题第2个空fseek(fp, -1L*sizeof(STU), _2_);题目要求:重写形参filename所指文件中最后一个学生的数据,因此文件指针fp要指向最后的位置,则填入:fseek(fp, -1L*sizeof(STU), SEE
5、K_END);P26第22题第3空、P61第80第3空、6. 读二进制文件(1) fwrite(存入数据的指针,每一个数据占有的字节,输入数据的个数,文件指针);(课本P120)P31第30题第3空 fp = fopen(filename, /*打开文件filename*/ fseek(fp, -1L*sizeof(STU), SEEK_END);/*定位到最后一个学生的位置*/ fwrite(_3_, sizeof(STU), 1, fp);/*将形参n新学生的数据覆盖最后一个学生的数据,因为fp已经定位到了最后一个学生的位置*/ fclose(fp);题目要求用新数据覆盖最后一个学生的数据
6、,因此填入:fwrite(&n, sizeof(STU), 1, fp);填入的是地址,不能是:fwrite(n, sizeof(STU), 1, fp);P41第47题第3空,P67第88题第3空、7. 写二进制文件函数(1) fread(读出数据的指针,每一个数据占有的字节,输出数据的个数,文件指针);(2) 上机考试填空题没有出现需要填写的空,考生作一般的了解8. fcanf函数数和fprintf函数(1) fscanf(文件指针,格式控制字符串,输入列表项);(2) fprintf(文件指针,格式控制字符串,输出列表项);(3) fscanf函数和fprintf函数在上机编程题中详细介
7、绍,这里不作重点讲解,了解即可五、 填空题与函数相关1. 函数调用:P13第1题六、 填空题与数组相关1. 类似题目:3、4、7、20、24、26、39、40、41、54、57、64、68、70、71、76、89、90、992. 一维数组中存在这样一些类型:(1) 求一个数值数组中的所有值的平均值和把大于或者小于平均值的数辅导例外一个数组中。在计算机平均值时,首先定义一个变量来存放平均分,平均分一般用av变量来代替,如果av已经定义但是没有赋初值,那么这个空填写的内容的为:av=0;(2) 求算平均值值时有两种方法,第一种是算出总的分数,最后再除以总的个数即可,如算1到6之间的数的平均值,首先
8、算出1到6的和,其次用综合除以总的个数6,即可以得到平均值;第二种方法是用每一个数除以6再把所有的和加起来。即1/6+2/6+3/6+4/6+5/6+6/6;所以在执行的一维数组中算平均值时也是存在来中情况,如果在for语句的后面有av=av/N;则第二个空一般的填写时av+=si;如果说没有av=av/N;则填写的是:av+=si/N;(3) 在后面的一个空的填写的时候要注意变量的使用情况,如果变量使用了j和i,那么这一个空的填写的内容为:j+;(4) 如果一维数组中求的是把大于或者是小于平均值的数移动到数组的首部的时候,这种题目的解答时这样的,第一个空一般填写的内容为:第二个空填写的内容是
9、-1;(5) 对数组进行排序时:如果是从大到小的排序的时候,用的是小于符号,如果是从小到大排序时使用的是大于符号。3. 二维数组中的题目类型以及解决的技巧:(1) 二维数组的题目,填空的时候一般是填在函数调用,函数在调用时候写的应该是而为数组的名字;在定义函数的时候使用的是函数的类型和由m各元素组成一行的指针变量,假设二维数组的名字是ss,那么填写的内容是:(*ss)M;如果调用的是普通变量则填写的内容为:int n;(2) 二维数组遍历时,使用的是两个循环,使用的是循环的嵌套使用,第二个循环的使用的时候填写的内容为:j=0;(特殊的特殊处理)(3) 交换两个变量的值的使用的格式为: t=a;
10、a=b;b=t; 记住交换变量的格式和顺序。(4) 如果二维数组是字符串的题目的时候,要记住字符串中函数的使用的格式;即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。注意里面的格式中使用的都是和指针。(5) 特殊的特殊处理。第7题的填空的内容记住。七、 填空题与数学公式相关1. 解题方法:(1) 如果在函数中定义变量,但是没有定义成静态存储变量,即变量前面没有static,应给变量赋初值,如果以后用到的是加减运算,则赋初值为0或者是0.0;如果以后用到的是乘除运算,则赋初值为1或者是1.0;(2) 循环条件的填空,分析表达式的规律,看表达式中的最后一项的值是
11、否到了第m项或者是第n项,如果到了第m或者第n项,则在循环中的第二个表达式中用到的是i=m或者是i=n;(3) 循环条件中如果用的是while语句,则循环变量的初值应该在while的外面定义和赋初值,在循环语句中必须给变量自加或者是自减。如果没有则一般填的是i+;(4) 看表达式中的每一项的运算规则,按照运算的规则把每一项中的n值替换为i,特殊情况例外。如果是表达式中用到的是间隔相加减的运算时,注意给中间变量赋初值为1或者是1.0;在后面的运算中给变量乘以一个-1,以改变中间变量的符号。2. 解题分析:(1) 看清题目中要求的题意,题目要求做什么就只需考虑什么。(2) 找出题目中的表达式:当n
12、=1时,表达式变为,当n=2时,表达式为,n不断的变化,得到的表达式值也不相同,题目中要求将n=1,n=2n=n的值进行一个累加,最后得到一个结果赋值给变量s。(3) 通过以上的分析我们可以得到如下的信息:1) 需要一个变量来存储结果值。对应到程序中,我们使用s来表示,因为计算的结果可能为小数,因此将s定义为实型。2) 需要一个变量从1开始递增到n,对应到程序中用i表示。3) 需要用到循环的知识。4) 函数最后会将s的值进行返回。double fun(int n) int i; double s, t; s=_1_;需要给s赋初始值,一般赋值为0或是1,这里面有规律,在填空题中一定填入的是0。
13、 for(i=1; i=_2_; i+)需要填入的是i变量的初始值和结束值,结束值一般是通过实参传递给形参的,因此很多时候填入形参名即可。 t=2.0*i; 将2*i的值赋值给变量t,因此遇到直接用t*t代替就行。s=s+(2.0*i-1)*(2.0*i+1)/_3_; 需要在(2.0*i-1)*(2.0*i+1)/_3_;中填入适当的值来补充完整表达式,比较得知,(2.0*i-1)*(2.0*i+1)/_3_;缺少的是部分,上面分析过可以用t*t来代替,因此,第三个填入t*t就行! return s;3. 类似题目:6、13、25、29、36、46、52、60、66、69、73、83、95八
14、、 填空题与字符串相关1. 删除字符串(1) 主要考查二维字符数组与字符串的操作(2) 举例1:P18第8题(和65题一样)#define N 5#define M 10int fun(char (*ss)M, int k)/*char (*ss)M行指针,下标与二维数组x的列下标相同,k通过实参传递过来后为7*/ int i,j=0,len; for(i=0; _1_ ; i+)/*根据len=strlen(ssi);可知i代表的是行,因此填入for(i=0; N ; i+)*/ len=strlen(ssi); if(len= _2_);/*题目要求将串长超过k的字符串删除,换个说法就是将
15、串小于等于k的字符串留下,因此该空填写if(len= k)*/ strcpy(ssj+,_3_);/*将ssi行的值赋值到sj中,该空出现频率很高,因此要牢记。strcpy(ssj+,ssi)*/ return j;main() char xNM=Beijing,ShanghaiTianjingNanjingWuhan; /*定义了一个5行10列的二维字符数组x*/ int i,f; printf(nThe original stringnniN;i+)puts(xi);n f=fun(x,7);/*将二维数组x传给fun函数的第一个形参,将7传递给fun函数的第二个形参*/The strin
16、g witch length is less than or equal to 7 :f; i+) puts(xi);printf(3) 举例2:P19第10题(和93题一样)void fun(char (*ss) _1_, int k)/*根据函数调用可知,char (*ss) _1_和实参二维数组x对应,因此必须与列下标对应,故填写char (*ss)M*/ int i=0 ; while(i _2_) /* ssik可知,i处于行的位置,因此i要小于最大行长度,因此填入:while(iN)*/ssik=_3_; i+; /*将所有串长超过K的字符串右边的字符删除,请看分析可知,如果在k位
17、置加一个0则所有字符串的长度为k,因此填写:ssik=0;*/CreateModifySortskipDelete fun(x,4);nThe string after deleted :nn(4) 类似的题目:第11、12、19、45、62、77、1002. 统计字符个数(1) 考查数字字符的判断方法和字符结束的形式P53第67题#include void fun(char *s, int *t) int i, n; n=0; _1_ !=0; i+)/*for循环中的表达式2表示控制循环,即判断字符串什么时候结束,因此填入:si!=0,因为字符串以0结尾,因此只要si为0就表示字符串到了末
18、尾*/ if(si=0&si= 9)即可*/ _3_ ;/*将数字字符出现的次数放在形成t中,因此填入*t=n*/ char s80=abcdef35adgh3kjsdf7; int t;nThe original string is : %sn,s); fun(s,&t);nThe result is : %dn,t);P45第53题void fun(char *s) int i, j=0, k=0; char t180, t280; si!0 i+) & si)判断是否为数字字符 t2j=si; _1_;/*将数字字符存放在t2数组中,分析for(i=0; i+)中进行了i+的操作,在字符串中有多个数字字符,因此j也必须自增才能存储完所有的数字字符,因此该空填写:j+*/ else t1k+=si;/*将非数字字符存放在t1数组中*/ t2j=0; t1k=0;k; i+) _2_;/*题目要求将所有数字字符放在非数字字符的后面,因此先将k个非数字字符放在数组s中,即为:si=t1i*/_3_; i+) sk+i=t2i;/*将j个数字字符放在非数字字符之后,因此循环条件为:j; char s80=ba3a54j7sd567sdffs fun(s);第12、14、18、35、48、72、81、84、913. 特殊题目:21题、34,单独记忆
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1