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

    这个作业属于哪个课程 c语言程序设计II
    作业要求 https://edu.cnblogs.com/campus/zswxy/MS/homework/2829
    目标 链表的学习
    参考文献 老师上课时的讲解以及C语言书籍

    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
    代码:

    int max_len( char *s[], int n )
    {
        int i,a=0;
       
        for(i=0;i<n;i++)
        {
         if(strlen(s[i])>a)
             a=strlen(s[i]);
        }
        
        return a;
    
    
    } 
    

    思路:

    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
    代码:

    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++;
             p = p->next;
             }
               return num;
    }
    

    思路:
    借鉴查看室友的
    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
    代码:

    struct ListNode *createlist()
    {   
        int data;
        struct ListNode *head,*p,*tail;
        int size=sizeof(struct ListNode);
        head=p=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 *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;
    }
    

    这题不会做 还要自己理解 出自https://www.cnblogs.com/jk-liulei/p/10877438.html

    周/日期 所花时间 代码行数 学到的知识
    第一周 7小时 100 学到了数组知识
    第二周 7个小时 110 对于指针的使用
    第三周 8个小时 100 对数组更加深刻的理解
    第四周 8小时 120 冒泡排序选择排序
    第五周 10小时 130 字符串的读取排序
    第六周 9个小时 120 指针的使用
    第七周 10个小时 110 数组指针的运用
    第八周 10个小时 150 动态内存分配
    第九周 11个小时 160 结构变量的使用
    第十周 11个小时 170 函数程序结构
    第十一周 12个小时 180 递归函数 宏定义
    第十二周 12个小时 200 链表的知识
  • 相关阅读:
    极域电子教室 e-Learning Class V4 2010专业版 学生机 卸载方法
    浅谈IT员工管理
    apacheserver下载、安装、配置
    Android BLE开发之Android手机搜索iBeacon基站
    Qt编程18:Qt调色板QPalette的使用
    二叉树的操作
    Android应用开发多语言drawable目录
    Mybatis文档阅读笔记(明日继续更新...)
    《Spark快速大数据分析》—— 第六章 Spark编程进阶
    Java程序员的日常——SpringMVC+Mybatis开发流程、推荐系统
  • 原文地址:https://www.cnblogs.com/clearlove1215/p/10883954.html
Copyright © 2011-2022 走看看