| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1894 人关注过本帖
标题:新人写了一组代码,不知道问题出在哪里。
只看楼主 加入收藏
ergg
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2016-5-20
结帖率:80%
收藏
 问题点数:0 回复次数:14 
新人写了一组代码,不知道问题出在哪里。
目的是形成这样一组数列,中间为1,然后慢慢像外散开。。写出这样的[100][100]的矩阵。

                                   
                            16 15  14  13                                 
                            5   4   3  12
                            6   1   2  11                                      
                            7   8   9  10         

#include <stdio.h>

int main(int argc, char *argv[]) {
      int a[100][100];
      int o,p;  
      int i,j=1,q=1,c=1,d=1;
      int x=49,y=49;
      int n=1;   
      
      
        for(o=1;o<100;o++)
      for(p=1;p<100;p++)
      a[o][p]=0;          //让矩阵的每个数字都为0
      a[x][y]=1;        //矩阵中间的数字为1

     for(i=1;i<100;i++)  //循环100次
         if(i%2){   
              while(j<=i) {n=n+1;x=x+1;a[x][y]=n;j=j+1;}  //右
              while(q<=i) {n=n+1;y=y+1;a[x][y]=n;q=q+1;}  //上
           }         
         else{
              while(c<=i) {n=n+1;;x=x-1;a[x][y]=n;c=c+1; }//左
              while(d<=i) {n=n+1;;y=y-1;a[x][y]=n;d=d+1; }//下
 

      
        for(o=1;o<100;o++)
        for(p=1;p<100;p++)
          printf("%4d",a[x][y]);printf("\n");  //显示所有数字
            }
 
不知道问题出在哪了,希望得到一些指导。。
搜索更多相关主题的帖子: include 
2016-07-14 05:15
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
你检查下你循环100次的代码,是不是循环的范围也就是for大括号要不要把if,else包括进去?你的else是不是多了分号?
一定要把格式先打好,容易发现也有利于开始就避免出现这样的错误
至于算法没有细看,你先把语法方面的问题解决
你这里的
for(o=1;o<100;o++)
        for(p=1;p<100;p++)
          printf("%4d",a[x][y]);printf("\n");  //显示所有数字
            }

你的循环变量是o和p,但你输出是a[x][y],你想下可以输入所有数字吗?你的xy值随着循环而改变了吗?

[此贴子已经被作者于2016-7-14 08:54编辑过]

2016-07-14 08:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
1。代码要好好排版
2。如果用算法生成的话,你得告诉别人奇数行怎么排布

程序代码:
#include <stdio.h>

#define N 100

int main( void )
{
    unsigned a[N][N];

    for( size_t r=N/2,c=(N-1)/2,n=1; n<=N*N; ++n )
    {
        a[r][c] = n;

        if( r>c && N-1-r<=c )
            ++c;
        else if( r<=c && N-1-r<c )
            --r;
        else if( r<=c && N-1-r>=c )
            --c;
        else
            ++r;
    }

    for( size_t r=0; r!=N; ++r )
    {
        for( size_t c=0; c!=N; ++c )
            printf( "%6u", a[r][c] );
        putchar( '\n' );
    }

    return 0;
}

2016-07-14 08:58
ergg
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2016-5-20
收藏
得分:0 
#include <stdio.h>

int main(int argc, char *argv[]) {
      int a[100][100];
      int i;
      int j=1,q=1,c=1,d=1;
      int x,y;
      int n=1;   
      
        for(x=0;x<100;x++)
      for(y=0;y<100;y++)
      a[x][y]=0;          //全部0にする
      a[49][49]=1;        //真ん中の数字を0にする
         
     for(i=1;i<100;i++) {

         if(i%2){   
              while(j<=i) {n=n+1;x=x+1;a[x][y]=n;  j++;}
              while(q<=i) {n=n+1;y=y+1;a[x][y]=n;  q++;}
          }  

         else{  
              while(c<=i) {n=n+1;;x=x-1;a[x][y]=n;  c++;}
              while(d<=i) {n=n+1;;y=y-1;a[x][y]=n;  d++;}
          }
      }
      for(x=0;x<100;x++)
      for(y=0;y<100;y++)
      printf("%5d",a[x][y]);
         
         
}
2016-07-14 18:01
ergg
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2016-5-20
收藏
得分:0 
回复 2楼 wanglianyi1
非常感谢,确实{}没有加。。习惯也确实很不好。。

