用C语言如何编程打印出由1到n^2的自然数构成的魔方阵,?

作者&投稿:酆选 (若有异议请与网页底部的电邮联系)
用C语言编程打印出由1到n^2的自然数构成的魔方阵,n由键盘输入。魔方阵的每一行每一列和对角线均相等。~

只要用动态分配内存就可以了。 #include
#include int main()
{
int i, j, n, row, col;
int **a;

printf("please input n:");
scanf("%d",&n);
a = (int**)malloc(sizeof(int*)*n);
for(i = 0; i != n; i++)
{
*(a+i) = (int*)malloc(sizeof(int)*n);
}

col = n / 2;
row = 0;
for(i = 1; i <= n*n; i++)
{
if(row == -1)
row = n - 1;
if(col == n)
col = 0;

a[row][col] = i;

if(i % n == 0)
row++;
else
{
row--;
col++;
}
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
printf("%-5d", a[i][j]);

printf("
");
}
return 0;
}

魔方阵是用来锻炼学生的对二维数组元素的精确控制能力的。算法如下

魔方阵的排列规律如下:
⑴将1放在第一行中间一列;
⑵从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如三阶魔方阵,5在4的上一行后一列);
⑶如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
⑷当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
⑸如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;

奇数魔方阵就是将数字排列在nxn(n为奇数)的方阵上,要求满足各行、各列与各对角线的和相同。如下图所示,是n=5的奇数魔方阵。

填魔方阵的方法以奇数魔方阵最为简单,第一个数字放在第一行的正中央(填了1),然后向右(左)上填,如果右(左)上已有数字,则向下填,如下图所示:

一般程序语言的阵列多由0开始,为了计算方便,我们利用索引1到n的部份,而在计算是向右(左)上或向下时,我们可以将索引值除以n值,如果得到余数为1就向下,否则就往右(左)上。




