• ベストアンサー

C&C++、計算結果を表示する

超初心者です。 本をみつつ勉強しているところなんですが、演習問題などやっていると、 コンパイルしてビルドして実行すると計算結果は目に見える形で出ずに終了・・するんですね。 それはprintf~がないから・・らしいということはココで聞いたりして微妙に判ったんですが、その記載の仕方を知りたいんです。 もしも『printf~~、と書けばどんな計算結果も表示される』というのがあるのなら、それを、そうじゃないのなら、その記述の仕方の決まりを教えてください。 計算の過程が見えないとできてるのかできてないのかわからなくて・・・。 よろしくお願いします。 一応、例を載せておきます。 main() { int a,b,i; a=b=i=0; while (i<100){ i++; if(i%2==0)a=a=i; else b =b+i; } }

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

  • ベストアンサー
  • HogePiyo
  • ベストアンサー率57% (24/42)
回答No.3

確かに工夫次第で printf 系を使えば大概の実行結果はコンソール画面に表示できます。 printf( "Hello World !!\n" ); こんなふうにしてやれば画面に "" 内の文字が出力されます。ちなみにエスケープシーケンスといって、 \n は改行を表す記号です。他に \t というタブを表す記号やら、\b バックスペースなど、大概の入門書にこれらの一覧が載っていますからそちらを参照してください。 それと、C 言語では \ は特殊な文字として扱われますから、\ 自体を出力する場合は \\ と重ねて記述します。 printf( "\\n" ); で、変数を画面に出力する場合は、 int hoge = 10; double piyo = 123.123; char moke = 'a'; char nyoi[] = "Hello World !!\n"; printf( "%d \n", hoge ); // int の表示 printf( "%lf \n", piyo ); // double 等の表示 printf( "%2.3lf \n", piyo ); // 出力する桁を制限 printf( "%c \n", moke ); // 文字の表示 printf( "%d \n", moke ); // 文字コードの表示 printf( "%s \n", nyoi ); // 文字列の表示 printf 系を使用するには stdio.h というヘッダファイルをインクルードしてやる必要があります。 どうするのかというと、ただ単に使用するソースファイル内の先頭で、 #include <stdio.h> としてやればいいんです。 では、例を少し改造して表示できるようにしてみますね。 *********************** #include <stdio.h> int main(void){ int a, b, i; a = b = i = 0; while( i < 100 ){ i++; if( ( i % 2 ) == 0 ){ a = a = i; }else{ b = b + i; } } printf( "a = %d\n", a ); printf( "b = %d\n", b ); printf( "i = %d\n", i ); return 0; } ***********************

yukky25
質問者

お礼

光明がさしてきたような!! 本もあわせてもうちょっと勉強してみます。 ありがとうございました。

その他の回答 (2)

  • nagare
  • ベストアンサー率33% (280/831)
回答No.2

簡単に例を書きます main() { int a,b,i; a=b=i=0; while (i<100){ i++; if(i%2==0) { a=a+i; printf ("A = %d\n",a); } else { b =b+i; printf ("B = %d\n",b); } } } printfは変数の値の表示はもちろん、固定値も表示できます 更に、数字は10進、16進などに変換・表示も可能です (文字をコードで表示可能) 詳しくは本を買うか、サイトを検索すればよいでしょう

yukky25
質問者

お礼

ご回答ありがとうございました。 日々精進です・・(かなりこのサイトにお世話になりつつ・・) またお願いします。

  • GOLDEN
  • ベストアンサー率46% (283/607)
回答No.1

printfはコンソール出力関数と呼ばれ、標準出力に対して文字列を出力します 簡単にいえば、画面に文字を出せる、ということですね printf関数の関数仕様は以下のとおり int printf( const char *format [, argument]... ); 計算結果は数値型(int型やdouble型等)なわけですが、これをprintf関数に渡す際 に、どの型の変数でどういう形式で出力するのかを指示しないといけません それを指示する部分がformatの部分で、データを指定するのがargumentの部分です formatの書式は、%dや%c、%fなどという書き方をします 後ろのアルファベットは、変数の型によって変わります また、改行させたい場合は\nと書くなど、いろいろな決まりがあります たとえば、int型の変数a、char型の変数bを表示するprintf文は printf("a = %d\nb = %c",a,b); と書きます これを実行すると、aに5、bに'x'が入っていたとすると、 a = 5 b = x と出力されます 変数がない場合は、argumentは不要です printf("hogehoge\n"); と書けば、 hogehoge と出力されます

yukky25
質問者

お礼

ほのかーにですが判ってきたような・・・。 %dとか%cとかがよくわからなかったんですよね・・。 もうちょっと本とかよく読んでみます。 ありがとうございました。

