c语言6阶
❶ c语言花朵数
21位的花朵题,可不是上面几行程序就能解决的,一句话两句话解释不清楚。
由于数字位数太大,常规的直接拿数来加减乘除乘方都要失效,如何处理这个问题才是本题关键。
请参看已有的网络知道回答,已有现成程序。
http://..com/question/260763988.html
希望能解决您的问题。
❷ c语言求6的阶乘。如果可以请写出各种方法详细的··我明天考试要这个···去年学的已经都忘差不多了
int main()
{
int i;
int j;
for(i=1;i<7;i++)
j=j*i;
printf("%d",j);
return 0;
}
❸ C语言的问题,实在是不会做了,求大神!!!
函数在C语言中是必不可少的一部分,大致可以分为两种:系统定义好的和我们自己写的。不管是哪种函数,它们都默默地、兢兢业业地完成着属于自己的任务。只要给它一些参数,它就会把参数处理好、有些函数还会把处理结果返回出来。以下几种特殊函数,你有见过吗?会用吗?
1、静态函数
普通的函数一般是全局的,可见范围是跨文件的,比如a.c 这个文件中有一个函数名为 func() , b.c文件 中是可以直接调用a.c中的func函数的。而静态函数不同,它被static修饰之后可见范围缩小到本文件可见,其它文件不可见。
如果真的是闲得蛋疼想在一个文件中调用一个别的文件中的静态函数,也有办法:
1.直接把func所在的函数包含进来 #include "b.c"
2.可以把static 修饰的函数写在头文件中
2、递归函数:
这个名字看起来有一点数学味,比较高级的样子。其实它的定义也很简单:在一个函数内部调用了自身,那这个函数就是递归函数。
下面写了一个例子:
使用递归函数的时候有几个问题要注意:
1.只有能被递归解决的问题才可以使用递归来解决。(阶乘、幂运算、字符翻转等)
2.递归函数中必须有一个可以直接退出(返回)的条件,否则会进入无限循环。
3.递归的过程包含两个:逐渐递进,层层回归。
4.递归函数会使用大量的栈内存空间,要注意递归的层次不要太深,如果一定要用的话可以尝试把栈空间的大小临时设置一下。(ulimit -s)
3.指针函数
这种函数是什么其实很明显了,指针函数就是返回值是指针类型的函数。
使用的时候要确保该函数的返回值是指针,不然编译器会报警告。
4、回调函数
函数的实现方,它不方便直接调用该函数,而是由第三方接口来调用该函数,该函数就是回调函数。概念有点绕,我们直接看代码:
可以看到我们在主函数main里面并没有直接调用func()函数,而是运用函数指针P通过一个signal函数去调用它。在实际工程中回调函数会用得比较多,就像图中的signal函数,假设这个函数是从别人手上买回来的,我们无权访问其源码,只能够使用。卖家给我们留下了接口让我们使用它,因此我给了它两个参数,当它收到信号2的时候,我希望它能帮我调用我写的func()函数。那么func()就是所谓的回调函数。
5、内联函数
如果有一个函数被多次调用,那么该函数在调用过程中会消耗程序执行的时间, 而内联函数指的就是可以把需要调用的函数副本拷贝到调用者的内部,节约了调用过程中的时间。
普通函数的调用与切换过程:
内联函数示意图:
内联语法:
什么时候应该用内联函数:一个函数在另一个函数多次被调用,而且被调用函数的内容比较少的情况。
6、变参函数
如果一个函数的参数类型以及参数的数量都是可变的,那么这个函数就称之为变参函数(如我们常用的printf)。
函数形参在栈中分配内存的顺序,从右到左的独特顺序使得第一个参数是栈顶元素(即示例中的参数 format),我们就可以根据第一个已知的参数(绿色)所提供的线索, 来回溯剩下的未知的参数(黄色)
以上六种特殊函数,你看懂了吗?有任何疑问可以评论区告诉我哦!
森式嵌入,持续分享嵌入式硬知识。欢迎志同道合的朋友关注一起交流进步!
❹ 用C语言编写程序计算阶梯数
#include<stdio.h>
main()
{inti=2;
while(1){
i++;
if(i%2==1&&i%3==2&&i%4==3&&i%5==4&&i%6==5&&i%7==0)
break;
}
printf("%d",i);
}
如图所示,望采纳。。。。。。
❺ 六阶幻方怎么解
下面是六阶幻方的其中一个答案:
=================================================
28 4 3 31 35 10
36 18 21 24 11 1
7 23 12 17 22 30
8 13 26 19 16 29
5 20 15 14 25 32
27 33 34 6 2 9
注意:这个幻方的每行每列对角线的六个数之和为111(幻和为111),还有一个特点就是中间的十六个数也构成一个四阶幻方哦,幻和为74。希望满意答案。
=====================================================================
下面介绍一下奇数幻方,双偶,单偶幻方的常见规律。
一、 N 为奇数时,最简单。
(1) 将1放在第一行中间一列;
(2) 从2开始直到n×n止各数依次按下列规则存放:
按 45°方向行走,如向右上
每一个数存放的行比前一个数的行数减1,列数加1
(3) 如果行列范围超出矩阵范围,则回绕。
例如1在第1行,则2应放在最下一行,列数同样加1;
(4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,
则把下一个数放在上一个数的下面。
============================
二、 N为4的倍数时
采用对称元素交换法。
首先把数1到n×n按从上至下,从左到右顺序填入矩阵
然后将方阵的所有4×4子方阵中的两对角线上位置的数关于方阵中心作对
称交换,即a(i,j)与a(n-1-i,n-1-j)交换,所有其它位置上的数不变。
(或者将对角线不变,其它位置对称交换也可)
===========================
三、N 为其它偶数时
当n为非4倍数的偶数(即4n+2形)时:首先把大方阵分解为4个奇数(2m+1阶)子方阵。
按上述奇数阶幻方给分解的4个子方阵对应赋值
上左子阵最小(i),下右子阵次小(i+v),下左子阵最大(i+3v),上右子阵次大(i+2v)
即4个子方阵对应元素相差v,其中v=n*n/4
四个子矩阵由小到大排列方式为 ① ③
④ ②
然后作相应的元素交换:a(i,j)与a(i+u,j)在同一列做对应交换(j<t或j>n-t+2),
a(t-1,0)与a(t+u-1,0);a(t-1,t-1)与a(t+u-1,t-1)两对元素交换
其中u=n/2,t=(n+2)/4 上述交换使每行每列与两对角线上元素之和相等。
=================================================================
下面给出C语言编程实现任意幻方的解答:
========================
#include"stdio.h"
#include"math.h"
int a[256][256];
int sum;
int check();
void ins(int n);
main()
{
int i,j,n,k,t,p,x;
scanf("%d",&n);
sum=(n*n+1)*n/2;
if(n%2==1)//奇数幻方
{
ins(n);
k=n;
}
if(n%4==2)//单偶数幻方
{
k=n/2;
ins(k);
for(i=0;i<k;i++)
for(j=0;j<k;j++)
{
a[j+k]=a[j]+2*k*k;
a[i+k][j]=a[j]+3*k*k;
a[i+k][j+k]=a[j]+k*k;
}
t=(n-2)/4;
for(i=0;i<k;i++)
for(j=0;j<k;j++)
{
if((j<t)&&(i<t))
{
p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;
}
if((j<t)&&(i>k-t-1))
{
p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;
}
if((i>=t&&i<=k-t-1)&&(j>=t&&j<t*2))
{
p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;
}
if(j>1&&j<=t)
{
p=a[j+k];a[j+k]=a[i+k][j+k];a[i+k][j+k]=p;
}
}
}
if(n%4==0)//双偶数幻方
{
x=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[j]=x++;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i%4==0&&abs(i-j)%4==0)
for(k=0;k<4;k++)
a[i+k][j+k]=n*n-a[i+k][j+k]+1;
else if(i%4==3&&(i+j)%4==3)
for(k=0;k<4;k++)
a[i-k][j+k]=n*n-a[i-k][j+k]+1;
}
}
if(check(n)==1)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[j]);
printf("\n");
}
return ;
}
}
int check(int n)//检验是否是幻方
{
int i,j,sum1=0,sum2;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
sum1+=a[j];
if(sum1!=sum) return 0;
sum1=0;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
sum1+=a[j];
if(sum1!=sum) return 0;
sum1=0;
}
for(sum1=0,sum2=0,i=0,j=0;i<n;i++,j++)
{
sum1+=a[j];
sum2+=a[n-j-1];
}
if(sum1!=sum) return 0;
if(sum2!=sum) return 0;
else return 1;
}
void ins(int n)//单偶数幻方的输入
{ int x,y,m;
x=0;y=n/2;
for(m=1;m<=n*n;m++)
{
a[x][y]=m;
if (m%n!=0)
{
x--;y++;
if(x<0) x=x+n;
if(y==n) y=n-y;
}
else
{
x++;
if(x==n) x=x-n;
}
}
}
=====================================
说明:以上C语言程序,复制到TXT文本,然后,另存为XXX.c文件,利用编程软件,编译这个文件,再保持到电脑,以后想用,直接点击就会运行。运行后,可以随意输入一个幻方阶数,就会自动生成一个幻方组合出来。
再说明一点:以上C程序仅供参考,我刚才编译过,因为是中文输入法输入的,所以不通过,需要把上边的标点符号切换到英文输入法,再输入才可以通过编译。
以下程序是可以通过编译,只是奇数幻方的C程序,还有,我命令它阶数范围是1~15阶的奇数幻方。
==================================
#include "stdio.h"
void main()
{
int a[18][18],i,j,k,p,n;
p=1;
while(p==1)
{
printf("Enter n(n=1 to
15):");
scanf("%d",&n);
if(n!=0 && n<=17 &&
n%2!=0)
p=0;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i--;
j++;
if(i<1 && j>n)
{
i+=2;
j--;
}
else
{
if(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0)
a[i][j]=k;
else
{
i+=2;
j--;
a[i][j]=k;
}
}
/*输出幻方阵*/
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%3d ",a[i][j]);
printf("\n");
}
system("pause");
}
==================================
第一:奇数幻方利用“楼梯法”和“杨辉法”很简单就能制作出来,可能上面描述的单偶,双偶幻方不是很详细,你可以上网查找一下相关资料,都会有图文解说的,很直观,规律看起来也很简单。
第二:关于编程可以解出幻方,可以进行了解,但是可不能一直只利用它哦,得自己琢磨推算幻方,例如利用推理法也可以把所有的幻方推算出来,这样才能更好地学习(我不用上面的规律也可以把任何一个幻方都推算出来,当然,高次幻方就相对比较难了)。
❻ c语言问题。用函数的递归求6的阶乘。求编程。
这道题考察基本功,要对变量值的变化理解了:#include "stdio.h"
int ok(int a)
{
int aa=a;
if(a==1)
a=1;
else a=aa*ok(--a);//应该实现的效果是a=a*ok(a-1);你如果这里用a代替aa,由于a的值是语句最终所确定的那个值,由于执行了--a,所以这条语句相当于a=(a-1)*ok(a-1);所以你必须用一个局部变量来代替第一个a
return a;
}
main()
{ int b,n;
scanf("%d",&b);
n=ok(b);
printf("b!=%d",n);
}
❼ 用C语言编写一个程序:求6的阶乘加上5的阶乘,他们的和再除以4的阶乘的结果。谢谢啦急用
#include<stdio.h>
intfac(intn)
{
intr=1;
while(n>0)r*=n--;
returnr;
}
intmain()
{
printf("%d ",(fac(6)+fac(5))/fac(4));
return0;
}
❽ 拉丁方阵的C语言实例 拉丁方阵
构造 NXN 阶的拉丁方阵(2<=N<=9),使方阵中的每一行和每一列中数字1到N只出现一次。如N=4时:
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
*问题分析与算法设计
构造拉丁方阵的方法很多,这里给出最简单的一种方法。观察给出的例子,可以发现:若将每 一行中第一列的数字和最后一列的数字连起来构成一个环,则该环正好是由1到N顺序构成;对于第i行,这个环的开始数字为i。按照 此规律可以很容易的写出程序。下面给出构造6阶拉丁方阵的程序。
*程序说明与注释
#include<stdio.h>
#define N 6 /*确定N值*/
int main()
{
int i,j,k,t;
printf("The possble Latin Squares of order %d are:
",N);
for(j=0;j<N;j++) /*构造N个不同的拉丁方阵*/
{
for(i=0;i<N;i++)
{
t=(i+j)%N; /*确定该拉丁方阵第i 行的第一个元素的值*/
for(k=0;k<N;k++) /*按照环的形式输出该行中的各个元素*/
printf("%d",(k+t)%N+1);
printf("
");
}
printf("
");
}
}
*运行结果
The possble Latin Squares of order 6 are:
1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2
2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3
3 4 5 6 1 2 4 5 6 1 2 3 5 6 1 2 3 4
4 5 6 1 2 3 5 6 1 2 3 4 6 1 2 3 4 5
5 6 1 2 3 4 6 1 2 3 4 5 1 2 3 4 5 6
6 1 2 3 4 5 1 2 3 4 5 6 2 3 4 5 6 1
4 5 6 1 2 3 5 6 1 2 3 4 6 1 2 3 4 5
5 6 1 2 3 4 6 1 2 3 4 5 1 2 3 4 5 6
6 1 2 3 4 5 1 2 3 4 5 6 2 3 4 5 6 1
1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2
2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3
3 4 5 6 1 2 4 5 6 1 2 3 5 6 1 2 3 4
❾ c语言怎么编出6的阶乘
void main()
{int l=1;
for(i=6;i>1;i--)
l*=i;
printf("6的阶乘是%d",l);
}
❿ C语言数字三角形
#include"stdio.h"
intmain()
{intn,i,j,k=0,a[20][20];
scanf("%d",&n);
for(j=0;j<n;j++)
for(i=0;i<n-j;i++)
a[i][j]=++k;
for(i=0;i<n;i++)
{for(j=0;j<n-i;j++)
printf("%d",a[i][j]);
printf("
");
}
return0;
}