第十二周作业

这个作业属于哪个课程C语言程序设计ll
这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/3235
我在这个课程的目标是了解并学习指针进阶,主要内容是指针数组和二级指针
这个作业在哪个具体方面帮助我实现目标这个作业让我了解和学习指针数组和二级指针的知识,更深入了解指针
参考文献书本第十一章的知识以及百度查阅的知识

一、基础题

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

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

2.设计思路

1580517-20190515165035153-1393267897.png

3.解题过程中遇到的问题及解决办法

问题:把所有的代码直接打上去,一直没发现错误;第一次赋值的时候弄错了
解决方法:检查了之后才改过来了,编译正确。

4.运行结果截图

1580517-20190515144438842-932842676.png

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

全部代码

#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;
}

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

2.设计思路

1580517-20190515165050543-773929324.png

3.解题过程中遇到的问题及解决办法

1580517-20190515150726590-1201130763.png
1580517-20190515152903487-1887922291.png

问题:在while语句中忘记给head的值变换,导致有部分答案错误。
解决方法:在末尾加上变换head的值的语句,正确。

在dev-c++上编译不出来,有个地方会报错,好像是代码本身的问题,我也不知道怎么回事。

4.运行结果截图

1580517-20190515151446326-747043156.png

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

2.设计思路

1580517-20190517223740782-2077143415.png

3.解题过程中遇到的问题及解决办法

1580517-20190515151741520-1688458313.png

问题:这道题目我尝试了自己编写代码,结果错误很多,不会写
解决方法:在百度上搜了很多大佬的代码,然后还是不会,希望老师能讲解。

4.运行结果截图

1580517-20190517215448798-1672313789.png

二、预习作业

1.所在小组想要开发的项目的名称和目标;
2.项目主体功能的描述;
3.现阶段已做的准备工作;
4.小组成员名单和进度安排。
小组成员名单:阳圣琪,邱治文,刘祺伟,杨子欣

我们组的想要开发的项目啥的还没太想好,还需讨论,等上完一节课再确定。

三、学习进度条

周/日期这周所花的时间代码行数学到的知识点简介目前比较迷惑的问题
2/25-3/32天39初次学习数组的用法关于数组的一些具体的用法
3/4-3/102天35编写程序来处理文件数据指针的具体用法和fscanf类型函数的理解
3/11-3/171天59第一题:编写程序处理文件数据指针的具体用法
3/11-3/172天51第二题:用二维数组知识编写程序二维数组的知识点不熟悉
3/18-3/242天111二维数组、选择法排序和冒泡法排序选择法排序和冒泡法排序的区别
3/25-3/312天78判断回文,字符数组和使用字符串编程使用字符串编程时的一些函数的用法
4/1-4/73天102指针的基本运算,数组和指针的结合对于数组还是不熟悉
4/8-4/143天96冒泡排序,指针、数组和地址间的关系指针和数组的关系和应用不太会,容易错
4/15-4/213天129常用的字符串处理函数和用指针实现内存动态分配关于指针内存动态分配还不太熟悉
4/22-4/283天86了解和学习结构的概念与定义,结构变量的使用以及结构数组和指针的使用结构指针不太会,可能是没用惯
4/29-5/51天----怎样花两年时间面试一个人;如何有效地记忆与学习;如何提问----
5/6-5/122天25如何使用递归函数以及学习宏定义的知识有挺多地方都不太懂,这次的作业很难,不会写
5/13-5/192天指针进阶主要内容是指针数组和二级指针感觉知识点很不熟悉,比较繁杂,有个作业不会写

四、学习感悟

这一周主要了解并学习了指针的深入了解,包括指针数组和数组指针,指向指针的指针也就是二级指针,一般定义为 类型名**变量名。行地址是二级指针,列地址是一级指针,还有一些二级指针的知识。然后就是指针函数,返回值为指针类型的函数叫做指针函数,还有函数指针的知识,我觉得这一周学了很多知识,同时也有很多易错的地方需要去记去熟悉。比如说:a+1就是行指针,而&a[1][0]、a[1]、(a+1)和(int )(a+1)都是列指针。在指针进阶中,我觉得尤为重要的是二级指针,这方面的知识要多熟悉,多看看;另外,这一周的作业第一题和第二题都挺好,第三题的话不会做,有一点思路,但写不出来。

五、结对编程感悟

这一周也没有进行结对编程,因为有事情一直在外面,作业都是周三之前和周五的时候做的,所以没有和搭档讨论题目,最后一题也不太会做,我觉得那个知识点比较难吧。所以也看了很多,搜了代码,想努力把它看懂。

六、表格、折线图

时间代码行数博客字数
第一周39798
第二周35923
第三周1101071
第四周1111713
第五周781878
第六周1022991
第七周962618
第八周1293011
第九周863598
第十周----3456
第十一周253468
第十二周763031

1580517-20190517220340021-675212178.png

转载于:https://www.cnblogs.com/xin010112/p/10868847.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值