• 2018第三次作业。


    未来两周学习内容

    • 指针数组
    • 指向指针的指针
      • 用指针数组处理多个字符串
    • 命令行参数
    • 指针作为函数的返回值
    • 链表
      • 链表的概念
      • 链表的常用操作

    作业要求一 (20分)

    完成下列编程题目,每次上完课都会增加2-3道题目,并将编程过程记录在博客里,一次PTA作业任选一道题目给出设计思路、流程图、源代码和错误记录,其他题目可只给出设计思路、源代码和错误记录。另外将每次PTA作业的提交列表贴在博客里,每次5分。

    1)C高级第三次PTA作业(1)

    6-1 输出月份英文名

    实验代码

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

    设计思路

    第一步:将十二个月的名称分别赋值给一维数组指针,定义用于返回的数据类型。
    第二步:遍历数组,满足若n在(1-12)范围则将month第n-1行的首元素的地址赋给一开始定义的数据。
    第三步:返回变量的地址值。
     
    流程图

    6-2 查找星期

    实验代码

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

    设计思路

    第一步:将一个星期每天的英文分别赋值给一维数组指针,定义一个整型变量,赋初值为0。
    第二步:遍历一维数组,用strmcp函数比较数组中每行元素与输入的字符串是否相同,若相同,则令此时的行数等于一开始定义的整型变量,且跳出循环。
    第三步:返回整型变量值。

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

    实验代码

    int max_len( char *s[], int n )
    {
      int a[n],i,k,max = 0;
      for(i = 0;i < n;i ++)
      {
          char *b = s[i];
        for(k = 0;;k ++)
        {
          if(b[k] == '')
          {
          a[i] = k;
          break;
          }
        }
        if(a[max] < a[i])
        max = i;
      }
      return a[max];
    }

    设计思路

    第一步:s数组,计算出每行元素的长度。
    第二步:在for循环中进行比较,定义int型max,赋初值为0,当行元素的长度大于max,则将长度的值赋给max。
    第三步:返回max的值。

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

    实验代码

    char *match( char *s, char ch1, char ch2 )
    {
        int i = 0,k;
        for(;s[i] != 0;i ++)
        {
            if(s[i] == ch1)
            {
                for(k = i;s[k] != 0;k ++)
                {
                    printf("%c",s[k]);
                    if(s[k] == ch2)
                    break;
                }
                printf("
    ");
                return s+i;
            }
        }
      printf("
    ");
        *s = '';
      return s;
    } 

    设计思路

    第一步:先遍历s字符数组,找到与ch1相同时s的下标,并将下标值赋给一个整型变量,定义为j。
    第二步:在确定下标后,定义一个指针字符s,将&s[i]赋给s,后跳出循环。
    第三步:从上面的j开始,循环字符数组s,在循环中分情况,若s[i] != ch2,则输出s[i],反之则输出s[i]加换行,且返回temp。
    第四步:循环结束后,输出换行及返回s。

    2)一道编程题:

    有一个axb的数组,该数组里面顺序存放了从1到a*b的数字。其中a是你大学号的前三位数字,b是你大学号的后四位数字,比如你的学号是2017023936,那么数组大小是201 x 3936,数组中顺序存放了1到791136(201和3936的积)的整数. 要求用筛选法,把该数组里的质数找出并打印出来,打印格式为5个质数一行,数字间用空格隔开。

    筛选法具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。

    3)C高级第三次PTA作业(2)

    6-1 奇数值结点链表

    实验代码

    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;
    }

    设计思路

    第一步:分别创建2个新的链表。
    第二步:通过识别所给链表各数值的奇偶性,将其给至不同的链表。
    第三步:返回2个链表的头结点。

    6-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;
    }

    设计思路

    第一步:建立链表,通过循环进行赋值。若序号为0时,使链表最后一个节点指向空。
    第二步:输入条件值,在链表中,对每个低于条件值的节点进行删除。
    第三步:返回删除操作后的链表头结点。

    6-3 链表拼接

    实验代码

    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;
    }

    设计思路

    第一步:将链表1,2各值分别赋值给一数组。
    第二步:通过对数组排序得到的有序数组,将数组各元素赋值回一个新链表。
    第三步:返回链表头结点。

    要求三、学习总结和进度(15分)

    1、总结两周里所学的知识点,回答下列问题?

         (1)如何理解指针数组,它与指针、数组有何关系?为何可以用二级指针对指针数组进行操作?

         (2)将C高级第三次PTA作业(1)任何一个题目改为使用二级指针对指针数组进行操作。

         (3)用指针数组处理多个字符串有何优势?可以直接输入多个字符串给未初始化的指针数组吗?为什么?

    2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。

    GIT: https://git.coding.net/ShiWithZhou/HI.git

    3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业,无点评作业(你的作业未被3人点评)/或者没有回复同学或老师的点评都倒扣该题分数。

    董雅洁 http://www.cnblogs.com/exo123/p/8798720.html

    莯菸 http://www.cnblogs.com/sun031915/p/8836088.html

    揆空 http://www.cnblogs.com/zxy980612/p/8858885.html

    4、请用表格和折线图呈现你本周(4/9 8:00~4/23 8:00)的代码行数和所用时间、博客字数和所用时间

  • 相关阅读:
    System.Web.Mvc.IController.cs
    keepalived
    java实现数字的值返回
    java实现数字的值返回
    java实现数字的值返回
    java实现数字的值返回
    java实现数字的值返回
    java实现南北朝时
    java实现南北朝时
    java实现南北朝时
  • 原文地址:https://www.cnblogs.com/shilcz/p/8906128.html
Copyright © 2020-2023  润新知