新视野二级C上机之填空题做题方法和技巧.docx
- 文档编号:8452868
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:22
- 大小:161.52KB
新视野二级C上机之填空题做题方法和技巧.docx
《新视野二级C上机之填空题做题方法和技巧.docx》由会员分享,可在线阅读,更多相关《新视野二级C上机之填空题做题方法和技巧.docx(22页珍藏版)》请在冰豆网上搜索。
新视野二级C上机之填空题做题方法和技巧
新视野教育•二级C语言上机填空题做题方法和技巧总结
一、填空题之方法
1、上机填空题占30分,一般有3个空需要填写,每个空为10分;
2、填空题做题之前必须弄清题目含义,抓住关键字,例如:
要求对数组进行从小到大排序,则将会出现大于符号,如果是从大到小排序则出现小于符号;
3、填空题中出现频率最高的就是函数的调用、函数的首部、函数的返回值等和函数相关的问题,因此必须牢牢掌握祝函数的基本特征;
4、填空题中有的“空”比较难,考生除了掌握必须的C语言知识之外,还需要很好的逻辑思路,如果一个空将花很多时间来解决,那么建议使用“死记硬背”的方法来缩短复习时间;
5、上机题库中100题有部分题目是重复的或是相似的题目很多,同学们要使用比对的方法尽量去理解;
6、多练习,多思考,多总结
二、填空题之结构体相关考点
1、结构体成员引用:
上机题库P18第9题(和92题一致),P27第23题(和51题一样)
||||||||||||||||
(1)读清楚题目要求:
1要求将形参a所指结构体变量的数据赋值给函数中的结构体变量b;
2从例如可以看出来:
结构体中的学号和姓名变为了1002和“LiSi”,但是3门课成绩没有变化;
(2)代码分析:
#include
#include
structstudent{
longsno;
charname[10];
floatscore[3];
};
voidfun(structstudenta)/*fun函数首部,函数返回void,有一个形参a,a是一个结构体类型,形参a和类型必须和实参s的类型一致*/
{structstudentb;inti;
/**********found**********/
b=__1__;/*题目要求将形参a的值赋值给结构体变量b,因此填:
a*/
b.sno=10002;/*将10002赋值给b.no,因此结构体变量b的学号变为了10002*/
/**********found**********/
strcpy(__2__,"LiSi");/*姓名要变为”LiSi”,则要引用b中的name成员,因此填入b.name*/
printf("\nThedataaftermodified:
\n");/*讲解是一句带过不用多讲*/
printf("\nNo:
%ldName:
%s\nScores:
",b.sno,b.name);/*讲解是一句带过不用多讲*/
/**********found**********/
for(i=0;i<3;i++)printf("%6.2f",b.__3__);/*分析:
这个是一个循环语句,执行3次循环,printf("%6.2f",b.__3__)要求输出是一个实型数据的成员,因此可以得知是score成员,因为score是一个数组,因此填:
b.score[i],当i变化就可以取出第一门、第二门、第三门课的成绩*/
printf("\n");
}
main()
{structstudents={10001,"ZhangSan",95,80,88};/*考试必须了解的定义部分定义的内容*/
inti;
printf("\n\nTheoriginaldata:
\n");
printf("\nNo:
%ldName:
%s\nScores:
",s.sno,s.name);
for(i=0;i<3;i++)printf("%6.2f",s.score[i]);
printf("\n");
fun(s);/*调用fun函数,传入实参,实参和形参必须一一对应,类型和个数必须一致*/
}
23题:
(1)从例如中可以看出:
变化的是结构体中的学号和姓名
#include
#include
structstudent{
longsno;
charname[10];
floatscore[3];
};
voidfun(structstudent*b)
{inti;
/**********found**********/
b__1__=10004;/*题目中t的学号变化为了10004,因此填写:
b->sno,不能填写b.sno,因为b是一个指针*/
/**********found**********/
strcpy(b__2__,"LiJie");/*t的姓名变为了”LiJie”,因此填写:
b->name*/
}
main()
{structstudentt={10002,"ZhangQi",93,85,87};
inti;
printf("\n\nTheoriginaldata:
\n");
printf("\nNo:
%ldName:
%s\nScores:
",t.sno,t.name);
for(i=0;i<3;i++)printf("%6.2f",t.score[i]);
printf("\n");
/**********found**********/
fun(__3__);/*此处为函数调用,根据形参的类型来判定实参,形参structstudent*b为结构体指针,联系main函数定义部分只有structstudentt和b的类型相同,因此可知需要填的是:
&t*/
printf("\nThedataaftermodified:
\n");
printf("\nNo:
%ldName:
%s\nScores:
",t.sno,t.name);
for(i=0;i<3;i++)printf("%6.2f",t.score[i]);
printf("\n");
}
2、函数调用and结构体:
上机题库P22第16题(和78、82题一样)
(1)把a中地址作为函数返回值返回函数。
(2)观察可知a中的学号、姓名边为了10002和“zhangSan”,每门课的成绩增加了1分。
#include
#include
structstudent{
longsno;
charname[10];
floatscore[3];
};
/**********found**********/
__1__fun(structstudent*a)/*根据函数调用t=fun(&s);可知函数返回类型和t的类型相同,structstudents={10001,"ZhangSan",95,80,88},*t;可知t的类型为structstudent**/
{inti;
a->sno=10002;
strcpy(a->name,"LiSi");
/**********found**********/
for(i=0;i<3;i++)__2__+=1;/*题目要求将每门课成绩增加1分,因此填为:
a->score[i],不能为a.score[i]或是a.score*/
/**********found**********/
return__3__;/*题目要求返回a的地址,a本身就是一个指针,因此填入a即可*/
}
main()
{structstudents={10001,"ZhangSan",95,80,88},*t;
inti;
printf("\n\nTheoriginaldata:
\n");
printf("\nNo:
%ldName:
%s\nScores:
",s.sno,s.name);
for(i=0;i<3;i++)printf("%6.2f",s.score[i]);
printf("\n");
t=fun(&s);
printf("\nThedataaftermodified:
\n");
printf("\nNo:
%ldName:
%s\nScores:
",t->sno,t->name);
for(i=0;i<3;i++)printf("%6.2f",t->score[i]);
printf("\n");
}
3、结构体和排序:
上机题库P14第2题
(1)排序的格式:
红色部分为考试中的重点,必须记住
(2)第2题代码分析:
voidfun(structstudenta[],intn)
{
/**********found**********/
__1__t;此处要求填入t的类型,可以从t=a[i];中得知t和a数组的类型必须一致,voidfun(structstudenta[],intn)中得知a为结构体类型,因此填写:
structstudent
inti,j;
/**********found**********/
for(i=0;i<__2__;i++)根据排序的格式填空,因此记住是关键
for(j=i+1;j /**********found**********/ if(strcmp(__3__)>0)按照姓名字典顺序从小到大排序,因此: strcmp(a[i].name,a[j].name),此处需要特别注意 {t=a[i];a[i]=a[j];a[j]=t;} } main() {structstudents[4]={{10001,"ZhangSan",95,80,88}, {10002,"LiSi",85,70,78}, {10003,"CaoKai",75,60,88}, {10004,"FangFang",90,82,87}}; inti,j; printf("\n\nTheoriginaldata: \n\n"); for(j=0;j<4;j++) {printf("\nNo: %ldName: %-8sScores: ",s[j].sno,s[j].name); for(i=0;i<3;i++)printf("%6.2f",s[j].score[i]); printf("\n"); } fun(s,4); printf("\n\nThedataaftersorting: \n\n"); for(j=0;j<4;j++) {printf("\nNo: %ldName: %-8sScores: ",s[j].sno,s[j].name); for(i=0;i<3;i++)printf("%6.2f",s[j].score[i]); printf("\n"); } } 三、填空题与链表相关 1、带头结点的链表: p=h->next,上机题库P21第15题 (1)带头结点链表的表现形式: 带头结点的链表,头结点head不存放任何的数据,从头结点的下一个结点开始存放数据,因此考试中如果出现p=__1__;则填入p=h->next (2)链表数据排序 (3)15题: #include #include #defineN6 typedefstructnode{ intdata; structnode*next; }NODE; voidfun(NODE*h) {NODE*p,*q;intt; /**********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; inta[N]={0,10,4,2,8,6}; head=creatlist(a); printf("\nTheoriginallist: \n"); outlist(head); fun(head); printf("\nThelistaftersorting: \n"); outlist(head); } 2、不带头结点的链表: p=h (1)不带头结点链表的表示形式: (2)讲解P38第42题(和15题类似) voidfun(NODE*h) {NODE*p,*q;intt; p=h;不带头结点的链表 while(p){ /**********found**********/ q=__1__;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; inta[N]={0,10,4,2,8,6}; head=creatlist(a); printf("\nTheoriginallist: \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中没有任何的数据,因此就无需再进行逆置,故returnNULL; returnNULL; q=p->next; p->next=NULL; /**********found**********/ while(__2__)此空判断q有没有为空,讲解时候不容易理解,考生记住即可,填入: while(q)或是while(q! =NULL) {r=q->next; q->next=p; p=q; /**********found**********/ q=__3__;填入: q=r;次空理解起来较难,因此考生必须认真记忆,老师无需多讲 } returnp; } main() {NODE*head; inta[N]={2,4,6,8,10}; head=creatlist(a); printf("\nTheoriginallist: \n"); outlist(head); head=fun(head); printf("\nThelistafterinverting: \n"); outlist(head); } 四、填空题与文件相关 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个空 voidfun(char*filename,STUn) {FILE*fp; /**********found**********/ fp=fopen(__1__,"rb+"); 分析: 缺少了文件名,形参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%f\n",s,a,f); /**********found**********/ __2__; fp=fopen("file1.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; STUn;inti; fp=fopen(filename,"rb+"); /**********found**********/ while(! __1__) 分析: 填写feof(fp)测试fp指针又没有结束 (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(STU),SEEK_END); (4)类似题目: P26第22题第3空、P61第80第3空、 6.读二进制文件 (1)fwrite(存入数据的指针,每一个数据占有的字节,输入数据的个数,文件指针);(课本P120) (2)举例: P31第30题第3空 voidfun(char*filename,STUn) {FILE*fp; /**********found**********/ fp=fopen(filename,"rb+");/*打开文件filename*/ /**********found**********/ fseek(fp,-1L*sizeof(STU),SEEK_END);/*定位到最后一个学生的位置*/ /**********found**********/ fwrite(__3__,sizeof(STU),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(文件指针,格式控制字符串,输入列表项); (2)fprintf(文件指针,格式控制字符串,输出列表项); (3)fscanf函数和fprintf函数在上机编程题中详细介绍,这里不作重点讲解,了解即可 五、填空题与函数相关 1.函数调用: P13第1题 #include doublef1(doublex)定义了f1函数,有一个形参 {returnx*x;} doublef2(doublex,doubley)定义了f2函数,有两个形参 {returnx*y;} /**********found**********/ __1__fun(inti,doublex,doubley)根据函数调用r=fun(1,x1,x2);可知函数返回值和r类型一致,doublex1=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() {doublex1=5,x2=3,r; r=fun(1,x1,x2); r+=fun(2,x1,x2); printf("\nx1=%f,x2=%f,x1*x1+x1*x2=%f\n\n",x1,x2,r); } 六、填空题与数组相关 1.类似题目: 3、4、7、20、24、26、39、40、41、54、57、64、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新视野 二级 上机 填空 题做题 方法 技巧