c语言编程:打印年历
include <stdio.h> void main(){ int i,j,k,year,week;int day[]=;char month[12][10]=;printf("Input year you want to print:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0)) day[1]++; \/\/判断是否闰年 week=(35+year+year\/4-year\/100+year\/400...

请回答菜鸟一些C语言问题。用电脑编程如何打印笑脸?打印笑脸都用什么知...
广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表2.2中的\\ddd和\\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\\101表示字?quot;A" ,\\102表示字母"B",\\134表示反斜线,\\XOA表示换行等。转义字符的使用 void main(){ int a,b,c;a=5; b=6; c=7;...

c语言编程题打印出所有的“水仙花数”所谓“水仙花数”是指一个三位数...
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。2.程序源代码:main(){ int i,j,k,n;printf(...

急求c语言编程:从键盘输入一个整数,求它的位数,并打印出每一位上的...
include <stdio.h> include <malloc.h> int main (void){ int a, b, c, h, i, t, l;\/\/i是位数 char f;do { i = 0;printf("请输入一个数:");scanf("%d", &a);c = a;for (;a != 0; i++){ b = a\/10;a = b;} int * p = (int *)malloc(i*sizeof(int))...

LINUX下C语言编程怎么打印日志
在GNU C语言库提供的内容中,有接口可以用来做这件事。用下面的命令查看:nm -D \/lib\/libc.so.6 | grep log 可以看到一些调用:000b9410 T closelog0008b870 T getlogin0008b960 T getlogin_r000d0180 T __getlogin_r_chk000bd190 T klogctl00027450 T __open_catalog000b9380 T openlog...

c语言编程 打印田字格
include<stdio.h> void main(){ int n,i,j;printf("请输入田字格的宽度:");scanf("%d",&n);if(n%2){ for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(i==0||i==n-1||j==0||j==n-1||i==(n-1)\/2||j==(n-1)\/2){ printf("*");} else { printf(" ");} ...

C语言 使用循环结构编程打印如下图形: * * * * * * * * * * * * *...
如果你的代码是直接贴进来的,那么问题出在其中的分号为中文字符。C语言程序中的中文字符只能出现在注释和字符串中。把分号全部替换编译没问题的:include <stdio.h> void main(){ int i,j,n;printf("\\nPlease Enter n:");scanf("%d",&n);for(i=1;i<=n;i++){ for(j=1;j<=n-i;j...

求助求助!!哪位大神能教我一下,c语言编程,输入一个整数n,检查n中重复...
include "stdio.h"int main(){ int n,i,a[10]={0};scanf("%d",&n);while(n>0){a[n%10]++;n\/=10;} for(i=0;i<10;i++)if(a[i])printf("%d: %d\\n",i,a[i]);return 0;}

在C语言编程中如何在屏幕上打印一条线?
printf("+---");printf("|");printf("+---");printf("|");这样懂了吧。

C语言编程,打印星号菱形,有人能一步步解释一下吗,看不懂啊
首先fabs( )函数是一个取绝对值的函数,第一个for循环是决定每一行( printf("\\n"); ),第二个for循环决定每一列操作。第一个for循环的i值每增加1,内嵌的for循环(第二个for循环)就执行了7次。举个例子:当i=1的时候,此时的fabs(4-1)=3,7-fabs(4-1)=4。j从1开始,if(((j<...

乐至县17885756884: 用C语言编程打印出由1到n^2的自然数构成的魔方阵,n由键盘输入.魔方阵的每一行每一列和对角线均相等.
况迫力奥: #include<stdio.h>void main(){ int i,j,n,row,col,a[11][11]; printf("please input n:"); scanf("%d",&n); col = n/2;row = 0; for(i=1;i<=n*n;i++) { if(row==-1) row=n-1; if(col==n) col=0; a[row][col]=i; if(i%n==0) row++; else { row--; col++; } } for(i=0;i<n;i++) { ...

乐至县17885756884: 用c语言编程打印出由1到n^2的自然数构成的魔方阵 -
况迫力奥: //WindowsXP VC++6.0 #include<stdio.h> int main() { int buf[256][256]={0}; int i=0,j=0,n,count; scanf("%d",&n); count=buf[0][0]=1; while(count<n*n) { while(j+1<n&&!buf[i][j+1]) buf[i][++j]=++count; while(i+1<n&&!buf[i+1][j]) buf[++i][j]=++count; while(j...

乐至县17885756884: 用C语言求:打印出由1到n平方的自然数的魔方阵 -
况迫力奥: #include"stdio.h" main() {int a[20][20],i,j,k,p=1,m,n;while(p==1){printf("Enter n(n=1--19):");scanf("%d",&n);if(n>0&&n<=19&&n%2!e799bee5baa6e78988e69d8331333234313336=0)p=0;}for(i=1;i<=n;i++)for(j=1;j<=n;j++)a[i][j]=0; ...

乐至县17885756884: 用c语言编程从整数n1到n2的每一个平方 -
况迫力奥: #include<stdio.h> int main() { int n1,n2,i; printf("Input n1 n2(n1<=n2):"); //计算n1~n2的平方 scanf("%d %d",&n1,&n2); //输入n1和n2 for(i=n1;i<=n2;i++) printf("%d^2=%d\n",i,i*i); //输出n1~n2之间每个数的平方 system("pause"); return 0; }

乐至县17885756884: 急!!!怎么用C语言编写程序,用函数完成:计算从1开始到n的自然数的和??? -
况迫力奥: C语言是普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点,计算和的方法为: 1、新建一个求1到100自然数之和项目. 2、添加一个cpp文件. 3、包含需要用到的头文件. 4、输入main函数. 5、定义两个变量,分别是:a和sum. 6、使用while语句计算1到100之间所有自然数之和. 7、运行程序,打印出结果. 注意事项: C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等.从应用的角度,C语言比其他高级语言较难掌握.也就是说,对用C语言的人,要求对程序设计更熟练一些.

乐至县17885756884: 打印魔方阵 编程打印出由1到n^2的自然数构成的魔方阵,n由键盘输入.魔方阵每行每列与对角线和均相等. -
况迫力奥: #include <stdio.h>#include <malloc.h> int main() { int i, j, n, row, col; int **a;printf("please input n:"); scanf("%d",&n); a = (int**)malloc(sizeof(int*)*n); for(i = 0; i != n; i++) { *(a+i) = (int*)malloc(sizeof(int)*n); }col = n / 2;row = 0; for(i = 1; i <= n*n;...

乐至县17885756884: 编程:用户输入一个整数,打印从1到该整数的平方根和立方根表,保留3位小数.刚开始学C语言 -
况迫力奥: printf("%.3f %.3f %.3f",num, sqrt(num), pow(num,1.0/3));这个有问题: printf("%.3f %.3f %.3f",num, sqrt((double)num), pow(num,1.0/3));

乐至县17885756884: c语言请输入数字n;打印出12+22+32+…n2的结果(用三种循环分别实现) -
况迫力奥: for循环: main() {int i=1,n,sum=0;printf("input n=");scanf("%d",&n);for(;i<=n;i++)sum=sum+10*i+2;printf("sum=%d",sum);getch();} while循环: main() {int i=1,sum=0,n;printf("input n=");scanf("%d",&n);while(n){sum=sum+10*i+2;i++;n--;}printf("sum=%d",sum);getch(); } do-while和while差不多,就不写了.

乐至县17885756884: C语言乘法表的打印 -
况迫力奥: 我明白你所要输出的乘法表的形式了!#include void main() { int i,j,a; printf("\n"); for (i=1;i{ j=i; for(b=1;b printf("*"); for(j;j{a=i*j;printf("%d*%d=%-3d",i,j,a); }printf("\n"); } }

乐至县17885756884: c语言中如何用函数 打印出1到100中的素数 -
况迫力奥: #include<stdio.h> int isprime(int n){ int i; if(n<=1)return 0; for(i=2;i<n/2;i++){ if(n%i==0)return 0; } return 1; } main() { int i; for(i=1;i<=100;i++) { if(isprime(i)) printf("%d \n",i); } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网