zoukankan      html  css  js  c++  java
  • 第三次作业

    第三次作业#

    提交列表##

    第一题##

    设计思路###

    第一步:据题目要求,由给定的数字来返回月份,首先要定义一个字符数组来包含各个月份的英文名。
    第二步:通过遍历的方法来找出所对应的月份。
    第三步:根据要求,不是1-12的数字之外的输出“wrong input!”,便通过“if”条件语句进行判断来限制这个条件。

    代码###

    #include <stdio.h>
    char *getmonth( int n )
    {
    char *month[13]={"January","February","March","April","May","June","July","August","September","October","November","December"};
    int i=0;
    for(i=0;i<13;i++)
    {
        if(i==0)
        {
            continue;
        }else if(n==i)
        {
            return *(month+i-1);
        }
    }
    if(n>=13||n<=0)
    {
        return NULL;
    }
     } #include <stdio.h>
    char *getmonth( int n )
    {
    char *month[13]={"January","February","March","April","May","June","July","August","September","October","November","December"};
    int i=0;
    for(i=0;i<13;i++)
    {
        if(i==0)
        {
            continue;
        }else if(n==i)
        {
            return *(month+i-1);
        }
    }
    if(n>=13||n<=0)
    {
        return NULL;
    }
     } 
    

    问题###

    感觉不是很好做,咨询了很多人才弄懂。

    第二题##

    设计思路###

    第一步:定义一个字符数组。
    第二步:之后遍历数组进行查找,根题目要求返回的是一个整型元素,而在编写的函数里定义的数组是字符类型的,便可通过同为整型的循环变量来解决这个问题。

    代码###

    #include <stdio.h>
    #include <string.h>
    #define MAXS 80
    int getindex( char *s )
    {
    char *a[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
    int i=0,result=-1;
    for(i=0;i<7;i++)
    {
        if(strcmp(s,a[i])==0)
        {
            result=i;
        }
    }
    return result;
    }
    

    问题###

    感觉不是很懂,还是在同学的帮助下完成的作业

    第三题##

    设计思路###

    第一步:s数组,计算出每行元素的长度。
    第二步:在for循环中进行比较,定义int型max,赋初值为0,当行元素的长度大于max,则将长度的值赋给max。
    第三步:返回max的值。

    代码###

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAXN 10
    #define MAXS 20
    int max_len( char *s[], int n )
    {
    int max=0,j=0,len=0;
    for(j=0;*(s+j)!='';j++)
    {
        len=strlen(*(s+j));
        if(max<len)
        {
            max=len;
        }
    }
    return max;
    }
    

    问题###

    不是很懂这道题,还是在朋友帮助下完成

    第四题##

    设计思路###

    第一步:根据题意,要先查找输出指定的字符串,首先要定义循环变量,通过遍历来进行查找;
    第二步:在查找之前需要定义一个指针,用它来指向所传入的所让输入的数组的首地址,之后根据传入的字符进行判断,如果在遍历过程中和第一个传入的字符相同便把它赋给指针,之后再次前提下再次进行遍历,找出在此字符数组中和第二个字符相同的字符;并进行输出;
    第三步:最后需要判断一种只有第二个字符,而没有第一个字符的情况,故需加上若原字符数组为空,并返回元字符数组的首地址;

    代码###

    char *match( char *s, char ch1, char ch2 )
    {
    int i=0,j=0;  
    char *p=NULL;    
    for(i=0;*(s+i)!='';i++)
    {  
        if(s[i]==ch1)
        {  
            p=&s[i];  
            for(j=i;*(s+j)!='';j++)
            {  
                if(s[j]!=ch2)
                {  
                    printf("%c", s[j]);  
                }  
                if(s[j]==ch2)
                {  
                    printf("%c
    ", s[j]);  
                    return p;  
                }     
            }  
            printf("
    ");  
            return p;  
        }  
    }
    if(s[i] == '')
    p = &s[i];
    printf("
    ");  
    return p; 
    }
    

    问题###

    这道题还是很难 不是很懂 是在同学协助下写完的

    第五题##

    设计思路###

    第一步:本题需要两个函数,第一个函数是进行链表的输入,在输入时,首先需要进行定义所需的结构体变量,之后在定义结构体中所需要的各个变量;之后再进行输入操作,通过while判断,进行给链表的单向赋值,在赋值时,还需要进行动态分配内存的操作,最后返回头指针;
    第二步:本题的第二个函数就是进行奇数与偶数的分离,大体上是通过两个链表进行分离,通过while判断所传入的链表中的data是否能被2所整除,来进行奇偶的分离;最后返回头指针;

    代码###

    struct ListNode *readlist()
        {
            int data;
            struct ListNode *head=NULL,*p=NULL,*tail=NULL;
            scanf("%d",&data);
            while(data != -1){
                p = (struct ListNode *)malloc(sizeof(struct ListNode));
                p->data = data;
                p->next = NULL;
                if(head == NULL){
                    head = p;
                    tail = p;
                }else{
                    tail->next = p;
                    tail = p;
                }
                scanf("%d",&data);
        }
            return head; 
    
        } 
    
    struct ListNode *getodd( struct ListNode **L )
    {
         struct ListNode *p = *L,*m=NULL,*n=NULL,*head1=NULL,*head2=NULL;
         head1=(struct ListNode*)malloc(sizeof(struct ListNode));
         head2=(struct ListNode*)malloc(sizeof(struct ListNode));
        head1->next=NULL;
        head2->next=NULL;
        m=head1;
        n=head2;
         while (p) {
               if((p->data)%2 == 1){
                    n->next=p;
                    n=p;
                 }else{
                    m->next=p;
                    m=p;
                     }
                   p = p->next;
         }
         m->next=NULL;
        n->next=NULL;
        *L = head1->next;   
        return head2->next;
    }
    

    问题###

    这道题还是很难,我还是在同学的协助下完成的,QAQ。

    第六题##

    设计思路###

    第一步:在createlist函数中将输入的学号,姓名和分数存储到链表中,用while循环,返回链表的头结点;
    第二步:在deletelist函数中定义链表的结点,若结点中的分数小于规定的值,释放此结点的内存;
    第三部:返回主函数。

    代码###

    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;
    }
    

    问题###

    我感觉链表好难,没有太懂,QAQ

    第七题##

    设计思路###

    第一步:在ListNode list1中储存字符的内存大小;
    第二步:ListNode list2中储存字符的内存大小;
    第三步:用for循环和if语句交换,用ListNode函数合并两个列表。

    代码###

    struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2)
    {
        int list[100],i=0,j=0,swap=0,count=0;
        while(list1!=NULL)
        {
            list[i]=list1->data;
            i++;
            list1=list1->next;
            count++;
        }
        while(list2!=NULL)
        {
            list[i]=list2->data;
            i++;
            list2=list2->next;
            count++;
        }
        for(i=0;i<count;i++)
        {
            for(j=i+1;j<count;j++)
            {
                if(list[i]>list[j])
                {
                    swap=list[i];list[i]=list[j];list[j]=swap;
                }
            }
        }
        struct ListNode *p=NULL,*head=NULL,*tail=NULL;
        for(i=0;i<count;i++)
        {
            p=(struct ListNode*)malloc(sizeof(struct ListNode));
            p->data=list[i];
            p->next=NULL;
            if(head==NULL)
            {
                head=p;
            }else
            {
                tail->next=p;
            }
            tail=p;
        }
        return head;
    }
    

    问题###

    这题好难啊,还是同学帮助的,QAQ

    评论##

    金海宽
    黄国戎
    高立彬

    学习进度##


  • 相关阅读:
    LeetCode Array Easy 414. Third Maximum Number
    LeetCode Linked List Medium 2. Add Two Numbers
    LeetCode Array Easy 283. Move Zeroes
    LeetCode Array Easy 268. Missing Number
    LeetCode Array Easy 219. Contains Duplicate II
    LeetCode Array Easy 217. Contains Duplicate
    LeetCode Array Easy 189. Rotate Array
    LeetCode Array Easy169. Majority Element
    LeetCode Array Medium 11. Container With Most Water
    LeetCode Array Easy 167. Two Sum II
  • 原文地址:https://www.cnblogs.com/jinjian155/p/8909233.html
Copyright © 2011-2022 走看看