• ベストアンサー

教えてください!!

例えば、3455という整数をscanfを使って入力されました。それを、配列を使って0は0個、1は0個、 2は0個、3は1個、4は1個、5は2個、6は0個、7は0個、8は0個、9は0個のようにしたいのですが分かりません。自分で考えたソースです。 printf("非負の整数を入力してください :"); scanf("%d", &num);                 do{ i=num % 10; num=num / 10; kansu[i]=i; }while (num>0); for(i=0; i<10; i++) printf("%d個は%dです。\n",i, kansu[i]); return (0); } 詳しくどこが駄目でどうすればできるか教えてください。宜しくお願いします。

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

  • ベストアンサー
回答No.4

#2です。 あら~、jjjj27 さん、過去に全く同じ質問をしていて、それに良回答をつけていながら、実はきちんと理解しておられなかったんですね? 締め切られた過去の質問にも、丁寧な回答がなされていますよ。 ご自分の書いたコードはどうやって確認したんでしょう? デバッグしましたか? ちゃんとメイクして実行してみましたか? 配列を初期化しないとどうなるか、実行してみればすぐにわかることなのでここでは割愛するとして…。 >kansu[i]++;にする考え方を教えてください。 この場合の i は配列のインデックスになります。この一文では、kansu 配列の i 番目の中身に1をプラスする(インクリメントする)ことになります。 >C言語ができるようになりたいです。どのように勉強すればよいのですか? たぶん、これが本当の質問のような気がします。 いまはどのような学習をされているのか気になりますが…。 独習するなら、C言語の学習書はたくさん出ています。本屋や図書館などで適当なものを1冊見繕って、その中の例題や問題などを実際に入力して実行してみるのがいいでしょう。 開発環境も LSI-C や Borland C++ Compoler など、無料のものがたくさんあります。どのようなコンパイラをお使いかわかりませんが、コンパイラを手に馴染むように使いこなせるようになれば、進歩は早くなると思います。 頑張ってください。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1510088
全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • next_x
  • ベストアンサー率39% (144/369)
回答No.5

>配列を初期化しないとどうなるか、実行してみればすぐにわかることなのでここでは割愛するとして…。 本を探しているような素人にはわかりにくいと思いますが。 関数で使用宣言(int iとか)をしても実際にはメモリのどこが確保される かが決定されただけで内容は未確定つまりプログラムがロードされる前のメモリ 内容がそのまま残ることが多いです。これはCがOS開発用の言語であるため ハードウェア部を直接操作可能なようにしてあるからとかどっかで聞い たような・・・とにかく内容が0とは限らないので0で埋めてやらないと とんでもない結果が場合によっては帰ってきます。 まあ、たまにお節介で初期化しちゃう処理系があったような気がしますが言 語仕様じゃないのでちゃんと自分で初期化を忘れずに。

全文を見る
すると、全ての回答が全文表示されます。
noname#182251
noname#182251
回答No.3

一度締め切った質問を、何も変えずに再質問するのは何をのか考えているのか?それにカテゴリーも違うでしょう。 教えて!goo > コンピューター [技術者向け] > プログラミング > C&C++

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

こんにちは。 過去に同じような質問がありましたよ。 配列の変数名まで同じだよ。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1510088
全文を見る
すると、全ての回答が全文表示されます。
回答No.1

kansu[i]が0個の場合のために最初に初期化しなければなりません。scanfの次の行に、 for(i=0;i<10;i++) kansu[i] = 0; を書き足します。 それと、 kansu[i] = i; では、数字iがi個あることになってしまいます。kansu[i]を1づつ増やせばよいので、 kansu[i]++; とすればどうでしょうか。

jjjj27
質問者

補足

