プログラミングの問題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
matsu

プログラミングの問題

#1

投稿記事 by matsu » 16年前

今プログラミングの宿題をしています。
以下の問題で立ち止まっています。

(1)16進数で入力された二つの整数の和と差を計算して、
16進数と10進数で出力するプログラムをつくりなさい。

(2)入力された30000以下の秒数を、
「○○時間、○○分、○○秒」の形式で出力
するプログラムをつくりなさい。
≪ヒント≫
まず、秒を分に変換し、次に分を時間に変換する。
そのとき出てきた余りが、それぞれ秒と分である。

(3)次のようなデータを扱う4個の変数を宣言して、キーボードから
数値を入力し、入力結果を出力するプログラムをつくりなさい。
ただし、入力はそれぞれ、「身長=」などと表示したあとに続けて
入力させるものとする。また、出力もそれぞれ「身長=」などに続けて
表示し、改行するものとする。

身長のデータ sintyou
各クラスの人数 ninzuu
各教科の平均点 heikin
都市の人工 zinkou


(1)は
/* 2数の和と差 */
#include <stdio.h>
int main(void)
{
int wa, sa;
とここまでは「こうじゃないかな~?」程度で考えたの
ですがこれ以降どうすればいいのか分かりません。

(2)は
どこから手をつけて良いのかわかりません。

(3)は
/* 4個のデータ */
#include <stdio.h>
int main(void)
{
printf("身長 =
printf("人数 =
  printf("平均点 =
printf("人口 =
という所まで考えましたが
printf("身長 =
printf("人数 =
  printf("平均点 =
printf("人口 =
の=以降と
とそれ以降が分かりません。

どう解けば(どこから手をつければ)いいでしょうか?
よろしくお願いします。

たいちう

Re:プログラミングの問題

#2

投稿記事 by たいちう » 16年前

こんな所から手を付けてみてはどうでしょうか。

(0)10進数で入力された二つの整数の和と差を計算して、
10進数で出力するプログラムをつくりなさい。

matsu

Re:プログラミングの問題

#3

投稿記事 by matsu » 16年前

申し訳ありません。

分かりません。

sizuma

Re:プログラミングの問題

#4

投稿記事 by sizuma » 16年前

宿題ということは、なにかテキストで学習してるのではないですか?
習ったところまで復習した方がいいと思います。

printfとscanfを調べればできると思いますが。

Dixq (管理人)

Re:プログラミングの問題

#5

投稿記事 by Dixq (管理人) » 16年前

>申し訳ありません。
>分かりません。

どの位ならわかりますか?
では、こういうのはどうでしょう?

(a) 数値の「10」を画面に表示するプログラムを作りなさい。
(b) 変数aと変数bにキーボードから入力された整数を格納しなさい。
(c) (b)の和を計算しなさい。

夏天

Re:プログラミングの問題

#6

投稿記事 by 夏天 » 16年前

(1)
まずは入力用の変数を用意しましょう
次に計算結果を入れる変数を用意します
入出力のときに%Xを使えれば解決したようなものです

(2)
時間を分に、分を秒にといった計算をまずは自分で紙にやってみてください
その逆算をすれば完成です

(3)
printfとscanfについてレポートを提出しましょうw

がんばってくださいね^^b

クロウ

Re:プログラミングの問題

#7

投稿記事 by クロウ » 16年前

質問文をみてパッと思いついた程度ですが、
考え方としては
(1)
16進数→16進数:一度10進数に変換して計算して16進数に戻す
16進数→10進数:16進数のN桁目を見て(N >= 1)、
例えば
16進数で3桁の数、N = 3のとき
112だとすれば、10進数は1*(16^2) + 1*(16^1) + 2*(16^0) = 256 + 16 + 2 = 274となります。
16進数での112 + 11 の結果は
10進数でいう274 + 17 = 291となります

291(16進数→10進数)
291% (16 * 16) = 1余り35
36 % 16 = 2余り3
3

結果123

16進数→10進数の分解の方法としては

value;//入力された数値を入れる
keta1,keta2,keta3;//1,2,3桁目の数を格納

(入力)

(変数valueに値が入る)

(分解処理 (後ろから分解する。理由は10で割ると一桁ずつ落ちるから))
keta3 = value % 10;(例えば112のとき10で割った余りの2が入る)
value = value / 10;(10で割る(小数点以下は切り捨てられる) value = 11)

keta2 = value % 10;(11を10で割った余りの1が入る)
value = value / 10;(10で割る(小数点以下は切り捨てられる) value = 1)

keta1 = value % 10;(1を10で割った余りの1が入る)
value = value / 10;(10で割る(小数点以下は切り捨てられる) value = 0)

(計算処理)

keta1 * (16*16) + keta2 * 16 + keta3;

(出力)

みたいな構造になるかと思います。
10進数から16進数への変換はできた10進数を上と同じように今度は分解部分で16で割って計算部分で10を掛けてあげます。
まあ、配列やループを用いればもっと簡単になりますが問題のレベルからまだやっていないようなので省略しました。

(1)
1分→60秒
1時間→60分

つまり、上の(0)でやっている分解処理を60で割ればそのままになります。

(2)
続けて入力
printf→scanf→printf→scanfとつなげる。
改行
printf内の最後に"\n"をつける。

あとはprintfとscanfでググってみてください。

クロウ

Re:プログラミングの問題

#8

投稿記事 by クロウ » 16年前

よく見たら結構ごちゃごちゃ・・・
もし、わかりにくかったらスルーしちゃってください。
むしろ「16進数」「10進数」でググったほうがわかりやすいかと。

Kou

Re:プログラミングの問題

#9

投稿記事 by Kou » 16年前

こんにちは。

(1)
 こちらのサイトが参考になりませんか?
 http://7ujm.net/play/DECtoHEX/TOH.html

(2)
 C言語 余りで検索すればいろいろ引っ掛かりますよ。
 基本的な演算子なんで、簡単に理解できると思います。
 ただし、30000以下の秒数を入力してもらう際に、<u>入力エラーのチェックをするのであれば、if文が必要になります。</u>

(3)
 基本的にprintf関数scanf関数を参考書なりサイトで調べれば、ほぼクリアできると思いますよ。

どの問題に関しても、printf関数scanf関数は必要となりますので、もう一度おさらいしてみてください。

<u>※宿題なんですから、現時点で問題をクリアする為の知識(授業)は、既にあるはずです。</u>

もしいきなりコードにするのが難しければ、紙に日本語で必要と思われる処理、順序等を書き出し、
それを参考書(教科書)、サイトで調べながらコードに直していけば、頭がゴチャゴチャにならないかも・・・

matsu

Re:プログラミングの問題

#10

投稿記事 by matsu » 16年前

みなさんありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る