• 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] ,返回p;
    第三步:跳出第二个循环后,输出 ,再返回p的值;
    第四步:跳出第一个循环,把 赋给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]!='';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; 
    } 
    } 
    
    s[i-1]='
    ';
    
    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("
    ");
                }
                }
                }
        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、学习进度表

    IT小白
  • 相关阅读:
    linux脚本练习之将数据导入oracle表
    linux脚本之一个程序调用另一个程序
    使用客户端Navicat连接数据库oracle19c
    centos7安装与卸载oracle19c
    Redis-cluster集群搭建(redis版本5.0.4)
    linux下redis的哨兵模式
    使用POI导入Excel文件
    MySQL8.0搭建MGR集群(MySQL-shell、MySQL-router)
    MySQL Shell用法
    CentOS 7下使用rpm包安装MySQL8.0
  • 原文地址:https://www.cnblogs.com/jsjyys/p/8900992.html
Copyright © 2020-2023  润新知