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

    这次作业属于哪个课程 C语言程序设计ll
    这个作业要求在哪里 https://www.cnblogs.com/pengchen511/p/10564067.html
    我在这个课程的目标是 1)二级指针的概念,以及指针数组的应用;(2)了解指针与函数的关系,掌握指针作为函数返回值;(3)掌握单向链表的概念和操作(建立、增加、删除、修改、遍历)
    这个作业在哪个具体方面帮助我实现目标 二级指针的概念,以及指针数组的应用、了解指针与函数的关系,掌握指针作为函数返回值
    参考文献 https://wenda.so.com/q/1369411635064711?src=170

    基础作业(函数题)

    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 a,i;
    a=0;
    for(i=0;i<n;i++)
    {
     if(a<strlen(s[i])) 
       a=strlen(s[i]); 
    }
    return a;
    }
    

    2.实验设计思路:

    流程图:

    设计思路:
    要先把最下面一个圆盘移到最右边,然后在剩下的圆盘中又去做递归,移出最下面的那个圆盘
    然后自定义hanio算法函数,建立递归求移盘步骤

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

    2.实验设计思路:

    流程图:

    设计思路:

    因为计算机专业的编号为02,所以 if(p->code[1] == '0' && p->code[2] == '2')
    其它要注意while(p != NULL)

    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()
    {
        int x;
        struct ListNode *head,*tail,*p;
        head=(struct ListNode*)malloc(sizeof(struct ListNode));//动态分配结构体ListNode所需的字节数的内存空间
        head->next=NULL;       //把head指向的结构体中的next元素,赋值为空指针
        tail=head;
        while(1)
        {
            p=(struct ListNode*)malloc(sizeof(struct ListNode));
            scanf("%d",&x);
            p->next=NULL;
            if(x==-1)   //当读到−1时表示输入结束
                break;
            p->data=x;
            p->next=NULL;
            tail->next=p;
            tail=p;    //返回指向单链表头结点的指针
        }
        return head;
    }
    struct ListNode *deleteeven( struct ListNode *head )
    {
        struct ListNode *p1,*p2;
        int flag;
        p1=head;
        p2=p1->next;
        while(p1->next) //指针p1所指节点中的成员next的是值,若该值为下一个节点的地址即循环条件为真,若是0或NULL 则循环条件为假.
        {
            flag=0;
            if(p2->data%2==0)    //判断是否被2整除
            {
                p1->next=p2->next;
                p2=p2->next;
                flag=1;
            }
            if(flag==0)
            {
                p1=p1->next;
                p2=p1->next;     //将单链表head中偶数值的结点删除
            }
        }
        return head->next;     //返回结果链表的头指针
    }
    

    2.实验设计思路:

    流程图:

    设计思路:

    先动态分配结构体ListNode所需的字节数的内存空间,然后把head指向的结构体中的next元素,赋值为空指针
    判断当读到−1时表示输入结束,返回指向单链表头结点的指针
    第二个函数先判断是否被2整除,将单链表head中偶数值的结点删除,最后 返回结果链表的头指针

    3.本题遇到的问题及解决办法:

    问题:在用单向链表时,我没有先用动态存储分配,直接输入,导致内存超限。
    解决方法:查询队友,网上查找方法。

    4.运行结果截图:

    预习作业

    从第十三周开始,将进入课程设计阶段,请在本次作业中给出:

    1.所在小组想要开发的项目的名称和目标;
    项目名称:《飞机游戏》
    目标:使用所学编写一个简单小游戏。
    2.项目主体功能的描述;
    还在构思
    3.现阶段已做的准备工作;
    现阶段主要是预习了《C语言课程设计》,以及去网上查找相关资料寻找思路
    4.小组成员名单和进度安排。(课程设计阶段:13-17周)
    刘新洋、胡斯榆、杨灵

    二、学习进度条

    周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的题目
    3/4-3/9 6小时 89 新建文件进行读写 二位数组子数组的最大值的求和
    3/10-3/15 8小时 156 二维数组的运用 二位数组子数组的最大值的求和
    3/16-3/22 10小时 120 用二维数组求最大值和鞍点 冒泡法排序
    3/23-3/29 6小时 56 进一步了解一维数组以及字符串的一些简单用法 求二维数组的最大子数组是矩形的
    3/30-4/5 5小时 65 指针的定义及其运用
    4/6-4/12 6小时 125 更深的理解了指针、数组和地址之间的关系
    4/13-4/19 14小时 116 掌握常用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配 挑战作业
    4/20-4/26 8小时 86 根据实际情况定义结构使用结构变量与结构数组,掌握结构指针的操作,并应用于函数传递 九宫格键盘对应英语单词
    5/5-5/10 8小时 108 使用递归函数进行编程,宏的基本用法以及 预处理的概念 八皇后问题(用递归法)和求迷宫最短通道问题
    5/11-5/17 12小时 160 二级指针以及指针数组的应用、指针与函数的关系,单向链表的概念和操作 八皇后问题(用递归法)和求迷宫最短通道

    三、学习感悟:

    学习了二级指针的概念,以及指针数组的应用;了解了指针与函数的关系,掌握指针作为函数返回值;
    以及掌握单向链表的概念和操作
    我感觉每周学到的东西挺多的,可以充实自己

    四:结对编程:

    我感觉每次的结对编程自己都能认真的去和别人互相学习,一起进步
    在一些不懂的问题上两个人之间可以相互交流、讨论

  • 相关阅读:
    032 Gradle 下载的依赖jar包在哪?
    031 can't rename root module,Android Studio修改项目名称
    030 Cannot resolve symbol'R' 问题解决汇总大全
    029 Android Studio层级显示目录文件
    028 You are about to commit CRLF line separators to the Git repository.It is recommended to set the core. autocrlf Git attribute to true to avoid line separator issues If you choose Fix and Comit ,
    027 【Android基础知识】Android Studio 编译慢及 Adb connection Error:远程主机强迫关闭了一个现有的连接
    026 Android Studio 和Gradle版版本对应关系
    025 Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm
    024 Android Studio上传项目到Github 最全记录
    023 解决AndroidStudio下载gradle慢的问题
  • 原文地址:https://www.cnblogs.com/lyx1314/p/10883294.html
Copyright © 2011-2022 走看看