2019春季第四周做業算法
這個做業屬於哪一個課程 | C語言程序設計ll |
這個做業要求在哪裏 | (https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2774) |
我在這個課程的目標是 | 但願能多瞭解數組的算法,之後遇見相似的題目時可以不出錯誤的作出來 |
這個做業在哪一個具體方面幫助我實現目標 | 這個做業讓我大概瞭解了選擇排序法和冒泡排序法,而且對數組有了更深刻的瞭解 |
參考文獻 | (https://blog.csdn.net/bruno231/article/details/6668024) |
本題要求將給定的n個整數從大到小排序後輸出。數組
輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。學習
在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。.net
4 5 1 7 6
7 6 5 1
#include<stdio.h> int main(void) { int i,k,n,temp,index; int a[10]; char op=' '; scanf("%d",&n); for(i=0;i<n;i++) //將輸入數依次賦給數組a的n個元素a[0]~a[n-1] scanf("%d",&a[i]); for(k=0;k<n-1;k++) //對n個數排序 { index=k; //index存放最小值所在的下標 for(i=k+1;i<n;i++) //尋找最小值所在下標 if(a[i] > a[index]) index=i; temp=a[index]; a[index]=a[k]; a[k]=temp; } printf("%d",a[0]); for(i=1;i<n;i++) //輸出n個數組元素的值 { printf("%c%d",op,a[i]); } printf("\n"); return 0; }
問題1:沒有注意空格輸出的格式,致使提交做業的時候格式錯誤
解決方法:定義了一個空格字符以後格式就對了設計
問題2:按照書上的寫法,定義空格字符以後,在運行結果以前多一個空格
解決方法:在對數進行排序以後先輸出數組a[0]調試
一個矩陣元素的「鞍點」是指該位置上的元素值在該行上最大、在該列上最小。
本題要求編寫程序,求一個給定的n階方陣的鞍點。code
輸入第一行給出一個正整數n(1≤n≤6)。隨後n行,每行給出n個整數,其間以空格分隔。blog
輸出在一行中按照「行下標 列下標」(下標從0開始)的格式輸出鞍點的位置。若是鞍點不存在,則輸出「NONE」。題目保證給出的矩陣至多存在一個鞍點。排序
4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9
輸出樣例1:get
2 1
輸入樣例2:
2 1 7 4 1
輸出樣例2:
NONE
#include<stdio.h> int main(void) { int n,i,j,x,y,t,z; int a[6][6]; scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } } x=y=z=0; t=1; for(i=0;i<n;i++) { z=i; for(y=0;y<n;y++) //找行最大值 { if(a[i][x]<=a[i][y]) //數組元素之間比較,若比a[i][x]大,則將數組列標賦給x { x=y; } } for(j=0;j<n;j++) //判斷是否爲列最小值 { if(a[z][x]>a[j][x]) //若此行最大值不是列所在最小值,把小的行標賦給z { z=j; break; } } if(i==z) //行最大且列最小,判斷條件行標不改變 { t=0; break; } } if(t==0) { printf("%d %d",i,x); } else { printf("NONE"); } return 0; }
問題1:判斷大小的時候搞反了符號,致使一直編譯錯誤
解決方法:一直運行仍是沒發現哪裏錯誤,後來問的同窗
問題2:定義的變量有點多,賦值賦錯了,致使頭都被繞暈了
解決方法:一個一個的檢查,找到賦值錯誤的變量
問題3:整個題思路不太清晰
解決方法:對照書上的例題改寫的
輸入1個正整數n(1<=n<=10),而後輸入n個整數並存放在數組中,將這n個整數從大到小排序後輸出,相鄰數字間有一個空格,行末不得有多餘空格。
輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。
在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。
4 75 71 77 76
77 76 75 71
#include<stdio.h> int main(void) { int i,k,n,temp; int a[10]; char op=' '; scanf("%d",&n); for(i=0;i<n;i++) //將輸入數依次賦給數組a的n個元素a[0]~a[n-1] { scanf("%d",&a[i]); } for(k=0;k<n-1;k++) //對n個數排序 { for(i=k+1;i<n;i++) { if(a[i] > a[k]) { temp=a[i]; a[i]=a[k]; a[k]=temp; } } } printf("%d",a[0]); for(i=1;i<n;i++) //輸出n個數組元素的值 { printf("%c%d",op,a[i]); } printf("\n"); return 0; }
問題1:按照書上的寫法在數字對換的過程當中,7和6的位置老是反的
解決方法:把for語句中的變量換了,讓數字直接對換就對了
問題2:不太清楚選擇排序法和冒泡排序法的區別
解決方法:查了資料,而後搜了百度,如今瞭解了一點
周/日期 | 這周所花的時間 | 代碼行數 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
2/25-3/3 | 三天 | 45 | 數組的認識及用法 | 數組長度的理解 |
3/4-3/10 | 兩天 | 37 | 編寫程序時處理文件 | fscanf與fprintf的具體用法 |
3/11-3/17 | 三天 | 112 | 二維數組的使用及文件插入 | 二維數組的用法、上三角的判斷及文件的處理 |
3/18-3/24 | 兩天 | 113 | 選擇排序法、二分查找法、二維數組的引用與矩陣 | 不清楚選擇排序法和冒泡排序法的區別 |
本週學習了:
一維數組:選擇排序法、二分查找法,老師提了一下冒泡排序法
二維數組:定義、引用、初始化,二維數組與矩陣
目前對選擇排序法和冒泡排序法的區別比較疑惑
感悟:冰凍三尺非一日之寒!