第十二周作业

2019年学期第十二周作业

这个作业属于哪个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3234
我在这个课程的目标是 了解数组指针,指针数组,指针函数,函数指针,二级指针,链表
这个作业在哪个具体方面帮助我实现目标 pta题目对知识点的运用
参考文献 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

实验代码

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

设计思路


遇到的问题及解决方法

问题:一开始将i的长度的给予发生了错误 ;
解决方法:后来改正为: len = strlen(s[i]);

运行图

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

实验代码:

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

设计思路

遇到的问题及解决方法

问题:开始忽略了从head向后一一寻找
解决方法:运用了 head=head->next;

运行图

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("\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

实验代码:

struct ListNode *createlist()
{
  struct ListNode *head , *node , *end;
  head = (struct ListNode*)malloc(sizeof(struct ListNode));
  end = head;
  while(1)
  {
    node = (struct ListNode *)malloc(sizeof(struct ListNode));
    scanf("%d",&node->data);
    if(node->data==-1)break;
    end->next = node;
    end = node;
  }
  end->next = NULL;
  
  return head;

}
struct ListNode *deleteeven( struct ListNode *head )
{
    struct ListNode *temp1 = head ,*temp2;
    temp2=temp1->next;
    while(temp1->next)
    {
        if(temp2->data%2==0)
        {
            temp1->next=temp2->next;
            temp2=temp2->next;
        }
        else{
            temp1=temp1->next;
            temp2=temp1->next;
        }
    }
    
    return head->next;
}

设计思路:




遇到的问题及解决方法:

问题:这个题目我觉得有点难,是搭档告诉我写的,自己不知道这个(struct ListNode *createlist())函数怎么写
解决方法:搭档远程教学,一起讨论

运行图:

学习进度条

周/日期 这周所花的时间 代码行数 学到的知识点 目前比较疑惑的问题
2/25-3/3 三天 45 学习数组及用法 数组的长度问题
3/4-3/10 三天 40 文件的处理问题 文件指针的用法
3/11-3/15 四天 50 对数组的遍历 关于遍历的范围还有不理解的地方
3/16-3/22 四天 80 用一维数组和二维数组编程 冒泡算法的运用
3/23-3/29 三天 65 学会规范的画流程图,认识了字符串 进制之间的转换的代码
3/30-4/4 三天 75 初步了解指针 一些含指针的多次转换还有点吃力
4/6-4/12 四天 124 熟悉指针,数组和地址 一些自定义函数的运用有点不熟悉
4/13-4/19 三天 108 学会用指针实现内存动态分布 一些函数的不熟悉
4/20-4/25 两天 77 学习了结构体 无类型名定义有点不清楚
4/26-4/30 一天 熟悉结构体
5/4-5/10 两天 22 学递归函数 汉诺塔问题和这周的编程题
5/11-5/17 两天 54 了解数组指针,指针数组,指针函数,函数指针,二级指针,链表 链表中结点位置移动

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

开发名称:挖地小子
目标:游戏者需要不断采矿,卖得的钱升级道具,打败恶霸,最后救出女友。

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

功能描述:通过控制键来控制人物,人物可以进入商店兑换东西或者提升道具,人物的经济会随着采的矿物而增加,在人物飞天,跑动和碰到怪物时会消耗能量或者氧气。
人物不断挖矿,挖的位置的设定,及关卡之间的转换。

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

小组成员通过交流选择游戏项目并初步了解游戏内容

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

成员名单:黄晓燕,习美红,裴增
进度安排:现在只是初步确认目标,以后的仍然需要小组商量。

学习感悟+结对感悟

这两节课的学习我感觉比较吃力,特别是学习链表的那一节课,听了两节课就感觉略微懂了一点皮毛,但是要到真正运用的时候还要慢慢的来。在二级指针这里要自己慢慢的想才会明白。链表的这一节课则存在问题,要搭档讲解一下才可以弥补一点上课的不足。
问搭档的时候他会要我先去看看书在讲解,我觉得这样很不错。

折线图

时间 博客字数 代码行数
第一周 564 35
第二周 608 27
第三周 857 65
第四周 1750 109
第五周 1796 68
第六周 1645 75
第七周 2100 124
第八周 2252 108
第九周 2606 77
第十一周 1960 22
第十二周 1881 54

posted @ 2019-05-17 18:49  黄哈哈呐  阅读(347)  评论(0编辑  收藏  举报