zoukankan      html  css  js  c++  java
  • 2019春第十二周作业

    作业:

    这个作业属于那个课程 C语言程序设计II
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3234
    我在这个课程的目标是 (1)能够了解二级指针的概念,以及指针数组的应用;(2)了解指针与函数的关系,掌握指针作为函数返回值;
    这个作业在那个具体方面帮助我实现目标 二级指针可以帮我实现了指向字符串中的任意一个字母
    参考文献 C语言程序设计II

    6-1 计算最长的字符串长度 (15 分)

    本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。
    函数接口定义:

    int max_len( char *s[], int n );
    

    其中n个字符串存储在s[]中,函数max_len应返回其中最长字符串的长度。
    裁判测试程序样例:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define MAXN 10
    #define MAXS 20
    
    int max_len( char *s[], int n );
    
    int main()
    {
        int i, n;
        char *string[MAXN] = {NULL};
    
        scanf("%d", &n);
        for(i = 0; i < n; i++) {
            string[i] = (char *)malloc(sizeof(char)*MAXS);
            scanf("%s", string[i]);
        }
        printf("%d
    ", max_len(string, n));
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    4
    blue
    yellow
    red
    green
    

    输出样例:

    6
    

    1)实验代码

    int max_len(char*s[],int n)
    
    {
        int i,max=0;                  /*定义变量*/
        for(i=0;i<n;i++){
            int len=strlen(s[i]);
            if(len>max){            /*比较大小*/         
                max=len;            /*交换值*/
            }
        }
        
        return max;               /*返回值*/
    }
    

    2)设计思路

    3)本题调试中遇到的问题及解决办法

      本题没啥问题。
    

    4)运行结果图


    6-2 统计专业人数 (15 分)

    本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数。链表结点定义如下:

    struct ListNode {
        char code[8];
        struct ListNode *next;
    };
    

    这里学生的学号共7位数字,其中第2、3位是专业编号。计算机专业的编号为02。
    函数接口定义:

    int countcs( struct ListNode *head );
    

    其中head是用户传入的学生学号链表的头指针;函数countcs统计并返回head链表中专业为计算机的学生人数。
    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct ListNode {
        char code[8];
        struct ListNode *next;
    };
    
    struct ListNode *createlist(); /*裁判实现,细节不表*/
    int countcs( struct ListNode *head );
    
    int main()
    {
        struct ListNode  *head;
    
        head = createlist();
        printf("%d
    ", countcs(head));
    	
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    1021202
    2022310
    8102134
    1030912
    3110203
    4021205
    #
    

    输出样例:

    3
    

    1)实验代码

    int countcs(struct ListNode*head)
    {
        int num=0;                                       /*定义变量*/
        struct ListNode*p=head;
        while (p!=NULL){
            if(p->code[1]=='0'&&p->code[2]=='2'){        /*判断专业为计算机的学生*/
                num++;                  /*满足条件则mun++*/
            }
            p=p->next;
        }
        
        return num;    /*返回值*/
    }
    

    2)设计思路

    3)本题调试中遇到的问题及解决办法

           本题的段错误是由于先执行后条件,所以可能会因为漏了第一个学生学号的判断。
    

    4)运行结果图


    6-3 删除单链表偶数节点 (20 分)

    本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:

    struct ListNode {
        int data;
        struct ListNode *next;
    };
    

    函数接口定义:

    struct ListNode *createlist();
    struct ListNode *deleteeven( struct ListNode *head );
    

    函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。
    函数deleteeven将单链表head中偶数值的结点删除,返回结果链表的头指针。
    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    struct ListNode {
        int data;
        struct ListNode *next;
    };
    
    struct ListNode *createlist();
    struct ListNode *deleteeven( struct ListNode *head );
    void printlist( struct ListNode *head )
    {
         struct ListNode *p = head;
         while (p) {
               printf("%d ", p->data);
               p = p->next;
         }
         printf("
    ");
    }
    
    int main()
    {
        struct ListNode *head;
    
        head = createlist();
        head = deleteeven(head);
        printlist(head);
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    1 2 2 3 4 5 6 7 -1
    

    输出样例:

    1 3 5 7 
    

    1)实验代码

    struct ListNode *createlist()    /*建立新链表*/
    {
        struct ListNode *head,*p;
        head=(struct ListNode *)malloc(sizeof(struct ListNode));   /*指针申请内存单元*/    
        p=head;
        head->next=NULL;
        
        int n;
        while (scanf("%d",&n)!=EOF&&n!=-1){        /*输入整数并判断值是否为-1*/
            p->next=(struct ListNode *)malloc(sizeof(struct ListNode));        /*申请内存*/
            p=p->next;
            p->data=n;
            p->next=NULL;
        }
        head=head->next;
    
        return (head);         /*返回*/
    }
    
    struct ListNode*deleteeven(struct ListNode*head)
    {
        struct ListNode *p,*q;
        if(head==NULL){      /*链表空*/
            return NULL;      
            }
        p=head;
        q=p->next;                /*从表头的下一个结点搜索所有符合删除要求的结点*/
        while(q!=NULL){
            if(q->data%2==0){   /*符合q所指结点符合删除要求*/
                p->next=q->next;
                free(q);
                q=p->next;
            }
            else{
                p=p->next;    /*p后移一个结点*/
                q=p->next;   /*q指向p的后一个结点*/
            }
        }
        
        if(head->data%2==0){
            head=head->next;
        }
        
        return (head);    /*返回*/
    }
    

    2)设计思路


    3)本题调试中遇到的问题及解决办法

          本题主要是参照书上写的,但由于对链表有写不明白,所以在编写函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针出现了一些错误,是由于当n不为-1时并未申请内存。
    

    4)运行结果图


    三、预习题

    1.所在小组想要开发的项目的名称和目标;

    项目:
    名称:小游戏:俄罗斯方块;
    目标:实现按左右下键进行方块的移动、按上键变形、按空格键暂停、按Esc键游戏结束;当方块的累计高度超过游戏空间高度时结束游戏。
    

    2.项目主体功能的描述;

    int mian()
    {
       startup();   //初始化
       beforegame();   //游戏开始前的画面
       GreateRandonSqare;  //产生随机方块
       CopySqareToBack;    //将方块贴入背景
       while(1)
       {
          double start = (double)clock()/CLOCKS-PER-SES;  //定时函数
          show();  //显示函数 
          UpdateWithInput();  //与用户有关的输入 
          UpdateWithoutInput();  //与用户无关的输入 
          if(Score<10)
          {
             if((double)clock()/CLOCKS-PER-SEC - start<1.0/3)
             Sleep((int)((1.0/3 - (double)clock()/CLOCKS-PER-SEC + start) *1000));
          }
          else if(Score>=10)
          {
             if((double)clock()/CLOCKS-PER-SEC - start<1.0/5)
             Sleep((int)((1.0/5 - (double)clock()/CLOCKS-PER-SEC + start) *1000));
          }
       }
       getch();
       closegraph();
       return 0;
    }
    
    //函数的声明
    void gotoxy(int x,iny y);//清屏 
    void startup();//初始化 
    void show();//显示函数,清全屏 
    voud UpdateWithoutInput(); //与用户无关的输入 
    void UpdateWithInput(); //与用户有关的输入 
    void GreateRandonSqare();//随机显示图形 
    void CopySqareToBack();//把图形写入背景数组 
    void SqareDown();//下降 
    void SqareLeft();//左移 
    void SqareRight();//右移 
    void OnChangeSqare();//变形 
    void ChangeSqare();//除长条和正方形外的变形 
    void ChangeLineSqare();//长条变形 
    int CanSqareChangeShape();//解决变形bug 
    int CanLineSqareChange();//解决长条变形bug 
    int gameover();//判断游戏是否失败 
    int CanSqareDown();//若返回继续下降,返回则代表到底,不下降 
    int CanSqareDown2();//若返回继续下降,返回则代表到底,不下降 ,与方块相遇 
    int CanSqareLeft();//若返回继续左移,返回则代表到最左边,不在左移 
    int CanSqareLeft2();//若返回继续左移,返回则代表到最左边,不在左移,与方块相遇 
    int CanSqareRight();//若返回继续左移,返回则代表到最右边,不在右移 
    int CanSqareRight2();//若返回继续左移,返回则代表到最右边,不在右移,与方块相遇 
    void PaintSqare();//画方块 
    void Change1TO2();//到底之后数组由1变2 
    void ShowSqare2();//2的时候也画方块到背景 
    void DestroyOneLineSqare();//消行 
    

    3.现阶段已做的准备工作;

    正查阅资料,看游戏程序设计书
    

    4.小组成员名单和进度安排。(课程设计阶段:13-17周)
    小组成员名单:

    20188748 黄春艳
    2088759 张文颐
    20187488 谢康宁

    进度安排:

    | | | |
    |---|----|----|----|
    |日期|安排|遇到的问题|解决方法|


    四、学习感悟

    本次老师讲课的内容主要是由概念扩展到是如何实现的,听懂了它们的主要区别,还有本次作业第一第二题感觉还好,就是第三题是使用单向链表写的,所以有点懵,有些还不懂如何使用,第三题主要是参照书上例题来理解。
    

    五、结对编程感受

    讨论第三题的时候我俩都不知道如何下手,从书中看了一下例题与概念,我们主要是交流了慨念性的问题。
    

    六、学习进度表

    周/日期 这周所花时间 代码行 学到的知识简介 目前比较迷惑的问题
    3/4-3/9 4个半小时 37 1、建立文件,读取文件数据并储存;2、用户信息的加密和校验;3、FILE文件类型的运用 1、不会用加密算法以及FILE文件类型的运用
    3/10-3/17 10个小时 90 1、二维数组的运用 1、有关数组的一些运用还不怎么明白
    3/18-3/22 10个小时 91 1、冒泡排序法和选择排序法;2、二分法查找;3、二维数据:定义、引用、初始化,二维数组与矩阵。 1、冒泡排序法和选择排序法有点混淆。
    3/25-3/29 12小时 84 1、字符串与字符的区别。 指针的运算不知道怎么算,弄不清
    4/1-4/5 15小时 79 1、什么是指针;2、指针的基本运算;3指针变量的初始化。 不太懂得如何运用指针数组
    4/8-4/12 10小时 82 1、指针、数组和地址之间的关系;2、数组名可以作为函数的参数;3、指针和数组可以实现相同的操作 1、组名作为函数参数的用法。
    4/15-4/19 8小时 123 1、常用字符串函数以及使用指针操作字符串的方法;2、动态内存分配。 1、定义结构变量的运用不太清楚。
    4/22-4/26 6小时 76 1、结构的概念与定义以及嵌套定义;2、结构变量的定义和初始化。 1、无类型名该如何使用尚存疑问
    4/29-5/3 1个半小时 0 1、结构指针;2、结构数组。 1、结构指针还不太懂。
    5/6-5/10 10小时 20 1、能够使用递归函数进行编程;2、掌握宏的基本用法;3、掌握编译预处理的概念。 编程题2、3、4不会做
    5/13-5/17 10小时 71 1、了解二级指针的概念,以及指针数组的应用;2、了解指针与函数的关系,掌握指针作为函数返回值。 1、单向链表有些不懂。

    六、表格和折线图

    时间 代码行数 博客字数
    第一周 0 0
    第二周 37 400
    第三周 90 694
    第四周 91 1613
    第五周 84 1410
    第六周 79 2608
    第七周 109 2550
    第八周 123 2843
    第九周 76 2935
    第十周 0 2367
    第十一周 20 4692
    第十二周71 2983
  • 相关阅读:
    Spring Security和Swagger2集成报错
    [转] SpringBoot返回json 数据以及数据封装
    ElasticSearch问题总结
    Linux基础命令
    Jenkins总结3-shell脚本
    Jenkins总结2-部署maven项目
    SpringCloud启动异常Stopping service [Tomcat]
    索引使用场景
    flask app.config
    python验证企业统一信用码
  • 原文地址:https://www.cnblogs.com/da123hcy/p/10876679.html
Copyright © 2011-2022 走看看