2019年春季学期第四周作业
| 這個作業屬于哪個課程 | C語言程序設計 |
| 這個作業的要求在哪里 | 2019年春季學期第四周作業 |
| 我在這個課程的目標是 | 了解選擇排序法和冒泡排序法的區別,熟練運用二分法查找法 |
| 這個作業在哪個具體方面幫助我實現目標 | 這個作業讓我明白選擇排序法和冒泡排序法的區別,讓我對二維數組的定義和應用有了更深入的了解 |
| 參考文獻 | 選擇排序法和冒泡排序法的區別 |
一.本周完成的作用
基礎作業
7-2 選擇法排序 (20 分)
本題要求將給定的n個整數從大到小排序后輸出。
輸入格式:
輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多余空格。
輸入樣例:
輸出樣例:
7 6 51)運行代碼
#include<stdio.h> int main() {int n,str[10];scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&str[i]);}//排序/*第一次比較:則是將數組的第一個元素與數組中從第二個元素開始到最后的元素進行比較找到最大的數記錄下來然后將值賦值給數組的第一個元素,然后進行第二次比較:則是將數組的第二個元素與數組中從第三個元素開始到最后的元素進行比較,找最大的數記錄下來將值賦值給數組的第二個元素。。。依次循環找完*/int dex;for(int i=0;i<n;i++){int k=i;for(int j=i+1;j<n;j++){if(str[j]>str[k]){k=j;}}dex=str[k];str[k]=str[i];str[i]=dex;}for(int i=0;i<n;i++){printf("%d",str[i]);if(i==n-1){return 0;}printf(" ");} }2)設計思路
3)編程過程中遇到的問題及解決辦法
問題:沒有注意到行末不得有多余空格。
解決辦法:仔細看題目后改正。
4)運行截圖
7-1 找鞍點 (20 分)
一個矩陣元素的“鞍點”是指該位置上的元素值在該行上最大、在該列上最小。
本題要求編寫程序,求一個給定的n階方陣的鞍點。
輸入格式:
輸入第一行給出一個正整數n(1≤n≤6)。隨后n行,每行給出n個整數,其間以空格分隔。
輸出格式:
輸出在一行中按照“行下標 列下標”(下標從0開始)的格式輸出鞍點的位置。如果鞍點不存在,則輸出“NONE”。題目保證給出的矩陣至多存在一個鞍點。
輸入樣例1:
輸出樣例1:
2 1輸入樣例2:
2 1 7 4 1輸出樣例2:
NONE1)運行代碼
#include<stdio.h> int main() {int n,str[6][6],fount=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++){int q=0,p=0;//找出i行最大數位于第幾列 for(int j=1;j<n;j++){if(str[i][j]>=str[i][q]){q=j;}}//找出q列最小數位于第幾行 for(int k=0;k<n;k++){if(str[k][q]<=str[p][q]){p=k; }}//判斷最小數是否在原先的行上 if(p==i){fount=0;printf("%d %d",p,q);break;}}if(fount){printf("NONE");} }2)設計思路
3)編程過程中遇到的問題及解決辦法
問題:當找到改行的最大數所在的列時,再找到該列的最小數,最后比較兩個數大小是否相等。
解決辦法:根據運行錯誤提示,發現有并列極值元素時,最后一個是鞍點。知道不能根據比較大小來判斷是否為鞍點,要根據最大值和最小值的下標是否相同來判斷是否為鞍點。
4)運行結果
挑戰作業
7-1 冒泡法排序 (10 分)
輸入1個正整數n(1<=n<=10),然后輸入n個整數并存放在數組中,將這n個整數從大到小排序后輸出,相鄰數字間有一個空格,行末不得有多余空格。
輸入格式:
輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多余空格。
輸入樣例:
輸出樣例:
77 76 75 711)運行代碼
#include<stdio.h> void bubble (int a[],int n); int main() {int n,a[10];scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);}bubble (a,n);for(int i=0;i<n;i++){printf("%d",a[i]);//行末不得有多余空格。if(i==n-1){return 0;}printf(" ");}return 0; }void bubble (int a[],int n) {/*每相鄰的兩個數比較和交換,將較大的值賦給前一個數,將較小的值賦給后一個數,第一趟交換完畢后,最小的數便出現在數組的最后面,然后對余下的前n-1個數進行比較,一共要比較n-1趟*/for(int i=1;i<n;i++){for(int j=0;j<n-i;j++){if(a[j]<a[j+1]){int t=a[j];a[j]=a[j+1];a[j+1]=t;}}} }2)設計思路
3)編程過程中遇到的問題及解決辦法
上一題我就是用的冒泡排序法,所以這題我沒有遇到什么問題,基本一次性通過,只是題目沒看清楚,將從大到小打成了從小到大。
4)運行結果
二.學習進度條
三.感悟
1.這次作業好多錯誤都是題目看錯或者不能理解題目意思導致的,發現自己做題目還是不夠細心,靜不下心來,以后一定要改正這個缺點。
2.通過做題目的時間長度發現自己做題目的思路不夠清晰,都是走一步算一步,沒錯做完都是錯誤百出,以后做題要先想好思路再打代碼。
轉載于:https://www.cnblogs.com/liu2687479342/p/10573464.html
總結
以上是生活随笔為你收集整理的2019年春季学期第四周作业的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [HNOI2010]公交线路
- 下一篇: JAG Practice Contest