第3次作業
一.
6-1 1.
(1)第一步:定義一個包含十二月的數組,定義一個空數組。
第二布:用條件語句和空數組將每月的英文按順序輸出。
2.
char *getmonth( int n ) { char *a[12]={"January","February","March","April","May","June","July","August","September","October","November","December" }; char *month=NULL; if(n>=1&&n<=12) month=a[n-1]; return month; }
3.錯誤信息
錯誤原因:最終沒有返回NULL。
改正方法:讀題找到了問題。
6-2 1.
(1)第一步:定義一個包含星期的數組。
第二步:運用for循環和if比較s和數組中每一項的大小,如果s小於數組則返回i。
(2)流程圖
2.
int getindex( char *s ) { int i=0; char *a[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; for(i=0;i<7;i++) { if(strcmp(s,a[i])==0) { return i; } } return -1; }
3.錯誤信息1
錯誤原因:錯把for也打成了if,導致程序一直錯誤。
改正方法:看了幾遍下邊的錯誤提示最終發現錯誤原因並改正。
錯誤信息2
錯誤原因:if後錯誤的帶上了;
改正方法:編譯一次才發現自己的疏忽。
6-3 1.
(1)第一步:定義變量並初始,運用for循環將a和數組s中的每個數組長度比較,如果小於則代替這個數組,直到選出最大值。
2.
int max_len( char *s[], int n ) { int i,a=0; for(i=0;i<n;i++) { if(a<strlen(s[i])) { a=strlen(s[i]); } } return a; }
3.錯誤信息
錯誤原因:編譯時if語句最後少放了一個括號
改正方法:自己編譯並看提示找出問題改正。
6-4 1.
(1)第一步:定義變量並初始化,運用for和if語句。
第二步:s中數組與ch1如果相等,在運用for循環比較s的另一個數組和ch2的大小,然後輸出第一個相等的數到第二個相等的值的數組並返回a。
(2)
#include<string.h> char *match(char *s, char ch1, char ch2 ) { int i=0,j=0,len=0; char *a; len = strlen(s); for(i=0;i<len;i++) { if(s[i]==ch1) { a=&s[i]; for(j=i;j<len;j++) { if(s[j]==ch2) { printf("%c\n", s[j]); return a; } else { printf("%c", s[j]); } } printf("\n"); return a; } } printf("\n"); *s=‘\0‘; return s; }
3.錯誤信息
錯誤原因:沒有弄懂怎麽從的一個相等字母到未知的不相等的數之間的輸出。
改正方法:通過詢問同學的經驗,明白了選取後邊最後的數為終點,並將前邊的都輸出。
6-1
1.
(1)第一步:輸入data,data不等於-1則進入while循環。
第二步:用if判斷頭文件是否為空,用一個if語句判斷當前值是否為單數如果是將p賦給n,如果不是將p賦給m。最後返回相應的值。
2.
struct ListNode *readlist() { struct ListNode *p,*head,*n; head=(struct ListNode*)malloc(sizeof(struct ListNode)); n=head; while(1) { p=(struct ListNode*)malloc(sizeof(struct ListNode)); scanf("%d",&p->data); if(p->data==(-1)) break; n->next=p; n=p; } n->next=NULL; return head->next; } struct ListNode *getodd( struct ListNode **L ) { struct ListNode *i,*j,*k,*h1,*h2; j=h1=(struct ListNode*)malloc(sizeof(struct ListNode)); h1->next=NULL; k=h2=(struct ListNode*)malloc(sizeof(struct ListNode)); h2->next=NULL; i=*L; int n=0; for(;i;i=i->next) { if((i->data)%2==1) { j->next=i; j=i; } else { k->next=i; k=i; } } j->next=NULL; k->next=NULL; *L=h2->next; return h1->next; }
3.錯誤信息
6-2 1.
(1)第一步:輸入需要的各個數據。
第二步:用一個for循環遍歷鏈表數據,用一個if語句判斷其是否大於等於最小值如果是存入鏈表中,最後返回鏈表的值。
2.
struct stud_node *createlist() { struct stud_node *p,*head,*n; head=(struct stud_node*)malloc(sizeof(struct stud_node)); n=head; while(1) { p=(struct stud_node*)malloc(sizeof(struct stud_node)); scanf("%d ",&p->num); if(p->num==0) break; scanf("%s %d",&p->name,&p->score); n->next=p; n=p; } n->next=NULL; return head->next; } struct stud_node *deletelist( struct stud_node *head, int min_score ) { struct stud_node *p,*k; p=(struct stud_node*)malloc(sizeof(struct stud_node)); k=p; for(;head;head=head->next) { if((head->score)>=min_score) { k->next=head; k=head; } } k->next=NULL; return p->next; }
3.錯誤信息
錯誤原因:沒有在指針變量前加入取地址符號。
改正方法:經過同學的幫助下才發現錯誤並改正。
6-3 1.
(1)第一步:用一個while將鏈表中的數據存入temp中
第二步:用for語句進行遍歷,先將數組的值賦給data,再將其賦值給鏈表,最後返回鏈表。
2.
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2) { struct ListNode *h,*p,*i,*k; h=(struct ListNode*)malloc(sizeof(struct ListNode)); p=h; i=list1; k=list2; while(i!=NULL&&k!=NULL) { if(i->data<k->data) { p->next=i; i=i->next; } else { p->next=k; k=k->next; } p=p->next; } while(i) { p->next=i; i=i->next; p=p->next; } while(k) { p->next=k; k=k->next; p=p->next; } p->next=NULL; return h->next; }
3.錯誤信息
二.
1.(1)指針數組是指向內存地址的數組,可能比正常數組常用,不過有些難以理解。
(2)對二級指針數組理解不到位。
(3)可以節省內存。不可以,指針沒法指向正確。
2.劉富垚:http://www.cnblogs.com/lhyyy/p/8906784.html
王廷宇:http://www.cnblogs.com/archeralter/p/8909036.html
於耀淞:http://www.cnblogs.com/jsjyys/p/8900992.html
3.
第3次作業