十二周

作业头

问题 回答
这个作业属于那个课程 C语言程序设计
这个作业要求在哪 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass3-2018/homework/3237
我在这个课程的目标是 学会运用二级指针的概念,以及指针数组的应用了解指针与函数的关系,掌握指针作为函数返回值,掌握递归函数的操作
这个作业在那个具体方面帮助我实现目标 练习指针与函数
参考文献 《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
", max_len(string, n));

    return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:

4
blue
yellow
red
green
输出样例:

6

1.实验代码

C
int max_len( char *s[], int n ){
    int max=0;//假设max为s[0] 
    int i,j;
    
    for(i=0;i<n;i++){
        if(strlen(s[max])<strlen(s[i])){
            max=i;    
        }
    }    
    return strlen(s[max]);
}

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

/* 你的代码将被嵌在这里 */
输入样例:

1021202
2022310
8102134
1030912
3110203
4021205
#
输出样例:

3

1.实验代码

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

2.设计思路

3.遇到问题及解决方法

解决方法:
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("
");
}

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.实验代码

C
struct ListNode *createlist()
{
 struct ListNode *head, *p1, *tail;
 int num;

 head=(struct ListNode *)malloc(sizeof(struct ListNode));
 p1=tail=(struct ListNode *)malloc(sizeof(struct ListNode));

 p1->next=tail->next=head->next=NULL;
 while(1)
 {
  scanf("%d",&num);
  if(num!=-1)
  {
   p1->data=num;
   
   if(head->next==NULL)
   {
    head->next=p1;
   }

   else 
   {
    tail->next=p1;
    tail=p1;
   }
   p1=(struct ListNode *)malloc(sizeof(struct ListNode));
   p1->next=NULL;
  }

  else 
  break;
 }
 return head;
}

struct ListNode *deleteeven(struct ListNode *head)
{
 struct ListNode *num,*p;
 p=head;
 num=head->next;
 while(num!=NULL)
 {
  if(num->data%2==0)
     {
      p->next=num->next;
  }
  else
  p=p->next;
  num=num->next;
 }
 return head->next;
}

2.设计思路

3.遇到问题及解决方法

解决方法:
4.运行截图

学习进度统计

时间 博客字数 代码行数
第一周 200 20
第二周 150 25
第三周 300 30
第四周 150 35
第五周 200 30
第六周 400 25
第七周 350 40
第八周 450 50
第九周 500 55
第十周 500 55
第十一周 550 60
第十二周 550 60
周/日期 这周所花时间 代码行数 学到知识点简介 目前比较疑惑问题
5/11-5/17 三天 220 指针

图表

学习感悟:了解掌握理解运用二级指针的概念,以及指针数组的应用了解指针与函数的关系,掌握指针作为函数返回值,掌握递归函数的操作,通过做pta作业巩固学习的知识。必须学会自学,静下心去自学,想什么和你专业无关的东西,静下心,去投入一件事,去学习。
难点:指针的操作

结对编程
优点:养成自己的良好的编码习惯,注释,缩进,大括号,真的很重要,两个人可以相互提醒。因为作业多,结对编程可以很好的提高完成效率,结对对象互相鼓励,不容易沮丧,相互能增加学习积极性。面对较难的指针问题,我的编程因为有编程对象的陪伴而变得不再孤单。因为在面对问题的时候,会有人一起分担,共同尝试新的策略。往往遇到难题时,我们能一起讨论,一起分享。
缺点:两个人思路不同时,如果进行讨论会干扰到对方的思路,不利于独立思考,我建议大家做完后选择一个最简便的方案画出思路图,省时省力。
心得:学习到新的函数结构,所以我应该多练习,牢记函数结构,巩固学习知识。这周的作业很难,让我学会了如何与结对编程对象交流的方法。多沟通,答案就出来了。

原文地址:https://www.cnblogs.com/c11c11cyy/p/10880594.html