• ベストアンサー

基本中の基本!?

次のソースで質問です #include <stdio.h> main() { char x = 'X'; float ran = 42.195; printf("%c感じてみろー!\n",x); printf("フルマラソンは %fKm",ran); } なぜ42.195000kmと表示されるのか良く分かりません。 順番的にkm42.195000のような気が。 第3引数以上あるとますますわかりません。

noname#6521
noname#6521

質問者が選んだベストアンサー

  • ベストアンサー
noname#4564
noname#4564
回答No.1

  > なぜ42.195000kmと表示されるのか良く分かりません。 入門書、リファレンス等に説明が書いてあるはずですが、読んでないのでしょうか? > 順番的にkm42.195000のような気が。 これ↓を実行してみてください。たぶん理解できるでしょう。 printf("%d番 一浪、%d番 信条、%d番 松居\n", 1, 2, 3); ※ 実在の人物、団体とは関係ありません。  

その他の回答 (5)

  • Sam_A
  • ベストアンサー率33% (6/18)
回答No.6

No,#5です。 補足: "フルマラソンは %fKm"の部分も勿論、引数ですよ。 複数指定したい場合はNo,#1さんが書いている通りです。 簡単にするとprintf("%f",ran); ですが、 二ヶ表示だとprintf("%f%f",ran,ran);です。

  • Sam_A
  • ベストアンサー率33% (6/18)
回答No.5

printfとはヘッダー:stdio.hで定義されている標準入出力関数の一つです。(stdとはスタンダード ioはインプットアウトプットをあらわしすなわち標準入出力) printfとは書式付きprintと言うことです。(fはformattingから来ている。) %~の所に数値(変数含む)を何~の書式で出力するというフォーマット(お決まり)があるわけです。 Cの関数は例えばabcの関数が定義してあるとしてabc(x,y,z)があるとします。x,y,zの部分が引数だということはご理解できるとおもいますが、abcをprintfだと考えればC関数の図式が見えてくると思います。 C関数の基本は インプット→加工→アウトプット です。 %fとはfloatのfですなわち浮動小数点で変数ranの値を出力せよという決まりごとです。(標準関数で定義されている)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.4

参考URL:
http://www.kumei.ne.jp/c_lang/
noname#4564
noname#4564
回答No.3

