当前位置:编程学习 > C/C++ >>

vc编写C语言问题

12

43

123

894

765

这样的顺序

编写个N*N二维数组 谢谢你了 我在考试实在麻烦你了

追问:我们是用 二维数组编写 不用那么高深  不用文件什么的 就要个在VC里能运行的程序就行了 拜托了
答案:/**
* 这个程序实现了如下功能:
*要求用户输入一个数InputNum,并且要求:MIN < InputNum < MAX
*程序生成InputNum*InputNum的方阵,方阵中的数由1开始增量为1,按照顺时针旋转排列如下:
*
* 输入的是5,程序生成5*5的方阵

1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
*
**/
#include <stdio.h>
#include <string.h>

#define MIN 4 //限定方阵的最小值
#define MAX 16 //限定方阵的最大值
#define OUTPUTFILE "d:\\1.txt" //方阵输出到文件的文件位置"d:\1.txt"

const char SPECK = ' '; //空格符号
const short int ENTER = 0x0a0d; //回车换行符号

static int CreateDraw(int nNum); //绘制方阵函数
static int GetInput(void); //获得输入参数函数

int main(int argc,char* argv[]) //主函数
{
int InputNum; //存放用户输入的数的变量
while(!(InputNum = GetInput())) //检验用户输入的数是否合法,即是否有:MIN < InputNum < MAX
{ //不合法时,返回的是0,while条件成立
printf("输入数值越界或非法!请再次尝试。\n"); //输出提示信息
fflush(stdin); //释放缓冲区
}
return CreateDraw(InputNum); //绘制方阵
}

int GetInput(void) //检验用户输入的数是否合法,即是否有:MIN < InputNum < MAX;合法则返回该数值,不合法则返回0
{
int Input = 0; //预定义输入值
printf("请输入一个介于%d到%d的整数:\n",MIN,MAX); //输出提示信息
scanf("%d",&Input); //获取输入参数
return (Input >=MIN && Input <= MAX)?Input:0; //判断输入参数是否满足MIN < Input < MAX;是返回input,不是返回0
}

int CreateDraw(int nNum)
{
int DrawArry[MAX][MAX]; //定义方阵MAX*MAX
int X,X0,i,YY,XX,j; //定义临时变量
FILE* pOutPutF; //输出文件指针
char Fttxt[8]; //输出字符格式化时使用的变量
int CrrentValue = 1; //输出的当前字符值


X=0; X0 = nNum - 1;
//对方阵进行赋值,按照1,2,3...的顺序进行
for (i = 0;i <= nNum / 2; i++)
{
j = i;

for (XX = X; XX <= X0; XX++) //这个for循环用来给当前最上边未赋值的列进行赋值
{
DrawArry[XX][j]=CrrentValue;
CrrentValue++;
};
for (YY = j+1;YY <= X0; YY++) //这个for循环用来给当前最右边未赋值的列进行赋值
{
DrawArry[X0][YY]=CrrentValue;
CrrentValue++;
};
for (XX = X0-1; XX >= X; XX--) //这个for循环用来给当前最下边未赋值的列进行赋值
{
DrawArry[XX][X0]=CrrentValue;
CrrentValue++;
};
for (YY = X0-1;YY >= X+1; YY--) //这个for循环用来给当前最左边未赋值的列进行赋值
{
DrawArry[X][YY]=CrrentValue;
CrrentValue++;
};
++X; //完成一圈,向内缩一圈
--X0;
}

if(!(pOutPutF = fopen(OUTPUTFILE,"wb+"))) //创建输出文件
{
printf("创建输出文件失败,I/O错误!"); //创建失败输出提示信息
return -1;
}
for (YY = 0;YY < nNum;YY++)//进行方阵输出YY控制列,XX控制行
{
for (XX = 0;XX < nNum; XX++)
{
sprintf(Fttxt,"%3d",DrawArry[XX][YY]); //格式化输出字符
printf("%s ",Fttxt); //输出到屏幕
fwrite(Fttxt,sizeof(char),(size_t)strlen(Fttxt),pOutPutF); //输出到文件
fwrite(&SPECK,sizeof(char),1,pOutPutF); //文件中输出一个空格
}
printf("\n"); //屏幕上输出回车换行,结束一行输出
fwrite(&ENTER,sizeof(short int),1,pOutPutF); //文件中输出回车换行,结束一行输出
}
fclose(pOutPutF); //关闭文件
return 0;
}

上一个:C语言高手进!
下一个:C语言数组下标问题。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,