我是 C 的新手,我正在嘗試撰寫一段代碼,使用迭代和和公式來計算幾何級數的總和。我想要做的是創建一個從 1 到 3 的回圈,然后設計一個 switch 陳述句,該陳述句評估 a(第一項)、r(公共比率)的三組不同值的總和和公式,和 n(項數)。我首先撰寫了分別計算總和的函式,并且知道它們在沒有回圈和 switch 陳述句的情況下也能作業。我所堅持的是如何將回圈和 switch 陳述句包含到程式中。我已經試過了,但它的評估結果為零,我不知道如何繼續。所以任何幫助將不勝感激!我在下面包含了我的 C 代碼,我希望這有助于說明我正在嘗試做的事情。
#include <stdio.h>
#include <math.h>
float sumgeometric1 (float a, float r, int n) //sum by iteration
{
float sum = 0;
for (int i = 0; i < n; i )
{
sum = sum a;
a = a * r;
}
return sum;
}
float sumgeometric2 (float a, float r, int n) //sum by formula
{
return (a * (float) (1 - pow (r, n - 1)) / (1 - r));
}
int main (){
int f, i, sum = 0;
for (i = 1; i <= f; i)
{
int f = 3;
int sum = sum i;
switch (sum)
{
case 1:;
float a1 = 0.01;
float r1 = 1.1;
int n1 = 10000;
printf ("%f\n", sumgeometric1 (a1, r1, n1));
printf("%f\n", sumgeometric2 (a1,r1,n1) );
case 2:;
float a2 = 2.0;
float r2 = 0.01;
int n2 = 500;
printf ("%f\n", sumgeometric1 (a2, r2, n2));
printf("%f\n", sumgeometric2 (a2,r2,n2) );
case 3:;
float a3 = 0.0001;
float r3 = 2.0;
int n3 = 100;
printf ("%f\n", sumgeometric1 (a3, r3, n3));
printf("%f\n", sumgeometric2 (a3,r3,n3) );
}
return 0;
}
}
uj5u.com熱心網友回復:
首先,這個回圈和開關設計只是使這個程式過于復雜。您正在嘗試以已知順序進行三組呼叫,這可以通過常規程式編程在沒有回圈或切換的情況下完成。
照這樣說...
f在此程式開始時未初始化。回圈謂詞i <= f將通過讀取此不確定值來呼叫未定義行為。
int f = 3; 回圈內部沒有效果。它只是f從周圍的范圍中隱藏 。
同樣,int sum = sum i;隱藏了之前的定義sum。它還參考本身它自己的初始化,這將導致中未定義的行為。
讓我們假設你很幸運(!)并且一切都初始化為0,這樣我們就可以看看程式的其余部分。
sum毫無意義,因為它只是鏡像i。
此外,還有將永遠只能是這個回圈的單次迭代,如return 0;位于內環路。這個錯誤通過break在每個中沒有包含一個陳述句的錯誤來抵消case,導致它們落到下面的一個。
例如,這意味著,當sum == 1,箱子1,2和3將在順序執行。當sum == 2, case2和3將按順序執行。
如果您打算進行此回圈和切換,則可以簡單地將其寫為
for (int i = 1; i <= 3; i ) {
switch (i) {
case 1:
/* ... */;
break;
case 2:
/* ... */;
break;
case 3:
/* ... */;
break;
}
}
但同樣,這與以正常的程式方式一個接一個地撰寫每個案例的內容相同。
如果您想實際使用for回圈,請考慮使用陣列,這樣您就可以更改資料集的大小而無需調整處理它們的代碼。
這是使用結構陣列的快速示例:
void print_sums(float a, float r, float n) {
printf("%f\n%f\n",
sumgeometric1(a, r, n),
sumgeometric2(a, r, n));
}
int main (void) {
struct {
float a;
float r;
int n;
} data[] = {
{ 0.01, 1.1, 10000 },
{ 2.0, 0.01, 500 },
{ 0.0001, 2.0, 100 },
{ 1.3, 0.02, 400 }
};
for (size_t i = 0; i < (sizeof data / sizeof *data); i )
print_sums(data[i].a, data[i].r, data[i].n);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347918.html
下一篇:從地圖中獲取不同值的串列
