第三次作业

Posted 苏冽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三次作业相关的知识,希望对你有一定的参考价值。

题目6-1 输出月份英文名
1.设计思路
(1)本次题目的算法
第一步:阅读题目 理解主函数与函数声明
第二步:定义调用函数*getmonth
第三步:使用witch函数
第四步:最终回到null
(2)流程图

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)流程图

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)流程图

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:编译错误
   错误原因:打代码时错误
   改正方法:重新打印



学习总结和进度
数组可以是任何类型,如果数组的各个元素都是指针类型,用于存放内存地址,那么这个数组就是指针数组。
*数组名[数组长度]
二维数组是数组元素为一维数组的一维数组。
指针数组可以直接对数组元素进行引用操作,也可以间接访问操作数组元素所指向的单元内容。

以上是关于第三次作业的主要内容,如果未能解决你的问题,请参考以下文章

第三次寒假作业

第三次作业

第三次作业

第三次作业

第三次作业

第三次作业