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

    这个作业属于那个课程 C语言程序设计II
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/MS/homework/3239
    我在这个课程的目标是 学好c语言
    这个作业在那个具体方面帮助我实现目标 结构指针以及链表
    参考文献 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,a=0;
        for(i=0;i<n;i++){
            if(a<strlen(s[i]))
            a=strlen(s[i]);
            }
            return a;
    }
    
    

    2)设计思路

    3)本题调试过程中遇到的问题

    问题:忘记返回其中最长字符串的长度。在后增加 return a;

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

    2)设计思路

    3)本题调试过程中遇到的问题

    问题:没加小括号。在第七行中head改成(head),因为“.”的优先级高于“”的优先级,则head.next等价于*(head.next),含义发生了变化,从而会产生错误。

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

    2)设计思路

    3)本题调试过程中遇到的问题

    问题:删除操作中while条件语句错误。在while条件语句中加上head!=NULL.

    4)运行截图

    预习作业

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

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

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

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

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

    1.所在小组想要开发的项目的名称和目标;
    名称:俄罗斯方块
    目标:自设切换背景,音乐的俄罗斯方块,
    2.项目主体功能的描述;
    每一行都没有空缺了,被各种不同方块填满了,就消到这行,并获得积分,随着分数越高,方块掉落的速度越快。当某列堆满的时候,游戏结束。你game  over。
    3.现阶段已做的准备工作;
    有了方向,知道从什么地方着手,人员已经就绪,但还是要继续学习新的知识,而且这个游戏,我们只能搞最简单的,技术还不够,需要学习的地方还有很多。
    4.小组成员名单和进度安排。(课程设计阶段:13-17周)
    邹佳均(组长),唐志名,孙泽良。
    进度安排目前还没有。
    

    学习感悟:
    本周编程总体感觉还好,因为没什么太难的题目,不过基础题第三题还是有一点不懂,因为是照着书的模式来写代码的,只不过其中改了一些条件而已,有一些代码没看懂。

    结对编程:
    我跟我队友在星期三晚自习一起写代码,一起讨论了题目该怎么写,以及自己的思路,实在写不出了就向其他大佬请教。
    优点:能够集思广益,以及可以学到很多自己没想到的思路。
    缺点:时间不够,在一起讨论的机会少。

    学习进度条:

  • 相关阅读:
    读书笔记--Head First 数据分析 目录
    读书笔记--Head First C#目录
    读书笔记--Head First Networking目录
    读书笔记--Head First JQuery目录
    读书笔记--Head First Python 目录
    读书笔记--Head First JavaScript 目录
    读书笔记--Head First Ajax 目录
    读书笔记--Head First Web设计 目录
    读书笔记--Head First Servlets和JSP 目录
    读书笔记--Head First Java(第2版) 目录
  • 原文地址:https://www.cnblogs.com/tzmad/p/10882888.html
Copyright © 2011-2022 走看看