二级C的30分填空题中,第3部分(最后)是完善程序题,共4小题,12分
13.以下程序中judge函数的功能是判断x指向的int类型数组(长度为n)中各元素之间的逻辑关系。
若n个元素的值均相等则输出"all elements are same";
若n个元素的值无序则输出"no order";
若n个元素的值按升序排列则输出"ascend";
若n个元素的值按降序排列则输出"descend'。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include<stdio.h> void judge(___(19)___,int n) { int f,i=0; while(i<n-1&&x[i]==x[i+1]) i++; if(i==___(20)___) { printf("\n all elements are same"); return; } if(x[i]<x[i+1])f=1; else f=0; for(; i<n-1; i++) if(f&&x[i]>x[i+1]||!f&&___(21)___) { printf("\n no order"); return; } if(___(22)___) printf("\n ascend"); else printf("\n descend"); } void main() { int a[5]= {1,2,3,4,5},b[5]= {5,4,3,2,1}, c[5]= {1,4,2,3,5),d[5]={2,2,2,2,2}}; judge(a,5); judge(b,5); judge(c,5); judge(d,5); } |
14. 下列程序的功能是判断一个n阶对称方阵是否双对称方阵。4阶对称方阵是指a(i,j) =a(j,i) (1<=i<=4,1<=j<=4)。4阶双对称矩阵是指一个4阶对称矩阵的第1列与第4列对换,第2列与第3列对换后仍然是对称矩阵,函数issym(int m[][N],int n)的功能是判断二维数组m中存放的一个n阶方阵是否为对称矩阵,如果是则函数返回值1,否则返回值0。 函数exchange(int a[][N],int n)的功能是将一个二维数组a中存放的一个n阶矩阵做横向翻转,即:将矩阵的第1列与第n列对换,将第2列与第n-1列对换,...,直到n/2列为止。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include<stdio.h> #define N 10 void exchange(int a[][N],int n) { int i,j,t; for(j=0; j<n/2; j++) for(i=0; i<n; i++) { t=a[i][j]; ___(23)___=a[i][n-j-1]; a[i][n-j-1]=t; } } int issym(int m[][N],int n) { int i,j; for(i=0; i<n-1; i++) for(j=i; j<n; j++) if(___(24)___) /*对称矩阵判断*/ return 0; ___(25)___ ; } void main() { int a[N][N]; int n=4,i,j,r1,r2; for(i=0; i<n; i++) for(j=0; j<n; j++) scanf("%d",&a[i][j]); for(i=0; i<n; i++) { for(j=0; j<n.j++) printf("%4d",a[i][j]); printf("\n"); } r1=issym(a,n); exchange( ___(26)___); r2=issym(a,n); if((r1+r2==2)) printf("matrix is double symmetric\n"); else printf("matrix is not double symmetric\n"); } |
15.函数deletelist的功能:在head指向的单向链表中查找是否出现多个x值相同的结点。如果发现存在这样的结点,则保留第一个结点,删除其他重复出现的结点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | typedef struct point { /*链表结点数据结构定义*/ int x; struct point*next; } ___(27)___ ; POT *deletelist(POT *head) { POT *p,*p1,*p2; p=___(28)___; while(p->next!=NULL) { p1=p; p2=p->next; while(p2!=NULL) { if(p2->x==p->x) { p1->next=___(29)___; free(p2); p2=p1->next; } else { p1=p2; p2=p2->next; } } p=___(30)___; } return head; } |