質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1081閲覧

関係ないはずの変数をいじっても出力値が変わってしまう、、、

tomonari

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/06/17 12:59

至急質問があります。
以下のソースコードは偏微分方程式を解いているものなのですが、C言語について質問させていただきます。
下記の
//rho = 6782 - 0.27 * t[i][0];
//cp = 436 - 0.0813 * (t[i][0] - tm);
//lam = 94.61 + 4.41e-2 * (t[i][0] - tm);
//a = lam / rho / cp;
はコメントアウトにしていますが、このコメントアウトを外すと出力されるt[5][1]が変わってきます。
この式の意味や変数の意味は置いといて、このコメントアウト文以降でこれらの変数は使っていないのですが、このようなことは起こり得るのでしょうか。
また、このようなことが起こる理由について教えていただけますでしょうか。

環境

visual studio2019
windows 10

C

1#include < stdio.h > 2#define _USE_MATH_DEFINES 3#include < math.h > 4 5#define NX 10 6#define NT 100 7#define Tmax 1 8 9void main(void) 10{ 11 double t[NX + 2][2], dt, dx, r, a, time, pp, cp, lam, rho, tm; 12 int i, imax; 13 FILE* fp; 14 fopen_s(&fp, "u0.xls", "w"); 15 16 dt = 1 / (double)NT; 17 dx = 1 / (double)NX; 18 imax = NX; 19 a = 1.0; 20 r = dt / dx / dx; 21 time = 0; 22 tm = 1850 + 273; 23 24 fprintf(fp, "\t"); 25 for (i = 0; i <= imax; i++) 26 fprintf(fp, "%lf\t", i * dx); 27 fprintf(fp, "\n"); 28 29 //初期条件 30 fprintf(fp, "0\t"); 31 for (i = 0; i <= imax; i++) 32 { 33 //三角形 34 /*if (i <= imax / 2) 35 t[i][0] = 2.0 / (dotble)imax * (double)i; 36 else 37 t[i][0] = -2.0 / (double)imax * (double)i + 2.0;*/ 38 39 //sin(x); 40 t[i][0]=sin(M_PI*(double)i*dx); 41 fprintf(fp, "%7.4lf\t", t[i][0]); 42 43 } 44 fprintf(fp, "\n"); 45 46 printf(" dx=%7.4lf dt=%7.4lf \n", dx, dt); 47 printf(" r=%7.3lf \n", r); 48 49 //時間積分 50 do 51 { 52 //pp = 100 * exp(-pow((time - 0.5), 2) / 0.3); 53 for (i = 1; i < imax; i++) 54 //if(i==1) 55 //rho = 6782 - 0.27 * t[i][0]; 56 //cp = 436 - 0.0813 * (t[i][0] - tm); 57 //lam = 94.61 + 4.41e-2 * (t[i][0] - tm); 58 //a = lam / rho / cp; 59 t[i][1] = t[i][0] + (t[i + 1][0] - 2 * t[i][0] + t[i - 1][0]) * r; 60 //else 61 //t[i][1] = t[i][0] + (t[i + 1][0] - 2 * t[i][0] + t[i - 1][0]) * r; 62 63 //境界条件 64 //t[0][1] = t[1][1]; 65 //t[imax][1] =t[imax-1][1]; 66 t[0][1] = 0; 67 t[imax][1] =0; 68 69 time = time + dt; 70 printf("t=%7.4lf\n", time); 71 72 fprintf(fp, "%7.4lf\t", time); 73 for (i = 0; i <= imax; i++) 74 fprintf(fp, "%8.5lf\t", t[i][1]); 75 fprintf(fp, "\n"); 76 77 //更新 78 for (i = 0; i <= imax; i++) 79 t[i][0] = t[i][1]; 80 81 printf("%8.3e\n",t[5][1]); 82 } while (Tmax > time); 83}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

C

1for (i = 1; i < imax; i++)

このforには{}がついていないため、その次の行がループの対象になります。
コメントアウトの有無でどこが対象になるか見比べればわかると思います。

投稿2021/06/17 13:39

neconekocat

総合スコア443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomonari

2021/06/17 13:53

ありがとうございます。 非常に初歩的なミスで失礼しました。
guest

0

ベストアンサー

forに{}がないからfor直下の式のみが繰り返されます

投稿2021/06/17 13:38

asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomonari

2021/06/17 13:52

ありがとうございます。 非常に初歩的なミスで失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問