zoukankan      html  css  js  c++  java
  • 作业——13

    这个作业属于哪个课程 C语言程序设计Ⅱ
    这个作业的要求在哪里 C语言作业评价标准
    我在这个课程的目标是 能够掌握(1)二级指针的概念,以及指针数组的应用;(2)了解指针与函数的关系,掌握指针作为函数返回值;(3)掌握单向链表的概念和操作(建立、增加、删除、修改、遍历)
    这个作业在哪个具体方面帮助我实现目标 更加了解指针进阶
    参考文献 教材

    第十二周作业

    1、计算最长的字符串长度

    本题要求实现一个函数,用于计算有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
    

    实验代码:

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

    设计思路

    本题调试过程碰到问题及解决方法

    无。

    运行结果截图

    2、 统计专业人数

    本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数。链表结点定义如下:

    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
    

    实验代码:

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

    设计思路

    本题调试过程碰到问题及解决方法

    无。

    运行结果截图

    3、 删除单链表偶数节点

    本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:

    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 
    

    实验代码:

    typedef struct ListNode *List;
    struct ListNode *createlist()
    {  
        List head=NULL, tail=NULL;
        int t;
        scanf("%d",&t);
        while(t != -1){
            List temp = (List)malloc(sizeof(struct ListNode));
            temp->data = t;
            temp->next = NULL;
            if(tail==NULL)
                head = tail = temp;
            else{
                tail->next = temp;
                tail = temp;
            }
            scanf("%d",&t);
        }
        return head;
    }
    
    struct ListNode *deleteeven( struct ListNode *head )
    {
        List p=head,q;
        while(head && head->data%2==0){
            p = head;
            head = head->next;
            free(p);
        }
    
        p = head;
        while(p && p->next){
            while(p->next && p->next->data%2==0){
                q = p->next;
                p->next = q->next;
            }
            p = p->next;
        }
        return head;
    }
    

    设计思路

    本题调试过程碰到问题及解决方法

    无。

    运行结果截图

    4 、***八皇后问题(用递归法)

    在国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔 1848 年提出著名的八皇后问题:即在 8 × 8 的棋盘上摆放八个皇后,使其不能互相攻击 —— 即任意两个皇后都不能处于同一行、同一列或同一条斜线上。

    现在我们把棋盘扩展到 n × n 的棋盘上摆放 n 个皇后,请问该怎么摆?请编写程序,输入正整数 n,输出全部摆法(棋盘格子空白处显示句点“.”,皇后处显示字母“Q”,每两格之间空一格)。

    输入格式:

    正整数 n (0 < n ≤ 12)

    输出格式:

    若问题有解,则输出全部摆法(两种摆法之间空一行),否则输出 None。
    要求:试探的顺序逐行从左往右的顺序进行,请参看输出样例2。

    输入样例1:

    3
    

    输出样例1:

    None
    

    输入样例2:

    6
    

    输出样例2:

    . Q . . . .
    . . . Q . .
    . . . . . Q
    Q . . . . .
    . . Q . . .
    . . . . Q .
    
    . . Q . . .
    . . . . . Q
    . Q . . . .
    . . . . Q .
    Q . . . . .
    . . . Q . .
    
    . . . Q . .
    Q . . . . .
    . . . . Q .
    . Q . . . .
    . . . . . Q
    . . Q . . .
    
    . . . . Q .
    . . Q . . .
    Q . . . . .
    . . . . . Q
    . . . Q . .
    . Q . . . .
    

    实验代码

    无。
    

    设计思路

    无。

    本题调试过程碰到问题及解决方法

    无。

    运行结果截图

    无。

    5、编程题求迷宫最短通道

    递归求解迷宫最短通道的总步长。输入一个迷宫,求从入口通向出口的可行路径中最短的路径长度。为简化问题,迷宫用二维数组 int maze[10][10]来存储障碍物的分布,假设迷宫的横向和纵向尺寸的大小是一样的,并由程序运行读入, 若读入迷宫大小的值是n(3<n<=10),则该迷宫横向或纵向尺寸都是n,规定迷宫最外面的一圈是障碍物,迷宫的入口是maze[1][1],出口是maze[n-2][n-2], 若maze[i][j] = 1代表该位置是障碍物,若maze[i][j] = 0代表该位置是可以行走的空位(0<=i<=n-1, 0<=j<=n-1)。求从入口maze[1][1]到出口maze[n-2][n-2]可以走通的路径上经历的最短的总步长。要求迷宫中只允许在水平或上下四个方向的空位上行走,走过的位置不能重复走。

    输入格式:

    输入迷宫大小的整数n, 以及n行和n列的二维数组(数组元素1代表障碍物,0代表空位)

    输出格式:

    若有可行的通道则输出一个整数,代表求出的通道的最短步长;若没有通道则输出"No solution"

    输入样例:

    10
    1 1 1 1 1 1 1 1 1 1
    1 0 0 1 0 0 0 1 0 1
    1 0 0 1 0 0 0 1 0 1
    1 0 0 0 0 1 1 0 0 1
    1 0 1 1 1 0 0 0 0 1
    1 0 0 0 1 0 0 0 0 1
    1 0 1 0 0 0 1 0 0 1
    1 0 1 1 1 0 1 1 0 1
    1 1 0 0 0 0 0 0 0 1
    1 1 1 1 1 1 1 1 1 1
    

    上述输入代表的是如下这样一个迷宫:

    其中红色的小方块是障碍物,蓝色的小方块是空位,白色的小圆连起来是一条从入口到出口的通道,两个圆之间代表一个步长。

    输出样例:

    14
    

    实验代码:

    无。
    

    设计思路

    无。

    本题调试过程碰到问题及解决方法

    无。

    运行结果截图

    无。

    预习作业

    无。

    1.所在小组想要开发的项目的名称和目标;
    名称:A game(暂定)
    目标:能玩(暂定)

    2.项目主体功能的描述;
    思考ing。

    3.现阶段已做的准备工作;
    问了别人如何做(准备工作)。

    4.小组成员名单和进度安排。
    ①苏小龙
    ②吴小波
    ③杨湘辉

    二、学习进度条

    周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
    第二周 4 hours 35 用c语言程序读取电脑中的文本文件并对其进行基础操作 ...
    第三周 4 hours 69 初步使用二维数组,如何写入一个矩阵 ...
    第四周 5 hours 102 认识了选择排序法、二分查找法和冒泡排序法以及在二维数组的定义、引用、初始化和其矩阵。 ...
    第五周 5 hours 98 用到二维数组,初用头文件<string.h>中的strlen函数和strcpy函数 ...
    第六周 5 hours 96 了解了变量、内存单元和地址之间的关系;了解了如何定义指针变量,怎样使用指针变量,怎样进行指针变量的初始化;了解了指针变量的基本运算;了解了指针作为函数参数的作用;了解了如何使用指针实现函数调用返回多个值。 ...
    第七周 5 hours 130 更加了解了如何使用指针与字符串 ...
    第八周 6 hours 150 进一步了解了字符串函数以及使用指针操作字符串的方法,了解了动态内存分配 ...
    第九周 4 hours 89 根据实际情况定义结构使用结构变量与结构数组,掌握结构指针的操作,并应用于函数传递 ...
    第十周 ... ... ... ...
    第十一周 3 hours 21 能够对相对复杂的问题,合理定义程序的多函数结构;能够使用递归函数进行编程;掌握宏的基本用法;掌握编译预处理的概念。 ...
    第十二周 4hours 56 能够掌握(1)二级指针的概念,以及指针数组的应用;(2)了解指针与函数的关系,掌握指针作为函数返回值;(3)掌握单向链表的概念和操作(建立、增加、删除、修改、遍历) ...

    三、学习折线图

    四、学习感悟&结对编程

    这周作业不是很难。书上有相关知识点。

    结对编程如期没有进行,时间安排冲突。

  • 相关阅读:
    归并排序(Merge Sort)
    AtCoder AGC035D Add and Remove (状压DP)
    AtCoder AGC034D Manhattan Max Matching (费用流)
    AtCoder AGC033F Adding Edges (图论)
    AtCoder AGC031F Walk on Graph (图论、数论)
    AtCoder AGC031E Snuke the Phantom Thief (费用流)
    AtCoder AGC029F Construction of a Tree (二分图匹配)
    AtCoder AGC029E Wandering TKHS
    AtCoder AGC039F Min Product Sum (容斥原理、组合计数、DP)
    AtCoder AGC035E Develop (DP、图论、计数)
  • 原文地址:https://www.cnblogs.com/s-su/p/10868998.html
Copyright © 2011-2022 走看看