判斷上三角矩陣


2019年春季學期第三周作業

基礎作業
本周沒上課,但是請大家不要忘記學習。
本周請大家完成上周挑戰作業的第一部分:給定一個整數數組(包含正負數),找到一個具有最大和的子數組,返回其最大的子數組的和。
例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子數組為[3, 10, -4, 7, 2]
輸入:

請建立以自己英文名字命名的txt文件,並輸入數組元素數值,元素值之間用逗號分隔。

輸出

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

(一)實驗代碼:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *fp;
    int i,n,m,total=0;
    if((fp=fopen("F:\\yanghucai.txt","w+"))==NULL)
    {
        printf("File open error!\n");
        exit(0);
        scanf("%d",&n);       
    fprintf(fp,"%d\n",n);
    }
    scanf("%d",&n);       
    fprintf(fp,"%d\n",n);
    int a[8],max=a[0];
        for(i=0;i<8;i++)
        {
            scanf("%d",&a[i]);
            fprintf(fp,"%d",a[i]);
            if(m!=7)
            {
                  fprintf(fp,",");        
            }
        }
        
    for(i=0;i<8;i++)
    {
        total+=a[i];  
            
            if(total<a[i])   
            {
                total=a[i];
            }
                if(max<total)
                {
                    max=total;
                }
    }
    printf("%d",max);
    fprintf(fp,"\n%d",max);
    if(fclose(fp))
    {
        printf("Can not close the file!\n");
        exit(0);
    } 
    return 0;
}

(二)設計思路

(三)實驗遇到的問題及解決方案

本題為上周的挑戰作業,難得令人頭皮發麻,光是不寫入文件我就覺得很難了,更難的是還要寫入文件里,難度我給五顆星,作為小白的我不斷看別人怎么寫的,從看懂到自己慢慢嘗試。
文件有些地方不太懂,不知道為什么回車要放前面,開辟了一個符合題意空間的數組為什么還要往文件里輸入n,為什么逗號可以直接輸入文件里。通過問室友和百度解決了這些問題,回車放前面是提前換行,輸入行數n的原因防止開辟數組空間過小造成誤差,在C語言中,可以使用格式化輸入函數fscnaf來解決輸入逗號的問題。

(四)運行結果截圖

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 T;
  int i,j,t,flag=0;
  scanf("%d\n",&T);
  int a[10][10],n;
  for(t=1;t<=T;t++){
    flag=1;
  scanf("%d\n",&n);
  for(i=0;i<n;i++){
    for(j=0;j<n;j++){
    scanf("%d",&a[i][j]);
  
  
      if(j<i&&a[i][j]!=0){
        flag=0;
      }
    }
  
  }
  if(flag==1)
  printf("YES\n");
  else
  printf("NO\n");
  }
  return 0;
}

(二)設計思路


這個題就是用for循環做的,要定義一個二維數組去做,注意滿足上三角的條件,對角線以上為1,以下為0。

(三)實驗遇到的問題及解決方案

看懂題意花了半個小時,判斷上三角的條件就是行大於列且元素不為0,但是在設計時我把標記的flag弄錯了,導致上三角輸出NO,不是則輸出了YES,后來仔細檢查發現了這個錯誤·,但是我把改好的程序放在C++上編譯時卻是分步輸出,而pta上要求一步輸出,我提交pta對了,也許pta上認為這是對的吧,這個問題使我認識到了pta格式有時候也不一定那么嚴格;

(四)運行結果截圖

(五)學習進度條

周/日期 這周所花的時間 代碼行 學到的知識點簡介 目前比較迷惑的問題
3/2-3/8 3天 30 一維數組的使用及文件的儲存。 指針不會用
3/9-3/15 3天 100 二維數組 文件的加強版子數組

(六)本周學習總結

簡單預習了二維數組,完成了上三角矩陣,離不開循環結構做題,對於文件輸出最大子數組之和,我認為很難,我的思維總是打不開,只能慢慢探索,知識還是學淺了,下周要更努力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM