2018上第三次作业

Posted 于耀淞

tags:

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

要求一:完成PTA作业

答:作业已完成!

要求二:pta作业编程题目的解题思路和调试过程记录

C高级第三次作业(1)

完成情况如图:


第一题:输出月份英文名

1.设计思路:

(1)算法:
第一步:定义一个指针数组,数组内容为各个月份,再定义一个整形变量s;
第二步:如果n的值在1~12之间,那么就返回s;
第三步:如果n值不在1~12,那么就把NULL赋值给s,再返回s。
(2)流程图:
主函数

调用函数

2.实验代码:

char *getmonth( int n ){
  int s;
   char *a[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
    if(n<13&&n>0){
    s=a[n-1];
    return s;
}
else{
  s=NULL;
  return s;
}
}

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

问题:本题一开始用二维数组做,得不出正确结果
解决办法:用指针数组做就好了。

第二题:查找星期

1.设计思路:

(1)算法:
第一步:定义a为整形变量,定义一个指针数组,数组内容是星期;
第二步:用for循环遍历数组,如果s和数组里的某一元素相等时就跳出循环;
第三步:如果此时a正好为7,则输出a等于-1,如果a不是7,则直接返回a的值。
(2)流程图:
略。

2.实验代码:

int getindex(char *s)  
{  
    int a;  
    char *day[7] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };  
    for (a = 0; a <= 6; a++)  
    {  
        if (strcmp(s, day[a]) == 0) break;  
    }  
    if (a == 7) a = -1;  
    return a;  
}  

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

问题:本题一开始没思路
解决办法:上网查到了strcpy的概念,就是比较两者大小,如果相等就等于零,然后会做了。

第三题:计算最长的字符串长度

1.设计思路:

(1)算法:
第一步:定义max,i,len为整形变量,且max为0;
第二步:用strlen函数来计算数组中字符串的长度为len;
第三步:如果max比len大,则把max赋值给max,如果max小于等于len,那么就把len的值赋给max;
第四步:循环结束后,返回max的值给主函数。
(2)流程图:
略。

2.实验代码:

int max_len(char *s[],int n)
{
int max = 0, i,len;
for(i = 0; i < n;i++)
{
len = strlen(s[i]);
if(max>len){
  max=max;
}
else if(max<=len){
  max=len;}
}
return max;
}

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

问题:本题一开始不会没思路
解决办法:w上网查到了用strlen函数能求出来字符长度,就会了。

第四题:指定位置输出字符串

1.设计思路:

(1)算法:
第一步:定义i,j为整数变量;指针p为空指针;
第二步:用for循环如果s[i]=ch1,那么把s[i]的地址赋给p,然后第二个for循环如果s[j]!=ch2,那么输出s[j],如果s[j]=ch2,那么输出s[j]\\n,返回p;
第三步:跳出第二个循环后,输出\\n,再返回p的值;
第四步:跳出第一个循环,把\\n赋给s[i-1],再把s[i-1的地址]赋值给p,返回p的值。
(2)流程图:
略。

2.实验代码:

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

s[i-1]=\'\\n\';

p=&s[i-1];
return p; 
}

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

问题:本题一直没搞懂
解决办法:上网查找,把网上代码复制下来了。

C高级第三次作业(2)

完成情况如图:

第一题:奇数值结点链表

1.设计思路:

(1)算法:
(2)流程图:
略。

2.实验代码:

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

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

第二题:学生成绩链表处理

1.设计思路:

(1)算法:

(2)流程图:
略。

2.实验代码:


第三题:链表拼接

1.设计思路:

(1)算法:
(2)流程图:
略。

2.实验代码:

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>
#include <math.h>
int main ()
{
    long int q=0,c=0,d=0,e=0;
    q = 201*3935;
    int axb[q];

    for(c=1;c<q;c++)
    {
        axb[c-1] = c;
    }
    for(c=1;c<=q;c++)
    {
        for(d=2;d<=sqrt(c);d++)
        {
            if(c%d==0){
                axb[c-1]=1;
            }
            }
            }
    for(c=0,e=0;c<q;c++)
    {
        if(axb[c]!=1){
            printf("%d ",axb[c]);
            e++;
            if(e%5 == 0){
            printf("\\n");
            }
            }
            }
    return 0;
}

要求三:学习总结和进度

1、总结两周来所有PTA作业中每个题目所使用的知识点。(我学到了什么,未学会什么?)

(1)如何理解指针数组,它与指针、数组有何关系?为何可以用二级指针对指针数组进行操作?
答:指针数组就是一个数组,但是这个数组是个指针;因为题目中指针数组中的一个元素是字符串,该字符串也是个指针,它指向其中的元素,一个字符串里面的元素也可以用二维数组来写。
(2)将C高级第三次PTA作业(1)任何一个题目改为使用二级指针对指针数组进行操作。
(3)用指针数组处理多个字符串有何优势?可以直接输入多个字符串给未初始化的指针数组吗?为什么?
答:二维数组会浪费空间。
不可以,指针要先初始化,要不然不知道指针指向哪一个地址。

2、将PTA作业的源代码使用git提交到托管平台上。

(1)提交证明:


(2)Git地址:https://git.coding.net/jsjyuyaosong/usth--work.c.git

3、点评3个同学的本周作业

史泽文:http://www.cnblogs.com/shilcz/p/8906128.html
董雅洁:http://www.cnblogs.com/exo123/p/8798720.html
张心悦:http://www.cnblogs.com/zxy980612/p/8858885.html

4、学习进度表

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

软件工程(2018)第三次个人作业

2017-2018-2 20179215《密码与安全新技术》 第三次作业

软件工程(2018)第三次作业

软件工程(2018)第三次团队作业

软件工程(2018)第三次作业

软件工程(2018)第三次团队作业