這個做業屬於哪一個課程 | C語言程序設計Ⅱ |
---|---|
這個做業要求在哪裏 | 第十二週做業 |
我在這個課程的目標是 | 可以使用c語言實現基本的程序設計,以致最後可以設計出較大的項目 |
這個做業在哪一個具體方面幫助我實現目標 | 學習指針的進階,指針函數、函數指針、指針數組、數組指針等 |
參考文獻 | C語言程序設計(第3版); C Primer Plus (第6版) |
本題要求實現一個函數,用於計算有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
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; }
無測試
本題要求實現一個函數,統計學生學號鏈表中專業爲計算機的學生人數。鏈表結點定義以下:設計
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
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; }
無
本題要求實現兩個函數,分別將讀入的數據存儲爲單鏈表、將鏈表中偶數值的結點刪除。鏈表結點定義以下:
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
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; }
這道題原本不怎麼會,還好週五補課,老師又重點講了鏈表的知識。聽懂了不少,比以前好不少,雖然再看題目任然有點不懂,但已經好多了,借鑑時,看大佬代碼也起碼能看懂,因爲對鏈表這一塊實在不怎麼會,因此感受本身寫的話,很難寫出來。
另外還看到了一個以前不怎麼知道的知識點,「data」,如圖,
名稱:雙人飛機對戰
目標:兩我的的對戰遊戲,控制兩臺飛機用子彈攻擊對方,並閃避對方的子彈。
項目主體功能: 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 | 一、學習了指針函數、函數指針、指針數組、數組指針;二、講了鏈表的部分知識。 | 鏈表不是很會,多是書看的少了 |
感受這周的課就有點難度了,前面幾周寫的時候都很輕鬆,忽然碰到這些比較難的東西,吃不消。感受只憑老師上課講的話,遠遠不夠啊,本身下去也要在抽空看書,並且若是課前可以預習,提早對這些知識有一點概念,就會輕鬆不少。題目方面,前兩題一開始沒有很大難度,就是第三題鏈表,不是很懂,就託了一天。
結對時,隊友題目還沒怎麼寫,而我只能在前兩題上面給予他幫助。而後兩我的針對第三題,先是瞎討論了一番,發現並不會,而後看看書,最後仍是看了別人的代碼,看了看,有的寫得很超前,看不懂,有的能看懂,不怎麼理解,總之慢慢搞吧。
時間 | 累計代碼行數 | 累計博客字數 |
---|---|---|
第一週 | 80 | 275 |
第二週 | 50 | 883 |
第三週 | 180 | 1303 |
第四周 | 210 | 1849 |
第五週 | 120 | 1988 |
第六週 | 150 | 2717 |
第七週 | 200 | 3000 |
第八週 | 170 | 2820 |
第九周 | 135 | 2855 |
第十週 | 3945 | |
第十一週 | 165 | 4934 |
第十二週 | 148 | 2654 |