第3次作业
Posted 王鑫宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第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次作业的主要内容,如果未能解决你的问题,请参考以下文章