第51套
1.程序填空题
给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> #define N 5 typedef struct node { int data; struct node *next; } NODE; /**********found**********/ __1__ fun(NODE *h) { NODE *p, *q, *r; p = h; if (p == NULL) return NULL; q = p->next; p->next = NULL; /**********found**********/ while (__2__) { r = q->next; q->next = p; p = q; /**********found**********/ q = __3__ ; } return p; } NODE *creatlist(int a[]) { NODE *h,*p,*q; int i; h=NULL; for(i=0; i<N; i++) { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; q->next = NULL; if (h == NULL) h = p = q; else { p->next = q; p = q; } } return h; } void outlist(NODE *h) { NODE *p; p=h; if (p==NULL) printf("The list is NULL!n"); else { printf("nHead "); do { printf("->%d", p->data); p=p->next; } while(p!=NULL); printf("->Endn"); } } int main() { NODE *head; int a[N]={2,4,6,8,10}; head=creatlist(a); printf("nThe original list:n"); outlist(head); head=fun(head); printf("nThe list after inverting :n"); outlist(head); return 0; }
2.程序修改题
给定程序中,函数fun的功能是将字符串s中位于奇数位置的字符或ASCII码为偶数的字符放入字符串t中(规定第1个字符放在第0位中)。
例如,字符串中的数据为:AABBCCDDEEFF,则输出应为:ABBCDDEFF。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> #define N 80 void fun(char *s, char t[]) { int i, j=0; for(i=0; i<strlen(s); i++) /***********found**********/ if(i%2 && s[i]%2==0) t[j++]=s[i]; /***********found**********/ t[i]='