这个作业属于的课程

第十二周编程总结

我在这个课程的目标是

学习链表的概念和建立

这个课程在哪个具体方面帮我实现目标

学习链表并利用其构建信息库

参考文献

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

 

2)设计思路

3)本题做对过程碰到问题及解决办法

本题之前学过,没有碰到问题。

正确截图

 

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\n", countcs(head));
	
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1021202
2022310
8102134
1030912
3110203
4021205
#

输出样例:

3


1).实验代码

int countcs( struct ListNode *head )
{
    int num=0;
    while(head!=null){
        if(head->code[1]=='0'&&head->code[2]=='2')
          num++;
          head=head->next;
    }
    return num;
}

 

2)设计思路

 

3)本题做对过程碰到问题及解决办法

刚开始不明白链表的定义,后来通过百度和书上的一些例题对链表进行了解,再加上本题并不难,所以也没用多久时间,但也出现了一些错误,列如NULL只能用大写。

正确截图

 

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

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

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

函数接口定义:

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

函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−时表示输入结束,函数应返回指向单链表头结点的指针。

函数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("\n");
}

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 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 *data,*p;
    p=head;
    data=head->next;
    while(data!=NULL)
    {
        if(data->data%2==0)
            p->next=data->next;
            free(data)
        else
            p=p->next;
        data=data->next;
    }
    return head;
}

 

2)设计思路

 

3)本题做对过程碰到问题及解决办法

本题如果对链表很了解,就有难度,首先对照书上写出了代码,但是由于对链表不够了解,还是出现了错误,后来下午老师讲解了链表,对链表的认识加深,发现可以用建立多个节点来解决问题,后来出现部分答案错误,后来将返回head改为head->next.

 

正确截图

 

 预习作业

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

1.所在小组想要开发的项目的名称和目标;
贪吃蛇 回顾经典游戏
2.项目主体功能的描述;
和以前诺基亚手机里面的贪吃蛇那样 不过可能是画质没有那么美
3.现阶段已做的准备工作;
参考书,做好目标
4.小组成员名单和进度安排。(课程设计阶段:13-17周)
罗璇哲 夏章洋 黎志洋

作业评价

本周题目难度不是很大,但是要对链表很了解才能完成,花费的时间不长。

结对编程

本周我和结对的队员在一起进行了编程,但是本周主要讲了做游戏的一些事情,后来还是和队友一起完成了第一题。

学期总结

经过这两学期的学习比刚入学自然提升不少,但进步的空间还是有很大的,在面对一些问题时,实践能力不行,还是要加强实践能力,不能空有思路而敲不出代码。以后还是要多实践,多敲代码。

 

学习进度条

 

       

这周所花的时间

代码行

学到的知识点

遇到的问题

第二周

8h

51

文件指针的定义

指针的具体用法

第三周

12h

74

二维数组的定义和用其编程

如何使用指针对二维数组进行处理。

第四周

12h

98

利用数组对一组数进行排序

把一些简单的问题复杂化,不能找到最佳的方法。

第五周

10h

125

综合利用指针和数组解决问题

指针在编程中的作用

第六周

12h

150

学习指针的定义和作用

指针在问题中如何体现出简便

第七周

10h

128

学习指针和数组的关系

什么时候该用指针

第八周

13h

167

学习字符指针和字符串处理函数

内存动态分配的用法

第九周

12h

135

学习结构的使用

如何综合使用结构和指针

第十一周

12h

148

学习递归函数

如何利用递归函数进行程序设计

第十二周

10h

130

学习链表

利用链表解决实际问题

posted on 2019-05-17 22:02  lizhiyang  阅读(133)  评论(0编辑  收藏  举报