二级题目2

填空题(链表)

统计带头结点的单向链表中结点个数,并存放在形参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));

}

你可能感兴趣的:(c语言)