• 2019年春季第三周 编程总结


    一、基础作业

    1、题目:给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。
    例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子数组为[3, 10, -4, 7, 2]
    输入:
    请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。
    输出
    在不删除原有文件内容的情况下,将最大子数组以及子数组的和写入文件。

    2、程序代码:

    #include <stdio.h>
    #include <stdlib.h>
    int main (void)
    {
     int max=0,i,j,k,m,n,a[8];      //max和k为子数组数的和 ;i,j,,n,m为变量序数。
     FILE *dp;                     //定义文件指针,给定一个含8个数的数组
    if((dp=fopen("E:\2019年春季学期第二周作业__邓鹏\dengpeng.txt","a+"))==NULL)
    {
     printf("The specified file was not found!
    ");
     exit(0);
    }                          //打开文件。
    for(i=0;i<8;i++)         //读写文件。
     {
       fscanf(dp,"%d ",&a[i]);
       printf("%d ",a[i]);
     }
    for(i=0;i<8;i++)          //此for循环为求出子数组中的最大和max 。
    {
    	k=0;
    	for(j=i;j<8;j++)
    	{
    		k=k+a[j];
    		if(k>max) max=k;
    	}
    }
    for(i=0;i<8;i++)          //此for循环为根据最大和找出最大和子数组的起始和终止“下标 ”m和n。
    {
    	k=0;
    	for(j=i;j<8;j++)
    	{
    		k+=a[j];
    		if(k==max) {m=i;n=j;}
    	}
    } 
    fprintf(dp,"
    最大和的子数组:");
    printf("
    最大和的子数组:");
    for(i=m;i<=n;i++)        //此for循环为将最大子数组写入文件。 
    {
    	fprintf(dp,"%d ",a[i]);
    	printf("%d ",a[i]);
    }
    fprintf(dp,"
    %d",max);     //将最大子数组的和写入文件.
    printf("
    %d",max);
    
    if(fclose(dp) )              //关闭文件。 
    {
      printf("File close error!
    ");
      exit(0);
    }
    return 0;
    }
    

    3、流程图:

    4、对自己作业的评价:
    1)、存在的问题:
    多重for循环思路有些不清晰,变量运算模糊。
    2)、解决办法:
    通过标记和调试一步一步解读而理通。
    3)、心得:勤于实践和读写他人程序以借鉴,从而更好的理解和优化自己的程序。
    4)、完成作业的时间消耗:3小时。

    5、程序运行结果的截图或者效果录像。

    二、预习作业

    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

    2、实验代码:

     #include <stdio.h> 
     int main(void)  
     {  
    int T,y;
    int i,n,m,x;
    int a[10][10];	
    scanf("%d",&T);
    	
    for(m=1;m<=T;m++)
    {
    	x=1;			         
    	scanf("%d
    ",&y);	
    	for(i=1;i<=y;i++)               //i与行的变化有关 
    	{
    		for(n=1;n<=y;n++)           //n与列的数有关 
    		{
    			scanf("%d",&a[i][n]);
    					
    			if(i>n)
    			{					
    				if(a[i][n]!=0) 
    				{
    					x=0;
    				}
    			}
    		}
    	}
    	if(x!=0)                
    	printf("YES
    ");
    	  
    	else 
    	printf("NO
    ");
    }
    
    return 0;
     }
    

    3、设计思路,流程图:

    4、对自己作业的评价:

    1)、存在的问题:
                for循环里又有n个for循环,若里面的for循环运行至break时,是直接跳出大循环还只跳出该小循环??
     2)、解决办法:
                请教与上网查找资料。
     3)、心得:勤于思考,勇于质疑与积极寻找正确答案,正如些同学程序在for循环里加了break,看似优化了计算步骤,却可能出错。
     4)、完成作业的时间消耗:2小时。
    

    5、程序运行结果的截图或者效果录像。


    问题:程序和思路都正确,但是逻辑有小错误,在"YES"、"NO"判断处的if句出错,以致结果出错

    解决方法:在DEV上调试以观察数据变化最后找出问题,再改正后运行正确。

  • 相关阅读:
    [转]lftp的致命错误:证书验证:不信任
    github每次push都需要密码以及用户名的解决办法
    Fedora最小化安装后没有ifconfig命令
    [转载]MySql常用命令总结
    chrome浏览器强制采用https加密链接
    红帽系列linux自行配置本地yum源
    linux 下dd命令直接清除分区表(不用再fdisk一个一个的删除啦)
    linux分区工具fdisk的使用
    Java多线程实现......(1,继承Thread类)
    第一篇文章--我为什么要写博客?
  • 原文地址:https://www.cnblogs.com/youlanghua/p/10541006.html
Copyright © 2020-2023  润新知