関連するQ&A

  • C90とC99の計算結果の違い?

    C言語の質問です。 gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu12) 以下のプログラムをgccでコンパイル・実行すると(1)に入り,"a"が出力されます。unsigned intの計算なのでラップアラウンドが生じtest=4294716272となるのは私の期待どおりです。 ただ、gcc -std=c99でコンパイル・実行すると(2)に入り,"b"が出力されました。c99でコンパイル・実行すると計算結果がなぜ異なっているのかが分かりません。 long test = 0; unsigned int x = 184; unsigned int y = 251208; test = (x-y); if(test == 4294716272){ printf("a");// (1) }else if(test == -251024){ printf("b"); // (2) }

  • main関数以外での結果の表示?

    C言語で関数を用いたプログラムを作成しています。内容はA君、B君のボーリングの成績を入力し、その点数をランク付けするというものです。(250以上はS、200以上はA、150以上はB、100以上はC、50以上はD、50未満はFになります。) それから、このプログラムの条件は 1、main関数は値の入力と関数を呼び出すだけ。 2、関数の引数は入力した2つの値。 3、関数の中で結果を表示。 4、関数の戻り値はなし。 というもので、3番の結果のmain関数以外での結果の表示の仕方がわからず、どうやって結果を表示させていくのかよくわからず、行き詰っています。そのあたりの解説をしていただくとありがたいです。 なお、私が途中まで書いたので、問題点の指摘をおねがいいたします。 #include<stdio.h> int ia(int x); int ib(int y); int main(){  int a,b;  printf("A君のスコア");  scanf("%d",&a);  printf("B君のスコア");  scanf("%d",&b);  }  int ia(int x);  char ix;  if(x>=250){  ix = 'S';  }else if(x>=200 && x<250){  ix = 'A';  }else if(x>=150 && x<200){  ix = 'B';  }else if(x>=100 && x<150){  ix = 'C';  }else if(x>=50 && x<100){  ix = 'D';  else{  ix='F'; } int ib(int y);  char iy;  if(y>=250){  iy = 'S';  }else if(y>=200 && y<250){  iy = 'A';   }else if(y>=150 && y<200){  ix = 'B';  }else if(y>=100 && y<150){  iy = 'C';  }else if(y>=50 && y<100){  iy = 'D';  }else{  iy ='F'; }

  • コンパイル結果が違う

    コンパイル結果が違う C言語を勉強中の初心者です。 以下のプログラムをVC++6.0のCL.exeでコンパイルするとうまくいくのですが、VC++2010のCL.exeでコンパイルして実行すると、t2の値が0になってしまいます。 また、VC++2010でコンパイルした方が実行結果も遅いです。 #include <stdio.h> #include <time.h> int main(void) { int i = 1; time_t t1, t2; time(&t1); while(i <= 30000) printf("%d,", i++); time(&t2); printf("\ntime1=%ld time2=%ld\n", t1, t2); printf("かかった時間は、%d秒です\n", t2-t1); return 0; } vc++2010でコンパイルした方のt2の値が、0で表示されてしまうのはなぜでしょうか? よろしく、お願いします。

  • 配列について(C言語)

    配列の要素において一番目の要素以外を0にするプログラムを以下のように作成したのですが(while文を*b != 0という条件で作りたい)、while文内のところが間違っているためだと思われるのですが、うまく実行されません(実行しても何も表示されない)。どのようにしたらいいのでしょうか。または、何かが抜けている、ほかの部分が間違っている等もあるためにうまく実行されないということなのでしょうか。 #include <stdio.h> int main(void) { int a[5] = {5, 78, 2, 9, 0}; int i, *b; b = &a[0]; while (*b != 0){ if(*!=a[0]) *ptr=0; else *ptr=a[0]; } for (i = 0; i < 5; i++){ printf("ptr値 =%d ptrアドレス =%p \n", *ptr, ptr); } printf("\n"); return (0); }

  • 最大公約数を出すには?

    こんにちは。 過去ログを見てみましたが、まだ知らない言葉が出てきていて理解できませんんでした。なるべくなら、簡単な方法で出すやり方を教えてください。 ちなみに公約数の表示は以下のようにしてできました。if、while、forぐらいなら使えます。 明日までの課題なので、できるだけ今日中に答えてくださったら、とても助かります。 よろしくお願いします。 #include <stdio.h> main() { int a,b,i; i=1; printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); while((i<=a)&&(i<=b)){ if((a%i==0)&&(b%i==0)) {printf("Answer=%d\n",i);i=i+1;} else{i=i+1;} } }

  • 高速フーリエ変換に関すること

    皆様、こんばんわ。 今日は、お聞きしたいことが会ってここに質問しにきました。 まず、こちらを見てください。 これは、「毎回異なる計算結果を、順次足していく」、 そのための練習用プログラムです。 #include<stdio.h> int main(void){ int i,j; int z[3]={0}; int a[5]={1,2,3,4,5}; int b[5]={5,4,3,2,1}; for(i=0;i<3;i++){ for(j=0;j<5;j++) Z[i] += a[j]*b[j]; if (i==1) z[i]=z[1] else (i>1) z[i]+z[i-1] } printf("a = {%d,%d,%d,%d,%d}\n",a[0],a[1],a[2],a[3],a[4]); printf("b = {%d,%d,%d,%d,%d}\n",b[0],b[1],b[2],b[3],b[4]); for(i=0;i<3;i++) printf("z[%d] = %d\n",i,z[i]); return(0); } 流れとしては、 (1)2つの配列の各要素の積の計算をする。 (2)そして、計算して出た積(全部で5つ)を足す。 (3) (1)~(2)の計算を繰り替えす。 (但し、1回目以降は前回の計算結果を足す) そして最終的に、 a[5] = {1,2,3,4,5} b[5] = {5,4,3,2,1} Z1 = 35 Z2 = 70 Z3 = 105 という結果を出力したいんです。 ですが、どうしてもエラーが起きて実行できません。 たぶんですが、if-else文の辺りが違うと思うのですが・・・。 どういう風に変更したらいいのでしょうか? ちなみに使っているコンパイラVidualC++2008です。 OSはVistaです。

  • プログラムが上手く動作しません。

    質問です。 1.整数を1個入力し、その数を3で割った余りが0ならば"Good morning"、1ならば"Good evening"、2ならば"Good afternoon"と出力するプログラムを作成せよ。ただしswhitc文を用いること。 という問題で私は #include <stdio.h> main() {      int a;      printf("整数a:");      scanf("%d",&a);      switch(a%3)      {      case '0':           printf("Good morning \n");           break;      case '1':           printf("Good evening \n");           break;      case '2':           printf("Good afternoon \n");           break;      } } と考えましたが実行しても入力はできますがprintfが表示されません。 どこが間違っているのでしょうか?ちゃんとコンパイルはできるのですが・・・。 2.10個の整数値をキー入力し、合計と平均値を計算してその結果を表示するプログラムを書きなさい。 #include <stdio.h> main() {      int a[11],b,c,i;      for(i=1;i<11;i++)      {           printf("整数%d:\n",i);           scanf("%d",&a[i]);      }      for(i=1;i<11;i++)           b+=a[i];      c=b/10;      printf("合計値は%d",b);      printf("平均値は%d",c); } というプログラムを考えましたが、計算結果がめちゃくちゃになってしまいます。 これもどこを直したらいいべきでしょうか?

  • 配列のプログラミングを作ったのですが「

    問題:10問の計算問題を解いて、以下のような成績表を表示するプログラムを作成せよ 例) 第一問 ○ 第二問 × 第三問 × ・・・ 自分が作った解答)#include<stdio.h> #include<stdlib.h> void main() { int a,b,ans,i; int seikai=0; int huseikai=0; int kaitou[10]; srand((unsigned)time(NULL)); printf("暗算\n"); for(i=0;i<10;i++); { printf("%問\n",i+1); a=rand()%10; b=rand()%10; printf("%d+%dは?\n",a,b); scanf_s("%d",&ans); if(ans==a+b) kaitou[i+1]=seikai; else kaitou[i+1]=huseikai; } for(i=0;i<10;i++) { printf("第%d問",i+1); if(kaitou[i+1]==seikai) printf("○\n",seikai); else printf("×\n",huseikai); } } のように作成したのですが、コンパイルは成功しますが思い通りの解答になりません。 どこが間違っているのか指摘してください。

  • マージソートについて。

    マージソートについて勉強しており、プログラムを作ってみたのですが どうしてもcc=~~の箇所の数値がおかしく表示されてしまいます #include<stdio.h> int main(void) { int a[5]={20,40,15,35,50}; int b[3]={55,20,65}; int c[8]; int i,z,k; printf("a="); for(i=0;i<5;i++) { printf("%d ",a[i]); } printf("\nb="); for(z=0;z<3;z++) { printf("%d ",b[z]); } while(i <= 5 && z <= 3){ if(i < z){ a[i]=c[k]; i++; } else if(i > z){ b[z]=c[k]; z++; } } while(i<5 && z<3) { i=k; i++; z=k; z++; } printf("\nc=") ; for(k=0;k<8;k++) { printf("%d ",c[k]); } return 0; } ご教授していただければ幸いです。

  • printfでの計算結果がおかしくなります。

    #include <stdio.h> main() { int first_num, second_num, third_num; /* 入力される3整数 */ int answer; /* 掛け算の答え */ printf("Input Integer Number 1 > "); scanf("%d", &first_num); printf("Input Integer Number 2 > "); scanf("%d", &second_num); printf("Input Integer Number 3 > "); scanf("%d", &third_num); answer = first_num * second_num * third_num; printf("%d * %d * %d= %d\n", first_num, second_num, third_num, answer); exit(0); } というプログラムを作りコンパイルして、いざ実行して 以下の計算をさせると。 10000×10000×10000=-727379968 という計算結果になってしまいます。 なんども確認したのですが、間違っているところはないと思います。

専門家に質問してみよう