2019第十二周作业

2019第十一周作业

问题 回答
这个作业属于哪个课程 指针 进阶
这个作业要求在哪里 https://www.cnblogs.com/pengchen511/p/10564067.html
我在这个课程的目标是 掌握函数指针,链表等
这个作业在那个方面帮我实现目标 解决了很多处理字符的问题
参考文献 C语言程序设计1

基础作业

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

2)设计思路

3)问题及错误截图

问题 发现没有把结果返回主函数

解决 在自定义函数中加个return返回值

4)正确截图

5)心得

这个题目主要是考察我们都指针数组的熟练度,掌握指针数组题目也就解决了。

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

2)程序设计

3)错误截图与解决

错误 刚开始没有指向链表头,以及判断02没有以字符的形式

解决 增加指向链表头,再判断为02时02打单引号

4)正确运行截图

5)心得 这个题目主要考察我们对链表的理解,知道链表的运用就会了。

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 

1)实验代码

struct ListNode *createlist(){
    int n;
    struct ListNode *head=NULL,*tail=NULL,*pnew=NULL;
    scanf("%d",&n);
    while(n!=-1){
       pnew=(struct ListNode *)malloc(sizeof(struct ListNode));
       pnew->data=n;
       pnew->next=pnew;

           if(head==NULL){
               head=pnew;
               tail=pnew;
           }
            else
               tail->next=pnew;
               tail=pnew;   
       
       scanf("%d",&n);
    }
    pnew->next=NULL;
    return head;
}
struct ListNode *deleteeven( struct ListNode *head ){
    struct ListNode *p,*p1,*q;
    while(head&&head->data%2==0){
        p1=head;
        head=head->next;
    }
 p1=head;

while(p1&&p1->next!=NULL){
    while(p1->next&&p1->next->data%2==0){
         q=p1->next;
         p1->next=q->next;
    }
        p1=p1->next;
}
return head;
}

2)设计思路

3)错误截图及解决方案

错误 一些符号错了,对这个题目的不揍还是不是特别理解,有一些语法错误。

解决 符号一个个在c++上解决了,语法我把其他人做的多看了几遍,懂了很多

4)正确运行截图

评价

这个题目我是看了别人的,根据别人的不走来的,但是我看懂了,才这样的
我对这个建立链表还不是很理解,只能慢慢的看书来了。

预习作业

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

大鱼吃小鱼
利用C语言编程进行对我小时候玩的游戏,体验自己做的小游戏

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

针对对自己的鱼由小变大的过程,只能吃比自己的小的鱼类,里面也有一些障碍物影响我们游戏的进程,相应游戏成功后会有相应的奖励并通关。游戏结束,进行下一局更难的挑战。

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

主要是对C语言游戏设计开发相应的教程进行研究。

4.小组成员名单和进度安排

成员:文加宁,段建红,陈新
进度安排:我们一起通过对书本的精读,然后各自安排各自的任务,文加宁与段建红负责对代码的调试,陈新负责对代码的编程,也要一起进行对代码的研究。

本周学习进度条

第十一周 这周所花时间 代码行数 学到的内容简介 目前比较困惑
5/12-5/19 11小时 57 链表和指针函数 对链表不懂

本周学习感悟

这周我们学习的挺多的主要有单向链表,还有指针函数,指针数组等等,
但是我不是很了解,对这些都不是很懂,只能课后看书才行了,特别是单向链表
感觉很难,又是重点.,但那是没学之前,现在老师讲了,感觉懂了不少

累计字数和代码行数

时间 累计字数 累计代码长度
第一周 126 23
第二周 335 68
第三周 461 105
第四周 584 157
第五周 724 227
第六周 841 283
第七周 1002 391
第八周 1136 512
第九周 1280 609
第十周 1560 609
第十一周 1712 641
第十二周 1811 721

折线图

结对编程

编程过程:一开始我们看题目,很快就想到了思路,然后一起动手操作,因为对指针数组和二维指针不是太熟悉,所以经过好多次尝试
和结合书本知识,编译运行,调试,之后终于对了;思路相同,但是发现答案错误之后,我们都找出来了错误之处,并且改正;

优点:

      1,如果代码有问题可以两个人找错误
       2,两个人可以相互督促学习
       3,可以增进两个人之间的友谊

缺点

要是两个人有不同的思路,处理不好会闹矛盾,从而单独解决
posted @ 2019-05-17 18:08  渔家傲。  阅读(263)  评论(1编辑  收藏  举报