新视野二级C上机之填空题做题方法和技巧.docx

上传人:b****6 文档编号:8452868 上传时间:2023-01-31 格式:DOCX 页数:22 大小:161.52KB
下载 相关 举报
新视野二级C上机之填空题做题方法和技巧.docx_第1页
第1页 / 共22页
新视野二级C上机之填空题做题方法和技巧.docx_第2页
第2页 / 共22页
新视野二级C上机之填空题做题方法和技巧.docx_第3页
第3页 / 共22页
新视野二级C上机之填空题做题方法和技巧.docx_第4页
第4页 / 共22页
新视野二级C上机之填空题做题方法和技巧.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

新视野二级C上机之填空题做题方法和技巧.docx

《新视野二级C上机之填空题做题方法和技巧.docx》由会员分享,可在线阅读,更多相关《新视野二级C上机之填空题做题方法和技巧.docx(22页珍藏版)》请在冰豆网上搜索。

新视野二级C上机之填空题做题方法和技巧.docx

新视野二级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、

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

当前位置:首页 > 经管营销 > 经济市场

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

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