计算机等级考试二级C语言内部教材
{ struct student s={10001,\int i;
printf(\
printf(\for (i=0; i<3; i++) printf(\printf(\t = fun(s);
printf(\
printf(\for (i=0; i<3; i++) printf(\printf(\}
解题思路:
本题是对结构体变量中的值进行修改并通过函数值返回。 第一处:必须定义结构返回类型,所以应填:struct student。 第二处:对姓名进行修改,所以应填:a.name。
第三处:分别对成绩增加1分,所以应填:a.score[i]。
第25套
人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include
/**********found**********/
___1___ fun(STU *std, char *num) STU { int i; STU a={\for (i=0; i /**********found**********/ if( strcmp(___2___,num)==0 ) std[i].num /**********found**********/ return (___3___); std[i] return a; } main() { STU std[N]={ {\{\ 26 计算机等级考试二级C语言内部教材 {\STU p; char n[10]=\p=fun(std,n); if(p.num[0]==0) printf(\else { printf(\ printf(\} } 解题思路: 本题是要求从给定的人员数据中找出编号相同的记录数据。 第一处:从返回值来看,是返回一个结构型的值,所以应填:STU。 第二处:判断结构变量中的编号num是否相等,所以应填:std[i].num。 第三处:返回编号相等的记录值,所以应填:std[i]。 第26套 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include typedef struct list { int data; struct list *next; } SLIST; void fun( SLIST *h) { SLIST *p, *q; p=h->next; if (p!=NULL) { q=p->next; while(q!=NULL) { if (p->data==q->data) { p->next=q->next; /**********found**********/ free(___1___); q /**********found**********/ q=p->___2___; next } else { p=q; /**********found**********/ 27 计算机等级考试二级C语言内部教材 q=q->___3___; next } } } } SLIST *creatlist(int *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h; } void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf(\else { printf(\ do { printf(\printf(\} } main( ) { SLIST *head; int a[N]={1,2,2,3,4,4,4,5}; head=creatlist(a); printf(\fun(head); printf(\} 解题思路: 本题是考察考生对链表的操作,主要是解决删除链表中数据域值相同的结点。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 函数fun中使用两个临时结构指针变量p和q对链表进行操作。首先p指向链表开始的next指针,q指向p的next指针,再利用while循环语句来判断指针q是否NULL,如果q指针是指向NULL, 那么函数结束返回。如果不是NULL,那么就要判断p和q中data值是否相同,如果值相同,则要删除该结点,然后继续判断下一结点值是相同,如果还相同,那么继续删除结点,直至不相同为止。如果两个结点的值不相同,那么p就指向q,q指向q的next指针再继续操作上述过程。 删除结点的方法是:先将p的next指针指向q的next指针,再释放q指针指向的内存,最后把q指针再指向p的next指针就可以删除一个链表中的结点了。 第一处:释放q指针所指的内存空间,应填q。 第二处:q指针指向p的next指针,重新完成链接,应填next。 第三处:两个结点的值不相同,那么q就指向q的next指针,应填next。 28 计算机等级考试二级C语言内部教材 第27套 给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。 例如,当形参n的值为10时,函数返回:9.612558。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include s=__1__; 0 /**********found**********/ for(i=1; i<=__2__; i++) n { t=2.0*i; /**********found**********/ s=s+(2.0*i-1)*(2.0*i+1)/__3__; t*t } return s; } main() { int n=-1; while(n<0) { printf(\printf(\} 解题思路: 第一处:根据公式可知,累加和变量s,应置0。 第二处:for循环的终止值应为形参n。 第三处:根据公式以及函数体中t变量内容,所以应填:t*t。 第28套 给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,形参s所指的字符串为:abcdef35adgh3kjsdf7。输出结果为:4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include /**********found**********/ for(i=0; ___1___ !=NULL; i++) s[i] /**********found**********/ if(s[i]>='0'&&s[i]<= ___2___ ) n++; '9' 29 计算机等级考试二级C语言内部教材 /**********found**********/ ___3___ ; *t=n } main() { char s[80]=\int t; printf(\fun(s,&t); printf(\} 解题思路: 第一处:在for循环中终止值要判断字符串是否结束符,所以应填:s[i]。 第二处:判断是否是数字,所以应填:'9'。 第三处:字符串中数字字符出现的次数n,并存放在形参t所指的变量中,所以应填:*t=n。 第29套 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。 例如: b所指变量t中的学号、姓名、和三门课的成绩依次是: 10002、\、93、85、87,修改后输出t中的数据应为:10004、\、93、 85、87。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun( struct student *b) { int i; /**********found**********/ b__1__ = 10004; ->no /**********found**********/ strcpy(b__2__, \} main() { struct student t={10002,\int i; printf(\ printf(\for (i=0; i<3; i++) printf(\printf(\ /**********found**********/ 30