第三次作业

提交列表

【6-1】 输出月份英文名
1.设计思路:先将十二个月分别赋值给一维数组指针,定义一个返回值变量。然后遍历数组,寻找对应的变量,最后返回变量的地址值。
2.实验代码:
`

char *getmonth( int n )

{

    char *a[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};

    char *p=NULL;

     if(n<=12&&n>=1)

     {

 	    p=a[n-1];

    }	

	     return p;

       }

`
4.流程图:

3.本题调试过程碰到问题及解决办法:无。
【 6-2 】查找星期
1.设计思路:先将一个星期的每天分别赋值数组指针,然后定义一个整型变量,遍历数组,用strmcp函数比较数组中每行元素与输入的字符串是否相同,最后返回整型变量值。
2.实验代码:
`

   int getindex( char *s )

    {

    int i=0;

    char *p[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

   for(i=0;i<7;i++)

   {

     if(strcmp(s,p[i])==0)

    {

	    return i;

    }

    }	    return -1;

       

}

3.本题调试过程碰到问题及解决办法:无。 【6-3】 计算最长的字符串长度 1.设计思路:先定义整型变量,在使用for循环中进行判断,最后返回m。 2.实验代码:

int max_len( char *s[], int n )

{

    int i,m=0;

    for(i=0;i<n;i++)

    {

        	if(m<strlen(s[i]))

        	{

        		m=strlen(s[i]);

    		}

        

    }

    return m;

}

3.本题调试过程碰到问题及解决办法:无。 【6-4】 指定位置输出字符串 1.设计思路:先判断s的长度,遍历s字符数组,找到与ch1相同时s的下标,并将下标值赋给一个整型变量,定义为j。然后定义一个指针字符p,将&s[i]赋给p跳出循环,从上面的j开始,循环字符数组s,在循环中分情况,若s[i] != ch2,则输出s[i],反之则输出s[i]加换行,且返回p。循环结束后,输出换行及返回s。 2.实验代码:

#include<string.h>

char *match(char *s, char ch1, char ch2 )

{  

    int i=0,j=0,len=0;  

    char *p;

    len = strlen(s);  

    for(i=0;i<len;i++){  

        if(s[i]==ch1){  

            p=&s[i];  

                for(j=i;j<len;j++){  

                if(s[j]==ch2){  

                    printf("%c\n", s[j]);  

                    return p;  

                }  

		        	else

			    {  

                    printf("%c", s[j]);  

                }     

            }  

                printf("\n");  

                return p;  

                }  

            }  

        printf("\n");

       *s='\0';

    return s;  

    }  

`
3.本题调试过程碰到问题及解决办法:无。
【一道编程题】:
有一个axb的数组,该数组里面顺序存放了从1到a*b的数字。其中a是你大学号的前三位数字,b是你大学号的后四位数字,比如你的学号是2017023936,那么数组大小是201 x 3936,数组中顺序存放了1到791136(201和3936的积)的整数. 要求用筛选法,把该数组里的质数找出并打印出来,打印格式为5个质数一行,数字间用空格隔开。
筛选法具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。

实验代码:
`

#include <stdio.h>

int main ()

{

    int a=20,b=970;

     int *p = (int *)malloc((a*b) *sizeof(int));

    int *s = (int *)malloc((a*b) *sizeof(int));

    int i,j;

    for(i=0;i<(a*b);i++) {

        p[i] = i+1;

    }

    for(i=0;i<(a*b);i++) {

        for(j = i+1;j<=(a*b);j++) {

            if(p[i] !=1&&p[j] != 1) {

                if(p[j]%p[i] ==0) {

                    p[j] = 1;

                }

            }

        }

    }

    j=0;

    for(i=0;i<(a*b);i++) 
        {

        if(p[i] != 1) 
        {

            printf(" %d",p[i]);

            j++;

        } 

        if(j == 5) 
        {

            printf("\n");

            j=0;

        }

    }

} 

`

【6-1】 奇数值结点链表
1.设计思路:先定义结构体,然后定义变量,用while循环判断,再用指针赋值,重复,进而输出返回值。
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;

}

