1. 程式人生 > >第14、15周作業

第14、15周作業

print 符號 基本 維數 應該 pan 分享 -i 格式

---恢復內容開始---

#include<stdio.h>
int main()

{
    int n,i,a[10],b=0;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++){
        if(a[0]<a[i]){
            a[0]=a[i];
            b=i;
            }
    }
    printf("%d %d",a[0],b);
    return
0; }
  • 設計思路:
  • 第一步:構建函數基本框架。
  • 第二步:定義變量n,i,b。對b賦0的初值。定義最大下標為9的整形數組。
  • 第三步:輸入n,確定輸入數組的數據的個數。
  • 第四步:將數據輸入數組。
  • 第五步:將a[0]與數組中的其他數進行一一比較,將最大值移到a[0],並使用b記錄下標。
  • 第六步:輸出a[0]和b。
  • 流程圖:
  • 技術分享圖片

  • 遇到的問題:開始時遇到輸入的一組數中有兩個及以上最大值時,輸出了那個較大的下標。
  • 技術分享圖片

  • 解決方法:逐步調試,發現只要將a[0]<=a[i]改成a[0]<a[i]就行了。
  • #include<stdio.h>
    int main()
    {
        int
    a[10],i,n,b,c,d,e; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&a[i]); } b=a[0]; c=a[n-1]; for(i=0;i<n;i++){ if(b>=a[i]){ b=a[i]; d=i; } } a[d]=a[0]; a[0]=b; for(i=0;i<n;i++){
    if(c<=a[i]){ c=a[i]; e=i; } } a[e]=a[n-1]; a[n-1]=c; for(i=0;i<n;i++){ printf("%d ",a[i]); } return 0; }

  • 第一步:構建函數基本框架。
  • 第二步:定義數組a[10],變量i,n,b,c,d,e。
  • 第三步:將數據輸入數組,將a[0],a[n-1]分別賦值給b,c。
  • 第三步:將最小值移動到b,並記錄下下標,將a[0]的值與最小值互換。
  • 第四步:將最大值移動到c,並記錄下下標,在新順序裏,將a[n-1]的值與最大值互換。
  • 第五步:輸出數組a[i].
  • 流程圖:技術分享圖片

  • 遇到的問題:輸入例題,輸出的格式與例題的答案不對。
  • 技術分享圖片

  • 解決方法:將最小值與a[0]值的互換,放在找出最小值和下標之後。也就是a[d]=a[0];a[0]=b; 放在第二個for循環之後。
  • #include<stdio.h>
    int main()
    {
        int a[10],k,n,i,b,c;
        scanf("%d %d",&n,&k);
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        for(i=1;i<=k;i++){
            for(b=0;b<n-i;b++){
                if(a[b]>a[b+1]){
                    c=a[b];
                    a[b]=a[b+1];
                    a[b+1]=c;
                }
            }
        }
        for(i=0;i<n-1;i++){
            printf("%d ",a[i]);
        }
        if(i==n-1){
            printf("%d",a[i]);
        }
        return 0;
    }

  • 第一步:構建函數基本框架。
  • 第二步:定義數組a[10],和變量k,n,i,b,c;
  • 第三步:輸入n和k。
  • 第四步:將數據存入數組a。
  • 第五步:用起泡法兩兩比較互換,將原本外層循環的n改為k。
  • 第六步:輸出按照格式輸出數組,數組最後一個數不要加空格。
  • 流程圖:技術分享圖片

  • 遇到的問題:掃描的次數k不知道放到哪裏,多次調試之後,才知道k應該放在外層循環。
  • #include<stdio.h>
    int main()
    {
        int a[12],i,b=2;
        a[0]=a[1]=1;
        for(i=2;i<12;i++){
            a[i]=a[i-1]+a[i-2];
        }
        for(i=0;i<12;i++){
            printf("%6d",a[i]);
            if(i==b){
                b=b+3;
                printf("\n");
            } 
        }
        return 0;
    }

  • 第一步:構建函數基本框架。
  • 第二步:定義數組a[12]、i、b。並且b=2,a[0]=a[1]=1;
  • 第三步:計算下一個數據a[i]=a[i-1]+a[i-2]。
  • 第四步:順序輸出數組a。
  • 流程圖:技術分享圖片

  • 遇到的錯誤:輸出的數據無法形成矩陣。
  • 解決方法:輸出時加一個判斷當i=2、5、8、11……輸出\n符號。
  • 技術分享圖片

  • git地址:https://git.coding.net/Myboss/Homework.git

  • 技術分享圖片

  • 個人總結(涉及的知識點):1:數組的定義:數組定義時必須是整數表達式,不能是變量。2:數組的下標是從零開始的。3:賦初值時需要對數據加大括號,不能只輸入一個數據就對整個數組賦初值。4.二維數組的定義第一個中括號是行數,第二個中括號是列數。5.當確定數據個數時,可以省略行或列。6.使用數據時不能超出數組的範圍。7.二維數組的輸入和輸出是使用雙層循環。8.對數組有選擇排序法,和冒泡排序法。
  • 代碼行數 時間 博客字數 時間 涉及知識點
    151 4h 300字左右 4h ————————
  • 截圖:技術分享圖片

第14、15周作業