第十二週做業

這個做業屬於哪一個課程 C語言程序設計ll
這個做業要求在哪裏 https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/3235
我在這個課程的目標是 瞭解並學習指針進階,主要內容是指針數組和二級指針
這個做業在哪一個具體方面幫助我實現目標 這個做業讓我瞭解和學習指針數組和二級指針的知識,更深刻了解指針
參考文獻 書本第十一章的知識以及百度查閱的知識

1、基礎題

6-1 計算最長的字符串長度 (15 分)

本題要求實現一個函數,用於計算有n個元素的指針數組s中最長的字符串的長度。
函數接口定義:c++

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位數字,其中第二、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 分)

本題要求實現兩個函數,分別將讀入的數據存儲爲單鏈表、將鏈表中偶數值的結點刪除。鏈表結點定義以下: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.實驗代碼

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.運行結果截圖

2、預習做業

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

2.項目主體功能的描述;

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

4.小組成員名單和進度安排。

小組成員名單:陽聖琪,邱治文,劉祺偉,楊子欣

咱們組的想要開發的項目啥的還沒太想好,還需討論,等上完一節課再肯定。

3、學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
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天 指針進階主要內容是指針數組和二級指針 感受知識點很不熟悉,比較繁雜,有個做業不會寫

4、學習感悟

這一週主要了解並學習了指針的深刻了解,包括指針數組和數組指針,指向指針的指針也就是二級指針,通常定義爲 類型名**變量名。行地址是二級指針,列地址是一級指針,還有一些二級指針的知識。而後就是指針函數,返回值爲指針類型的函數叫作指針函數,還有函數指針的知識,我以爲這一週學了不少知識,同時也有不少易錯的地方須要去記去熟悉。好比說:a+1就是行指針,而&a[1][0]、a[1]、(a+1)和(int )(a+1)都是列指針。在指針進階中,我以爲尤其重要的是二級指針,這方面的知識要多熟悉,多看看;另外,這一週的做業第一題和第二題都挺好,第三題的話不會作,有一點思路,但寫不出來。

5、結對編程感悟

這一週也沒有進行結對編程,由於有事情一直在外面,做業都是週三以前和週五的時候作的,因此沒有和搭檔討論題目,最後一題也不太會作,我以爲那個知識點比較難吧。因此也看了不少,搜了代碼,想努力把它看懂。

6、表格、折線圖

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

相關文章
相關標籤/搜索