tft每日頭條

 > 科技

 > c語言計算3階行列式

c語言計算3階行列式

科技 更新时间:2024-12-27 00:11:20

今天這道題目呢,對我個人來說,可能是難度比較大的一道題目。

因為C語言的許多語法我還沒有提及,還有數據結構部分我也沒有複習到,所以做這道題目的時候,一開始我有些無從下手的。

不過後來仔細地分析了這道題目後,我感覺難度其實也還行。

畢竟階乘和是自己接觸過的算法,也知道怎麼寫。

無非就是單鍊表結點存儲數據的格式該如何寫,那麼就根據裁判測試程序樣例來寫即可。

c語言計算3階行列式(C語言求單鍊表結點的階乘和)1

梳理邏輯

我們在做編程題目的時候,首先要做的,就是分析題目需求,顯然,這道題目的要求是實現一個函數,求單鍊表L結點的階乘和。

1、我們之前學過,階乘就是n!=1x2x3x...xn,0的階乘是1。

一般是用到一個for循環來寫該階乘。

for(int i = 1;i<= n;i ){ n = i*n;//n的階乘 }

2、而至于對該階乘求和,則是定義一個變量sum。

sum=sum n!,同理也要放在for循環當中的。

sum = sum n;//階乘求和

但顯然,這道題目的關鍵難度并不在于對階乘求和,因為這個是基礎部分的内容了。

關鍵難度在于如何根據單鍊表來進行階乘求和。

3、關于題目中給出的單鍊表結構體,我們就不細緻展開了,題目中也給了就是存儲結點數據的Data,和指向下一個結點的指針Next。

因為題目給出的是結構體,我們得來談一談一個符号,那就是箭頭“->”符号的意思。

它叫做結構體成員運算符,就是使用一個指向結構體或對象的指針訪問其内部成員。

通俗點來講,以這道題目為例:L->Data,就是指向其中的内部元素Data數量。

那麼很明确,這道題目的for循環就需要以這個Data為邊界點。

就可以寫為:

for(int i = 1;i<=L->Data;i ){ n = i*n;//n的階乘 }

那麼在當前結點的數據處理完之後,就要轉移到下一個結點,來處理下一個結點的數據。

則需要用到L->Next來表示了。

L = L -> Next;

最後返回sum的值即可。

注意:在完成上面這些事情的前提是L不為空,所以要加一個while循環語句:

while(L!=NULL)

我們來梳理一下這整道編程題目的邏輯關系。

c語言計算3階行列式(C語言求單鍊表結點的階乘和)2

代碼實現

//求單鍊表結點的階乘和 #include <stdio.h> #include <stdlib.h> typedef struct Node *PtrToNode; struct Node { int Data; /* 存儲結點數據 */ PtrToNode Next; /* 指向下一個結點的指針 */ }; typedef PtrToNode List; /* 定義單鍊表類型 */ int FactorialSum( List L ); int main() { int N, i; List L, p; scanf("%d", &N); L = NULL; for ( i=0; i<N; i ) { p = (List)malloc(sizeof(struct Node)); scanf("%d", &p->Data); p->Next = L; L = p; } printf("%d\n", FactorialSum(L)); return 0; } int FactorialSum( List L ){ int sum = 0; int n = 1;//n的階乘是從1開始的 while(L!=NULL){ for(int i = 1;i<=L->Data;i ){ n = i*n;//n的階乘 } sum = sum n;//求和 n = 1;//為下一個結點做準備,重新賦值為1 L = L -> Next;//指向下一個結點 } return sum; }

結果測試

c語言計算3階行列式(C語言求單鍊表結點的階乘和)3

c語言計算3階行列式(C語言求單鍊表結點的階乘和)4

總結

總的來說,這道題目關鍵還是對C語言的一個基本語法要有一個了解,我正是因為對基本語法沒有一個清晰的了解,才導緻做這道題目的時候比較困難,需要在網上查閱相關資料,然後再來解決這道題目。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved