2019第十二週做業

2019第十二週做業編程

這個做業屬於哪一個課程 C語言程序設計ll
這個做業要求在哪裏 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3234
我在這個課程的目標是 可以掌握二級指針的概念,以及指針數組的應用;瞭解指針與函數的關係,掌握指針做爲函數返回值;掌握單向鏈表的概念和操做
這個做業在哪一個具體方面幫助我實現目標 瞭解了指針函數和函數指針的區別
參考文獻 https://blog.csdn.net/u012741741/article/details/66478883

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)實驗代碼

#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,max=0;

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

(2)設計思路

(3)本題調試過程當中碰到問題及解決方法

本題在調試過程當中沒有遇到任何問題

(4)運行結果截圖

二、統計專業人數 (15 分)

本題要求實現一個函數,統計學生學號鏈表中專業爲計算機的學生人數。鏈表結點定義以下:學習

struct ListNode {
    char code[8];
    struct ListNode *next;
};

這裏學生的學號共7位數字,其中第二、3位是專業編號。計算機專業的編號爲02。測試

函數接口定義:

int countcs( struct ListNode *head );

其中head是用戶傳入的學生學號鏈表的頭指針;函數countcs統計並返回head鏈表中專業爲計算機的學生人數。this

裁判測試程序樣例:

#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)實驗代碼

#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 sum=0;

    while(head)                                             //用計數器記錄字符串第二三個是否爲02就能夠了
    {
        if(head -> code[1] == '0' && head -> code[2] == '2')         //指向運算符->
        {
            sum++;
        }
        head = head -> next;
    }
 
    return sum;
}

(2)設計思路

(3)本題調試過程當中碰到問題及解決方法

問題:·一開始while語句的條件不會寫,致使編譯錯誤.net

解決方法:·問了個人搭檔,而後看了其餘博主的博客設計

(4)運行結果截圖

三、刪除單鏈表偶數節點 (20 分)

本題要求實現兩個函數,分別將讀入的數據存儲爲單鏈表、將鏈表中偶數值的結點刪除。鏈表結點定義以下:3d

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)實驗代碼

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

struct ListNode *createlist()
{
    struct ListNode *head,*p;
    head = (struct ListNode *)malloc(sizeof(struct ListNode));
    p = head;
    head->next=NULL;                                                //指向運算符->
    int num;
    while(scanf("%d",&num)!=EOF&&num!=-1)
    {
        p->next= (struct ListNode *)malloc(sizeof(struct ListNode));
        p=p->next;
        p-> data=num;
        p->next=NULL;
    }
    head=head->next;
    return (head);
}
struct ListNode *deleteeven(struct ListNode *head)
{
    struct ListNode *p,*a;
    if(head == NULL)
    {
        return NULL;
    }
    p=head;
    a=p->next;
    while(a!=NULL)
    {
        if(a->data%2==0)
        {
            p->next=a->next;
            free(a);
            a=p->next;
        }
        else
        {
            p=p->next;
            a=p->next;
        }
    }
    if(head->data%2==0)
    {
        head=head->next;
    }
    return(head);
}

(2)設計思路

(3)本題調試過程當中碰到問題及解決方法

問題:本題不太會作,想法簡單,作起來難。感受要想清楚的點有不少。while語句及if語句的判斷條件我不會寫。

解決方法:查了資料,看了其餘博客的代碼,上面這個代碼就是看的別人的代碼,正在努力讀懂及理解中

(4)運行結果截圖

2、學習感悟

