填空题(链表)
统计带头结点的单向链表中结点个数,并存放在形参n所指的存储单元中。
#include
#include
#define N 8
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**********/
___1___=0;
p=h->next;
while(p)
{ (*n)++;
/**********found**********/
p=p->___2___;
}
}
void main()
{ SLIST *head;
int a[N]={12,87,45,32,91,16,20,48}, num;
head=creatlist(a); outlist(head);
/**********found**********/
fun(___3___, &num);
printf("\nnumber=%d\n",num);
}
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("The list is NULL!\n"); else { printf("\nHead "); do { printf("->%d",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } 改错题(1366改错题) 第1题 (18.0分) 题号:393 难度:难 第20章 /*------------------------------------------------------- 【程序改错】 --------------------------------------------------------- 题目:void add(char a[],char b[],char c[])函数将由'0','1' 组成的字符串a,b按二进制数加法规则相加,和仍以'0','1' 组成的字符串形式保存到字符串c中。 例如:字符串a为"1100",字符串b为"111",调用add函数后字符串c 为"10011"。 请改正程序中的错误,使它能得出正确的结果。 --------------------------------------------------------- 注意:不得增行或删行,也不得更改程序的结构。 --------------------------------------------------------*/ #include #include void reverse(char s[]) { int i,len; char t; /*******************FOUND*******************/ len=strlen(s)-1; for(i=0;i { t=s[i]; s[i]=s[len-i-1]; s[len-i-1]=t; } } void add(char a[],char b[],char c[]) { int i,j,k,t,flag; i=strlen(a)-1; j=strlen(b)-1; k=flag=0; while(i>=0||j>=0) { if(i<0) t=b[j]-48+flag; else if(j<0) t=a[i]-48+flag; else t=a[i]-48+b[j]-48+flag; /*******************FOUND*******************/ c[k]=t/2; k++; if(t>1) flag=1; i--; j--; } /*******************FOUND*******************/ if(flag==0) c[k++]='1'; c[k]='\0'; reverse(c); } int main() { char a[50],b[50],c[51]; printf("Input a(binary):\n"); scanf("%s",a); printf("Input b(binary):\n"); scanf("%s",b); add(a,b,c); printf("After adding a+b=%s\n",c); return 0; } (指针大礼包-改错题第3题) 第3题 (10.0分) 题号:53 难度:中 第8章 /*------------------------------------------------------- 【程序改错】 --------------------------------------------------------- 题目:下列给定程序中函数fun的功能是:求出s所指字符串中最后一次出现的t所指 字符串的地址,并通过函数值返回,在主函数中输出从此地址开始的字符串; 若未找到,则函数值为NULL。 例如:当字符串中的内容为"abcdabfabcdx",t中内容为"ab"时,输出结果应是"abcdx"。 当字符串中的内容为"abcdabfabcdx",t中内容为"abd"时,则程序输出未找 到信息"not be found!"。 -------------------------------------------------------*/ #include #include char * fun (char *s, char *t ) { char *p , *r, *a; /***********FOUND***********/ a == Null; while ( *s ) { p = s; r = t; while ( *r ) /***********FOUND***********/ if ( r == p ) { r++; p++; } else break; if ( *r == '\0' ) a = s; s++; } return a ; } main() { char s[100], t[100], *p; printf("\nPlease enter string S :"); scanf("%s", s ); printf("\nPlease enter substring t :"); scanf("%s", t ); p = fun( s, t ); if ( p ) printf("\nThe result is : %s\n", p); else printf("\nNot found !\n" ); } 编程题 第1题 (24.0分) 题号:152 难度:中 第7章 /*------------------------------------------------------- 【程序设计】 --------------------------------------------------------- 题目:请编写函数fun,该函数的功能是:删除一维数组中所有相同的数,使之只剩一个。 数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如:若一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10删除后,数 组中的内容应该是: 2 3 4 5 6 7 8 9 10。 注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入 所编写的若干语句。 -------------------------------------------------------*/ #include #define N 80 int fun(int a[], int n) { /**********Program**********/ /********** End **********/ } void main() { int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10}, i, n=20; printf("The original data :\n"); for(i=0; i printf("%3d",a[i]); n=fun(a,n); printf("\n\nThe data after deleted :\n"); for(i=0; i printf("%3d",a[i]); printf("\n\n"); } (指针大礼包-第7题) 第7题 (10.0分) 题号:137 难度:中 第8章 /*------------------------------------------------------- 【程序设计】 --------------------------------------------------------- 题目:请编写函数fun,其功能是:统计s所指字符串中的数字字符个数,并作为函数值 返回。 例如:s所指字符串中的内容是:2def35adh25 3kjsdf 7/kj8655x,函数fun返回值为:11 注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 -------------------------------------------------------*/ #include int fun(char *s) { /**********Program**********/ /********** End **********/ } void main() { char *s="2def35adh25 3kjsdf 7/kj8655x"; printf("%s\n",s); printf("%d\n",fun(s)); }