第三次作业

作业要求二

第一次PTA

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

1.设计思路

(1).描述算法:
     第一步:阅读题目,明确题意要求。
     第二步:找到对应函数中的实参和形参并写出函数接口。
     第三步:用switch语句对n进行判断,若判断为相应的数字,则返回符合这个条件需要执行的语句。

2.实验代码

char *getmonth( int n )
{
  switch(n)
  {
    case 1:return "January";break;
    case 2:return "February";break;
    case 3:return "March";break;
    case 4:return "April";break;
    case 5:return "May";break;
    case 6:return "June";break;
    case 7:return "July";break;
    case 8:return "August";break;
    case 9:return "September";break;
    case 10:return "October";break;
    case 11:return "November";break;
    case 12:return "December";break;
    default : return NULL;
  }
}

3.本题调试过程碰到的问题和解决办法

错误信息:

错误原因:

改正方法:格式上的错误,return后应该用"".

4.其他方法:

 实验代码:
 char *getmonth( int n )
{
    int i;
    char *month[12]={"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.设计思路

(1).描述算法:
      第一步:阅读题目,明确题意要求。
      第二步:找到对应函数中的实参和形参并写出函数接口。
      第三步:定义一个二维数组存入对应的星期。
      第四步:在for循环里,用strcmp()查找。若等于0返回i;若不等返回-1;
(2).流程图:

2.实验代码:

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

3.本题调试过程碰到的问题和解决办法

错误信息:

错误原因:没有审清题意,题中说“函数getindex应返回字符串s序号”,
改正方法:所以当strcmp(s,week[i])==0时,应返回i。

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

1.设计思路

(1).描述算法:
      第一步:阅读题目,明确题意要求。
      第二步:找到对应函数中的实参和形参并写出函数接口。
      第三步:在for循环中,用函数strlen()得出字符串的长度,再用if做判断找出最长的字符串。

2.实验代码:

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

3.本题调试过程碰到的问题和解决办法

错误信息:

错误原因:longest没有初始化。
改正方法:定义成longest=0。

对malloc函数的学习。

1.概念

    malloc向系统申请分配指定size个字节的内存空间。返回类型的void *类型。

2.功能

    分配长度为num_bytes字节的内存块。

3.返回值

    如果分配成功指向被分配的内存指针,否则返回空指针NULL,当内存不使用时,应使用free()函数将内存块释放。

4.说明

     malloc返回为void型的指针,因此要进行强制性的类型转化。

5.工作机制

malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲 链表。调用malloc函数时,它沿 连接表寻找一个大到足以满足用户请求所需     要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下 的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。如果无法获得符合要求的内存块,malloc函数会返回NULL 指针,因此在调用malloc动态申请内存块时,一定要进行返回值 的判断。

5.总结

通过在网上的学习,我把我认为重要的一部分和我学到的东西摘录了下来,上述的用法也加了我自己的理解。(https://baike.sogou.com/v7611912.htm?fromTitle=malloc函数)

第二次PTA

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

实验代码

struct ListNode *readlist()
{
  struct ListNode *head=NULL,*p=NULL,*tail=NULL;
  int data;
  scanf("%d",&data);
  while(data!=-1)
  {
    p=(struct ListNode *)malloc(sizeof(struct ListNode));
    p->data=data;
    p->next=NULL;
    if(head==NULL)
    {
      head=p;
    }else
    {
      tail->next=p;
    }
    tail=p;
    scanf("%d",&data);
  }
  return head;
}
struct ListNode *getodd( struct ListNode **L )
{ 
   struct ListNode *p=*L,*a,*b,*head1,*head2,*p1=NULL,*p2=NULL;
    head1=(struct ListNode*)malloc(sizeof(struct ListNode));
    head2=(struct ListNode*)malloc(sizeof(struct ListNode));
    head1->next=NULL;
    head2->next=NULL;
    a=head1;
    b=head2;
    for(;p!=NULL;p=p->next)
    {
        if(p->data%2!=0)
        {
          if(p1==NULL)
          p1=p;
          else
            a->next=p;
            a=p;
        }
        else
        {
          if(p2==NULL)
          p2=p;
          else
            b->next=p;
            b=p;
        }
    }
    a->next=NULL;
    b->next=NULL;
    *L=p2;
    return p1;
} 

这个题是<袁中>(http://www.cnblogs.com/2719610441qqcom/p/8762037.html)教给我的,现在明白了,虽然还不能完全靠自己打出来,但能够看懂了。

作业要求三

1.总结

课堂总结

  1. 这两周主要学了二级指针和链表的创建,删除结点,插入结点以及输出(打印)链表。
    2.但这两周的学习任务要比前几周的难度大很多,做题还是比较单一的用以前学到的一级指针和数组,不是能特别熟练的运用二级指针,但做题还是会尽量尝试。
    3.对链表的学习,只有创建链表的部分能够完全理解,其他的地方还不是特别能够弄清楚,课下还会继续学习。

课下总结

1.第一点就是自学了malloc函数的部分,能够理解并运用malloc函数(即便不是特别熟练,但也能看懂并自己慢慢写出来)。
2.第二就是杭电上的刷题,刚开始大部分的题都是上学期我们学过的,能完全靠自己写出来并找到错误然后改正。对之前学到的基础的c语言中的循环部分更熟练。对排序,查找这些算法也更熟练。

2.git托管平台

https://github.com/Vinecy666/C-/tree/master

4.统计

posted @ 2018-04-15 19:47  申怡苗  阅读(245)  评论(2编辑  收藏  举报