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

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

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

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

Q&A

解決済

2回答

2376閲覧

c言語 桁揃え

tow

総合スコア20

C

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

0グッド

0クリップ

投稿2016/11/25 15:20

編集2016/11/26 06:13

###前提・実現したいこと

出力されるデータをgnuplotでグラフ化したいので、一行目t,y二行目からtとyの値を以下のように出力するためにはどのようにすればよいのでしょうか。
他にももっと良いコードの書き方があれば教えてください。
t y
0.0100 0.00049
. .
. .
. .

下記 > 訂正の質問内容

ファイルに出力したいわけではなく、ただターミナルに実行結果が出力されれば良いと思っているのですが、一行目t,yと二行目からのtとyの値が以下のように左詰めで出力されるには、それぞれの値をスペースの個数を数えながら、手動でやる方法以外に自動的に計算してtとyの位置を決めてくれるプログラムの書き方はないですか?

t y
0.000000 -0.000000
0.010000 -0.000490

###該当のソースコード

c

1#include <stdio.h> 2 3#define g 9.8 4#define v0 0 5int main(void){ 6 double dt,y,t,m; 7 8 t=0.0; 9 y=0.0; 10 dt=0.01; 11 12 printf("t y¥n"); 13 for (t=0.0; t<2.0; t=t+dt){ 14 y=g * t * t / 2.0; 15 16 printf("%f %f ¥n",t,y); 17 } 18 return 0; 19} 20

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

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

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

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

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

iwanote

2016/11/25 16:23

ファイルに出力したいということですか?
guest

回答2

0

ベストアンサー

グラフ化ツールだと桁揃えくらい自動でやってくれそうな気がしますが…
スペースの個数を数えながらなんて、手動でやるとちょっと面倒ですよね。
printfの書式内にアスタリスク(*)を指定すると、引数で桁数を指定できます。

C

1#include <stdio.h> 2 3/* t の全体の桁数 */ 4#define WIDTH_OF_T 5 5/* t の小数点以下の桁数 */ 6#define PRECISION_OF_T 4 7/* y の全体の桁数 */ 8#define WIDTH_OF_Y 8 9/* y の小数点以下の桁数 */ 10#define PRECISION_OF_Y 5 11 12#define g 9.8 13#define v0 0 14 15int main(void) { 16 double dt, y, t; 17 18 t = 0.0; 19 y = 0.0; 20 dt = 0.01; 21 22 printf("%-*s %*s\n", WIDTH_OF_T + 1, "t", WIDTH_OF_Y - PRECISION_OF_Y - 1, "y"); 23 24 for (; t < 2.0; t += dt) { 25 y = g * t * t / 2.0; 26 27 printf("%*.*f %*.*f\n", WIDTH_OF_T, PRECISION_OF_T, t, WIDTH_OF_Y, PRECISION_OF_Y, y); 28 } 29 return 0; 30}

投稿2016/11/26 00:36

naomi3

総合スコア1105

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

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

0

ヘッダーは毎回出さなくて良いでしょうから、ループの外に出しましょう。
t値とy値の桁合わせは、printfの書式は桁数の指定ができるので、それを使えば桁数は固定されます。
例えば下記のサンプルで %1.4f は、整数1桁、小数点以下4桁の意味です。
あとはヘッダーはこの桁数に合わせて固定で位置合わせすればよろしいかと。

c

1printf("t y\n"); 2for (t=0.0; t<2.0; t=t+dt){ 3 y = g * t * t / 2.0; 4 printf("%1.4f %1.5f\n", t, y); 5}

ここまで書いて質問の意図がわからなくなりました。
質問タイトルの「桁揃え」なのか、ヘッダーを毎回出したくないのか、どちらでしょ。
桁揃えの詳細も不明ですね。
とりあえず両方を満たすのが上記の回答になりますが、的外れでしたらコメントください。
ちなみにgnuplotのことは知りません。

投稿2016/11/25 16:24

ttyp03

総合スコア16998

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問