6-1 输出月份英文名
1、设计思路
第一步:定义一维指针数组,并赋予十二个月。
第二步:遍历数组,判断如果n在1到12中则将对应的地址赋给它。
第三步:返回a。
2、实验代码
char *getmonth( int n )
{
char *mon[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
char *a;
int i;
if(n>0&&n<=12)
{
a=mon[n-1];
}else
{
a=NULL;
}
return a;
}
3、本题调试过程碰到的问题及解决办法
中英文符号错误。
4、提交列表
6-2 查找星期
1、设计思路
第一步:将一个星期的七天赋给定义的一维指针数组。
第二步:通过strcmp函数判断其与数组元素是否相同,如果相同则返回i,否则返回-1.
第三步:结束。
2、实验代码
int getindex( char *s )
{
char *a[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int i;
for(i=0;i<7;i++)
{
if(strcmp(s,a[i])==0)
{
return i;
}
}
return -1;
}
3、流程图
4、本题调试过程碰到的问题及解决办法
无
5、提交列表
6-3 计算最长的字符串长度
1、设计思路
第一步:使用strlen函数来计算字符串长度,先定义最长max为0,使用for循环判断其字符串长度是否比max大。
第二步:如果长于max则将这个数赋予max。
第三步:返回max。
2、实验代码
int max_len( char *s[], int n )
{
int i,len=0,max=0;
for(i=0;i<n;i++)
{
len=strlen(s[i]);
if(len>max)
{
max=len;
}
}
return max;
}
3、本题调试过程碰到的问题及解决办法
没有给出i<n的条件。
4、提交列表
6-4 指定位置输出字符串
1、设计思路
第一步:新定义一个指针temp,如果s[i]与ch1相同则将其地址赋给temp跳出循环。
第二步:判断s[i]与ch2是否相等,如果不相等则输出s[i]否则输出s[i]并换行,返回temp。
第三步:结束。
2、实验代码
char *match( char *s, char ch1, char ch2 )
{
int i,j=strlen(s),k = 0,m=0;
char *temp;
for(i=0;s[i] != ' ';i++)
{
if(s[i] == ch1)
{
temp = &s[i];
j = i;
break;
}
}
for(i=j;s[i] != ' ';i++)
{
if(s[i] != ch2)
{
printf("%c",s[i]);
} else
{
printf("%c
",s[i]);
return temp;
}
}
printf("
");
return temp;
}
3、本题调试过程碰到的问题及解决办法
没有考虑s[i]不能是‘/0’的情况。
4、提交列表
6-1 奇数值结点链表
1、设计思路:
第一步:建立链表,用p->data==-1判链表结束,定义head为头文件,定义链表n放置输入元素。
第二步:建立的链表拆分为两个链表,历遍链表,按单双数将其放置于不同链表。
第三步:将k链表赋给原链表,并返回h1链表。
2、实验代码
struct ListNode *readlist()
{
int number;
struct ListNode *p = NULL,*head = NULL,*tail = NULL;
scanf("%d",&number);
while(number!=-1&&number>0 ) {
p = (struct ListNode*)malloc(sizeof(struct ListNode));
p->data = number;
if(head == NULL) {
head = p;
} else {
tail->next = p;
}
tail = p;
scanf("%d",&number);
}
if(head == NULL) {
return NULL;
}
tail->next = NULL;
return head;
}
struct ListNode *getodd( struct ListNode **L )
{
struct ListNode *p = *L,*head1 = NULL,*r = NULL,*L1 = NULL,*r1 = NULL;
while(p!=NULL&&p->data>0)
{
if(p->data%2!=0)
{
if(head1 == NULL)
{
head1 = p;
}else
{
r->next = p;
}
r = p;
} else
{
if(L1 ==NULL)
{
L1 = p;
} else
{
r1->next = p;
}
r1 = p;
}
p = p->next;
}
if(head1==NULL){
return NULL;
} else
{
r->next = NULL;
}
if(L1==NULL)
{
*L = NULL;
} else
{
r1->next = NULL;
*L = L1;
}
return head1;
}
3、本题调试过程碰到的问题及解决办法
4、提交列表
6-2 学生成绩链表处理
1、设计思路
第一步:建立一个链表并返回。
第二步:对链表进行历遍,当p->score小于min_score时将链表向前推进,去掉要删除项。
第三步:返回链表头文件。
2、实验代码
struct stud_node *createlist()
{
struct stud_node *tail=NULL,*head=NULL,*p=NULL;
int num=0,score=0;
char name[20];
scanf("%d",&num);
while(num!=0)
{
p=(struct stud_node*)malloc(sizeof(struct stud_node));
p->num=num;
scanf("%s %d",p->name,&p->score);
if(head==NULL)
{
head=p;
}else
{
tail->next=p;
}
tail=p;
scanf("%d",&num);
p->next=NULL;
}
return head;
}
struct stud_node *deletelist( struct stud_node *head, int min_score )
{
struct stud_node *ptr1=NULL,*ptr2=NULL;
for(;head!=NULL;head=head->next)
{
if(head->score>=min_score)
{
if(ptr1==NULL)
{
ptr1=head;
}else
{
ptr2->next=head;
}
ptr2=head;
}
}
if(ptr1==NULL)
{
return NULL;
}else
{
ptr2->next=NULL;
}
return ptr1;
}
3、本题调试过程碰到的问题及解决办法
无。
4、提交列表
6-3 链表拼接
1、设计思路
第一步:定义链表。
第二步:利用链表原为升序链表这一特点进行排序。
第三步:返回链表p。
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、本题调试过程碰到的问题及解决办法
4、提交列表
学习总结
学习了链表。
我的git地址:
https://coding.net/u/zhouxuan12/p/123/git?public=true
点评:
http://www.cnblogs.com/lixiaojing/p/8760462.html
http://www.cnblogs.com/fengzx/p/8781906.html
http://www.cnblogs.com/dx2017/p/8781858.html
图表