2019年春季學期第四周做業


這個做業屬於哪一個課程 C語言程序設計
這個做業的要求在哪裏 2019年春季學期第四周做業
我在這個課程的目標是 瞭解選擇排序法和冒泡排序法的區別,熟練運用二分法查找法
這個做業在哪一個具體方面幫助我實現目標 這個做業讓我明白選擇排序法和冒泡排序法的區別,讓我對二維數組的定義和應用有了更深刻的瞭解
參考文獻 選擇排序法和冒泡排序法的區別

一.本週完成的做用

基礎做業

7-2 選擇法排序 (20 分)

本題要求將給定的n個整數從大到小排序後輸出。
輸入格式:
輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。
輸入樣例:編程

4
5 1 7 6

輸出樣例:數組

7 6 5

1)運行代碼

#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:ui

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

輸出樣例1:.net

2 1

輸入樣例2:設計

2
1 7
4 1

輸出樣例2:code

NONE

1)運行代碼

#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)編程過程當中遇到的問題及解決辦法


問題:當找到改行的最大數所在的列時,再找到該列的最小數,最後比較兩個數大小是否相等。
解決辦法:根據運行錯誤提示,發現有並列極值元素時,最後一個是鞍點。知道不能根據比較大小來判斷是否爲鞍點,要根據最大值和最小值的下標是否相同來判斷是否爲鞍點。blog

4)運行結果

挑戰做業

7-1 冒泡法排序 (10 分)

輸入1個正整數n(1<=n<=10),而後輸入n個整數並存放在數組中,將這n個整數從大到小排序後輸出,相鄰數字間有一個空格,行末不得有多餘空格。
輸入格式:
輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。
輸入樣例:排序

4 
75 71 77 76

輸出樣例:get

77 76 75 71

1)運行代碼

#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.經過作題目的時間長度發現本身作題目的思路不夠清晰,都是走一步算一步,沒錯作完都是錯誤百出,之後作題要先想好思路再打代碼。

相關文章
相關標籤/搜索