2019春第二週作業 一些的挑戰作業

2022-08-20 19:15:07 字數 3298 閱讀 8874

基礎作業

請在第一周作業的基礎上,繼續完成:找出給定的檔案中陣列的最大值及其對應的最小下標(下標從0開始)。並將最大值和對應的最小下標數值寫入檔案。

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

輸出在不刪除原有檔案內容的情況下,將最大值和對應的最小下標數值寫入檔案

1實驗**

1 #include2 #include3

intmain()

413 fscanf(fp,"

%d",&n);

14 fscanf(fp,"

%d%c

",&a[max],&op);

15for(i=1;i)20}

21 fprintf(fp,"\n"

);22 fprintf(fp,"

%d %d

",a[max],max);

23if

(fclose(fp))

27return0;

28 }

設計思路流程圖

本題除錯過程碰到問題及解決辦法

在剛開始寫本題時,沒有去考慮逗號的問題,導致一直無法把答案寫進去,通過除錯發現,原來程式不會像我想的那樣可以直接跳過逗號繼續輸入後面的檔案,因為有逗號,整形變數無法讀入,導致後面的元素就也讀入不了,之後我加了乙個字元變數去儲存逗號,就解決了這個問題。

執行結果截圖

挑戰題題目要求是讓我們求二維陣列的最大子陣列的和,讓我們先看看一維陣列的最大子陣列怎麼求

求一維陣列的最大子陣列:首先什麼是子陣列呢,就是乙個陣列中,他的幾個連續的元素組成的陣列就叫這個陣列的子陣列,最大子陣列就是組成子陣列的元素相加最大。

實驗**

1 #include2 #include3

intmain()

412 fscanf(fp,"

%d",&n);

13int

a[n];

14for(j=0;j)

1523

if(sum>maximum)

24 maximum=sum;

25 sum=item=0;26

}27 printf("%d"

,maximum);

28if

(fclose(fp))

2933

return0;

34 }

設計思路流程圖

執行結果截圖

求二維陣列的最大子陣列:二維陣列的最大子陣列有很多情況,我發現以我目前的能力根本無法全部解決,所以我就只去寫了當最大子陣列為矩形時候的情況。

我的思路是先找出二維陣列中最大值的所在位置,然後在把最大值所在的那一行的最大子陣列找出並記錄是那些元素,然後再把這些元素所在的列全部求最大子陣列,然後再根據某一列的上下元素確定最大的二維陣列最大子陣列的矩形大小(是不是看起來很複雜= =,好吧我承認我不太會表達我的想法,那我就盡量在**中解釋清楚吧,這裡沒有考慮數的溢位與當輸入檔案的引數有錯誤程式能正常退出, 並顯示相應的錯誤資訊)

實驗**

1 #include2 #include3

intmain()

412 fscanf(fp,"

%d",&m);

13 fscanf(fp,"

%d",&n);/*讀出二維陣列的行列*/

14int

a[m][n];

15for(i=0;i)

20}   /*找出二維陣列中最大值的所在位置*/

21 printf("

%d %d %d\n

",a[maxi][maxj],maxi,maxj);

22int left=0,right=0,maxleft=0,maxright=0;23

for(j=0;j)

2431

if(sum>=maximum)

32 maximum=sum,maxleft=left,maxright=right;

33 sum=item=0;34

}    /*找出最大值所在的那一行中最大子陣列的左右邊界*/

35 printf("

%d %d\n

",maxleft,maxright);

36 maximum=0;37

int top=0,low=0,maxtop=0,maxlow=0,p,maxpsum=0;38

for(p=maxleft;p<=maxright;p++)

47if(sum>=maximum)

48 maximum=sum,maxtop=top,maxlow=low;

49 item=0

; 50}

51 sum=0;52

if(maximum>=maxpsum) maxtop=top,maxlow=low;

53}      /*找出滿足最大矩形的上下邊界*/

54 printf("

%d %d\n

",maxtop,maxlow);

55int maxsum=0;56

for(i=maxtop;i<=maxlow;i++)60}

61 printf("%d"

,maxsum);  /*找到矩形後就直接把矩形裡的元素相加就可以了*/

62if

(fclose(fp))  /*關閉檔案*/

6367

return0;

68 }

周/日期

這週所花的時間

**行學到的知識點簡介

目前比較迷惑的問題

3月4-3月10

4天130行

如何讀取檔案中的資料並寫入資料

本週我們進入了處理檔案的學習,因為突然的進入,我還沒有預習過,所以一開始也是亂的一鍋粥,但是我通過自己的學習,基本了解了一些處理檔案語句

2019 第二週作業

請在第一周作業的基礎上,繼續完成 找出給定的檔案中陣列的最大值及其對應的最小下標 下標從0開始 並將最大值和對應的最小下標數值寫入檔案。請建立以自己英文名字命名的txt檔案,並輸入陣列元素數值,元素值之間用逗號分隔。在不刪除原有檔案內容的情況下,將最大值和對應的最小下標數值寫入檔案。include ...

2019第二週作業

請在第一周作業的基礎上,繼續完成 找出給定的檔案中陣列的最大值及其對應的最小下標 下標從0開始 並將最大值和對應的最小下標數值寫入檔案。輸入 請建立以自己英文名字命名的txt檔案,並輸入陣列元素數值,元素值之間用逗號分隔。輸出 在不刪除原有檔案內容的情況下,將最大值和對應的最小下標數值寫入檔案。實驗...

2019第二週作業 基礎作業

請在第一周作業的基礎上,繼續完成 找出給定的檔案中陣列的最大值及其對應的最小下標 下標從0開始 並將最大值和對應的最小下標數值寫入檔案。請建立以自己英文名字命名的txt檔案,並輸入陣列元素數值,元素值之間用逗號分隔。輸出 在不刪除原有檔案內容的情況下,將最大值和對應的最小下標數值寫入檔案。1 實驗 ...