一维阵列反转

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