一維陣列反轉

Home Home
引用 | 編輯 星辰雪
2011-03-04 00:07
樓主
推文 x0
題目描述:
一維陣列反轉

輸入說明:
輸入一個一維陣列

輸出說明:
輸出反轉後的陣列

使用 c 來撰寫
DEV C++軟體 來編譯

-------------
CODE :



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

int main(void)
{
FILE *input = fopen("input.txt","rb");

int s,i=0;
char temp;
bool IsHe ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 csr
2011-03-04 22:19
1樓
  
大大
小弟不大明白
我用一個input.txt檔
裡面輸入123456789
再開檔
它還是顯示123456789
並無反轉輸出阿
為什麼呢
是否可請大大幫小弟說明一下程式的功能在那裡
謝謝

獻花 x0
引用 | 編輯 星辰雪
2011-03-04 22:28
2樓
  
他是使用讀取檔案(txt)
進入程式
程式會跑出 反轉之後的

要執行程式 才會跑出來
不是直接開 txt檔案

有點類似 ACM比賽那種的
要讀取檔案

獻花 x0
引用 | 編輯 csr
2011-03-04 22:59
3樓
  
下面是引用 星辰雪 於 2011-03-04 22:28 發表的 : 到引言文
他是使用讀取檔案(txt)
進入程式
程式會跑出 反轉之後的

要執行程式 才會跑出來
不是直接開 txt檔案

有點類似 ACM比賽那種的
要讀取檔案
這是小弟執行的情形
為何會這樣
以下是圖像請參考


獻花 x0
引用 | 編輯 星辰雪
2011-03-04 23:16
4樓
  
我...好像找到問題了
我貼的程式碼
有一些沒顯示出來

你抓我的附件 檔案
開啟裡面的 C檔案
會比較完整一點

獻花 x0
引用 | 編輯 csr
2011-03-04 23:23
5樓
  
下面是引用 星辰雪 於 2011-03-04 23:16 發表的 : 到引言文
我...好像找到問題了
我貼的程式碼
有一些沒顯示出來

你抓我的附件 檔案
開啟裡面的 C檔案
會比較完整一點
完全ok
謝謝指導

獻花 x0
引用 | 編輯 星辰雪
2011-03-04 23:27
6樓
  
因為這是學校
程式檢定的規定
有點類似 ACM考試方法
採用 讀取檔案 方式
所以我才會用這種方法寫的

獻花 x0
引用 | 編輯 星辰雪
2011-03-17 01:46
7樓
  
忽然想到一個 問題
想問大家
如果我想加入一個功能

遇到0 的時候 程式 就會停止
這樣的話 該怎麼寫會比較好

獻花 x0
引用 | 編輯 totsi
2011-03-17 09:02
8樓
  
下面是引用 星辰雪 於 2011-03-17 01:46 發表的 : 到引言文
忽然想到一個 問題
想問大家
如果我想加入一個功能

遇到0 的時候 程式 就會停止
這樣的話 該怎麼寫會比較好

如果只是單純是從檔案內讀到0的時候停止。

那就只要在迴圈內判定等於0的時候,就結束程式。

至於要不要顯示提示訊息,那就要看為什麼要讀到0的時候,要停止了。

所以請問樓主,遇到0要停止程式的問題有這麼單純嗎?XDD

獻花 x0
引用 | 編輯 星辰雪
2011-03-17 20:56
9樓
  
下面是引用 totsi 於 2011-03-17 09:02 發表的 : 到引言文


如果只是單純是從檔案內讀到0的時候停止。

那就只要在迴圈內判定等於0的時候,就結束程式。

至於要不要顯示提示訊息,那就要看為什麼要讀到0的時候,要停止了。

所以請問樓主,遇到0要停止程式的問題有這麼單純嗎?XDD
------------------------------------------
使用例子來說明
#1

1 2 3 4
5 6 7 8
0       <<<這一列出現0 所以停止運作

#2

1 2 3 4
0       <<出現0
5 6 7 8 << 因為上一列出現0 停止運作,所以這一列不會列印出來

#3
0 1 2 3
3 2 1 0
0       <<出現0列 所以停止運作

我想要的功能 就如同上面所敘述
一列,只有一個字 而且那個字 是0
才停止運作。

想請問一下該如何編寫
我試了好幾次都寫不出來

獻花 x0
引用 | 編輯 totsi
2011-03-18 09:11
10樓
  
code部分就不改了,先確定在下的認知是否正確嚕~~

依照範例看來,只要遇到有一列只有一個數值,然後那個數值為0的時候,要終止程式。

那麼這個可以用傳說中的髒雪球理論嚕XDD

依照code的寫法,一次只讀一個數值進來

那麼在讀到數值的判定時,多加上是否為0的判斷。

如果第一位數值是0,則此列醜一。

之後如果那一列就沒其他數值的話,那就直接結束程式。

不知這樣的流程,是否符合樓主的需求?

如果是的話,那code可能可以像下面那樣改:
複製程式
//節錄
  bool IsHeadZero = false;
  int nColumnNum = 0;

  while(...)
  {
      fscanf(input,"%d",&s[i]);
      if (s[i] == 0) {
        IsHeadZero = true; };

      i++;
      fscanf(input,"%c",&temp);
      if(temp!=' ')
      {
          for(int j=i-1;j>=0;j--)
          {
              printf("%d ",s[j]);
          }            
          printf("\n");
      if ( IsHeadZero && i == 1) 
      {
          break;       
       }else{
          IsHeadZero = false;
       }

       i=0;
    }  
      
    //以下省略
  }



獻花 x0
引用 | 編輯 星辰雪
2011-03-19 00:29
11樓
  
下面是引用 totsi 於 2011-03-18 09:11 發表的 : 到引言文
code部分就不改了,先確定在下的認知是否正確嚕~~
依照範例看來,只要遇到有一列只有一個數值,然後那個數值為0的時候,要終止程式。
那麼這個可以用傳說中的髒雪球理論嚕XDD
依照code的寫法,一次只讀一個數值進來
那麼在讀到數值的判定時,多加上是否為0的判斷。
.......

----------
首先 先謝謝 講解
看了一下 程式的邏輯想法
滿不錯的 這樣撰寫 會使 遇到0 不會再運作下去

再來 我還有一個問題想發問
如果我停止列的" 0 " 不想讓他列印 出來 我該
如何 撰寫呢 ?

獻花 x0
引用 | 編輯 totsi
2011-03-21 08:45
12樓
  
把 if ( IsHeadZero && i == 1) 搬到您用來輸出的地方前面就好。

大概像底下這樣:
複製程式
....
      if(temp!=' ')
      {
         if ( IsHeadZero && i == 1) 
         {
              break;       
          }else{
              IsHeadZero = false;
          }

          for(int j=i-1;j>=0;j--)
          {
              printf("%d ",s[j]);
          }            
          printf("\n");
       }

....

這樣就在印出前就會離開了,依您原始的寫法,只要單行只有一個值的時候,是一定會進到不等於空白的判斷內。

不知,這樣的寫法是否有如同您的預期呢? 表情

獻花 x0
引用 | 編輯 星辰雪
2011-03-21 15:50
13樓
  
下面是引用 totsi 於 2011-03-21 08:45 發表的 : 到引言文
把 if ( IsHeadZero && i == 1) 搬到您用來輸出的地方前面就好。
大概像底下這樣:
[code]....
    if(temp!=' ')
.......

---
非常感謝
提供指導

獻花 x0