第三次作业

题目6-1 输出月份英文名

设计思路

1、算法

第一步:定义char,将12个月份存入数组中
第二步:if和else循环语句

流程图

代码

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

错误

题目6-2 查找星期

设计思路

1、算法

第一步:定义char,将7个星期存入数组中
第二步:if循环语句

代码

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

错误

题目6-3 计算最长的字符串长度

设计思路

1、算法

第一步:定义数组指针和整型变量
第二步:for循环判断字符串长度

代码

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

错误

题目6-4 指定位置输出字符串

设计思路

1、算法

第一步:定义一个char。
第二步:运用for循环与if判断。

代码

char *match( char *s, char ch1, char ch2 )
{  
    int i=0,j=0,k=0,len=0;  
    char *p={NULL};  
    len = strlen(s);  
    for(i=0;i<len;i++){  
        if(s[i]==ch1){  
            p=&s[i];  
            for(j=i;j<len;j++){  
                if(s[j]!=ch2){  
                    printf("%c", s[j]);  
                }  
                if(s[j]==ch2){  
                    printf("%c\n", s[j]);  
                    return p;  
                }     
            }  
            printf("\n");  
            return p;  
        }  
    }  
    printf("\n");  
    return p;  
}  

错误

题目 6-1 奇数值结点链表

设计思路

1、算法

第一步:定义结构体listNode。
第二步:将输入的值存入单链表。
第三步:判断是否为奇数并分离。

代码

struct ListNode *readlist()
{
    int data;
    struct ListNode *head=NULL;
    struct ListNode *p;
    while(scanf("%d",&data)&&data!=-1)
    {
        struct ListNode *q=(struct ListNode*)malloc(sizeof(struct ListNode));
        if(q!=NULL)
        {
            q->data=data;
            q->next=NULL;
        }
        else exit(1);
        if(head!=NULL)
        {
             p->next=q;
        }
        else head=q;
        p=q;
    }
    return head;
}
struct ListNode *getodd( struct ListNode **L )
{
    struct ListNode *head0=NULL,*head1=NULL,*p0,*p1;
    while((*L)!=NULL)
    {
        int data=(*L)->data;
        struct ListNode *q=(struct ListNode*)malloc(sizeof(struct ListNode));
        if(data%2)
        {
            if(q!=NULL)
            {
                q->data=data;
                q->next=NULL;
            }
            else exit(1);
            if(head1!=NULL)
            {
                p1->next=q;
            }
            else head1=q;
            p1=q;
        }
        else
        {
            if(q!=NULL)
            {
                q->data=data;
                q->next=NULL;
            }
            else exit(1);
            if(head0!=NULL)
            {
             p0->next=q;
            }
            else head0=q;
            p0=q;
        }
        *L=(*L)->next;
    }
    *L=head0;
    return head1;
}

错误

题目 6-2 学生成绩链表处理

设计思路

1、算法

第一步:用createlist新建信息,用deletelist删除信息,
第二步:中间用while和if判断。

代码

struct stud_node *createlist()
{
    struct stud_node *head, *tail, *q;
    head = tail = NULL;
    int num;
    scanf ("%d", &num);
    while (num != 0)
    {
        q = (struct stud_node *)malloc (sizeof (struct stud_node));
        scanf ("%s %d", q->name, &q->score);
        q->num = num;
        q->next = NULL;
        if (head == NULL)
            head = q;
        else
            tail->next = q;
        tail = q;
        scanf ("%d", &num);
    }
    return head;
}
struct stud_node *deletelist( struct stud_node *head, int min_score )
{
    struct stud_node *ptr1, *ptr2;
    while (head != NULL && head->score < min_score)
    {
        ptr2 = head;
        head = head->next;
        free(ptr2);
    }
    if (head == NULL)
        return NULL;
    ptr1 = head;
    ptr2 = head->next;
    while (ptr2 != NULL)
    {
        if (ptr2->score < min_score) {
            ptr1->next = ptr2->next;
            free(ptr2);
        }
        else
            ptr1 = ptr2;
        ptr2 = ptr1->next;
    }
    return head;
} 

错误

题目 6-3 链表拼接

设计思路

1、算法

代码

struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2)
{
    int num = 0;
    int temp[100];
    struct ListNode  *p = list1;
    while(p != NULL)
    {
        temp[num] = p->data;
        num++;
        p = p->next;
    }
    p = list2;
    while(p != NULL)
    {
        temp[num] = p->data;
        num++;
        p = p->next;
    }
    int i,j;
    for(i = 0; i < num; i++)
        for(j = i + 1; j < num; j++)
        {
            if(temp[i] > temp[j])
            {
                int t;
                t = temp[i];
                temp[i] = temp[j];
                temp[j] = t;
            }
        }
      struct ListNode  *newlist = NULL;
      struct ListNode  *endlist = NULL;
      struct ListNode  *q;
      for(i = 0; i < num; i++)
      {
          q = (struct ListNode  *)malloc(sizeof(struct ListNode));
          q->data = temp[i];
          if(newlist == NULL)
          {
              newlist = q;
              newlist->next = NULL;
          }
            if(endlist != NULL)
         {
            endlist->next = q;
         }
         endlist = q;
         endlist->next = NULL;
      }
      return newlist;
}

错误

总结:链表太难学了,遇见题不会写,可能是结构体没学好,还要再学习一段时间才行。
点评:
宋晨继
王文博
王帅

posted @ 2018-04-22 22:01  秦保岩  阅读(184)  评论(1编辑  收藏  举报