• 2019春第十二周作业


       
    这个作业属于哪个课程 C语言程序设计2
    这个作业要求在哪里 2019年春季学期第十二周作业
    我在这个课程的目标是 我希望能够通过学习C语言的知识,能够掌握二级指针的概念,以及指针数组的应用;了解指针与函数的关系,掌握指针作为函数返回值;掌握单向链表的概念和操作包括建立、增加、删除、修改、遍历。
    这个作业在哪个具体方面帮助我实现目标 这个作业让我通过掌握二级指针的概念,以及指针数组的应用,了解指针与函数的关系,掌握指针作为函数返回值,掌握单向链表的概念和操作包括建立、增加、删除、修改、遍历来解决题目。
    参考文献 《C语言程序设计2》

    基础作业

    题目

    计算最长的字符串长度
    本题要求实现一个函数,用于计算有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,l,max;
        max=0;
        for(i=1;i<n;i++)
        {
            if(strlen(s[i])>strlen(s[max]))
                   max=i;
        }
        l=strlen(s[max]);
        return l;
    }
    

    2)设计思路

    3)本题调试过程中碰到的问题及其解决办法

    无。

    4)运行截图

    题目

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

    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 )
    {
        struct ListNode *p;
        int sum;
        sum=0;
    
        for(p=head;p!=NULL;p=p->next)
        {
            if(p->code[1]=='0'&&p->code[2]=='2')
             sum++;
        }
        return sum;         
    }
    

    2)设计思路

    3)本题调试过程中碰到的问题及其解决办法

    1.答案错误,学号是字符元素,在if语句判断时将学号写成了数字元素;

    解决办法:将if语句等于0和等于2中的0和2都用单引号引起来。
    2.答案错误,for循环之前有个if语句判断phead的情况,也就是将phead的情况单独处理了,但是for语句的初始条件就是p=head,重复了;

    解决办法:将for循环之前的if语句判断情况删去。

    4)运行截图

    题目

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

    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()
    {
        int num,size=sizeof(struct ListNode);
        struct ListNode *head,*tail,*p;
        head=tail=NULL;
    
        scanf("%d",&num);
        while(num!=-1)
        {
            p=(struct ListNode*)malloc(size);
    
            p->data=num;
            p->next=NULL;
            if(head==NULL)
               head=p;
            else
               tail->next=p;
            tail=p;
            scanf("%d",&num);      
        }
        return head;
    }
    
    struct ListNode *deleteeven( struct ListNode *head )
    {
        struct ListNode *p1,*p2;
    
        while(head!=NULL&&head->data%2==0)
        {
            p2=head;
            head=head->next;
            free(p2);
        }
    
        if(head==NULL)
          return NULL;
    
        p1=head;
        p2=head->next;
        while(p2!=NULL)
        {
            if(p2->data%2==0)
            {
                p1->next=p2->next;
                free(p2);
            }
            else
              p1=p2;
            p2=p1->next; 
        }
        return head;
    }
    

    2)设计思路

    3)本题调试过程中碰到的问题及其解决办法

    1.编译错误,链表建立函数中else的执行语句tail->next=p打成了tail->=next,手误;

    解决办法:改成正确的。

    4)运行截图

    预习作业

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

    简易五子棋小游戏(暂定)

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

    暂无。

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

    回顾迄今为止所学的知识,了解游戏开发的步骤。

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

    成员:曾丽梅,李东辉,随机一有缘人。
    进度安排:暂无。

    结对编程

    本周除挑战题外的其它题目不难,但在和搭档讨论时发现搭档和我解题的思路不一样,如果要我按照搭档的思路来写代码的话,我又很难写出来。结对编程的优点是可以了解一个题目的另一种思路,进而使自己从另一个思考解决问题的方法,缺点是我们对一个题目都没有思路,或者能力有限时没有办法。

    学习感悟

    本周学习了二级指针的概念,以及指针数组的应用;了解了指针与函数的关系,掌握了指针作为函数返回值及单向链表的概念和操作(建立、增加、删除、修改、遍历)。这是第一次接触链表这个概念,上周的预习只是大概知道了是用来干嘛的,这周的难点除去挑战题就是关于链表的建立了,这次写作业一开始也是照着书上的写的,并不懂它的真正过程,后来上完课才具体的知道了链表的操作方式,现在真正感觉到对这门课的知识越学越深了,也越来越难了。

    学习进度

    时间进度条

    日期 这周所花时间 代码行 学到的知识点 问题
    3.15-3.22 10个小时 130 选择排序,冒泡排序,二维数组 输出完一行数后会自动换行吗
    3.22-3.29 13个小时 200 字符型数组的简单使用,字符数组与字符串的区别,二维字符数组的输入及简单判断,对指针的初步了解 指针怎样在自定义函数中返回多个值
    3.29-4.05 8个小时 100 变量、内存单元和地址之间的关系;如何定义指针变量,怎样使用指针变量,怎样进行指针变量的初始化;指针变量的基本运算;理解指针作为函数参数的作用;使用指针实现函数调用返回多个值 在自定义函数中将数值赋给指针所指向的变量,要在主函数中输出该值,输出参数是指针,为什么不可以。
    4.05-4.12 12个小时 150 数组名作为函数参数的用法,指针、数组和地址之间的关系,指针和数组可以实现相同的操作,strcpy函数的深层理解,for循环与while循环在内存层面的区别 对指针的运用不熟练
    4.12-4.19 8个小时 120行 常用字符串函数,如何使用指针操作字符串,动态内存分配。 两个字符串的交换为什么不能通过赋值实现
    4.19-4.26 10个小时 120行 使用结构变量与结构数组进行编程,利用结构指针进行操作,并应用于函数传递 有些题目不用结构也能解决,在二者都能解决的情况下,使用结构解决问题有什么优势
    5.5-5.10 25个小时 200行 对相对复杂的问题,合理定义程序的多函数结构;使用递归函数进行编程;宏的基本用法;编译预处理的概念 对递归函数的实现步骤总是很模糊
    5.10-5.17 8个小时 100行 二级指针的概念,指针数组的应用;指针与函数的关系,指针作为函数返回值,单向链表的概念和操作(建立、增加、删除、修改、遍历) 在链表的使用中,p->next和p->code[1](code是结构的成员变量)表示的是同类的值吗
    时间 累计代码行数 累计博客字数
    第一周 80 0
    第二周 150 400
    第三周 250 1600
    第四周 380 3200
    第五周 580 5110
    第六周 680 8110
    第七周 830 10910
    第八周 950 13510
    第九周 1070 17210
    第十一周 1270 20745
    第十二周 1370 23232

  • 相关阅读:
    异常[PersistenceUnit: default] Unable to build Hibernate SessionFactory
    关于本地模块安装入maven仓库出现的异常
    dwd面试记录与最近面试的一些感想。
    java编程思想第九章接口
    java编程思想第八章多态
    微服务调用本地测试与外部测试的差异
    Java编程思想第七章复用类
    Gson的学习与使用
    为什么会有这个分类?
    Spark 2.1.1 源码编译
  • 原文地址:https://www.cnblogs.com/LeeMayZ/p/10877838.html
Copyright © 2020-2023  润新知