| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 682 人关注过本帖
标题:编程中国 哎 难道高手都不在.......
只看楼主 加入收藏
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
收藏
 问题点数:0 回复次数:7 
编程中国 哎 难道高手都不在.......

程序在下面,就是从in.txt中读取一个奇数数N,然后写出这个数的幻方。(就是行,列,对角线的和都相等的矩形)
把结果写到文件outA032.txt中。
原来程序都是对的,但是把数据类型改为long(题目的需要),就会出错。
红色的部分就是改动的

/******** Merzirac法生成奇阶幻方:
在第一行居中的方格内放1,依次向左上方填入2、3、4....,
如果左上方已有数字,则向下移一格继续填写。
*********/

#include<stdio.h>
int main(void)
{
void huanfang();
huanfang();
return 0;
}


void huanfang()
{
FILE *fp1,*fp; /* x是行坐标,y是列坐标,k是将二维转换为一维的坐标*/
/* a就是存放幻方的一维数组 */
int k,i,N,*a,j,x1,y1,y,x; /* long k,i,N,*a,j,x1,y1,y,x; */
if ((fp=fopen("in.txt","r")) == NULL)
{
printf("no exit!\n");
exit(0);
}
fp1 = fopen("outA032.txt","w");


/*************下面开始构造幻方 ***********/

while (1)
{
fscanf(fp,"%d",&N); /* fscanf(fp,"%ld",&N) */ /* 读in.txt文件中数据 */
if (N == 0) break;
a= (int *)calloc(N*N,sizeof(int)); /* 开辟一维数组来存放数据*/
/* a= (long *)calloc(N*N,sizeof(long)); */
for (i=1; i<N*N; i++)
a[i]=0;
x=0;
y=N/2;
a[N/2]=1; /* 第一行居中放1 */
for (i=2; i<=N*N; i++)
{
x1 = (x-1+N)%N; /* 保证移动后的元素仍然在矩形中 */
y1 = (y+1+N)%N;
k = x1*N+y1; /* 将二维坐标变换为一维 */
if (a[k] != 0)
x = (x+1+N)%N; /* 如果要移动的位置上有值了,则在原来位置向下走一步*/
else
{
x=x1; /* 如果要移动的位置没有被赋值,则移动到新位置*/
y=y1;
}
k = x*N+y; /* 将二维转换为一维 */
a[k]=i; /* 依次将2,3,4,..... 放入位置 */
}

/************下面将构造好的幻方,写入文件中 ************/

fprintf(fp1,"\n\nN=%d",N); /* 在每次幻方的上面输入N的值 */
/* fprintf(fp1,"\n\nN=%ld",N); */
for (i=0; i<N*N; i++) /* 将存放幻方的数组,写入*/
{
if (i%N == 0 ) /* 每N个元素换行一次,保证输出的是方阵 */
fprintf(fp1,"\n\n");
fprintf(fp1,"%-4d",a[i]); /* fprintf(fp1,"%-4ld",a[i]); */
}
fprintf(fp1,"\n");
}
fclose(fp);
fclose(fp1);
return ;
}

换个名字吸引点人.....

[此贴子已经被作者于2007-10-18 15:21:23编辑过]

搜索更多相关主题的帖子: 中国 
2007-10-17 21:31
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
收藏
得分:0 
杂个没有人帮帮忙啊.........
我写了很多注释了的,应该方便看的嘛
2007-10-17 22:35
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 
你也把错误提示写出来啊,段错误还是什么

编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-10-18 10:01
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 
你用printf调试下,看看哪句出错了

编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-10-18 10:03
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
收藏
得分:0 
没有错误,就是运行的时候如果N&gt;10,就不能写如FP1里面了。
2007-10-18 11:02
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
收藏
得分:0 

来人啊......

2007-10-18 13:43
vbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:352
专家分:147
注 册:2006-12-30
收藏
得分:0 
咋我运行可以???
uqjHlUoV.rar (1.3 KB)

[此贴子已经被作者于2007-10-18 21:01:54编辑过]



OJFUOvgf.rar (1.29 KB) 编程中国 哎 难道高手都不在.......


清远鹏程万里人才网:[url=http://www.]http://www.[/url]zq.,qy.
2007-10-18 20:55
wzhings
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-1-16
收藏
得分:0 
我也可以运行..dev C++

在我的眼里,这个世界是由0和1组成的!~
2007-10-18 21:36
快速回复:编程中国 哎 难道高手都不在.......
数据加载中...
 
   



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

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