zoukankan      html  css  js  c++  java
  • 2019年春季学期第三周作业

    2019年春季学期第三周作业
    基础作业
    本周没上课,但是请大家不要忘记学习。
    本周请大家完成上周挑战作业的第一部分:给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。
    例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子数组为[3, 10, -4, 7, 2]
    输入:
    请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。
    输出
    在不删除原有文件内容的情况下,将最大子数组以及子数组的和写入文件。

    预习作业
    预习“7.2 二维数组”,并完成PTA上的第三周作业:判断上三角矩阵
    预习可以参看翁恺老师的MOOC视频:https://www.icourse163.org/course/ZJU-9001 ,第八周 数组—》8.2 数组运算

    以上两项作业,完成后请写好编程总结,并在博客园提交。

    请注意:题目做起来难说明我们还有提升的空间,请大家相信自己的能力是可以不断提升的,我对大家有信心!

    编程总结要求:
    格式标准,程序正确,思路清晰(有流程图),有对自己作业的评价(存在的问题和解决办法、心得、完成作业的时间消耗),程序运行结果的截图或者效果录像。

    题目1

    代码

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int main(void)
    {
        int i,j,x=0,y,n,max,sum,head,tail; 
        char a[100],b[100];
        FILE *fp; 
        if((fp=fopen("D:\ocean.txt","w+"))==NULL)  //创造文件 
        {
            printf("File opren error!
    ");
            exit(0);
        }
        scanf("%d",&n);
        for(i=0;i<n;i++)                   //创并且输入数组
        {
            scanf("%d",&a[i]);
            fprintf(fp,"%d,",a[i]);
        }
        
        fclose(fp);
        
        if((fp=fopen("D:\ocean.txt","r+"))==NULL)  //读取文件数据 
        {
            printf("File opren error!
    ");
            exit(0);    
        }
        for(i=0;i<n;i++)                    
        {
            fscanf(fp,"%d,",&y);
            b[i]=y;
        }
        fclose(fp);
        
        for(i=0;i<n;i++)
        {
            sum=0;
            for(j=i;j<n;j++)
            {
                sum=sum+b[j];
                if(sum>max)
                max=sum;
            }
        }
        for(i=0;i<n;i++)
        {
            sum=0;
            for(j=i;j<n;j++)
            {
                sum=sum+b[j];
                if(sum==max)
                {
                   head=i;
                   tail=j;
                   break;
                }
    
            }
        }
        if((fp=fopen("D:\ocean.txt","a+"))==NULL)  
        {
            printf("File opren error!
    ");
            exit(0);
        }
    //debug   head和tail数值无问题   for语句不执行,  待尝试方案:重写试试。 
        //debug printf("
    最大子数组是");
        fprintf(fp,"
    最大子数组是");
        for(i=head;i<=tail;i++)
          {
          fprintf(fp,"%d,",b[i]);
          //debug printf ("%d",b[j]);
        } 
        fprintf(fp,"
    其和为%d",max);
        
        fclose(fp);
        
        //debug printf("%d",max);
        
        return 0;   
    }

    流程图

    遇到问题

    一开始就想好可以用穷举法找出最大子数组,但是我感觉这个方法运行效率太低了,于是去网上找比较高的办法,最后办法是找到了,但是太复杂了我就没有写了.........主要是还用了一些我此前不知道的东西。如果不照抄,等我学完估计要错过上交时间了(毕竟一开始没注意到有作业..)。

    最后还是用最低效但是简单的办法做了这个题目.

    预习题目

    7-1 判断上三角矩阵 (15 分)

    上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

    本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

    输入格式:

    输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。

    输出格式:

    每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。

    输入样例:

    2
    3
    1 2 3
    0 4 5
    0 0 6
    2
    1 0
    -8 2
    

    输出样例:

    YES

    NO


    代码如下
    #include<stdio.h>
    int main()
    {
        int n,x,t,j,i;
        int a[20][20];
        int flag[11]={0};
        scanf("%d",&t);
        for(x=1;x<=t;x++)
        {
            scanf("%d",&n);
            for(i=1;i<=n;i++)     //存入数组中 
            {
               for(j=1;j<=n;j++)
               {
                 scanf("%d",&a[i][j]);
               }
            }
            
            for(i=2;i<=n;i++)       //数组对应元素判断 
            {
                for(j=1;j<i;j++)
                {
                    if(a[i][j]!=0)
                    flag[x]=1; 
                }
            }
        }
        
        for(x=1;x<=t;x++)
        {
            if(flag[x]==1)     //打印结果 
           {
              printf("NO
    ");
           }
           else
           printf("YES
    ");
        }
    
    
        return 0;
    }
    
    

    流程图

    遇到问题:无,很简单的预习题目..............
    
    

    四、学习进度条。

    
    

    周日期

    这周所花时间

    代码行数

    学到的知识点简介

    目前比较迷惑的问题

    314-315

    约8小时

    120

    二维数组,文件各种读取和输入的方法。找数组中最大子数组的方法。

     
     
  • 相关阅读:
    部署yearning1.3
    git常用指令
    U盘centos7系统安装http://www.augsky.com/599.html
    C语言与SQL SERVER数据库(转)
    C连接MySQL数据库开发之Windows环境配置及测试(转)
    vs2012中添加lib,.h文件方法(原)
    如何用Visual Studio 2013 (vs2013)编写C语言程序 (转)
    Java值传递以及引用的传递、数组的传递!!
    ssh整合需要那些jar
    类加载器
  • 原文地址:https://www.cnblogs.com/807194965lxy/p/10537043.html
Copyright © 2011-2022 走看看