> よく分からないんですがフォーマットって言うんですね。 > んで、そのフォーマットは第一引数にしか記述できないんですか? > もし第二引数とかにも記述できるとしたら、どういう記述になりますか? 入門書、リファレンス等に説明が書いてあるはずですが、読んでないのでしょうか? というか、No.1は読んでないんでしょうか? 自分がした質問へのコメントを読まずに(無視して)、再質問・・・理解不能です。 どなたか、こんなおバカな私にも理解できるように教えてください。ヽ(´ー`)ノ 小心者ですので、わかりやすく丁寧にお願いします。 (専門用語等はまったくわかりません)  

noname#6521
質問者

補足

無視すると言うよりは分かったので更なる疑問が生まれた。その新たな疑問をするのは2人のどちらかでいいと思い、代表してNo.2に補足しました。 入門書、リファレンスを読んでも分からなかったので質問したのです。 すみません

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.2

#1さんの補足的な説明になりますが、ご容赦ください。 >printf("%c感じてみろー!\n",x); >printf("フルマラソンは %fKm",ran); ですと、結果は、 「Xを感じてみろー」 「フルマラソンは 42.195000km」と表示されますね。 あなたの書かれたソースに回答があります。%のついている文字がありますね。'%c'と'%f'の部分です。 この%cの部分に変数xの値が表示されるんです。%fも同じ様に%fの位置に、変数ranの値が表示されます。

noname#6521
質問者

補足

よく分からないんですがフォーマットって言うんですね。 んで、そのフォーマットは第一引数にしか記述できないんですか?もし第二引数とかにも記述できるとしたら、どういう記述になりますか?

関連するQ&A

  • C言語による浮動小数点表示

    #include<stdio.h> #include<math.h> main() { float a=1.5*pow(2,-15); unsigned char *e; e=(unsigned char *)&a; printf("a=%02x,%02x,%02x,%02x\n",*(e+3),*(e+2),*(e+1),*(e+0)); } というプログラムで a=38,40,00,00 という結果がでたのですが これは何を表しているのでしょうか? よろしくおねがいします

  • bit?static?unsigned?

    1年前に出された問題です。 いまだに解けずに、どうすればいいのか・・・ ****** 関数hitotsuumae()を作ってプログラムを完成させよ。 printf文で同じ値が出れば正解である。 main内部を変更してはならない。広域変数を使用してはならない。 ****** #include <stdio.h> #include <stdlib.h> float hitotsumae(float); int main() { float x; x = 1.10; printf("%f = 0.000000\n", hitotsumae(x)); x = 2.20; printf("%f = 1.100000\n", hitotsumae(x)); x = 3.14; printf("%f = 2.200000\n", hitotsumae(x)); x = 5.55; printf("%f = 3.140000\n", hitotsumae(x)); x = 2.71; printf("%f = 5.550000\n", hitotsumae(x)); x = 1.41; printf("%f = 2.710000\n", hitotsumae(x)); exit(0); } float hitotsumae(float x) { //static?unsigned? x < 1; return x; } <<とやるとエラーが出ます。 シフトは関係ないのでしょうか?

  • c

    /* char03*/ #include<stdio.h> int main() { char i; for(i='!';i<='~';i++){ printf(%3d(0x%2X)--%c",i,i,i); if((1-'!'+1)%4==0 printf("\n") } printf("\n") return("\n") return 0; } (0x%2X)数字でしょうかなんでしょうか わかりません 助けて下さい

  • c++

    /* char03*/ #include<stdio.h> int main() { char i; for(i='!';i<='~';i++){ printf(%3d(0x%2X)--%c",i,i,i); if((1-'!'+1)%4==0 printf("\n") } printf("\n") return("\n") return 0; } if((1-'!'+1)%4==0はどういう意味でしょうか

  • 配列について

    初歩的な質問ですいませんが、質問よろしくお願いします。 ◎1----------------------------- #include<stdio.h> int main(void) { char ss[10]="AB"; printf("ss=%s\n",ss); return 0; } ------------------------------------ ◎2-------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss[0]='A'; ss[1]='B'; ss[2]=0; printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎3------------------------------- #include<stdio.h> #include<string.h> int main(void) { char ss[10]; strcpy(ss,"AB"); printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎4------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss="AB"; printf("ss=%s\n",ss); return 0; } ---------------------------------- 以上4つのプログラムで、◎2と◎3は正常に動くと理解できたのですが、何故、◎1は正常に動き、◎4は「'const char [3]' から 'char [10]' に変換できません。」といったようなエラーが出てしまうか分かりません。 教えていただければ嬉しいです。

  • 型変換がうまく出来ない

     今晩は、Cの初心者です、宜しくお願いします。  下のようなコードを書きましたが、正常に表示されません。  一体何処が悪いのでしょう。 =========================================================== #include <stdio.h> #include <string.h> #include <ctype.h> int main(void) { char s2[20] = "0.789"; double ddt = atof(s2) ; printf("ddt = %lf\n\n" , ddt); printf("atof(s2) = %lf\n\n" , atof(s2)); printf("(float)idt + atof(s2)) = %lf\n\n" , ((float)idt + atof(s2))); return 0; }

  • 学校の課題で

    sin,cos,tanを0~90度を出せっていわれたのですが #include <stdio.h> #include <math.h> main() { int N; float x; char *line="-------------------------------------\n"; printf(line); printf("%3s %5s %10s %13s \n", "kakudo", "sin","cos","tan"); for(N=0; N<=90; ++N) { x=N*3.14159265358979323846264338327950288/180; if(N%10==1) { printf(line); } if(N=90) { tan(N)= ; } printf("%3d %7.6f %10.6f %13.6f \n", N, sin(x), cos(x), tan(x)); } printf(line); } で出ません。 間違いは if(N=90){tan(N)= ;} の部分なのですが、どうすれば出せますか?

  • 文字列をfloatで読み込む(atoi,sscanf)。しかし、値がおかしい。

    お世話になっています。 C言語の質問です。 文字列をfloatで読み込もうとしているのですが、出力結果がおかしくて困っています。 文字列をatofで変換した場合、doubleでは上手く表示できるのですが、floatでは少数が上手く表示できません。 また、sscanfでも試したのですが、上手く表示できませんでした。 どうしても、doubleを使わずにfloatであらわしたいと考えています。 どうかこのプログラムの問題点のご指摘お願いします。 実行結果 53.196600 53.196602 53.196602 ソース #include<stdio.h> #include<stdlib.h> #include<string.h> main() { char str[100]="53.1966"; double b; float c,d; b = atof(str); printf("%f\n",b); c = (float)atof(str); printf("%f\n",c); sscanf(str,"%f",&d); printf("%f\n",d); } 開発環境 windowsXP cygwin

  • 配列要素内の数値

    #include <stdio.h> int main(void) { int arr[1]={123456789}; int *x[1]; *x = arr; printf("%d ",*(x[0])); /* 123456789 と表示*/ return 0;} 実行すると123456789と表示されるまでは分かるのですが、*(x[0])の部分を別の書き方にして、arr[0]に入ってある「123456789」という数値の千の値である6という数値のみを取り出して、表示することは可能なのでしょうか?(6000と取り出したいのではなく、6として取り出したい) 次のように数値を文字列の一つ一つを扱うかのように、扱いたいのです。*(x[0])の部分の変更だけで6を取り出せるような方法はありますか? #include <stdio.h> int main(void) { char *arr[]={"pen"}; printf("%c\n",*(arr[0]+0)); printf("%c\n",*(arr[0]+1)); printf("%c\n",*(arr[0]+2)); return 0;}

  • 自作関数について

    下記の時、関数copyを作成したいのですが、 関数copyにその都度、違う引数を渡たす為には どうしたら良いのでしょうか? 教えてください。 #include <stdio.h> void main() {      char a[20]={"ABCDEF"}; char b[20]; copy(a,b); printf("%s\n",b); copy(a,&a[3]); printf("%s\n",buf); copy(&b[2],dat[5]); printf("%s\n",dat); }

専門家に質問してみよう