1、上机填空题技巧总结一、 填空题之办法1. 上机填空题占30分,普通有3个空需要填写,每个空为10分;2. 填空题做题之前必要弄清题目含义,抓住核心字,例如:规定对数组进行从小到大排序,则将会浮现不不大于符号,假如是从大到小排序则浮现不大于符号;3. 填空题中浮现频率最高就是函数调用、函数首部、函数返回值等和函数有关问题,因而必要牢牢掌握祝函数基本特性;4. 填空题中有“空”比较难,考生除了掌握必要C语言知识之外,还需要较好逻辑思绪,假如一种空将花诸多时间来解决,那么建议使用“死记硬背”办法来缩短复习时间;5. 上机题库中100题有某些题目是反复或是相似题目诸多,同窗们要使用比对办法尽量去理解;
2、6. 多练习,多思考,多总结二、 填空题与构造体有关1. 构造体成员引用:上机题库P18第9题(和92题一致),P27第23题(和51题同样)读清楚题目规定:(1) 规定将形参a所指构造体变量数据赋值给函数中构造体变量b(2) 从例如可以看出来:构造体中学号和姓名变为了1002和“LiSi”,但是3门课成绩没有变化#include #include struct student long sno; char name10; float score3;void fun(struct student a) struct student b; int i;/*found*/ b = _1_;题目规定
3、将形参a值赋值给构造体变量b,因而填:a b.sno = 10002;学号变为了10002/*found*/ strcpy(_2_,LiSi);姓名要变为”LiSi”,则要引用b中name成员 printf(nThe data after modified :n);/*解说是一句带过不用多讲*/ printf(nNo:%ld Name:%snScores: ,b.sno,b.name);/*解说是一句带过不用多讲*/*found*/ for (i=0;i3;i+) printf(%6.2f , b._3_);分析:这个是一种循环语句,执行3次循环,printf(%6.2f , b._3_)规定
4、输出是一种实型数据成员,因而可以得知是score成员,由于score是一种数组,因而填:b.scorei,当i变化就可以取出第一门、第二门、第三门课成绩 printf(n);main() struct student s=10001,ZhangSan,95,80,88; int i; printf(nnThe original data :n); printf(nNo:%ld Name:%snScores: ,s.sno,s.name); for (i=0;i3;i+) printf(%6.2f , s.scorei); printf(n); fun(s);23题:(1) 从例如中可以看出:变
5、化是构造体中学号和姓名#include #include struct student long sno; char name10; float score3;void fun( struct student *b) int i;/*found*/ b_1_ = 10004;题目中t学号变化为了10004,因而填写:b-sno,不能填写b.sno,由于b是一种指针/*found*/ strcpy(b_2_,LiJie);t姓名变为了”LiJie”,因而填写:b-namemain() struct student t=10002,ZhangQi,93,85,87; int i; printf(n
6、nThe original data :n); printf(nNo:%ld Name:%snScores: ,t.sno,t.name); for (i=0;i3;i+) printf(%6.2f ,t.scorei); printf(n);/*found*/ fun(_3_);此处为函数调用,依照形参类型来鉴定实参,形参struct student *b为构造体指针,联系main函数定义某些只有struct student t和b类型相似,因而可知需要填是:&t printf(nThe data after modified :n); printf(nNo:%ld Name:%snScor
7、es: ,t.sno,t.name); for (i=0;i3;i+) printf(%6.2f ,t.scorei); printf(n);2. 函数调用and构造体:上机题库P22第16题(和78、82题同样)重点注意:(1)把a中地址作为函数返回值返回函数(2)观测可知a中学号、姓名边为了10002和“zhangSan”,每门课成绩增长了1分#include #include struct student long sno; char name10; float score3;/*found*/_1_ fun(struct student *a)依照函数调用t = fun(&s);可知函
8、数返回类型和t类型相似,struct student s=10001,ZhangSan,95,80,88, *t;可知t类型为struct student * int i; a-sno = 10002; strcpy(a-name,LiSi);/*found*/ for (i=0;iscorei,不能为a.scorei或是a.score/*found*/ return _3_ ;题目规定返回a地址,a自身就是一种指针,因而填入a即可main() struct student s=10001,ZhangSan,95,80,88, *t; int i; printf(nnThe original
9、data :n); printf(nNo:%ld Name:%snScores: ,s.sno,s.name); for (i=0;isno,t-name); for (i=0;iscorei); printf(n);3. 构造体和排序:上机题库P14第2题 重点注意:(1)排序格式:红色某些为考试中重点,必要记住从小到大排序:for(i=0;in-1;i+)for(j=i+1;jaj) t=ai;ai=aj;aj =t;从大到小排序:for(i=0;in-1;i+)for(j=i+1;jn;j+) if(aiaj) t=ai;ai=aj;aj =t; void fun(struct stud
10、ent a,int n)/*found*/ _1_ t;此处规定填入t类型,可以从t = ai;中得知t和a数组类型必要一致,void fun(struct student a,int n)中得知a为构造体类型,因而填写:struct student int i,j;/*found*/ for (i=0;i_2_;i+)依照排序格式填空,因而记住是核心 for (j=i+1;j 0)按照姓名字典顺序从小到大排序,因而:strcmp(ai.name,aj.name),此处需要特别注意 t = ai; ai = aj; aj = t; main() struct student s4=10001,
11、ZhangSan,95,80,88,10002,LiSi,85,70,78, 10003,CaoKai,75,60,88,10004,FangFang,90,82,87; int i,j; printf(nnThe original data :nn); for (j=0;j4;j+) printf(nNo:%ld Name:%-8s Scores: ,sj.sno,sj.name); for (i=0;i3;i+) printf(%6.2f ,sj.scorei); printf(n); fun(s,4); printf(nnThe data after sorting :nn); for
12、(j=0;j4;j+) printf(nNo:%ld Name:%-8s Scores: ,sj.sno,sj.name); for (i=0;inext,上机题库P21第15题考点分析:(1)带头结点链表体现形式:headabcABCNULL带头结点链表,头结点head不存储任何数据,从头结点下一种结点开始存储数据,因而考试中假如浮现 p = _1_ ;则填入p=h-next(2)链表数据排序对数组元素从小到大排序:for(i=0;in-1;i+)for(j=i+1;jaj) t=ai;ai=aj;aj =t;对链表元素进行从小到大排序:while (p) /*相称于数组排序中for(i=0
13、;inext;/*相称于j=i+1*/ while (q) /*相称于for(;jdata q-data) /*相称于if(aiaj)*/ t = p-data; p-data = q-data; q-data = t; /*假如aiaj成立,则互换数据元素,让数据变成从小到大排序*/ q = q-next;/*相称于q+*/ p = p-next;/*相称于p+*/ 15题:#include #include #define N 6typedef struct node int data; struct node *next; NODE;void fun(NODE *h) NODE *p,*
14、q; int t;/*found*/ p = _1_ ;链表为带头结点,因而填写:p=h-next while (p) /*found*/ q = _2_ ;比较两个链表中元素大小,因而q=p-next,这样q指向了p下一位 while (q) /*found*/ if (p-data _3_ q-data)从小到大排序,因而使用不不大于符号,填写: t = p-data; p-data = q-data; q-data = t; q = q-next; p = p-next; main() NODE *head; int aN= 0,10,4,2,8,6 ; head=creatlist(a
15、); printf(nThe original list:n); outlist(head); fun(head); printf(nThe list after sorting :n); outlist(head);2. 不带头结点链表:p=h(1) 不带头结点链表表达形式:abcABCNULL不带头结点链表没有头结点,链表第一种结点存储就是数据,因而考试中假如浮现 p = _1_ ;则填入p=h(2) 解说P38第42题(和15题类似)void fun(NODE *h) NODE *p,*q; int t; p = h;不带头结点链表 while (p) /*found*/ q = _1_
16、 ;q指向p下一位,因而填入:q=p-next/*found*/ while (_2_)判断q有无到末尾,因而填入p或是p!=NULL if (p-data q-data) t = p-data; p-data = q-data; q-data = t; q = q-next; /*found*/ p = _3_ ; while (p)为循环条件,要构成循环p就得自加或是自减,从循环体中得知没有进行p+之类操作,因而此处填入:p=p-next或是p+ main() NODE *head; int aN= 0,10,4,2,8,6 ; head=creatlist(a); printf(nThe
17、 original list:n); outlist(head); fun(head);3. 链表返回值:P43第50题(和43题类似)/*found*/_1_ fun(NODE *h)依照函数调用head=fun(head);和 NODE *head;懂得函数返回值为NODE * NODE *p,*q,*r; p = h; if (p = NULL)假如p数据位空,则表达p中没有任何数据,因而就无需再进行逆置,故return NULL; return NULL; q = p-next; p-next = NULL;/*found*/ while (_2_)此空判断q有无为空,解说时候不容易理
18、解,考生记住即可,填入:while(q)或是while(q!=NULL) r = q-next; q-next = p; p = q;/*found*/ q = _3_ ;填入:q=r;次空理解起来较难,因而考生必要认真记忆,教师无需多讲 return p;main() NODE *head; int aN=2,4,6,8,10; head=creatlist(a); printf(nThe original list:n); outlist(head); head=fun(head); printf(nThe list after inverting :n); outlist(head);四
19、、 填空题与文献有关1. 文献指针定义(1) 文献定义形式:FILE *fp;(课本P115)(2) 举例:上机题库P30第28题第一空/*found*/ _1_ fp;分析:在涉及文献类型上机题目时fp指就是文献指针,因而在前面填写类型时候直接写入:FILE *fp;(3) 类似题目:P32第32题第1个空、P67第88题第2个空2. 文献打开(1) 文献打开格式:fopen(“文献名”,“打开方式”);(课本P115)(2) 举例:P31第30题第1个空void fun(char *filename,STU n) FILE *fp;/*found*/fp = fopen(_1_,rb+);
20、分析:缺少了文献名,形参filename是实参传过来文献名,因而这里直接填入:fp = fopen(filename,rb+);表达以“读和写”方式打开一种二进制文献filename(3) 类似题目:P41第47题第1个空、P71第94题第1个空、P72第96题第3空3. 文献关闭(1) 文献关闭格式:fclose(文献指针);(课本P117)(2) 举例:上机题库P30第28题第2空fp = fopen(file1.txt,w);/*第一次以写形式打开文献file1.txt*/ fprintf(fp,%s %d %fn,s,a,f);/*found*/ _2_ ;fp = fopen(fil
21、e1.txt,r);/*第二次以读形式打开文献file1.txt*/分析:打开文献后来必要将它关闭,因而该空要填:fclose(fp);(3) 类似题目:P72第96题第2空4. 测试文献结束(1) 判断文献结束feof函数形式:feof(fp)(课本P118)(2) 经常出当前while()表达式里面,常用形式为:while(!feof(fp)测试指针fp有无结束(3) 举例:上机题目P26第22题第1空FILE *fp; STU n; int i; fp = fopen(filename,rb+);/*found*/ while (!_1_)分析:填写feof(fp)测试fp指针又没有结束
22、(4) 类似题目:P32第32题第2个空、P61第80题第1个空、P71第94题第2个空5. 设立文献位置函数(1) fseek设立文献位置:fseek(文献指针,位移量,移动起始点)(课本P118)(2) 考试普通考察是移动起始点:SEEK_SET表达文献开始,SEEK_CUR表达文献当前位置,SEEK_END表达文献末尾(3) 举例:上机题库P31第30题第2个空/*found*/fseek(fp,-1L*sizeof(STU),_2_);分析:题目规定:重写形参filename所指文献中最后一种学生数据,因而文献指针fp要指向最后位置,则填入:fseek(fp,-1L*sizeof(ST
23、U),SEEK_END);(4) 类似题目:P26第22题第3空、P61第80第3空、6. 读二进制文献(1) fwrite(存入数据指针,每一种数据占有字节,输入数据个数,文献指针);(课本P120)(2) 举例:P31第30题第3空void fun(char *filename,STU n) FILE *fp;/*found*/ fp = fopen(filename,rb+);/*打开文献filename*/*found*/ fseek(fp,-1L*sizeof(STU),SEEK_END);/*定位到最后一种学生位置*/*found*/ fwrite(_3_,sizeof(STU),
24、1,fp);/*将形参n新学生数据覆盖最后一种学生数据,由于fp已经定位到了最后一种学生位置*/ fclose(fp);分析:题目规定用新数据覆盖最后一种学生数据,因而填入:fwrite(&n,sizeof(STU),1,fp);填入是地址,不能是:fwrite(n,sizeof(STU),1,fp);(3) 类似题目:P41第47题第3空,P67第88题第3空、7. 写二进制文献函数(1) fread(读出数据指针,每一种数据占有字节,输出数据个数,文献指针);(2) 上机考试填空题没有浮现需要填写空,考生作普通理解8. fcanf函数数和fprintf函数(1) fscanf(文献指针,格
25、式控制字符串,输入列表项);(2) fprintf(文献指针,格式控制字符串,输出列表项);(3) fscanf函数和fprintf函数在上机编程题中具体简介,这里不作重点解说,理解即可五、 填空题与函数有关1. 函数调用:P13第1题#include double f1(double x)定义了f1函数,有一种形参 return x*x; double f2(double x,double y) 定义了f2函数,有两个形参 return x*y; /*found*/_1_ fun(int i,double x,double y)依照函数调用r = fun(1,x1,x2);可知函数返回值和r
26、类型一致,double x1=5,x2=3,r;r为doule类型,则函数返回double if (i=1)/*found*/ return _2_(x);此处为函数调用,实参数为1,依照实参和形成个数一致可知,调用为f1函数 else/*found*/ return _3_(x,y);此处实参数为2,则调用f2函数 main() double x1=5,x2=3,r; r = fun(1,x1,x2); r += fun(2,x1,x2);printf(nx1=%f,x2=%f,x1*x1+x1*x2=%fnn,x1,x2,r);六、 填空题与数组有关1. 类似题目:3、4、7、20、24、
27、26、39、40、41、54、57、64、68、70、71、76、89、90、992. 一维数组中存在这样某些类型:(1) 求一种数值数组中所有值平均值和把不不大于或者不大于平均值数辅导例外一种数组中。在计算机平均值时,一方面定义一种变量来存储平均分,平均分普通用av变量来代替,假如av已经定义但是没有赋初值,那么这个空填写内容为:av=0;(2) 求算平均值值时有两种办法,第一种是算出总分数,最后再除以总个数即可,如算1到6之间数平均值,一方面算出1到6和,另一方面用综合除以总个数6,即可以得到平均值;第二种办法是用每一种数除以6再把所有和加起来。即1/6+2/6+3/6+4/6+5/6+6
28、/6;因此在执行一维数组中算平均值时也是存在来中状况,假如在for语句背面有av=av/N;则第二个空普通填写时av+=si;假如说没有av=av/N;则填写是:av+=si/N;(3) 在背面一种空填写时候要注意变量使用状况,假如变量使用了j和i,那么这一种空填写内容为:j+;(4) 假如一维数组中求是把不不大于或者是不大于平均值数移动到数组首部时候,这种题目解答时这样,第一种空普通填写内容为:j+;第二个空填写内容是-1;(5) 对数组进行排序时:假如是从大到小排序时候,用是不大于符号,假如是从小到大排序时使用是不不大于符号。3. 二维数组中题目类型以及解决技巧:(1) 二维数组题目,填空
29、时候普通是填在函数调用,函数在调用时候写应当是而为数组名字;在定义函数时候使用是函数类型和由m各元素构成一行指针变量,假设二维数组名字是ss,那么填写内容是:(*ss)M;假如调用是普通变量则填写内容为:int n;(2) 二维数组遍历时,使用是两个循环,使用是循环嵌套使用,第二个循环使用时候填写内容为:j=0;(特殊特殊解决)(3) 互换两个变量值使用格式为: t=a;a=b;b=t; 记住互换变量格式和顺序。(4) 假如二维数组是字符串题目时候,要记住字符串中函数使用格式;即:strlen、strcmp、strcpy、sizeof、strcat使用格式。注意里面格式中使用都是和指针。(5)
30、 特殊特殊解决。第7题填空内容记住。七、 填空题与数学公式有关1. 解题办法:(1) 假如在函数中定义变量,但是没有定义成静态存储变量,即变量前面没有static,应给变量赋初值,假如后来用到是加减运算,则赋初值为0或者是0.0;假如后来用到是乘除运算,则赋初值为1或者是1.0;(2) 循环条件填空,分析表达式规律,看表达式中最后一项值与否到了第m项或者是第n项,假如到了第m或者第n项,则在循环中第二个表达式中用到是i=m或者是i=n;(3) 循环条件中假如用是while语句,则循环变量初值应当在while外面定义和赋初值,在循环语句中必要给变量自加或者是自减。假如没有则普通填是i+;(4)
31、看表达式中每一项运算规则,按照运算规则把每一项中n值替代为i,特殊状况例外。假如是表达式中用到是间隔相加减运算时,注意给中间变量赋初值为1或者是1.0;在背面运算中给变量乘以一种-1,以变化中间变量符号。2. 解题分析:(1) 看清题目中规定题意,题目规定做什么就只需考虑什么。(2) 找出题目中表达式:当n=1时,表达式变为,当n=2时,表达式为,n不断变化,得到表达式值也不相似,题目中规定将n=1,n=2n=n值进行一种累加,最后得到一种成果赋值给变量s。(3) 通过以上分析咱们可以得到如下信息:1) 需要一种变量来存储成果值。相应到程序中,咱们使用s来表达,由于计算成果也许为小数,因而将s
32、定义为实型。2) 需要一种变量从1开始递增到n,相应到程序中用i表达。3) 需要用到循环知识。4) 函数最后会将s值进行返回。double fun(int n) int i; double s,t;/*found*/ s=_1_;需要给s赋初始值,普通赋值为0或是1,这里面有规律,在填空题中一定填入是0。/*found*/ for(i=1;i=_2_;i+)需要填入是i变量初始值和结束值,结束值普通是通过实参传递给形参,因而诸多时候填入形参名即可。 t=2.0*i; 将2*i值赋值给变量t,因而碰到直接用t*t代替就行。/*found*/s=s+(2.0*i-1)*(2.0*i+1)/_3_;
33、 需要在(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八、 填空题与字符串有关1. 删除字符串(1) 重要考察二维字符数组与字符串操作(2) 举例1:P18第8题(和65题同样)#define N 5#define M 10int fun(char (*ss)M,int k)/*char (*ss)M行指针,下标与二维数组x列下
34、标相似,k通过实参传递过来后为7*/ int i,j=0,len;/*found*/ for(i=0;i _1_ ;i+)/*依照len=strlen(ssi);可知i代表是行,因而填入for(i=0;i N ;i+)*/ len=strlen(ssi);/*found*/ if(len= _2_);/*题目规定将串长超过k字符串删除,换个说法就是将串不大于等于k字符串留下,因而该空填写if(len= k)*/*found*/ strcpy(ssj+,_3_);/*将ssi行值赋值到sj中,该空浮现频率很高,因而要牢记。strcpy(ssj+,ssi)*/ return j;main() ch
35、ar xNM=Beijing,Shanghai,Tianjing,Nanjing,Wuhan; /*定义了一种5行10列二维字符数组x*/ int i,f; printf(nThe original stringnn); for(i=0;iN;i+)puts(xi); printf(n); f=fun(x,7);/*将二维数组x传给fun函数第一种形参,将7传递给fun函数第二个形参*/ printf(The string witch length is less than or equal to 7 :n); for(i=0;if;i+) puts(xi);printf(n);(3) 举例2
36、:P19第10题(和93题同样)#define N 5#define M 10/*found*/void fun(char (*ss) _1_,int k)/*依照函数调用可知,char (*ss) _1_和实参二维数组x相应,因而必要与列下标相应,故填写char (*ss)M*/ int i=0 ;/*found*/ while(i _2_) /* ssik可知,i处在行位置,因而i要不大于最大行长度,因而填入:while(iN)*/*found*/ssik=_3_; i+; /*将所有串长超过K字符串右边字符删除,请看分析可知,假如在k位置加一种0则所有字符串长度为k,因而填写:ssik=
37、0;*/ABC00001234000abcdef0AB000001204000ab0def0main() char xNM=Create,Modify,Sort,skip,Delete; int i; printf(nThe original stringnn); for(i=0;iN;i+)puts(xi); printf(n); fun(x,4); printf(nThe string after deleted :nn); for(i=0;iN;i+) puts(xi); printf(n);(4) 类似题目:第11、12、19、45、62、77、1002. 记录字符个数(1) 考察数字字符判断办法和字符结束形式(2) 举例1:P53第67题#include void fun(char *s,int *t) int i,n; n=0;/*found*/ for(i=0;_1_ !=0;i+)/*for循环中表达式2表达控制循环,即判断字符