填空题(链表)
统计带头结点的单向链表中结点个数,并存放在形参n所指的存储单元中。
#include ???<stdio.h>
#include ???<stdlib.h>
#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<N; 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 <stdio.h>
#include <string.h>
void reverse(char s[])
{
????int i,len;
????char t;
/*******************FOUND*******************/
????len=strlen(s)-1;
????for(i=0;i<len/2;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 ?<stdio.h>
#include ?<string.h>
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 <stdio.h>
#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<n; i++) ?
????????????????printf("%3d",a[i]);
????????n=fun(a,n);
????????printf("\n\nThe data after deleted :\n");
????????for(i=0; i<n; 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 ?<stdio.h>
int fun(char ?*s)
{ ???????
/**********Program**********/
/********** ?End ?**********/
}
void main()
{ ?
????????char *s="2def35adh25 ?3kjsdf 7/kj8655x";
????????printf("%s\n",s);
????????printf("%d\n",fun(s));
}