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*990;
    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、学习进度表

原文地址:https://www.cnblogs.com/jsjyys/p/8900992.html

时间: 2024-11-10 01:11:48

2018上第三次作业的相关文章

2018软件工程第三次作业

最大连续子数组和(最大子段和) 一.问题描述 问题描述: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+-+a[j]},1<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20. 二.题目分析 本

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

最大子段和 令f[i]为从莫一点开始到a[i]为止最大的子段和,则有以下转移方程: \[f_i = \max(f_{i-1} + a[i], a[i])\] 因为只需遍历一次数组就可求出,所以复杂度为\(O(n)\) package org.sequix.homework3; /** * 提供求最大子段和的工具类. * * @author sequix * @version 0.0.1 * @since 2018/03/26 */ public class MaxSubArray { /** *

解题报告——-2018级2016第二学期第三周作业

解题报告——2018级2016第二学期第三周作业 A:[NOIP2002P]过河卒 题目: 描述 如图,A 点有一个过河卒,需要走到目标 B   点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例 如上图 C  点上的马可以控制 9 个点(图中的P1,P2 … P8 和 C).卒不能通过对方马的控制点. 棋盘用坐标表示,A 点(0,0).B 点(n,m)(n,m 为不超过 20  的整数,并由键盘输入)

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

软件工程(2018)第三次个人作业 前方高能:本次作业中含有大量基础知识,请不要嘲笑我QAQ 第三次作业来了.选择看似相比有难度的(1)(其实是看不懂(2)在干什么) 题目要求:题目(1):最大连续子数组和(最大子段和) 背景 问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+-+a[j]},1

马哥2016全新Linux+Python高端运维班第三周作业作答

                    马哥2016全新Linux+Python高端运维班第三周作业                                           1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可.     [[email protected] ~]# who | awk '{print $1 $NF}'| uniq -d     [[email protected] ~]# who     yicx     :0  

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

2017-2018-2 20179215 <密码与安全新技术> 第三次作业 课程:<密码与安全新技术> 班级: 201792 姓名: 袁琳 学号:20179215 上课教师:谢四江 上课日期:2018年3月29日 必修/选修: 选修 学习内容总结 从多媒体到跨媒体 1.传统多媒体具有:获取不易,数据量小,关联度低等特点 2.移动互联网时代的多媒体具有:获取容易,数据量大,关联度高等特点 因此 数据的剧增.视频社交网站快速发展.视频上传量的增加等 正在加快形成跨媒体大数据. 3.跨媒

第三次作业三总结与心得

知识点总结: 1.调用幂函数pow()生成乘方表 power=pow(); 2.#include<math.h>程序中调用了数学函数,需包含头文件math.h 3.调用自定义函数fact(i)计算i! product=fact(i); 4.double fact(int n);自定义函数的声明,以分号结束 5.double product;变量product用于存放结果(阶乘的值) 6.return product;将结果送回主函数 7.定义求n!的函数double fact(int n)函数

魏昊卿——《Linux内核分析》第三周作业:Linux系统启动过程

魏昊卿——<Linux内核分析>第三周作业:Linux系统启动过程 一.实验部分 实验指导 使用实验楼的虚拟机打开shell 1 cd LinuxKernel/ 2 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 内核启动完成后进入menu程序(<软件工程C编码实践篇>的课程项目),支持三个命令help.version和quit,您也可以添加更多的命令,对选修过<软件工程C编码实践篇>

第三次作业——个人作业——软件产品案例分析

第三次作业--个人作业--软件产品案例分析 评测产品:K米,安卓端 第一部分 调研,评测 评测 初体验 还没去KTV的时候,刚开始下了这个APP,我按正常软件一样,进行了注册功能,可到要写用户信息的时候,(可能是本着比较随意的思想,只想一直点,只填了一些以外使用其他APP时候的基本信息就一直点进一步),在上传用户头像的时候,我想直接跳过,没想到这一定要上传头像才可以啊!!!然后注册完后点进去,看了下K歌功能都不能用,看了一下用户的社区,发现大部分用户动态都是国庆的,这个时候已经10.17了,可见