计算机等级考试二级C语言内部教材
void fun(int (*a) __1__) [N] { int i,j,k,m; if(N%2==0) m=N/2 ; else m=N/2+1; for(i=0; i for(j= __2__ ; j a[k][i]=a[k][N-i-1]= __3__; i+1 } } main() { int x[N][N]={0},i,j; fun(x); printf(\for(i=0; i { for(j=0; j 解题思路: 第一处:建立一个N×N的矩阵,所以应填:[N]。 第二处:j的起始变量值应i。 第三处:也应该填写i+1。 第36套 给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数, 存放在形参n所指的存储单元中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include typedef struct list { int data; struct list *next; } SLIST; SLIST *creatlist(int *a); void outlist(SLIST *); void fun( SLIST *h, int *n) { SLIST *p; /**********found**********/ 36 计算机等级考试二级C语言内部教材 ___1___=0; *n p=h->next; while(p) { (*n)++; /**********found**********/ p=p->___2___; next } } main() { SLIST *head; int a[N]={12,87,45,32,91,16,20,48}, num; head=creatlist(a); outlist(head); /**********found**********/ fun(___3___, &num); head printf(\} 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(\while(p!=NULL); printf(\} } 解题思路: 本题是要求统计出带有头结点的单向链表中结点的个数。 第一处:对n所指的存储单元进行初始化,所以应填:*n。 第二处:指向p的下一个结点,所以应填:next。 第三处:函数调用,在主函数中已经给出了head,所以应填:head。 第37套 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串 37 计算机等级考试二级C语言内部教材 并输出,若没找到则输出相应信息。ss所指字符串数组中共有N个字符串,且串长小于M。程序中库函数strstr(s1, s2)的功能是在s1串中查找s2子串,若没有,函数值为0,若有,为非0。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun(char (*ss)[M], char *substr) { int i,find=0; /**********found**********/ for(i=0; i< __1__ ; i++) N /**********found**********/ if( strstr(ss[i], __2__) != NULL ) substr { find=1; puts(ss[i]); printf(\/**********found**********/ if (find==__3__) printf(\} main() { char x[N][M]={\int i; printf(\for(i=0;i printf(\fun(x,str); } 解题思路: 本题是根据给定的字符串数组中查找指定的字符串,如果存在,则显示。 第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:N。 第二处:查找子串,子串由形参substr传递,所以应填:substr。 第三处:试题要求,若没有找到,函数值为0,所以应填:0。 第38套 函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a[2]、??中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a 所指数组中的数据为:9、1、3、5、7,返回值为5。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(int a[], int n) { int i,j; 38 计算机等级考试二级C语言内部教材 j = 0; for (i=0; i /**********found**********/ if (a[i]%2==___1___) 1 { /**********found**********/ a[j] = a[i]; ___2___; j++ } /**********found**********/ return ___3___; j } main() { int b[N]={9,1,4,2,3,6,5,8,7}, i, n; printf(\for (i=0; i printf(\printf(\ for (i=0; i 解题思路: 第一处:判断a[i]是否是奇数,若是,则仍保留在原数组中a[j],所以应填:1。 第二处:数组a中的元素位置由j来控制,每增加一个元素,则j加1,所以应填:j++。 第三处:返回删除偶数后a所指数组中数据的元素j,所以应填:j。 第39套 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。ss所指字符串数组中共有N个字符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(char (*ss)[M], int k) { int i,j=0,len; /**********found**********/ for(i=0; i< __1__ ; i++) N { len=strlen(ss[i]); /**********found**********/ if(len<= __2__) k /**********found**********/ 39 计算机等级考试二级C语言内部教材 strcpy(ss[j++],__3__); ss[i] } return j; } main() { char x[N][M]={\int i,f; printf(\for(i=0;i printf(\for(i=0; i 解题思路: 本题是根据给定的字符串数组中删除串长大于某个值的字符串。 第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:N。 第二处:串长由形参k来传递,所以应填:k。 第三处:如果字符串ss[i]的串长小于k,则该字符串仍存在原字符串数组中,位置由变量j来控制,所以应填:ss[i]。 第40套 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include typedef struct list { int data; struct list *next; } SLIST; void fun( SLIST *h, int x) { SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST)); /**********found**********/ s->data=___1___; x q=h; p=h->next; while(p!=NULL && x>p->data) { /**********found**********/ q=___2___; p p=p->next; } 40