2019 第四周做業

2019春季第四周做業算法

這個做業屬於哪一個課程 C語言程序設計ll
這個做業要求在哪裏 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2774
我在這個課程的目標是 但願能多瞭解數組的算法,之後遇見相似的題目時可以不出錯誤的作出來
這個做業在哪一個具體方面幫助我實現目標 這個做業讓我大概瞭解了選擇排序法和冒泡排序法,而且對數組有了更深刻的瞭解
參考文獻 https://blog.csdn.net/bruno231/article/details/6668024

1、 選擇法排序

本題要求將給定的n個整數從大到小排序後輸出。數組

輸入格式:

輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。學習

輸出格式:

在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。.net

輸入樣例:

4
5 1 7 6

輸出樣例:

7 6 5 1

(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;
 }

(2)設計思路

(3)本題調試過程當中碰到問題及解決方法

問題1:沒有注意空格輸出的格式,致使提交做業的時候格式錯誤
解決方法:定義了一個空格字符以後格式就對了設計

問題2:按照書上的寫法,定義空格字符以後,在運行結果以前多一個空格
解決方法:在對數進行排序以後先輸出數組a[0]調試

(4)運行結果截圖

2、找鞍點

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

輸入格式:

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

輸出格式:

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

輸入樣例1:

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

(1)實驗代碼

#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;
 }

(2)設計思路

(3)本題調試過程當中遇到的問題及解決方法

問題1:判斷大小的時候搞反了符號,致使一直編譯錯誤
解決方法:一直運行仍是沒發現哪裏錯誤,後來問的同窗

問題2:定義的變量有點多,賦值賦錯了,致使頭都被繞暈了
解決方法:一個一個的檢查,找到賦值錯誤的變量

問題3:整個題思路不太清晰
解決方法:對照書上的例題改寫的

(4)運行結果截圖

3、挑戰題--冒泡法排序

輸入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(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;
 }

(2)設計思路

(3)本題調試過程當中遇到的問題及解決方法

問題1:按照書上的寫法在數字對換的過程當中,7和6的位置老是反的
解決方法:把for語句中的變量換了,讓數字直接對換就對了

問題2:不太清楚選擇排序法和冒泡排序法的區別
解決方法:查了資料,而後搜了百度,如今瞭解了一點

(4)運行結果截圖

4、學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
2/25-3/3 三天 45 數組的認識及用法 數組長度的理解
3/4-3/10 兩天 37 編寫程序時處理文件 fscanf與fprintf的具體用法
3/11-3/17 三天 112 二維數組的使用及文件插入 二維數組的用法、上三角的判斷及文件的處理
3/18-3/24 兩天 113 選擇排序法、二分查找法、二維數組的引用與矩陣 不清楚選擇排序法和冒泡排序法的區別

5、學習感悟

本週學習了:
一維數組:選擇排序法、二分查找法,老師提了一下冒泡排序法
二維數組:定義、引用、初始化,二維數組與矩陣
目前對選擇排序法和冒泡排序法的區別比較疑惑

感悟:冰凍三尺非一日之寒!

相關文章
相關標籤/搜索