第三周作业

7-1 判断上三角矩阵 (15 分)
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

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

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

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

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

    return 0;
}

此代码是自己打的但是总是错误;实在无奈去网上借鉴了一下打了另一份代码:原文为https://blog.csdn.net/a7701935/article/details/79994186

#include<stdio.h>
int main(void)
{
    int n,i,j,T,a,f=1;
    scanf("%d", &n)
        for( a = 0; a < T; a++)
    {
	    scanf("%d", &n);
	    int a[10][10];
	    for(int i = 0; i < n; i++)
                    {
		    for(int j = 0; j < n; j++)
                        {
			    scanf("%d", &a[i][j]);
			    if(i > j && a[i][j] != 0)
				    f= 0;
		    }
	    } 

	    if(f){
		    printf("YES\n");
	    }else{
		    printf("NO\n");
	    }
    }


    return 0;
} 

实验思路:首先定义数组,输入所需数组数量;在定义数组的行数;然后用循环结构给数组赋值再按矩阵的形式进行输出然后再有上三角主对角线以上的部分下标规律i<=j及数组不为0进行判断在进行输出。
思维导图:
实验所遇问题:写成了判断单个矩阵而且输入的格式也不对。
2.写出的代码只能进行单个的判断就是结果不能一起输出。网上他人的答案是再用一个数组存放矩阵判断结果再进行输出;经自己思考再后加上++进行输出。
实验结果截图:
给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。
例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子数组为[3, 10, -4, 7, 2]
输入:
请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。
输出
在不删除原有文件内容的情况下,将最大子数组以及子数组的和写入文件。
实验代码:

#include<stdio.h>
#include<stdlib.h>
int main (void)
{
    FILE * fp;
    int i,inmax,n;
    char temp;
    int a[10];
    if((fp=fopen("c:\\xiesimin\\xiesimin.txt","a+"))==NULL)
    {
	    printf("File open error!\n");
	    exit(0);
    }
    fscanf(fp,("%d%c"),&n,&temp);
    for(i=0;i<n;i++){
	    fscanf(fp,("%d%c"),&a[i],&temp);
    }
{   int sum = 0;
    int index = 0;
    int max = a[index];
    for(;index < size;++index)

        sum = sum + a[index];
    
        if(sum < a[index])
        
            sum = a[index];
    
        if(sum > max)
        {
            max = sum;
        }
    }
    fprintf(fp,"\n%d %d\n",a[index],index);
i    f(fclose(fp)){
	    printf("Can not close the file!\n");
	    exit(0);
    }
    return 0;
}

这题没搞出来。
自我的实验思路是:先将此排数全都加在一个定义上;然后将数组的第一个和最后一个进行比较;求最大值,如果数组中元素都小于0;则直接返回数组的最大值。 同时对其求和,如果和数变得小于0,那么此时这个子数组是不符合题意的,如果和数为正且比前面的最大值大,那就将这个数赋给前面最大的那个值,然后将和求出;但代码没弄出来。
学习进度表:

posted @ 2019-03-14 15:47  风靡心落  阅读(189)  评论(2编辑  收藏  举报