2019第十二週做業編程
這個做業屬於哪一個課程 | C語言程序設計ll |
這個做業要求在哪裏 | (https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3234) |
我在這個課程的目標是 | 可以掌握二級指針的概念,以及指針數組的應用;瞭解指針與函數的關係,掌握指針做爲函數返回值;掌握單向鏈表的概念和操做 |
這個做業在哪一個具體方面幫助我實現目標 | 瞭解了指針函數和函數指針的區別 |
參考文獻 | (https://blog.csdn.net/u012741741/article/details/66478883) |
本題要求實現一個函數,用於計算有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
#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; }
本題在調試過程當中沒有遇到任何問題
本題要求實現一個函數,統計學生學號鏈表中專業爲計算機的學生人數。鏈表結點定義以下:學習
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
#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; }
問題:·一開始while語句的條件不會寫,致使編譯錯誤.net
解決方法:·問了個人搭檔,而後看了其餘博主的博客設計
本題要求實現兩個函數,分別將讀入的數據存儲爲單鏈表、將鏈表中偶數值的結點刪除。鏈表結點定義以下: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
#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); }
問題:本題不太會作,想法簡單,作起來難。感受要想清楚的點有不少。while語句及if語句的判斷條件我不會寫。
解決方法:查了資料,看了其餘博客的代碼,上面這個代碼就是看的別人的代碼,正在努力讀懂及理解中
本週學習了第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:這裏有一個單向鏈表的經典示例
感悟:感受這周的做業前兩題還行,最後一題對我來講比較難。繼續努力吧!加油!
開發的項目名稱:貪吃蛇
目標:能清楚的把貪吃蛇這個遊戲搞出來
首先先構造出小蛇,讓小蛇移動,而後讓玩家控制小蛇移動,讓系統判斷遊戲失敗,最後讓小蛇吃食物增長長度。
初步定了遊戲開發項目,而後瞭解遊戲內容,打算繼續看書,深刻了解遊戲並開發
小組成員:熊亞婷,章滿,張英傑
進度安排:初步定了遊戲,後期小組將繼續討論遊戲,完成遊戲的後期操做
本週三晚自習依舊是咱們結對編程的時間,我和搭檔在寢室討論了一番,可是仍是有不少地方不清楚,咱們倆都不會最後一題。而後就各自查資料了,總的來講仍是有收穫的。
周/日期 | 這周所花的時間 | 代碼行數 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
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 | 指針函數與函數指針的區別 | 不太會用二級指針 |
時間 | 代碼行數 | 博客字數 |
---|---|---|
第一週 | 45 | 870 |
第二週 | 37 | 1055 |
第三週 | 112 | 1158 |
第四周 | 113 | 1696 |
第五週 | 78 | 1854 |
第六週 | 114 | 2977 |
第七週 | 96 | 3019 |
第八週 | 128 | 3264 |
第九周 | 120 | 3540 |
第十週 | 0 | 3216 |
第十一週 | 26 | 3186 |
第十二週 | 153 | 3045 |