• 2019年春季学期第三周作业 编程总结


    基础作业

    给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。
    例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子数组为[3, 10, -4, 7, 2]

    输入:

    请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。

    输出:

    在不删除原有文件内容的情况下,将最大子数组以及子数组的和写入文件。

    1).实验代码

    #include<stdio.h>
    #include<stdlib.h>  
    int main(void)
    {
    	FILE*fp;
    	int i=0,x=0,y=0,n=0,sum2=0,sum3=0,h=0,l=0;
    	int a[10];
    	if((fp=fopen("D:\helei.txt","a+"))==NULL){
    		printf("File open error!
    ");
    		exit(0); 
    	}
    	fscanf(fp,"%d
    ",&n);
    	printf("%d
    ",n);
    for(i=0;i<n;i++){
       fscanf(fp,"%d,",&a[i]);
       printf("%d,",a[i]);
       sum3=a[0]-1; 
    }
        for(x=0;x<n;x++){
        	sum2=0;
           for(y=x;y<n;y++){
           	sum2=sum2+a[y];
           	if(sum2>sum3){
           		h=x;
           		l=y;
           		sum3=sum2;
    		   }
    	   }
        }
        printf("
    ");
        fprintf(fp,"
    ");
        for(h;h<=l;h++){
        	printf("%d,",a[h]);
        	fprintf(fp,"%d,",a[h]);
    	}
    printf("
    %d",sum3);
    fprintf(fp,"
    %d",sum3);
    	if(fclose(fp)){
    		printf("Can not close the file!
    ");
    		exit(0);
    	}
    	return 0;
    }
    

    2).设计思路

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


    从运行结果可以看出程序没有计算所有可能的子数组的和,仔细检查代码发现第18行for(x=0;x<n-x;x++){和第二十行for(y=x;y<n-x;y++){中的n-x应为n,当时不知道怎么想的加了个-x,导致浪费了很多时间在检查代码上,修改后正确。

    4).运行结果截图

    预习作业

    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

    1).实验代码

    #include<stdio.h> 
    int main()
    {
    	int T=0,i=0,n=0,h=0,l=0,x=0;
    	int a[10][10],b[10];
    	scanf("%d",&T);
    	for(i=0;i<T;i++){
    		scanf("%d",&n);
    		for(h=0;h<n;h++){
    			for(l=0;l<n;l++){
    				scanf("%d",&a[h][l]);
    				if(l<h&&a[h][l]!=0){
    					b[x]=1;
    				}
    			}
    		}
    		x++;
    	}
    	for(x=0;x<T;x++){
    		if(b[x]==1){
    		printf("NO
    ");
    	}
    		else{
    		printf("YES
    ");
    		}
    	}
    	return 0;
    }
    

    2).设计思路

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


    本题没有问题。

    4).运行结果截图

    二、学习进度条

    周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
    3/2-3/8 2h 23行 数组
    3/9-3/11 3h 29行 读取文件数据
    3/12-3/18 5h 70行 用数组输出矩阵

    三、学习感悟

    这周学习了新的C语言知识,还算简单,有时间可以挑战一下难题,另外就是写代码的时候一定要思路清晰,认真仔细,避免出现不必要的错误。

  • 相关阅读:
    Linux下rabitMq的部署(源码安装)
    yum安装时出现:Cannot retrieve metalink for repository: epel. Please verify its path and try again
    性能实战分析-问题分析(三)
    当前服务器的并发连接数查看
    性能实战分析-问题分析(二)
    数据库中文乱码及分析
    HDU 4857 逃生 (优先队列+反向拓扑)
    HNU 12826 Balloons Colors
    HNU 12827 NASSA’s Robot
    HNU 12812 Broken Audio Signal
  • 原文地址:https://www.cnblogs.com/hlywzj/p/10529837.html
Copyright © 2020-2023  润新知