史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   學校作業的C語言的問題 (http://forum.slime.com.tw/thread159442.html)

mach12 2005-10-25 11:24 PM

學校作業的C語言的問題
 
原題目:
使用for迴圈畫出下列的圖形

    *    
   ***   
  *****
 *******
*********
 *******
  *****
   ***
    *

但老師改成:

使用者輸入從1~79之中任一奇數且畫出該菱形,但要給使用者選擇缺哪邊的缺角(左上右下或右上左下兩種),然後原題目的*要改成1357913579...

例:

使用者輸入:11 缺角:左上右下 (*代表缺角處)

圖形為:

     1     
    *35    
   **791 
  ***3579
 ****13579
13579135791
 35791****
  3579***
   135**
    79*
     1

本人大一新手剛學C
希望各位大大能開導我 :n2:

mini 2005-10-26 04:11 PM

不懂
使用者輸入:一奇數
是做什麼用的 ??

先問一下
既然是 開導 ^^
那請問您已經會寫原題目的菱形嗎?
會的話比較快(改一改就好了),請貼出來

不會的話給個提示:
用一個 1~9 的 for迴圈
裡面再計數 1、3、5、7、9,且給與列印 "*" 用
5-(*號的個數) 給列印 " " 用

計數奇數只要 i=1,i=i+2,當i大於9時i=1
當然還有其他方法,只是這應該是最容易理解的方法

還是寫一下好了
語法:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int i,j,n; //i 表示幾顆星
int max=9; //菱形直徑
int x=max/2+1; //菱形半徑(無條件進一)

  i=-1;
  for(n=1;n<=x;n++){ //上半部 1~5
    i=i+2;
    for(j=1;j<=x-n;j++) printf(" ");
    for(j=1;j<=i;j++) printf("*");
    printf("\n");
  }

  for(n=x-1;n>=1;n--){ //下半部 4~1
    i=i-2;
    for(j=1;j<=x-n;j++) printf(" ");
    for(j=1;j<=i;j++) printf("*");
    printf("\n");
  }
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

是否有更精簡的寫法個人不清楚 ^^||

mach12 2005-10-26 05:36 PM

回版主:
菱形是不太會寫
因為我邏輯不太好
需要想久一點
謝版大的提示
努力去:D

mini 2005-10-27 09:13 AM

幫你寫好了
語法:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int num=1,i,j,n; //num計數數字 i表示幾顆星 j計數用 n上下半部計數用
int max,x; //max菱形直徑 x菱形半徑
char lr;

void PrintNum();

int main(int argc, char *argv[])
{
  printf("請輸入菱形直徑:");
  scanf("%d",&max);
  printf("請輸入缺角處:左上右下請按[1]/右上左下請按[2]");
  lr=getch();
  printf("\n");
 
  x=max/2+1;
  i=-1;
  for(n=1;n<=x;n++){ //上半部
    i=i+2;//上半部 是遞增
    for(j=1;j<=x-n;j++) printf(" ");
    PrintNum();
    printf("\n");
  }
 
  if(lr=='1') lr='2';
  else lr='1';
 
  for(n=x-1;n>=1;n--){ //下半部
    i=i-2;//因為接下來是遞減
    for(j=1;j<=x-n;j++) printf(" ");
    PrintNum();
    printf("\n");
  }
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

void PrintNum()
{
  if(lr=='1') for(j=1;j<=i-n;j++) printf("*"); //選左上右下時先印 *
  for(j=1;j<=n;j++){ //依序填 1、2、5、7、9、1...
    printf("%d",num);
    num=num+2;
    if(num>9) num=1;
  }
  if(lr=='2') for(j=1;j<=i-n;j++) printf("*"); //選右上左下時後印 *
//  printf("%d",n); //除錯用
}


mach12 2005-10-28 12:02 AM

超級的謝謝 :n3:
謝版大我一定可以可以把C學好的

mini 2005-10-28 10:27 AM

改正了一下 "原題目" (#2樓 的解答)
至於
第二題有一個小bug
就是
當輸入 偶數時 菱形半徑會無條件+1
直徑變成 偶數+1

因為菱形直徑 一定為奇數
所以個人也不知有何好的畫法 ...

mach12 2005-10-28 03:03 PM

我已經用while限制了輸入條件一定要為奇數了
謝版大


所有時間均為台北時間。現在的時間是 11:58 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1