第3次作业

Posted 王鑫宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第3次作业相关的知识,希望对你有一定的参考价值。

一.

  6-1 1.

     (1)第一步:定义一个包含十二月的数组,定义一个空数组。

           第二布:用条件语句和空数组将每月的英文按顺序输出。

      2.     

char *getmonth( int n )
{
    char *a[12]={"January","February","March","April","May","June","July","August","September","October","November","December" };
    char *month=NULL;
    if(n>=1&&n<=12)
    month=a[n-1];
    return month;
}

    3.错误信息

      错误原因:最终没有返回NULL。

      改正方法:读题找到了问题。

  6-2 1.

     (1)第一步:定义一个包含星期的数组。

       第二步:运用for循环和if比较s和数组中每一项的大小,如果s小于数组则返回i。

     (2)流程图

    2.

int getindex( char *s )
{
    int i=0;
    char *a[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
   for(i=0;i<7;i++)
  {
    if(strcmp(s,a[i])==0)
    {
        return i;
       }
    }
    return -1;
}

    3.错误信息1

      错误原因:错把for也打成了if,导致程序一直错误。

         改正方法:看了几遍下边的错误提示最终发现错误原因并改正。

     错误信息2

      错误原因:if后错误的带上了; 

      改正方法:编译一次才发现自己的疏忽。

  6-3 1.

    (1)第一步:定义变量并初始,运用for循环将a和数组s中的每个数组长度比较,如果小于则代替这个数组,直到选出最大值。

    2.

int max_len( char *s[], int n )
{
    int i,a=0;
    for(i=0;i<n;i++)
    {
        if(a<strlen(s[i]))
        {
            a=strlen(s[i]);
        }
        
    }
    return a;
}

    3.错误信息

      错误原因:编译时if语句最后少放了一个括号

      改正方法:自己编译并看提示找出问题改正。

  6-4 1.

    (1)第一步:定义变量并初始化,运用for和if语句。

        第二步:s中数组与ch1如果相等,在运用for循环比较s的另一个数组和ch2的大小,然后输出第一个相等的数到第二个相等的值的数组并返回a。

    (2)

#include<string.h>
char *match(char *s, char ch1, char ch2 )
{  
  
    int i=0,j=0,len=0;  
    char *a;
  
    len = strlen(s);  
  
    for(i=0;i<len;i++)
    {  
        if(s[i]==ch1)
        {  
            a=&s[i];  
            for(j=i;j<len;j++)
            {  
                
                if(s[j]==ch2)
                {  
                    printf("%c\\n", s[j]);  
                    return a;  
                }  
                     else
                       {  
                    printf("%c", s[j]);  
               }     
            }  
            printf("\\n");  
            return a;  
        }  
    }  
    printf("\\n");
   *s=\'\\0\';
    return s;  
}    

    3.错误信息

      错误原因:没有弄懂怎么从的一个相等字母到未知的不相等的数之间的输出。

      改正方法:通过询问同学的经验,明白了选取后边最后的数为终点,并将前边的都输出。

  6-1

 

    1.

    (1)第一步:输入data,data不等于-1则进入while循环。

        第二步:用if判断头文件是否为空,用一个if语句判断当前值是否为单数如果是将p赋给n,如果不是将p赋给m。最后返回相应的值。

    2.

struct ListNode *readlist()
{
  struct ListNode *p,*head,*n;
  head=(struct ListNode*)malloc(sizeof(struct ListNode));
  n=head;
  while(1)
  {
      p=(struct ListNode*)malloc(sizeof(struct ListNode));
      scanf("%d",&p->data);
    if(p->data==(-1))
    break;
    n->next=p;
    n=p;
  }
  n->next=NULL;
  return head->next;
}
struct ListNode *getodd( struct ListNode **L )
{
  struct ListNode *i,*j,*k,*h1,*h2;
  j=h1=(struct ListNode*)malloc(sizeof(struct ListNode));
  h1->next=NULL;
  k=h2=(struct ListNode*)malloc(sizeof(struct ListNode));
  h2->next=NULL; 
  i=*L;
  int n=0;
  for(;i;i=i->next)
  {
    if((i->data)%2==1)
    {
    j->next=i;
    j=i;
    }
    else
    {
    k->next=i;
    k=i;
    }
  }
  j->next=NULL;
  k->next=NULL;
  *L=h2->next;
  return h1->next;
}

    3.错误信息

  6-2 1.

    (1)第一步:输入需要的各个数据。

        第二步:用一个for循环遍历链表数据,用一个if语句判断其是否大于等于最小值如果是存入链表中,最后返回链表的值。

    2.

struct stud_node *createlist()
{
  struct stud_node *p,*head,*n;
  head=(struct stud_node*)malloc(sizeof(struct stud_node));
  n=head;
  while(1)
  {
      p=(struct stud_node*)malloc(sizeof(struct stud_node));
      scanf("%d ",&p->num);
      if(p->num==0)
    break;
    scanf("%s %d",&p->name,&p->score);
    n->next=p;
    n=p;
  }
  n->next=NULL;
  return head->next;
}
struct stud_node *deletelist( struct stud_node *head, int min_score )
{
    struct stud_node *p,*k;
    p=(struct stud_node*)malloc(sizeof(struct stud_node));
    k=p;
    for(;head;head=head->next)
    {
        if((head->score)>=min_score)
        {
            k->next=head;
            k=head;
        }
    }
    k->next=NULL;
    return p->next;
}

    3.错误信息

      错误原因:没有在指针变量前加入取地址符号。

      改正方法:经过同学的帮助下才发现错误并改正。

  6-3 1.

    (1)第一步:用一个while将链表中的数据存入temp中

        第二步:用for语句进行遍历,先将数组的值赋给data,再将其赋值给链表,最后返回链表。

    2.

struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2)
{
    struct ListNode *h,*p,*i,*k;
    h=(struct ListNode*)malloc(sizeof(struct ListNode));
    p=h;
    i=list1;
    k=list2;
    while(i!=NULL&&k!=NULL)
    {
        if(i->data<k->data)
        {
            p->next=i;
            i=i->next;
        }
        else
        { 
            p->next=k;
            k=k->next;
        }
        p=p->next;
    }
    while(i)
    {
        p->next=i;
        i=i->next;
        p=p->next;
    }
    while(k)
    {
        p->next=k;
        k=k->next;
        p=p->next;
    }    
    p->next=NULL;
    return h->next;
}

    3.错误信息

二.

  1.(1)指针数组是指向内存地址的数组,可能比正常数组常用,不过有些难以理解。

   (2)对二级指针数组理解不到位。

   (3)可以节省内存。不可以,指针没法指向正确。

  2.刘富垚:http://www.cnblogs.com/lhyyy/p/8906784.html

     王廷宇:http://www.cnblogs.com/archeralter/p/8909036.html

     于耀淞:http://www.cnblogs.com/jsjyys/p/8900992.html

  3.

以上是关于第3次作业的主要内容,如果未能解决你的问题,请参考以下文章

第02次作业-线性表

第03次作业-栈和队列

第八次团队作业:汇总博客

第02次作业-线性表

第02次作业-线性表

第02次作业-线性表