我整理好之后还是不能运行,能帮我再看一下吗?(写在三楼) 谢谢!
2016-07-14 18:02
ergg
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2016-5-20
收藏
得分:0 
回复 3楼 rjsp
非常感谢回复。 但是觉得好难啊。。我们老师只教过loop...

我把code整理了一下放在四楼,能帮我再看一下吗? 谢谢!
2016-07-14 18:04
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
用while我不懂怎么修改。我会的也只是类似3楼的写法,而且早上发信息给你,让你去看。
我不知道你有没有认真去看,如果有看,我真不知道你怎么修改的代码。
和早上的对比一下,无非就是最后一个for循环稍微改了下。
2016-07-14 20:07
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 5楼 ergg
我不知道楼主使用的什么软件写的。但像我用Dev C++就可以通过快捷键“Ctrl+Shift+A”自动排版。。
具体的操作方法你可以自行百度。
你所谓的已经整理过,其实并没有完全到位。不信试试。

φ(゜▽゜*)♪
2016-07-14 20:22
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
原程序的while(j<=i) {n=n+1;x=x+1;a[x][y]=n;j=j+1;}
每次执行到这里的时候都j==i,也就是说每次修改都只对最里面的那个九个格子进行修改,你自己想想j,
程序代码:
#include <stdio.h>

int main(int argc, char *argv[]) {
    int a[10][10];
    int o,p;
    int i,j=1,q=1,c=1,d=1;
    int x=5,y=5;
    int n=1;


//    for(o=1; o<10; o++)
//        for(p=1; p<10; p++)
//            a[o][p]=0;          //让矩阵的每个数字都为0
    a[x][y]=1;        //矩阵中间的数字为1

    for(i=1; i<10; i++) //循环100次
        if(i%2) {
//            /*         这是我重写的,你之前的while循环并不能实现你要的循环
            for(int f=1; f<=i; f++) {
                a[++x][y]=++n;
            }
            for(int f=1;f<=i;f++){
                a[x][++y]=++n;
            }
        } else {
            for(int f=1; f<=i; f++) {
                a[--x][y]=++n;
            }
            for(int f=1;f<=i;f++){
                a[x][--y]=++n;
            }
        }


    for(o=1; o<10; o++) {
        for(p=1; p<10; p++){
          printf("%4d",a[o][p]);
          }
        printf("\n");  //显示所有数字
    }


    return 0;
}

那么我的程序为了更直观看到效果,我把源程序中所有出现的100都手动替换成10了,同时,你原来的那个输出循环也没有正确嵌套,我给你改了。。。
图片附件: 游客没有浏览图片的权限,请 登录注册

如果你还没学到自增自减,或者觉得a[++x][y]=++n;不好理解,也可以换算成x=x+1;n=n+1;a[x][y]=n;

另外再给你一个忠告,
1.新手写程序一定要把括号带上,不管你的for循环while循环if else里面是不是就一条语句,很多时候你一嵌套就出错了。
2.写程序应该一点一点实现,像这道题,你不应该上来就直接做100*100的矩阵,先做个10*10的输出看看结果,你做100*100的,就算前面代码都对了,你最后的回车换行没放对,错了你都不知道哪里错。因为数据太多,回车早就被淹没了。。。



[此贴子已经被作者于2016-7-14 20:58编辑过]

收到的鲜花
  • wanglianyi12016-07-14 21:27 送鲜花  5朵   附言:我很赞同

φ(゜▽゜*)♪
2016-07-14 20:49
ergg
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2016-5-20
收藏
得分:0 
回复 9楼 书生牛犊
谢谢!非常受用!

还是想问几个问题。。

1,我把100*100的行列打出来了,但是显示的是一团糟那种。。 怎么确定自己打出来的数学是对的呢?

2,看到数字里面夹着很多的“0”,不知道为什么会有这么多“0”出现?不应该啊。。
2016-07-15 16:25
快速回复:新人写了一组代码,不知道问题出在哪里。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055431 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved