2019 第三週做業

1、 判斷上三角矩陣

上三角矩陣指主對角線如下的元素都爲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(void) 
{
    int T,n,i,j,e,count=0;
    int a[10][10]; 
    int b[100]={0};  //記錄判斷記錄 

    scanf("%d",&T); 
    for(i=0; i<T; i++)
    {                       
        scanf("%d",&n);
        for(j=0; j<n; j++)
        {
            for(e=0; e<n; e++)
            {
                scanf("%d",&a[j][e]);   
            }       
        }                 
        for(j=0; j<n; j++)       
        {
            for(e=0; e<n; e++)
            {
                if(j>e && a[j][e] != 0)
                {
                    count++;
                }
            }       
        }
        if(count==0 )
        {
            b[i] = 1;
        }
        else
        {
            b[i] = 0;
        }
        count=0;        
    }
    
    for(i=0; i<T; i++)
    {
        if(b[i]==1)
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        } 
    }
    
    return 0;  
}

(2)設計思路

(3)本題調試過程碰到問題及解決辦法

問題1:不懂二維數組的用法
解決方法:一直看書,而後查資料,最後瞭解一點皮毛3d

問題2:循環次數太多,沒考慮到一些狀況
解決方法:看了其餘博主的博客,而後進行比較再修改指針

問題3:不知道怎樣判斷上三角矩陣
解決方法:在網上搜了視頻看,仍是不太懂調試

(4)運行結果截圖

2、基礎做業

給定一個整數數組(包含正負數),找到一個具備最大和的子數組,返回其最大的子數組的和。
例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子數組爲[3, 10, -4, 7, 2]code

輸入:

請創建以本身英文名字命名的txt文件,並輸入數組元素數值,元素值之間用逗號分隔。視頻

輸出

在不刪除原有文件內容的狀況下,將最大子數組以及子數組的和寫入文件。blog

(1)實驗代碼

#include<stdio.h> 
#include<stdlib.h>
int main(void)
{
    FILE *fp;
    int a[10];
    int i, j, n, m, t, b, sum=0;
    
    if((fp=fopen("C:\\Users\\Administrator\\Desktop\\zhangman.txt","r+"))==NULL)
    {
        printf("File open error!\n");
        exit(0);
    }
    
    scanf("%d", &n);
    
    for(i=0; i<n; i++)
    {
        scanf("%d", &a[i]);
        fscanf(fp,"%d%c", &a[i]);
    }
    
    m = t = a[0];
    
    for(j=1; j<n; j++)
    {
        t += a[j];
        
        if(t > m)
        m = t;
        
        if(t < a[j])
        {
            t = a[j];
            b=j;            
        }

    }
    fprintf(fp,"\n");
    while(1)
    {
        printf("%d ", a[b]);
        fprintf(fp,"%d ",a[b]);
        sum += a[b];
        b++;
        if(sum==m)
        break;
    }
    
    printf("\n%d",m);
    fprintf(fp,"\n%d",m);

    if(fclose(fp))
    {
        printf("Can not close the file!\n");
        exit(0);
    }
    return 0;
}

(2)設計思路

(3)本題調試過程碰到問題及解決辦法

問題1:仍是不太懂文件指針的用法
解決方法:看書,而後查資料,也不懂多少內存

問題2:不太清楚怎麼把文件用到代碼中來
解決方法:看書上的例題,而後試着編寫

問題3:對於「fscanf()」和「fprintf()」的用法有點陌生
解決方法:翻看資料,知道了"fscanf()"的功能是把磁盤文件數據讀出保存到變量(內存),而「fprintf()」的功能是將數據和字符等寫入文件

問題4:不怎麼會判斷最大子數組
解決方法:本身編寫了好久以後,看了其餘同窗的博客,而後對比修改

(4)運行結果截圖

3、學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
2/25-3/3 三天 45 數組的認識及用法 數組長度的理解
3/4-3/10 兩天 37 編寫程序時處理文件 fscanf與fprintf的具體用法
3/11-3/17 三天 112 二維數組的使用及文件插入 二維數組的用法、上三角的判斷及文件的處理

4、學習感悟

本週咱們沒上課,本身看了一點二維數組的用法及文件的處理,感受好難啊,對C語言愈來愈沒信心,忽然在思考將來的路該怎麼走。 一句話歸納如今的心情:革命還沒有成功同志仍需努力!

相關文章
相關標籤/搜索