第十二周作业

这个作业属于哪个课程 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.设计思路

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

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

4.运行结果截图

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.设计思路

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


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

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

4.运行结果截图

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.设计思路

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

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

4.运行结果截图

二、预习作业

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

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

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

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

小组成员名单:阳圣琪,邱治文,刘祺伟,杨子欣

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

三、学习进度条

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

四、学习感悟

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

五、结对编程感悟

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

六、表格、折线图

时间 代码行数 博客字数
第一周 39 798
第二周 35 923
第三周 110 1071
第四周 111 1713
第五周 78 1878
第六周 102 2991
第七周 96 2618
第八周 129 3011
第九周 86 3598
第十周 ---- 3456
第十一周 25 3468
第十二周 76 3031

posted @ 2019-05-17 21:25  .yuanyin  阅读(214)  评论(0编辑  收藏  举报