這個做業屬於哪一個課程 | C語言程序設計Ⅱ |
---|---|
這個做業要求在哪裏 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2774 |
我在這個課程的目標是 | 我但願可以經過學習這些基礎知識,以便更容易學習一些其餘算法、語言。實現更復雜的算法 |
這個做業在哪一個具體方面幫助我實現目標 | 本次做業,我搞懂了選擇排序法與冒泡排序法,選擇排序即先肯定一個假的值,在與給定數組中的數一一比較,找出要求的最大/小值; 冒泡排序是直接將數組中數據挨個先後比,找出要求的值。另外還學會利用二維數組的特性解決實際問題。 |
參考文獻 | C語言程序設計(第3版); |
7-2 選擇法排序 (20 分)
本題要求將給定的n個整數從大到小排序後輸出。算法
輸入格式:
輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。數組
輸入樣例:學習
4 5 1 7 6
輸出樣例:設計
7 6 5 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; }
無3d
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
#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; }
如圖,提交後顯示,「部分正確」,「最大規模,有並列極值元素,最後一個是鞍點」,而後解讀這句話是什麼意思。
想來想去,發現應該是當某一行有並列多個最大值時,按照最後面的算。問題找到後,開始想對策,
既然指出問題是當同一行出現多個極大值時,要後面的,因而就在行肯定後,當判斷列上是不是最小時改進一下,
即在代碼第18行中,‘<’ 改成'<=’。當去掉'='時,當同一行有多個相同最大值時,以第一個爲準;但題目要求之後面爲準,因此要加一個‘=’;
7-1 冒泡法排序 (10 分)
輸入1個正整數n(1<=n<=10),而後輸入n個整數並存放在數組中,將這n個整數從大到小排序後輸出,相鄰數字間有一個空格,行末不得有多餘空格。
輸入格式:
輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。
輸入樣例:
4 75 71 77 76
輸出樣例:
77 76 75 71
#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; }
本題書本上有例題,看懂之後很簡單,順着就作下來了。
周/日期 | 這周所花的時間 | 代碼行數 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
3/2-3/8 | 三天六小時 | 50 | 一、定義、運用文件指針;二、如何打開、關閉文件三、如何讀出指定文件中的數據;四、如何向指定文件中寫入數據; | 字符、字符串有什麼區別?兩者輸入、輸出有沒有很大不一樣?什麼纔算字符串?什麼算字符?在文件中兩者有沒有差異? |
3/9-3/15 | 四天三小時 | 180 | 一、運用二維數組解決問題,矩陣的判斷;二、對一組數的全部子數組求和 | 如何在輸出時利用數組的性質 |
3/16-3/22 | 三天八小時 | 210 | 一、二維數組加深理解,二維數組與矩陣;二、選擇排序法解決問題;三、二分查找法 | 二分查找法這周沒練習,只是看看書上例題大體懂了,不知道真正應用時可否掌握。 |
本週講課講了很多內容,一節大課,分兩節上,第一節聽懂了,中間休息一會,第二節上課再講新內容,前面就忘了。下課後就只記得第二節課的一點點知識。因此,感受只靠老師講的話,懂,只是暫時的,課下本身要再消化消化。總之,本週感受學了很多,並且我發現這些都是書上內容,本身徹底能夠日後看看,就能夠理解,當上課時,再聽一遍,就會增強記憶。