0
点赞
收藏
分享

微信扫一扫

二级C语言操作例题(三十六)

司马吹风 2022-04-21 阅读 27

一、程序填空题

在此程序中,函数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;

void fun(NODE  *h)

{ NODE  *p, *q, *r;

/**********found**********/

  p = h->__1__;

/**********found**********/

  if (p==__2__)  return;

  q = p->next;

  p->next = NULL;

  while (q)

  {  r = q->next;    q->next = p;

/**********found**********/

     p = q;          

 q = __3__;

  }

  h->next = p;

}

NODE *creatlist(int  a[])

{  NODE  *h,*p,*q;        int  i;

  h = (NODE *)malloc(sizeof(NODE));

  h->next = NULL;

  for(i=0; i<N; i++)

  {  q=(NODE *)malloc(sizeof(NODE));

     q->data=a[i];

     q->next = NULL;

     if (h->next == NULL)  h->next = p = q;

     else    {  p->next = q;  p = q;   }

  }

   return  h;

}

void outlist(NODE  *h)

{ NODE  *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");

  }

}

void main()

{  NODE  *head;

   int  a[N]={2,4,6,8,10};

   head=creatlist(a);

   printf("\nThe original list:\n");

   outlist(head);

   fun(head);

   printf("\nThe list after inverting :\n");

   outlist(head);

}

答案:(1) next (2) NULL (3) r

二、程序修改题

在此程序中,函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。

#include  <stdlib.h>

#include  <conio.h>

#include  <string.h>

#include  <stdio.h>

#define N 80

int fun(char *s,char *t)

{ int n;

  char *p, *r;

  n=0;

  /*************found**************/

  *r=t;

  while ( *s )

  {

  p = s;

      while ( *r )

  {

        if ( *r == *p )

        {

r++;

p++;

}

        else

break;

        if ( *r == '\0' )

n++;

  }

  /*************found**************/

  ____1___;

      s++;

  }

  return  n;

}

void main()

{char a[N],b[N]; int m;

 printf("\nPlease enter string a: ");

gets(a);

 printf("\nPlease enter substring b: ");

gets(b);

 m=fun(a,b);

 printf("\nThe result is :m=%d\n",m);

}

答案:(1) r=t; (2) r=t;

三、程序设计题

编写函数fun,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。

例如,若字符串数组中的M个字符串为{“AAAA”,”BBBBBBB”,”CC”}则合并后字符串内容应该是”AAAABBBBBBBCC”。

#include <stdio.h>

#include <conio.h>

#define M 3

#define N 20

void fun(char a[M][N],char *b)

{

  

}

void main()

{

  FILE *wf;

  char w[M][N]={"AAAA", "BBBBBBB", "CC"},i;

  char a[100]={ " ##############################"};

  printf("The string:\n ");

  for(i=0;i<M;i++)

     puts(w[i]);

  printf("\n ");

  fun(w,a);

  printf("The A string:\n ");

  printf("%s ",a);

  printf("\n\n ");

/******************************/

  wf=fopen("out.dat","w");

  fprintf(wf,"%s",a);

  fclose(wf);

/*****************************/

}

答案:

int i,j,k=0;

for(i=0;i<M;i++)        /*将字符串数组中的M个字符串,按顺序存入一个新的字符串*/

for(j=0;a[i][j]!='\0';j++)

b[k++]=a[i][j];

b[k]='\0';             /*在字符串最后加上结束标志符*/

举报

相关推荐

0 条评论