1. 程式人生 > >第12周程式設計總結

第12周程式設計總結

第12周程式設計總結

題目12-1 程式設計列印空心字元菱形 (10 分)

本題目要求讀入菱形起始字母和菱形的高度,然後輸出空心字元菱形。所謂“空心菱形”是指:每行由兩端為字母、中間為空格的字串構成,每行的字串中心對齊;上半部分相鄰兩行字串長度差2,且字母從給定的起始字母逐一遞增;下半部分與上半部分對稱。

1)    實驗程式碼

#include<stdio.h>

int main(){

    int n,i,j,m,k;

    char ch;

    k=1;

    scanf("%c %d",&ch,&n);

    getchar();

    //printf("%c %d",ch,n);

    m=(n+1)/2;

    for(i=0;i<m;i++)

    {

        for(j=0;j<m-i-1;j++){

            printf(" ");

        }

        printf("%c",ch);

        if(i==0){

            ch++;

            printf("\n");

            continue;

        }

        for(j=0;j<2*i-1;j++){

            printf(" ");

        }

        printf("%c",ch++);

        printf("\n");

    }ch=ch-2;

    for(i=n-m;i>0;i--){

        for(j=0;j<k;j++){

            printf(" ");

        }k++;

        printf("%c",ch);

        for(j=0;j<2*i-3;j++){

            printf(" ");

        }

        if(i==1){

            printf("\n");

            break;

        }

        printf("%c\n",ch--);

    }

    return 0;

}

2)    設計思路

第一步 使用for迴圈輸出空格

第二步 繼續使用for迴圈輸出字元

第三步 考慮特殊情況最中間的那一行字元

3)    本週除錯過程遇到的問題及解決方法

最中間的那一行屬於特殊情況需要特殊考慮

4)    執行結果截圖

 題目12-2 跟奧巴馬一起畫方塊 (15 分)

美國總統奧巴馬不僅呼籲所有人都學習程式設計,甚至以身作則編寫程式碼,成為美國曆史上首位編寫計算機程式碼的總統。2014年底,為慶祝“電腦科學教育周”正式啟動,奧巴馬編寫了很簡單的計算機程式碼:在螢幕上畫一個正方形。現在你也跟他一起畫吧!

1)    實驗程式碼

#include<stdio.h>

int main()

{

  int i,j;

  int n;

  char c;

  scanf("%d",&n);

  getchar();

  scanf("%c",&c);

  for(i=1;i<=(int)(n/2.0+0.5);i++)

  {  for(j=1;j<=n;j++)

    {

      printf("%c",c);

    }

  printf("\n");

  }

  return 0;

}

2)    設計思路

第一步 使用getchar接收字元,使用for迴圈來輸出行數

第二步 再巢狀一個for迴圈來輸出字元

第三步 輸出得到結果

3)    本週除錯過程遇到的問題及解決方法

在看到別人的程式碼時,在使用for迴圈輸出行數時一直不明白別人的式子為什麼要加上那個0.5.通過討論得出,0.5的作用就是四捨五入

4)    執行結果截圖

 

題目12-3 輸出三角形字元陣列 (15 分)

本題要求編寫程式,輸出n行由大寫字母A開始構成的三角形字元陣列。

1)    實驗程式碼

#include<stdio.h>

int main()

{

   int n, count = 0;

    scanf("%d", &n);

    for (int i = n; i > 0; i--) {

        for (int j = 0; j < i; j++) {

          printf("%c ", 'A' + count);

            count++;

        }

        printf("\n");

    }

    return 0;

}

2)    設計思路

第一步 運用for迴圈輸出行數

第二步 巢狀一個for迴圈輸出字母

第三步 在迴圈外界輸出空格

3)    本週除錯過程遇到的問題及解決方法

這道題不是很難,勉強過關

4)    執行結果截圖

題目12-4 閱覽室 (20 分)

天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程式。當讀者借書時,管理員輸入書號並按下S鍵,程式開始計時;當讀者還書時,管理員輸入書號並按下E鍵,程式結束計時。書號為不超過1000的正整數。當管理員將0作為書號輸入時,表示一天工作結束,你的程式應輸出當天的讀者借書次數和平均閱讀時間。

注意:由於線路偶爾會有故障,可能出現不完整的紀錄,即只有S沒有E,或者只有E沒有S的紀錄,系統應能自動忽略這種無效紀錄。另外,題目保證書號是書的唯一標識,同一本書在任何時間區間內只可能被一位讀者借閱。

1)    實驗程式碼

#include<stdio.h>

int main()

{

    int N,n,hh,mm;

   scanf("%d",&N);

   char c;

  

   for(int i=0;i<N;i++){

        int flag[1001]={0},time[1001]={0},sum=0,cnt=0;

       while(scanf("%d %c %d:%d",&n,&c,&hh,&mm)) {

            if(n==0) break;

               if(c=='S'){

                     time[n]=hh*60+mm;

                     flag[n]=1;

                    

               }

               else if(c=='E'){

                      if(flag[n]==1){

                           flag[n]=0;

                            sum+=hh*60+mm-time[n];

                            cnt++;

                       }

               }

      }

      if(cnt==0) printf("0 0\n");

      else printf("%d %.0f\n",cnt,(double)sum/cnt);

   }

}

2)    設計思路

第一步使用for迴圈,一共有N天的記錄,迴圈N次

第二步建立2個數組分別是學號和時間

第三步使用while進行迴圈,並用if來判斷,輸入0,表示結束。接收到字元就從s到E統計時間

3)    本週除錯過程遇到的問題及解決方法

看到題目有點懵逼,但是通過同學的講解,漸漸有了思路

4)    執行結果截圖