kansu[i]が0個の場合のために最初に初期化しなければなりません。初期化しないとどうなるのですか?初期化する意味がいまいち分かりません。教えてください。 後、kansu[i]を1づつ増やせばよいので、 kansu[i]++;にする考え方を教えてください。 C言語ができるようになりたいです。どのように勉強すればよいのですか?宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 教えてください

    読み込んだ整数を例えば、3322だとしたら、0は0個、1は0個、2は2個、3は2個、4は0個、5は0個、6は0個、7は0個、8は0個、9は0個。のようにするプログラムを配列を用いて表示するのですが、下のプラグラムではできません。教えてください。宜しくお願いします。これは途中からです。 printf("整数を入力してください。"); scanf("%d", &num); do{ num=num / 10; kansu[i]=num % 10; }while (num > 0); for(j=0; j<10; j++) printf("%d個は%dです。\n",j, kansu[i]); return (0); }

  • 困っています

    このプログラムを以下に示す所を関数化し、該当する部分を関数呼び出すようにします。  1 非負の整数が入力されたかチェックする関数(非負は0、負は1を返す) 2非負の整数を読み込む関数 3渡された整数の1の位を返す関数 4アスタリスクを表示する関数 です。 全然分からないので詳しく教えてください。 お願いします。 int main(void) { int i; int num,kansu[10]; printf("整数を入力してください。"); scanf("%d", &num); for(i=0; i<10; i++) kansu[i]=0; do{ kansu[num % 10]++; num /= 10; }while(num>0); for (i=0; i <10; i++) { printf("%d",i); for (j =0; j < kazu[i]; j++) putchar('*'); putchar('\n'); } return(0); }

  • 困っています

    このプログラムを以下に示す所を関数化し、該当する部分を関数呼び出すようにします。  1 非負の整数が入力されたかチェックする関数(非負は0、負は1を返す) 2非負の整数を読み込む関数 3渡された整数の1の位を返す関数 4アスタリスクを表示する関数 です。 自分では、1は、 int isNotMinus(int n){ return (n < 0) ? 1 : 0 ; } だと思うのですが、2,3,4が分かりません。この 作った関数をmain関数で呼ぶときどうやるかも教えてください。宜しくお願いします。 int main(void) { int i; int num,kansu[10]; printf("整数を入力してください。"); scanf("%d", &num); for(i=0; i<10; i++) kansu[i]=0; do{ kansu[num % 10]++; num /= 10; }while(num>0); for (i=0; i <10; i++) { printf("%d",i); for (j =0; j < kazu[i]; j++) putchar('*'); putchar('\n'); } return(0); }

  • while文の作成について

    キーボードに整数を打ち込み、0を打ち込むと終了し、その合計を出すプログラムを以下のように作りました。 #include<stadio.h> int main(void){ int num=0 int sum=0 printf("整数を入力"\n"); do{ scanf("%d",&num); sum +=num; }while(num); printf("合計は%dです。\n",sum); returen 0; } 次に負の値が入力されるまで整数を読み込み続け、その合計をを求めるプログラムを作りたいのですが、whileのところを }while(num>=0); としてみたのですが、うまくいきません。また分かり易くするため、入力した整数の個数も表示できるようにしたいです。どうすればよいでしょうか。詳しい方、教えてください。

  • ループ

    #include<stdio.h> int main(void) { int i=1,sum=0; int num=1; while(num>0) { printf("整数を入力してください。(マイナスの値で終了)\n"); scanf("%d",&num); printf("%dが入力されました。(%d番目の繰り返しです)\n",num,i); sum+=i; printf("1から%dまでをたすと%dです。\n",i,sum); i++; } printf("繰り返しが終わりました。\n"); printf("加算値は%dです。\n",sum); printf("%d回繰り返しました。\n",i); return 0; } このプログラムで101以上の数値は加算しないようにするにはどうすればいいですか。

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値表示するプログラムを作成せよ。 (自分の解答) #include <stdio.h> int main(void) { int num1,num2; int sum=0; do { printf("整数1>整数2となる整数をそれぞれ入力してください\n"); printf("整数1:"); scanf("%d",&num1); printf("整数2:"); scanf("%d",&num2); if (num1 < num2) printf("整数1>整数2としてください\n"); } while (num1 < num2); printf("%d以上%d以下の全整数の和は",num2,num1); for (num2;num2 <= num1;num2++) { sum=sum+num2; } printf("%dです。",sum); return 0; } これでも一応正しく実行されるのですが、ごちゃごちゃしてるので簡潔に書けないでしょうか? 回答お願いします。

  • C言語初心者です。次のプログラムを簡潔にしたいです

    二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ。 自分のプログラムは以下の通りです。 #include <stdio.h> int main(void) { int num1,num2,small,big,sum=0; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d",&num1); printf("整数B:"); scanf("%d",&num2); small=(num1 > num2) ? num2 : num1; big=(num1 > num2) ? num1 : num2; printf("%d以上%d以下の全整数の和は",small,big); if (num1 < num2) { do { sum+=num1; num1++; }while (num1 <= num2); } else { do { sum+=num2; num2++; }while (num2 <= num1); } printf("%dです。",sum); return 0; } 結果は正しく表示されるはずです。 しかし多変数かつループ文を組み合わせているため、長ったらしくなっています。 どのようなプログラミングならば、簡潔にかけますか? 解答がないので困っています。

  • 初心者です。

    ループで、どうしてもわからないので、質問します。   1234567890123456789012345 と、いうように表示したいのですが、以下のソースでは、表示されません。教えてください。  ※ 読み込まれた整数値の個数は25とした場合です。 #include <stdio.h> int main(void) { int i = 0; int num; printf("整数を入力してください。:"); scanf("%d",&num); for (i = 0; i < num; i++){ printf("%d", i); if ( i <= 10 ){ i = 0; } } putchar('\n'); return(0); }

  • 非負整数nを読み込んで、1+2+・・・+m>nとなる最小の整数mを表示

    非負整数nを読み込んで、1+2+・・・+m>nとなる最小の整数mを表示するというプログラミングなのですが・・・ #include <stdio.h> int main(void) { int n,m=■ , sum=0; do { printf("非負整数: "); scanf("%d", &n); } while (n■0); while (sum■n) { ■ ; sum +=■; } printf("1+2+・・・+m> %dとなる最小の整数mは%dである。\n", n, m); return (0); } ■のところがわかる方どうにかお願いします!!

  • コンパイルエラー

    コンパイルしても、12行目(printf("%d番目の整数を入力してください。"i+1);が、関数呼び出しに)がないとでます。でもどこが間違っているか分かりません。 教えてください。お願いします。 #include <stdio.h> int main(void) { int num; int sum=0; int i; for(i=0; i<10; i++){ printf("%d番目の整数を入力してください。"i+1); scanf("%d", &num); sum+=num; } printf("合計は、%dです。\n", sum); return(0); }

専門家に質問してみよう