2019年春季學期第三週做業

一:本週完成的做業

基礎做業

本週沒上課,可是請你們不要忘記學習。
本週請你們完成上週挑戰做業的第一部分:給定一個整數數組(包含正負數),找到一個具備最大和的子數組,返回其最大的子數組的和。
例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子數組爲[3, 10, -4, 7, 2]
輸入:
請創建以本身英文名字命名的txt文件,並輸入數組元素數值,元素值之間用逗號分隔。
輸出
在不刪除原有文件內容的狀況下,將最大子數組以及子數組的和寫入文件。ios

1)實驗代碼

#include<stdlib.h>
#include<stdio.h>
/*主函數*/
 int main()
 {
     FILE *fp;
     int length;//定義數組列數length
     int line;//定義數組行數line 
     int n;//定義變化後的數組的長度
     
     /*
     打開文件 
     */ 
     if((fp=fopen("E:\\LiuweiB.txt","a+"))==NULL)
     {
        printf("File open error!");
        exit(0);
     }
    
    fscanf(fp,"%d,\n%d,\n",&line,&length);
    printf("%d\n%d\n",line,length); 
     n=2*length;
     /*將數組複製一邊,兩數組首尾鏈接成一個環形*/
     int a[line][n];//初始化數組
     
     for(int i=0;i<length;i++)
     {    
        fscanf(fp,"%d,",&a[line][i]);
        printf("%d,",a[line][i]);
     }
     int max=a[line][0];
     int s=0;//定義求和後的元素
      for(int i=0;i<length;i++)
      {
         s=0;
         for(int j=i;j<length+i;j++)
         {
             s=s+a[line][j];
             if(s>max)
             {
                 max=s;
             }
         }
         a[line][length+i]=a[line][i];  //每次將已經計算過的數放到最後
      }
      printf("MAX=%d",max);
      fprintf(fp,",MAX=%d",max);
    
     //關閉文件
     if(fclose(fp)){
        printf("Can not close the file!");
        exit(0);
     } 
 
     return 0;
 }

2)設計思路

將數組複製一邊,首尾鏈接成一個環形,從下標爲0的數開始,逐個日後加,每加一個都要和最大值比較,若比最大值大,就將此時的值給最大值,當加到6個數時,中止累加,清空累加值;此時從下標爲1的數開始逐個日後加,同上次方法同樣,當加到6個數時,清空累加值;此時從下標爲2的數開始逐個日後加……;直到下標爲i-1的數累加完畢,此時該數組中全部子數組的值都已經遍歷到了,獲得的最大值就是最大的子數組的和。
數組

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

在參考別人的程序的時候,發現別人程序中有些代碼沒有學,好比<<的用法和意思
上網查知;
1.右移運算符:
C語言中兩個大於號>>是右移位操做,就是把一個數的二進制形式的最右幾位丟棄,最前面補原來最高位的數字(原來是0就補0;原來是1就補1)
右移運算的兩個操做數應爲整數類型。第一個操做數是要進行移位操做的數,第二個操做數指定第一個操做數移動的位數。若是第二個操做數等於0則不發生任何移位。運用舉例:
問:計算表達式14 >> 2的值。
答:表達式14 >> 2的值爲3,由於14(即二進制的00001110)向右移兩位等於3(即二進制的00000011)
2.輸入操做數:
在C++裏面咱們把>>看成輸入操做符,它是stream這個類裏一個重要的運算符。
在C++中,有一個stream這個類,全部的I/O都以這個「流」類爲基礎的,包括咱們要認識的文件I/O,stream這個類有兩個重要的運算符:
析取器(>>)
從流中輸入數據。好比說系統有一個默認的標準輸入流(cin),通常狀況下就是指的鍵盤,因此,cin>>x;就表示從標準輸入流中讀取一個指定類型(即變量x的類型)的數據。從左操做數指定的輸入流讀入數據到右操做數:cin >> i 把標準輸入流中的下一個值讀入到i中。
和其餘的函數沒有什麼區別。C/C++追求的就是簡潔,當大量的輸入須要處理的時候,咱們用函數就要這樣,scanf("%d%d%d",&a,&b,&c);(假設爲短整型)
.....可是用操做符的話就能夠這樣,cin>>a>>b>>c
3.轉換運算符:
字符是可以使用多種不一樣字符方案或代碼頁來表示的抽象實體。例如,Unicode UTF-16 編碼將字符表示爲 16 位整數序列,而 Unicode UTF-8 編碼則將相同的字符表示爲 8 位字節序列。公共語言運行庫使用 Unicode UTF-16(Unicode 轉換格式,16 位編碼形式)表示字符。
舉例:$array[0] = ($str >> 16 & 0xff);
表示把字符串$str轉換爲Unicode 16位的編碼,而後存儲到數組中。常見的UTF-8編碼方式就是把例子中的16改爲了8,表示Unicode編碼,16位字符。函數

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,n;
    int str[10][10];
    int f[10];//判斷是否爲上三角形矩陣 
    
    //輸入須要判斷的矩陣個數 
    scanf("%d",&t);
    f[t];
    
    for(int k=0;k<t;k++){
        f[k]=1;
        
        //輸入矩陣信息 
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                scanf("%d",&str[i][j]);
            }
        }
        
        //判斷
        for(int i=0;i<n;i++){
            for(int j=0;j<i;j++){
                if(str[i][j]!=0){
                    f[k]=0;//儲存判斷結果 
                }
            }
        }
    }
    
    //輸出
    for(int k=0;k<t;k++){
        if(f[k]){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
    } 
    return 0;
}

2)設計思路

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


問題:題目看錯啦,我覺得n在循環外面只輸入一次,每一個矩形是連續輸入的,中間不輸入n,因此就用三維矩陣的方法去作。
解決辦法:隔了一天,再看仔細題目,發現本身想複雜了,再從新作,沒有碰到問題。設計

4)運行結果截圖

二:學習進度條

三:學習感悟

感悟:對多維數組有一點的理解,可以熟練的運用二維數組解決問題。
經過此次的做業,我發現本身的知識積累太少了,寫稍微難一點的題目就有點捉襟見肘,不過此次做業對我來講有雖然難度,但經過上網查資料,不只弄懂了別人的程序,並且用本身的方法寫出了本身程序,也瞭解獲得了不少沒有學到的知識,感受收穫不少。
好比#include "iostream"與#include的區別:前者先在當前目錄找iostream文件,找不到再去系統頭文件路徑找,後者反之。所以,作爲一個良好的習慣,在包含系統頭文件時儘可能用<>,而在包含本身的工程中的頭文件時用
好比void rewind(FILE *stream); 的功 能: 將文件內部的位置指針從新指向一個流(數據流/文件)的開頭。指針

相關文章
相關標籤/搜索