2019寒假做業1 編程總結

7-1 打印沙漏 (20 分)
本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個「*」,要求按下列格式打印設計





  • 所謂「沙漏形狀」,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。

給定任意N個符號,不必定能正好組成一個沙漏。要求打印出的沙漏能用掉儘量多的符號。調試

輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。code

輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。blog

輸入樣例:
19
輸出樣例:
****
***io



  • 2

(1)實驗代碼變量

#include<stdio.h>
int main()
{
    int n,sum=1,i=1,j,k;
    char ch;
    scanf("%d %c",&n,&ch);
   
    while(sum<=n)  //打印出上半部分的行數i
    {
        sum+=2*(2*(i+1)-1);
        if(sum<=n)
           i++;
    }
    for(j=0;j<i;j++)  //打印上半部分,肯定打印行數
    {
        for(k=0;k<j;k++)
           printf(" ");
        for(k=0;k<2*(i-j)-1;k++)
        {
           printf("%c",ch);
        }
        printf("\n");
    }
    for(j=2;j<=i;j++)  //下半部分同上半部分的原理肯定行數
    {
       for(k=0;k<i-j;k++)
          printf(" ");
       for(k=0;k<2*j-1;k++)
       {
          printf("%c",ch);
       }
       printf("\n");
    }
    printf("%d",n-(sum-2*(2*(i+1)-1)));  
    //注意最後要直接輸出的沒有用到的符號,要減去上面while語句多累加了一次的符號個數
    return 0;
}

(2)設計思路
原理

第一步:定義變量(整型與字符型)程序

第二步:運用while語句打印出上半部分的行數,再用兩個for語句肯定上下兩部分的行數,for語句中再鑲嵌for語句肯定「*」與空格的個數方法

第三步:打印結果im

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

問題1:一開始不清楚怎麼表示行數
問題2:忘記相鄰兩行符號數差2怎麼表示
解決方法:翻書看,本身慢慢思索,而後查資料,最後問了同窗

(4)運行結果截圖

相關文章
相關標籤/搜索