• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Cの数値の置換について)

Cの数値の置換について

このQ&Aのポイント
  • C言語の初心者が正数の特定の数字を置換するプログラムを作成する方法についての質問です。
  • 配列の使用は禁止で、for文、if文、swich文、do while文などを使用して解決する必要があります。
  • 具体的な問題の例として、正数を入力し、その中の特定の数字を他の数字に置換するプログラムを作成する方法を知りたいです。

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

  • ベストアンサー
  • gha10320
  • ベストアンサー率71% (5/7)
回答No.1

大きい数字ではなく、小さい数字で考えて見て下さい。 9876=9*1000+8*100+7*10+6 となるので、8を5に変えるとかにします。 各桁を、x4,x3,x2,x1の変数に置き換えて 9876=x4*1000+x3*100+x2*10+x1 と分解できれば if(x3==8) x3=5; とすればいいわけです。 ではどうやって,x4,x3,x2,x1に分解すればいいのか %演算子を使って下さい x1=9876%10 で9876を10で割った余りが、x1に入ります。 次に9876を10で割った値をint型変数に入れれば 987になるので 同様にx2=987%10、繰り返せば x4=9,x3=8,x2=7,x1=6 となります。 繰り返しと判断だけですので for,if分だけでできることになります。

sukaten
質問者

補足

ありがとうございました。考え方がわかったので解いてみたのですが、for文で各桁を出した後にx1,x2・・・に入れる方法がわかりません。その場合はどうしたらよいのでしょうか??

その他の回答 (4)

回答No.5

申し訳ない。 問題文に >正数を入力し って書いてあるから、0は入力させないようにしないといけないね。 すると、ANo.3のプログラムで正解だわ。間違った指摘してごめん。

回答No.4

ANo.3さん惜しいっ! Input a positive number. -> 0 Specify the target number. (0 to 9) -> 0 Input a number converting from "5". (0 to 9) -> 5 ってやった時に、 Result: ってなっちゃって、 Result:5 にならない。 「どこがどう悪いのか?どう直せばよいのか?」を考えると勉強になるから、質問者さんは、それを考えてみよう。 なので、あえて、修正方法は回答しません。

sukaten
質問者

補足

それはnum=0の時にif文で再入力するようにすればいいということでしょうか?

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

#include <stdio.h> void convert(int num, int s, int d) { if (num) { convert(num / 10, s, d); printf("%d", (num % 10 == s) ? d : num % 10); } } int main(void) { int num, s, d, n; do { printf("Input a positive number.\n-> "); n = scanf("%d", &num); } while (n != 1 || num <= 0); do { printf("Specify the target number. (0 to 9)\n-> "); n = scanf("%d", &s); } while (n != 1 || s < 0 || 9 < s); do { printf("Input a number converting from \"%d\". (0 to 9)\n-> ", s); n = scanf("%d", &d); } while (n != 1 || d < 0 || 9 < d); printf("Result:"); convert(num, s, d); putchar('\n'); return 0; }

sukaten
質問者

お礼

ソースコードを載せて頂きありがとうございます。 これを元にしっかりと自分で考えて見ます。ありがとうございました。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

char s[]="abcabcabc" ; とあったとき、cをxに置き換えるプログラムは作れますか? scanfでも文字列入力できます

sukaten
質問者

補足

ありがとうごまざいました。 残念ながらまだ配列の使い方を理解できていないので、文字の置き換えも解くことができません………。

関連するQ&A