上机考试答案与技巧
- 格式:pdf
- 大小:159.65 KB
- 文档页数:11
填空题第一类:链表。
9. 不带头结点的链表。
排序必须要比较,p是指向第一个的,所以q就要指向p的下一个。
之后p就可以和q比较了。
此处应填p->next。
while()内应填q,与循环体内的最后一条语句q=q->next。
(逆置题型除外)由于while()内应是p,所以循环体内的最后一条语句那应填p->next。
(逆置题型除外)11. 带头结点的链表。
切记:带头结点是p=h->next。
不带头结点是p=h。
判断p指针是否指向结束,所以填’\0’。
死记住。
逆置题型中while()循环体内的几条语句按顺序是:r=q->next;q->next=p;p=q;q=r;。
12. 不带头结点的链表。
该函数的返回结果是结构体变量p,所以函数返回值的类型应填NODE。
死记住。
逆置题型中while()循环体内的几条语句按顺序是:r=q->next;q->next=p;p=q;q=r;。
13. 带头结点的链表。
切记:带头结点是p=h->next。
不带头结点是p=h。
排序必须要比较,p是指向第一个的,所以q就要指向p的下一个。
之后p就可以和q比较了。
此处应填p->next。
if()判断时,若是从小到大排序,则比较用>;若是从大到小排序,则比较用<,此题填>。
26. 释放q,填q。
要掌握规律。
p->后填next成员。
要掌握规律。
q->后填next成员。
36. 由于下面对(*n)++计算,所以第一处应对*n赋初值,所以应填*n。
要掌握规律。
q->后填next成员。
主函数中head指针变量是指向链表的开头的,所以应填head。
40. 链表54. 此处填data。
因为是把p所指向结点中的data中的数据之和算出来。
要掌握规律。
p->后填next成员。
主函数中head指针变量是指向链表的开头的,所以应填head。
93. 要掌握规律。
t->后填next成员。
根据题意是要输出结点中的数据。
所以填t->data。
释放t所指向的结点。
第二类:学生结构体。
3. fopen()函数的第一个参数应填指针变量filename,因为filename指向文件名”student.dat”。
fseek()函数的第一个参数应填文件指针,函数中只有一个文件指针fp,故填fp。
fwrite()函数的最后一个参数应填文件指针,函数中只有一个文件指针fp,故填fp。
4. fopen()函数的第二个参数应填打开文件的方式,由于下面用的是读函数fread(),不是填“r”就是“rb”。
根据上下文可知要填“rb”。
if()判断时,若是从小到大排序,则比较用>;若是从大到小排序,则比较用<,此题填>。
此处填写函数名fwrite,因为前条语句中指针变量fp所指的文件是以写的方式打开的。
7. 第一处应填结构体变量tt,因为函数中使用了结构体变量tt。
第二处应填tt.score[i],利用循环输出tt中score数组的每一个元素的值。
第三处应填结构体变量std。
8. 先填第三处,应填结构体变量的地址&std,因为形参那里是指针变量。
第一处应填结构体类型STU。
score[0]、score[1]、score[2]中存放的是各科成绩,所以第二处应填score[i]。
15. feof()为判断文件指针是否指向文件结束,所以应填指针变量fp。
如果n.sno和sno中的值相等,就说明找到了,就不循环了。
所以应填==。
fseek()函数的第一个参数应填文件指针,函数中只有一个文件指针fp,故填fp。
17. t应被定义成结构体变量,填struct student。
在程序中起中间变量的作用,交换时需要用到。
排序时利用内外层嵌套循环时,外层循环的第一个表达式从第一个数开始(i=0),第二个表达式到倒数第二个结束(i<n-1)。
内层循环的第一个表达式从第二个数开始(j=i+1),第二个表达式到最后一个结束(j<n)。
对结构体中的姓名进行比较,应填:a[i].name, a[j].name。
19. 题目中说fun函数是要把结构体指针变量a中的地址值作为函数的返回值,所以fun函数前填struct student *。
利用循环分别对成绩增加1分,所以应填a->score[i]。
题目中说fun函数是要把结构体指针变量a中的地址值作为函数的返回值,所以填a。
24. 函数返回的是结构体变量a,所以fun函数前填struct student。
把姓名“LiSi”复制到中去,应填。
利用循环分别对成绩增加1分,所以应填a.score[i]。
29. 对指针变量b所指向结点中的学号赋值。
所以是b->no=10004。
把姓名“LiJie”复制到指针变量b所指向结点的姓名中去,应填b->name。
形参那由于定义的是结构体指针变量,所以实参应填结构体变量的地址:&t。
30. b是结构体变量,所以只能把结构体变量a赋值给它。
把姓名“LiSi”复制到中去,应填。
利用循环输出成绩,所以应填score[i]。
60. 题意说“将形参指针…”,所以第一处应填指针变量std。
temp应被定义成结构体变量,用PERSON定义。
根据形参是指针变量,所以实参应填数组名std。
第三类:求数组中N个数的平均值。
20. 把N个数的平均值求出来给变量av,循环体应写成av=av+x[i]/N。
但题目中要写成av+=x[i]/N。
for循环内的变量j要自增,所以填j++。
while循环内的变量i要自增,所以填i++。
21. 上面的for循环已经把N个数在总和求出给了变量s。
所以填s/N。
通过20套题的程序代码可知填j++。
通过20套题的程序代码可知填-1。
41. 把平均值算出赋值给:*av找到满足条件的数的位置i,然后把记录在另一个变量j中。
返回j位置上的数x[j]。
70. 计算平均值时,需对变量av进行初始化0。
把N个数的平均值求出来给变量av,循环体应写成av=av+x[i]/N。
但题目中要写成av+=x[i]/N。
将大于平均值的数放在形参y所指数组中,y[]内填j++让其自增。
第四类:文件指针。
改错题1. 条件判断表达式缺少圆括号,等号= =之间不能有空格。
语句后缺少分号。
2. 循环体中的变量j需要自增,s[j]应改成s[j++]。
“\0”应改成‘\0’。
3. (NODE)应改成(NODE *)返回值张冠李戴,p应改成h。
4. p和s都是指针变量,s中有值,p中无值,应改成p=s。
do……while语句后缺少分号。
5. 语句后缺少分号。
数组元素应改成t[k]=b[j],而不是t(k)=b(j)。
6. 函数类型声明缺少*号。
使指针变量移动,应改成ss++。
使指针变量移动,应改成tt++。
7. 变量赋初值错误,m=0应改成m=i。
if语句后的变量应该把自增的变量k赋值给不变的变量m。
应改为m=k。
8. 条件判断表达式缺少圆括号。
C语言中的等号应写成= =。
9. 判断s是否指向结束,循环头一般写成while(*s)。
使指针变量移动,应改成s++。
10. “/”左边的1改成1.0,不然整除结果为整数,1.0改成t,使得t=t-1.0/i。
填写函数的返回值,函数返回值为t,应填写return t。
11. 变量赋初值错误,r=p应改成r=t。
C语言中的等号应写成= =。
12. &&和||经常张冠李戴,此处应改成||。
上面是给t[j++]赋值,当退出循环时是要给t[j]赋结束符。
13. 由于链表带头结点,所以应把h->next赋值给p,应改成p=h->next。
使p指向下一个结点,应改成p=p->next。
14. 由于链表带头结点,所以应把h->next赋值给p,应改成p=h->next。
使p指向下一个结点,应改成p=p->next。
15. 库函数使用错误,strlen[aa]应改成strlen(aa)。
变量赋初值错误,函数中没有变量c,而是ch,应改成ch=aa[i]。
16. 指针变量p只有间接的访问才能和值’ ’相等比较,应改成*p= =’’。
语句后缺少分号。
17. 语句后缺少分号。
关键字while它写成了wihle,所以错了。
18. 判断w是否指向结束,循环头一般写成while(*w)。
关键字if它写成了IF,不能大写,所以错了。
19. 函数返回值缺少类型声明,函数前加上char *。
返回值张冠李戴,sq应改成sp。
20. 变量赋初值错误,num[i]=0应该成num[k]=0。
由于s是指针变量,间接返回值时,应改成switch(*s)。
21. include前缺少#号。
由于传入的是地址值,所以应改成upfst(char *p)。
22. 循环次数不对<改成<=。
if语句后的变量应该把自增的变量i赋值给不变的变量p。
应改成p=i。
23. 由于传入的是地址值,所以应改成int fun(int *x,int *y)。
间接的访问指针变量,应改为t=*x;*x=*y;*y=t;。
24. 小写p错写成了大写的P。
应该是把后面的元素赋值给前面的元素,应改为a[i]=a[i+1]。
25. 语句后缺少分号。
指针变量r只有间接的访问才能和值’\0’相等比较,应改成*r= =’\0’。
26. 语句后缺少分号。
if语句后的变量应该把自增的变量i赋值给不变的变量p。
应改成p=i。
27. 语句格式错误,for句中的逗号应改为分号。
关键字if它写成了If,不能大写,所以错了。
28. x是指针变量,间接的访问要加星号,应改成t=*x;*x=y;。
返回值张冠李戴,y应改成t。
29. 形参中第二个double写错了。
变量x0错写成了xo。
30. 循环体中的变量j需要自增,s[j]应改成s[j++]。
上面是给s[j++]赋值,当退出循环时是要给s[j]赋结束符。
31. 此处对t要求绝对值,所以要改为while(fabs(t)>=num)。
t是s除以n的值,而不是取余。
应改为t=s/n。
32. 由于下面用t乘其它的东西,所以t不能是0,应赋值1。
返回的值s还要乘以一个2。
33. C语言中的等号应写成= =。
整除的符号是/,而不是\。
34. 小写y错写成了大写的Y。
C语言中的赋值号应写成=。
35. 应该是求余,应改成aa[i]=m%k。
当上面循环退出时i大了一个值,下面输出的时候改成aa[i-1]。
36. 空值应该大写。
写成NULL。
间接访问两个指针变量的值是不是相等,应改成if(*r= =*p)。
37. 函数形参定义不正确,要改成fun(int x,int y,int z)。
返回值张冠李戴,i应改成j。