本週學習了第11章指針進階,主要講了如下幾點的區別及用法:
數組指針:數組指針強調的是指針,而且這個指針指向一個數組,即指針變量存放的是數組地址。eg:int (a)[10],其中a是一個指針,而且指向一個含有10個整型元素的數組。
指針數組:指針數組強調的是數組,而且數組元素是指針類型。eg:int
a[10],其中a是一個數組,數組元素是指針(int)。
指針函數:指針函數指帶有指針的函數,即其本質是一個函數,只不過這種函數返回的是一個對應類型的地址。eg:int
function(int m){printf("this is a function");return m; } int main(){int p, data = 5;p = function(&data);printf("%d\n", p); //打印出data的值}
函數指針:函數指針是指向可執行代碼段或調用可執行代碼段的信息塊的指針,而不是指向某種數據的指針。函數指針是將函數當作普通數據那樣存儲和管理。eg:void test(char
str);void (p)(char),其中p是一個指針,而且指向一個函數,這個函數參數是char,返回類型是void型。
二級指針:二級指針指的是A(即B的地址)是指向指針的指針,用於存放二級指針的變量稱爲二級指針變量.根據B的不一樣狀況,二級指針又分爲指向指針變量的指針和指向數組的指針。eg:int i,
p,**pi;p=&i; pi=π
單向鏈表:單向鏈表(單鏈表)是鏈表的一種,其特色是鏈表的連接方向是單向的,對鏈表的訪問要經過順序讀取從頭部開始。 經過指針鏈接起來,可是隻能單向遍歷的內存塊。eg:這裏有一個單向鏈表的經典示例

感悟:感受這周的做業前兩題還行,最後一題對我來講比較難。繼續努力吧!加油!

3、預習做業

1.所在小組想要開發的項目的名稱和目標

開發的項目名稱:貪吃蛇
目標:能清楚的把貪吃蛇這個遊戲搞出來

2.項目主體功能的描述

首先先構造出小蛇,讓小蛇移動,而後讓玩家控制小蛇移動,讓系統判斷遊戲失敗,最後讓小蛇吃食物增長長度。

3.現階段已作的準備工做

初步定了遊戲開發項目,而後瞭解遊戲內容,打算繼續看書,深刻了解遊戲並開發

4.小組成員名單和進度安排。(課程設計階段:13-17周)

小組成員:熊亞婷,章滿,張英傑
進度安排:初步定了遊戲,後期小組將繼續討論遊戲,完成遊戲的後期操做

4、結對編程感想

本週三晚自習依舊是咱們結對編程的時間,我和搭檔在寢室討論了一番,可是仍是有不少地方不清楚,咱們倆都不會最後一題。而後就各自查資料了,總的來講仍是有收穫的。

5、學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
2/25-3/3 三天 45 數組的認識及用法 數組長度的理解
3/4-3/10 兩天 37 編寫程序時處理文件 fscanf與fprintf的具體用法
3/11-3/17 三天 53 二維數組的使用及文件插入 二維數組的用法、上三角的判斷及文件的處理
3/18-3/24 兩天 113 選擇排序法、二分查找法、二維數組的引用與矩陣 不清楚選擇排序法和冒泡排序法的區別
3/25-3/31 兩天 78 判斷迴文、一維字符數組的用法、使用字符串編程 使用字符串編程
4/1-4/7 兩天 88 指針變量的基本運算,內存單元和地址之間的關係 不太瞭解指針數組
4/8-4/14 兩天 96 指針、數組和地址之間的關係 對於指針數組和數組指針的區別不是特別清楚
4/15-4/21 兩天 128 字符串和字符指針、經常使用的字符串處理函數 及用指針實現內存動態分配 對於指針都不是特別懂
4/22-4/28 兩天 120 定義結構,使用結構變量與結構數組進行編程 結構體參與判斷
4/29-5/4 一天 0 結構數組及結構指針 結構指針
5/5-5/11 兩天 26 遞歸函數的定義及使用 遞歸函數的使用
5/12-5/18 兩天 153 指針函數與函數指針的區別 不太會用二級指針

6、表格和折線圖

時間 代碼行數 博客字數
第一週 45 870
第二週 37 1055
第三週 112 1158
第四周 113 1696
第五週 78 1854
第六週 114 2977
第七週 96 3019
第八週 128 3264
第九周 120 3540
第十週 0 3216
第十一週 26 3186
第十二週 153 3045

相關文章
相關標籤/搜索