2019春第十二週做業

2019春第十二週做業

這個做業屬於哪一個課程 C語言程序設計Ⅱ
這個做業要求在哪裏 第十二週做業
我在這個課程的目標是 可以使用c語言實現基本的程序設計,以致最後可以設計出較大的項目
這個做業在哪一個具體方面幫助我實現目標 學習指針的進階,指針函數、函數指針、指針數組、數組指針等
參考文獻 C語言程序設計(第3版); C Primer Plus (第6版)

1、本週完成的做業

題目1. 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 a=0,i;
    for (i=0; i<n; i++) {
        if (strlen (*(s+i)) > a)
            a = strlen (*(s+i));
    }
    return a;
}

2)、設計思路

3)、本題調試過程碰到的問題及解決方法

測試

4)、運行結果圖

題目2. 6-2 統計專業人數 (15 分)

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

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

這裏學生的學號共7位數字,其中第二、3位是專業編號。計算機專業的編號爲02。
函數接口定義:3d

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
#

輸出樣例:code

3

1)、實驗代碼

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)、運行結果圖

題目3. 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()
{
    int n;
  struct ListNode *head=NULL,*tail=NULL,*t=NULL;
  scanf("%d",&n);
  while(n!=-1)
  {
    t=(struct ListNode *)malloc(sizeof(struct ListNode));
    t->data=n;
    t->next=NULL;
    if(head == NULL) 
       head=t;
    else 
       tail->next=t;
       tail=t;
       scanf("%d",&n);
  }
  return head;
}
struct ListNode *deleteeven( struct ListNode *head )
{
  struct ListNode *a=NULL,*b=NULL;
  for(a = head; a != NULL; a = a->next)
  {
    if(a->data%2 == 0)
    {
      if(a == head)
      {
        head = head->next;
        free(a);
      }
      else 
      {
        b->next = a->next;
        free(a);
      }
    }
    else 
       b = a;
  }
  return head;
}

2)、設計思路


3)、本題調試過程碰到的問題及解決方法

這道題原本不怎麼會,還好週五補課,老師又重點講了鏈表的知識。聽懂了不少,比以前好不少,雖然再看題目任然有點不懂,但已經好多了,借鑑時,看大佬代碼也起碼能看懂,因爲對鏈表這一塊實在不怎麼會,因此感受本身寫的話,很難寫出來。
另外還看到了一個以前不怎麼知道的知識點,「data」,如圖,

4)、運行結果圖

預習做業

名稱:雙人飛機對戰
目標:兩我的的對戰遊戲,控制兩臺飛機用子彈攻擊對方,並閃避對方的子彈。
項目主體功能: 1. 飛機控制
2..子彈發射
3.擊中對方
4.障礙物的產生,與擊毀
5.子彈升級
現階段已作的準備工做:團隊協商、任務分配
小組成員名單:陳安平、劉凱、宋官昊。
任務進度:前期準備

學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
3/2-3/8 三天六小時 50 一、定義、運用文件指針;二、如何打開、關閉文件三、如何讀出指定文件中的數據;四、如何向指定文件中寫入數據; 字符、字符串有什麼區別?兩者輸入、輸出有沒有很大不一樣?什麼纔算字符串?什麼算字符?在文件中兩者有沒有差異?
3/9-3/15 四天三小時 180 一、運用二維數組解決問題,矩陣的判斷;二、對一組數的全部子數組求和 如何在輸出時利用數組的性質
3/16-3/22 三天八小時 210 一、二維數組加深理解,二維數組與矩陣;二、選擇排序法解決問題;三、二分查找法 二分查找法這周沒練習,只是看看書上例題大體懂了,不知道真正應用時可否掌握。
3/23-3/29 三天兩小時 120 一、判斷回;文二、字符數組的概念及其簡單運用;三、一些簡單的與字符數組相關的暫時沒接觸補充知識,一些函數,用法等。 在做業運用文件指針時,一開始老是出現從文件裏輸不出來結果,打印不出來,後來發現可能與本身輸入時格式未搞好,原本不該該出現的空格出現了,致使打印不出來結果。文件指針還不是很熟練
3/30-4/5 兩天 150 一、指針的含義,變量、地址、指針變量等間的關係;二、指針變量的初始化,運用指針作一些簡單運算;三、指針與數組之間的關係 在用指針處理字符串時,應怎樣定義指針變量
4/6-4/12 三天 200 一、更深一步掌握指針與數組間的關係;二、懂得指針能夠實現數組的一些功能;三、指針在碰到字符數組時的應用 在代碼中,若是遇到要輸出單個字符,%s與%c有什麼區別? scanf()與 getchar 兩種輸入方式有區別嗎?會不會在有些狀況下能影響到輸出結果?
4/13-4/19 兩天 170 一、學習了與字符串有關的一些字符串處理函數;二、學習了利用指針實現內存動態分配 究竟什麼狀況下采用內存動態分配?具體要採用哪種動態內存分配?
4/20-4/26 兩天 135 一、學習告終構及結構變量的定義與運用 若是運用遞歸函數解決問題,雖然使代碼簡化了,更美觀了。但會致使相同的運算重複進行,佔內存。感受遞歸弊大於利。
4/27-5/3 一天 一、複習告終構與數組、指針間的關係,二者之間是如何進行替換利用;
5/4-5/10 三天 165 一、學習了遞歸程序的設計;二、宏的基本定義;三、文件包含等內容; 鏈表知識點看了看,不是很懂
5/11-5/17 三天 148 一、學習了指針函數、函數指針、指針數組、數組指針;二、講了鏈表的部分知識。 鏈表不是很會,多是書看的少了

3、學習感悟

感受這周的課就有點難度了,前面幾周寫的時候都很輕鬆,忽然碰到這些比較難的東西,吃不消。感受只憑老師上課講的話,遠遠不夠啊,本身下去也要在抽空看書,並且若是課前可以預習,提早對這些知識有一點概念,就會輕鬆不少。題目方面,前兩題一開始沒有很大難度,就是第三題鏈表,不是很懂,就託了一天。

結對編程感想

結對時,隊友題目還沒怎麼寫,而我只能在前兩題上面給予他幫助。而後兩我的針對第三題,先是瞎討論了一番,發現並不會,而後看看書,最後仍是看了別人的代碼,看了看,有的寫得很超前,看不懂,有的能看懂,不怎麼理解,總之慢慢搞吧。

表格-折線圖

時間 累計代碼行數 累計博客字數
第一週 80 275
第二週 50 883
第三週 180 1303
第四周 210 1849
第五週 120 1988
第六週 150 2717
第七週 200 3000
第八週 170 2820
第九周 135 2855
第十週 3945
第十一週 165 4934
第十二週 148 2654

相關文章
相關標籤/搜索