第四周做業

2019年春季學期第四周做業

這個做業屬於哪一個課程 C語言程序設計Ⅱ
這個做業要求在哪裏 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2774
我在這個課程的目標是 我但願可以經過學習這些基礎知識,以便更容易學習一些其餘算法、語言。實現更復雜的算法
這個做業在哪一個具體方面幫助我實現目標 本次做業,我搞懂了選擇排序法與冒泡排序法,選擇排序即先肯定一個假的值,在與給定數組中的數一一比較,找出要求的最大/小值; 冒泡排序是直接將數組中數據挨個先後比,找出要求的值。另外還學會利用二維數組的特性解決實際問題。
參考文獻 C語言程序設計(第3版);

1、本週完成的做業

基礎做業

題目1.

7-2 選擇法排序 (20 分)
本題要求將給定的n個整數從大到小排序後輸出。算法

輸入格式:
輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。數組

輸入樣例:學習

4
5 1 7 6

輸出樣例:設計

7 6 5 1

1)、實驗代碼

#include<stdio.h>
int main ()
{
    int i,index,n,j,t;
    int a [10];
    char op=' ';
    
    scanf ("%d\n",&n);
    for (i=0; i<n; i++) {
        scanf ("%d",&a [i]);
    }
    for (j=0; j<n-1; j++) {
        index = j;
        for (i=j+1; i<n; i++) 
           if (a [i] > a [index])
           index = i;
           t = a [index];
           a [index] = a [j];
           a [j] = t;
    }
    for (i=0; i<n; i++) {
        printf ("%d",a [i]);
        if (i<n-1) {
          printf ("%c",op);
        }
    }
    
    return 0;
}

2)、設計思路

3)、本題調試過程碰到的問題及解決方法

3d

4)、運行結果圖

題目2.

7-1 找鞍點 (20 分)
一個矩陣元素的「鞍點」是指該位置上的元素值在該行上最大、在該列上最小。
本題要求編寫程序,求一個給定的n階方陣的鞍點。指針

輸入格式:
輸入第一行給出一個正整數n(1≤n≤6)。隨後n行,每行給出n個整數,其間以空格分隔。調試

輸出格式:
輸出在一行中按照「行下標 列下標」(下標從0開始)的格式輸出鞍點的位置。若是鞍點不存在,則輸出「NONE」。題目保證給出的矩陣至多存在一個鞍點。code

輸入樣例1:blog

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

輸出樣例1:排序

2 1

輸入樣例2:

2
1 7
4 1

輸出樣例2:

NONE

1)、實驗代碼

#include<stdio.h>
int main ()
{
    int i,n,j,s,result=0,num;
    scanf ("%d",&n);
    int a [n] [n];
    char op=' ';
    
    for (i=0; i<n; i++) {
        for (j=0; j<n; j++) {
            scanf ("%d",&a [i] [j]);
        }
    }
    for (i=0; i<n; i++) {
        num = a [i] [0];
        s=0;
        for (j=1; j<n; j++) {
            if (num <= a [i] [j]) {
                num = a [i] [j];
                s = j;
            } 
        }
        for (j=0; j<n; j++) {
            if (num > a [j] [s]) 
                result++;
        }
        if (result == 0) {
            printf ("%d%c%d\n",i,op,s);
            break;
        }

2)、設計思路

3)、本題調試過程碰到的問題及解決方法

如圖,提交後顯示,「部分正確」,「最大規模,有並列極值元素,最後一個是鞍點」,而後解讀這句話是什麼意思。
想來想去,發現應該是當某一行有並列多個最大值時,按照最後面的算。問題找到後,開始想對策,
既然指出問題是當同一行出現多個極大值時,要後面的,因而就在行肯定後,當判斷列上是不是最小時改進一下,
即在代碼第18行中,‘<’ 改成'<=’。當去掉'='時,當同一行有多個相同最大值時,以第一個爲準;但題目要求之後面爲準,因此要加一個‘=’;

4)、運行結果圖

挑戰做業

題目1.

7-1 冒泡法排序 (10 分)
輸入1個正整數n(1<=n<=10),而後輸入n個整數並存放在數組中,將這n個整數從大到小排序後輸出,相鄰數字間有一個空格,行末不得有多餘空格。

輸入格式:
輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。

輸入樣例:

4 
75 71 77 76

輸出樣例:

77 76 75 71

1)、實驗代碼

#include<stdio.h>
int main ()
{
    int n,i,j,t;
    scanf ("%d",&n);
    int a [n];
    char op=' ';
    
    for (i=0; i<n; i++) {
        scanf ("%d",&a [i]);
    }
    for (i=1; i<n; i++)
       for (j=0; j<n-i; j++)
          if (a [j] < a [j+1]) {
            t=a [j];
            a [j] = a [j+1];
            a [j+1] = t;
          }
    for (i=0; i<n; i++) {
        printf ("%d",a [i]);
        if (i<n-1) {
            printf ("%c",op);
        }
    }
    
    return 0;
}

2)、設計思路

3)、本題調試過程碰到的問題及解決方法

本題書本上有例題,看懂之後很簡單,順着就作下來了。

4)、運行結果圖

2、學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
3/2-3/8 三天六小時 50 一、定義、運用文件指針;二、如何打開、關閉文件三、如何讀出指定文件中的數據;四、如何向指定文件中寫入數據; 字符、字符串有什麼區別?兩者輸入、輸出有沒有很大不一樣?什麼纔算字符串?什麼算字符?在文件中兩者有沒有差異?
3/9-3/15 四天三小時 180 一、運用二維數組解決問題,矩陣的判斷;二、對一組數的全部子數組求和 如何在輸出時利用數組的性質
3/16-3/22 三天八小時 210 一、二維數組加深理解,二維數組與矩陣;二、選擇排序法解決問題;三、二分查找法 二分查找法這周沒練習,只是看看書上例題大體懂了,不知道真正應用時可否掌握。

3、學習感悟

本週講課講了很多內容,一節大課,分兩節上,第一節聽懂了,中間休息一會,第二節上課再講新內容,前面就忘了。下課後就只記得第二節課的一點點知識。因此,感受只靠老師講的話,懂,只是暫時的,課下本身要再消化消化。總之,本週感受學了很多,並且我發現這些都是書上內容,本身徹底能夠日後看看,就能夠理解,當上課時,再聽一遍,就會增強記憶。
相關文章
相關標籤/搜索