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;
}