`

4.流程图:

3.本题调试过程碰到问题及解决办法:无。
【6-2】 学生成绩链表处理
1.设计思路:在createlist函数中将输入的学号,姓名和分数存储到链表中,while循环进行条件判断,并且必须在判断学号不为0的情况下才可以输入姓名和成绩,返回链表的头结点。然后在deletelist函数中遍历链表的结点,若结点中的分数小于规定的值则删除此结点,若最终结点全被删除,即返回空的。最后将判断后链表的头结点返回主函数。
2.实验代码:
`

struct stud_node *createlist()

{    

    struct stud_node *head, *tail, *q;

    head = tail = NULL;

    int num;

    scanf ("%d", &num);

    while (num != 0)

    {

        q = (struct stud_node *)malloc (sizeof (struct stud_node));

        scanf ("%s %d", q->name, &q->score);

        q->num = num;

        q->next = NULL;

        if (head == NULL)

            head = q;

        else

            tail->next = q;

        tail = q;

        scanf ("%d", &num);

    }

    return head;

}

struct stud_node *deletelist( struct stud_node *head, int min_score )

{

    struct stud_node *ptr1, *ptr2;

    while (head != NULL && head->score < min_score)

    {

        ptr2 = head;

        head = head->next;

        free(ptr2);

    }

    if (head == NULL)

        return NULL;

    ptr1 = head;

    ptr2 = head->next;

    while (ptr2 != NULL)

    {

        if (ptr2->score < min_score) {

            ptr1->next = ptr2->next;

            free(ptr2);

        }

        else

            ptr1 = ptr2;

        ptr2 = ptr1->next;

    }

    return head;

} 

3.本题调试过程碰到问题及解决办法:无。 【6-3 】链表拼接 1.设计思路:描述题目算法,使用结构体定义变量指针,然后用循环遍历数组,判断赋值,并输出。 2.实验代码:

    struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2) {

   struct ListNode *p1=list1;

     int length=0;

     int array[100];

     for(p1=list1;p1!=NULL;p1=p1->next) {

        array[length] = p1->data;

         length++;

     } 

     p1=list2;

     for(;p1!=NULL;p1=p1->next) {

        array[length] = p1->data;

         length++;

     } 

     int i,j,t;

     for(i=0;i<length-1;i++) {

        for(j=i+1;j<length;j++) {


            if(array[j]<array[i]) {

              t =array[j];

              array[j]=array[i];

              array[i] = t;

             }

         }

     }

     struct ListNode *q,*head1 = NULL,*tail1=NULL;

     i=0;

     while(i<length) {

        q = (struct ListNode *)malloc(sizeof(struct ListNode));

        q->data = array[i];

         if(head1 == NULL) {

            head1 = q;

        } else {

            tail1->next = q;

        }

         tail1 = q; 

         tail1->next = NULL;

         i++; 

      }

     return head1;

    }  

`

3.本题调试过程碰到问题及解决办法:无。

【学习总结和进度】
1、总结两周里所学的知识点,回答下列问题?(用自己的话表达出你的理解,网上复制粘贴没有分数)(5分)
(1)如何理解指针数组,它与指针、数组有何关系?为何可以用二级指针对指针数组进行操作?
答:指针数组更加的实用,二级指针指向地址,可以指向以及指针。
(2)将C高级第三次PTA作业(1)任何一个题目改为使用二级指针对指针数组进行操作。
(3)用指针数组处理多个字符串有何优势?可以直接输入多个字符串给未初始化的指针数组吗?为什么?
答:更加的实用,可以灵活运用,可以。
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
git地址:https://git.coding.net/lfyyyy/seven
截图:

3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业,无点评作业(你的作业未被3人点评)/或者没有回复同学或老师的点评都倒扣该题分数。(4分)
建议采用汉堡包的方式点评其他同学的作业,只有赞扬没有给出实质性建议或者指正的不算点评,不给分。
史泽文:http://www.cnblogs.com/shilcz/
王廷宇:http://www.cnblogs.com/archeralter/
董雅洁:http://www.cnblogs.com/exo123/p/8798720.html

4、请用表格和折线图呈现你本周(4/9 8:00~4/23 8:00)的代码行数和所用时间、博客字数和所用时间(3分)

posted on 2018-04-22 13:52  执念丶。  阅读(163)  评论(5编辑  收藏  举报

导航