題目6-1 輸出月份英文名 1.設計思路 (1)本次題目的算法 第一步:閱讀題目 理解主函數與函數聲明 第二步:定義調用函數*getmonth 第三步:使用witch函數 第四步:最終回到null (2)流程圖node
2.實驗代碼算法
char *getmonth(int n) { switch(n) { case 1:return "January"; case 2:return "February"; case 3:return "March"; case 4:return "April"; case 5:return "May"; case 6:return "June"; case 7:return "July"; case 8:return "August"; case 9:return "September"; case 10:return "October"; case 11:return "November"; case 12:return "December"; default:return NULL; } }
3.調試過程碰到問題及解決辦法 錯誤信息1:月份用了簡寫 錯誤緣由:未能及時理解題意 改正方法:仔細閱讀,理解題意 數組
題目6-2 查找星期 1.設計思路 (1)本次題目的算法 第一步:閱讀題目 理解主函數與函數聲明 第二步:使用調用函數,定義變量j 第三步:使用數組標記星期,使用if函數和for函數 第四步:迴歸j或-1 (2)流程圖函數
2.實驗代碼學習
int getindex(char *s) { int i; int j=-1; char *week[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; for(i=0;i<7;i++) { if(strcmp(s,week[i])==0) { j=i; } else; } return j; }
3.調試過程碰到問題及解決辦法 錯誤信息1:無設計
題目6-3 計算最長的字符串長度 1.設計思路 (1)本次題目的算法 第一步:閱讀題目 理解主函數與函數聲明 第二步:使用調用函數,定義變量i,a,count 第三步:使用for函數和if函數 第四步:迴歸count (2)流程圖3d
2.實驗代碼指針
int max_len(char *s[],int n) { int i,a; int count=0; int q[20]={0}; for(i=0;i<n;i++) { for(a=0;*(*(s+i)+a)!='\0';a++) {} q[i]=a; } count =q[0]; for(i=0;i<n;i++) { if(q[i]>count) { count=q[i]; } } return count; }
3.調試過程碰到問題及解決辦法 錯誤信息1:編譯錯誤 錯誤緣由:打代碼時不仔細,有錯誤 改正方法:屢次反覆檢查,找到錯誤並改正調試
題目6-4 指定位置輸出字符串 1.設計思路 (1)本次題目的算法 第一步:閱讀題目 理解主函數與函數聲明 第二步:使用調用函數,定義變量i,b,q,定義數組s 第三步:使用if函數和for函數,使用指針 第四步:最終迴歸s+i (2)流程圖code
2.實驗代碼
char *match(char *s, char ch1, char ch2) { int i,b; char *q=NULL; for(i=0;*(s+i)!='\0';i++) { if(*(s+i)==ch1) { char *a=&s[i]; for(b=i;(*(s+b)!=ch2)&&(*(s+b)!='\0');b++) { printf("%c",*(s+b)); } if(*(s+b)!='\0') printf("%c",*(s+b)); printf("\n"); return a; } } printf("\n"); return s+i; }
3.調試過程碰到問題及解決辦法 錯誤信息1:編譯錯誤 錯誤緣由:代碼沒打仔細 改正方法:從新輸入 錯誤信息2:指針與&& 錯誤緣由:指針與&&連用時出錯 改正方法:((s+b)!=ch2)&&((s+b)!='\0')
題目6-1 奇數值結點鏈表 1.設計思路 (1)本次題目的算法 第一步:閱讀題目 理解主函數與函數聲明 第二步:使用調用函數,定義變量data,使用指針head,指針p,指針q 第三步:使用while函數,if函數和for函數 第四步:第一次使用調用函數迴歸head,第二次使用調用函數迴歸head1 (2)流程圖
2.實驗代碼
struct ListNode *readlist() { struct ListNode *head=NULL,*p=NULL,*q=NULL; int data; p=q=(struct ListNode *)malloc(sizeof(struct ListNode)); scanf("%d",&p->data); while(p->data!=-1) { if(head==NULL) { head=p; } else { q->next=p; } q=p; p=(struct ListNode *)malloc(sizeof(struct ListNode)); scanf("%d",&p->data); } q->next=NULL; return(head); } struct ListNode *getodd( struct ListNode **L ) { struct ListNode *head=NULL,*q=NULL,*p,*w=NULL,*head1=NULL; if(*L!=NULL) { for(head=*L;head!=NULL;head=head->next) { if(head->data%2!=0) { if(head1==NULL) { head1=head; } else { p->next=head; } p=head; } else { if(q==NULL) { q=head; } else { w->next=head; } w=head; } } p->next=NULL; if(w!=NULL) w->next=NULL; *L=q; } else { return NULL; } return(head1); }
3.調試過程碰到問題及解決辦法 錯誤信息1:使用了兩次調用函數 錯誤緣由:兩次調用函數連接的很差 改正方法:根據系統提示逐一改正
題目6-2 學生成績鏈表處理 1.設計思路 (1)本次題目的算法 第一步:閱讀題目 理解主函數與函數聲明 第二步:使用調用函數,使用指針head,指針p,指針q,指針w,定義變量num,name,score 第三步:使用while函數,if函數和for函數,兩次使用調用函數 第四步:第一次調用函數迴歸head,第二次調用函數再回歸head (2)流程圖
2.實驗代碼
struct stud_node *createlist() { struct stud_node *head=NULL,*p=NULL,*q=NULL; p=q=(struct stud_node *)malloc(sizeof(struct stud_node)); int num; char name[20]; int score; scanf("%d",&p->num); while(p->num!=0) { scanf("%s %d",p->name,&p->score); if(head==NULL) { head=p; } else { q->next=p; } q=p; p=(struct stud_node *)malloc(sizeof(struct stud_node)); scanf("%d",&p->num); } q->next=NULL; return (head); } struct stud_node *deletelist( struct stud_node *head, int min_score ) { struct stud_node *p,*q,*w; if(head!=NULL) { for(w=head;w!=NULL;w=w->next) { if(w->score<min_score) { for(p=head;min_score<=p->score&&p->next!=NULL;p=p->next) { q=p; } if(min_score>p->score) { if(p==head) { head=p->next; } else { q->next=p->next; } } } } } else { return NULL; } return (head); }
3.調試過程碰到問題及解決辦法 錯誤信息1:編譯錯誤 錯誤緣由:缺乏正確的代碼觀念,常常少打代碼,打錯代碼 改正方法:常常打代碼
題目6-3 鏈表拼接 1.設計思路 (1)本次題目的算法 第一步:閱讀題目 理解主函數與函數聲明 第二步:使用調用函數,定義變量n,i,j,t,數組a,指針p,指針q,指針head,指針tail 第三步:使用for函數,與指針連用 第四步:迴歸head (2)流程圖
2.實驗代碼
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2) { int n=0,a[99]; struct ListNode *p=list1; for(n;p!=NULL;n++) { a[n]=p->data; p=p->next; } p=list2; for(n;p!=NULL;n++) { a[n]=p->data; p=p->next; } int i,j,t; for(j=0;j<n-1;j++) { for(i=0;i<n-1-j;i++) { if(a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } struct ListNode *q=NULL,*head=NULL,*tail=NULL; for(i=0;i<n;i++) { q=(struct ListNode *)malloc(sizeof(struct ListNode)); q->data=a[i]; q->next=NULL; if(head==NULL) { head=q; }else { tail->next=q; } tail=q; } return head; }
3.調試過程碰到問題及解決辦法 錯誤信息1:數組 錯誤緣由:數組a不會定義 改正方法:根據提示改正 錯誤信息2:編譯錯誤 錯誤緣由:打代碼時錯誤 改正方法:從新打印
學習總結和進度 數組能夠是任何類型,若是數組的各個元素都是指針類型,用於存放內存地址,那麼這個數組就是指針數組。 *數組名[數組長度] 二維數組是數組元素爲一維數組的一維數組。 指針數組能夠直接對數組元素進行引用操做,也能夠間接訪問操做數組元素所指向的單元內容。