史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2005-10-25, 11:24 PM   #1
mach12
長老會員
榮譽勳章
UID - 18176
在線等級: 級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時
註冊日期: 2002-12-27
住址: 桃園
文章: 369
精華: 0
現金: 1018799 金幣
資產: 1038940 金幣
預設 學校作業的C語言的問題

原題目:
使用for迴圈畫出下列的圖形

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

但老師改成:

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

例:

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

圖形為:

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

本人大一新手剛學C
希望各位大大能開導我
mach12 目前離線  
送花文章: 46, 收花文章: 26 篇, 收花: 37 次
回覆時引用此帖
舊 2005-10-26, 04:11 PM   #2 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時
註冊日期: 2002-12-07
文章: 13251
精華: 0
現金: 26243 金幣
資產: 3024053 金幣
預設

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

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

不會的話給個提示:
用一個 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;
}
是否有更精簡的寫法個人不清楚 ^^||
mini 目前線上  
送花文章: 2000, 收花文章: 7958 篇, 收花: 26750 次
回覆時引用此帖
舊 2005-10-26, 05:36 PM   #3 (permalink)
長老會員
榮譽勳章
UID - 18176
在線等級: 級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時
註冊日期: 2002-12-27
住址: 桃園
文章: 369
精華: 0
現金: 1018799 金幣
資產: 1038940 金幣
預設

回版主:
菱形是不太會寫
因為我邏輯不太好
需要想久一點
謝版大的提示
努力去
mach12 目前離線  
送花文章: 46, 收花文章: 26 篇, 收花: 37 次
回覆時引用此帖
舊 2005-10-27, 09:13 AM   #4 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時
註冊日期: 2002-12-07
文章: 13251
精華: 0
現金: 26243 金幣
資產: 3024053 金幣
預設

幫你寫好了
語法:
#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); //除錯用 
}
mini 目前線上  
送花文章: 2000, 收花文章: 7958 篇, 收花: 26750 次
回覆時引用此帖
舊 2005-10-28, 12:02 AM   #5 (permalink)
長老會員
榮譽勳章
UID - 18176
在線等級: 級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時
註冊日期: 2002-12-27
住址: 桃園
文章: 369
精華: 0
現金: 1018799 金幣
資產: 1038940 金幣
預設

超級的謝謝
謝版大我一定可以可以把C學好的
mach12 目前離線  
送花文章: 46, 收花文章: 26 篇, 收花: 37 次
回覆時引用此帖
舊 2005-10-28, 10:27 AM   #6 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時級別:96 | 在線時長:9669小時 | 升級還需:128小時
註冊日期: 2002-12-07
文章: 13251
精華: 0
現金: 26243 金幣
資產: 3024053 金幣
預設

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

因為菱形直徑 一定為奇數
所以個人也不知有何好的畫法 ...
mini 目前線上  
送花文章: 2000, 收花文章: 7958 篇, 收花: 26750 次
回覆時引用此帖
舊 2005-10-28, 03:03 PM   #7 (permalink)
長老會員
榮譽勳章
UID - 18176
在線等級: 級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時級別:27 | 在線時長:890小時 | 升級還需:6小時
註冊日期: 2002-12-27
住址: 桃園
文章: 369
精華: 0
現金: 1018799 金幣
資產: 1038940 金幣
預設

我已經用while限制了輸入條件一定要為奇數了
謝版大
mach12 目前離線  
送花文章: 46, 收花文章: 26 篇, 收花: 37 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 10:05 PM


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


SEO by vBSEO 3.6.1