• ベストアンサー

このプログラミングの宿題を教えてください。

「アルファベット4文字を半角で文字列として入力します。4文字のコードを足しあわせ,その結果を10進数で表示します。さらに,百の位,十の位,一の位に分けて表示するようにプログラムを作りましょう。」という宿題です。 main( ) { char s[6]; printf("4文字を入力してください:"); scanf("%s",s); } ここまでできたんですが、そのあとが分かりません。 回答よろしくお願いします。

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

アルファベットとか半角とかいうのが仕様としては厳密ではありませんが、isalphaが真になる文字だと勝手に解釈すると... #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <limits.h> int main(void) {  int sum = 0;  for (int i = 0; i < 4; i++)  {   int c = getchar();   if (!isalpha(c)) goto failure;   sum += c;  }  char s[2 + (CHAR_BIT + 1) / 3 + 1] = "00";  int n = snprintf(s + 2, 4, "%d", sum);  puts(s + 2);  printf("百の位: %c\n", s[n - 1]);  printf("十の位: %c\n", s[n + 0]);  printf("一の位: %c\n", s[n + 1]);  return EXIT_SUCCESS; failure:  return EXIT_FAILURE; } こんな感じでしょうか?

その他の回答 (5)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.6

>「すぐに回答欲しいです」の割に補足も礼もなく、そのまま放置ってのが結構ありますね。 最小の労力で最大(?)の効果を得る、勝ち組の方達なのでしょう。 プログラマとして就職すると、なかなかの働きを見せてくれるハズです。 勝ち組なだけに。 まあ、そのまま提出すると(掲示された条件は満たしているが)出題者の意図から外れる回答をする。 という回答者もそれなりに居ますね。 # ええ、私もそんなです。(今回はスルーしてますが。仕様的に意味不明な感じがしたので)

回答No.5

この手の質問って、回答さえ分かればいいので 「すぐに回答欲しいです」の割に補足も礼もなく、そのまま放置ってのが結構ありますね。 本質問も提出できる体裁は整ったのでコピペして宿題終了。 あとはべつに用はないので、質問自体は放置。ということでしょう。

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

次に出た宿題も、同じように掲示板で質問するんですか? まあ、現になにがしかの回答はついているし、次に出た宿題のときも なにがしかの回答が来るかもしれませんが、その回答を見て覚えただけでは 質問者さんの実力に「なりません」。絶対に。 老婆心ながら。

  • cotae_bb
  • ベストアンサー率53% (51/95)
回答No.2

適当に書いたのでミスがあるかもしれません。 エラー回避とか入れてません。 int main(void) {   unsigned char s[100];   int i;   int sum;   int num[3];  //100, 10, 1の位をそれぞれ納める      // 初期化   for (i = 0; i < 100; i++)   {     s[i] = 0;   }      printf("4文字を入力してください。\n");   scanf("%s", s);      // 上4桁を取得   sum = 0;   for (i = 0; i < 4; i++)   {     sum += (int)s[i];   }      printf("合計は %d\n", sum);      num[0] = ((sum % 1000) / 100);  //100の位   num[1] = ((sum % 100) / 10);  //10の位   num[2] = ((sum % 10) / 1);    //1の位      printf("100の位は %d\n", num[0]);   printf("10の位は %d\n", num[1]);   printf("1の位は %d\n", num[2]);      return 0; } 宿題は人にまるまる聞いてやっても意味がないですよ。 質問をするならば、次にやりたいことを考えて、それに関する情報を求めるようにしましょう。 今回の問題で言うと、処理の流れは 1.4文字の入力を受ける 2.4文字それぞれを文字コードに変換して和を求める 3.合計値から100, 10, 1の位を算出する 4.それぞれを出力する こんな感じになります。 今回の場合はどこが分からなかったのかを考えてください。 もし、こういう流れを考えていなかったのなら、考える癖をつけましょう。

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

入力された2文字がどのようにsにはいっているのかは分かりますか? コード動作確認してませんし全部は書いてません int AddAns = s[0] + s[1];  //2文字を足し合わせた結果 + が演算式 ptintf("100の位 %d", (AddAnd / 100) % 10); //  / が商 %が余り を求める演算式

関連するQ&A