• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:両替プログラムなど)

プログラムの課題について

このQ&Aのポイント
  • 学校の課題で出されたプログラムについてわからない部分があります。
  • 315と入力すると英語読みが出力されるプログラムについて、考え方やヒントが欲しいです。
  • 複数の値を入力し、個数や平均値、最大値、最小値を出力するプログラムについて、考え方やヒントが欲しいです。

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

  • ベストアンサー
  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.3

みなさん手厳しいですね。 (3)は分からない部分が明確ですので、回答してもいいですかね。 まず、複数個の値をどのように受け付けるのかを決めないといけません。 宿題であれば、それは先生が言ってませんでしたか? 自由に決めてよしということであれば、宿題レベルでは一般的に以下のどれかだと思います。 1. 引数として複数個受け付ける(argc) 2. 対話的に複数個受け付ける(scanfなど) 3. データファイルを渡す(csvなど) 最大長が100って決まっているので、先生は2.あたりを想定していますでしょうか。 であれば、以下のように作ればいいのではないでしょうか。 int i; int nums[100]; for(i=0; i<100; i++){ // ユーザに終了するか確認、終了ならbreak // scanfで数値取得し、nums[i]に代入 } // ここで取得件数はi件なので、nums[0]からnums[i-1]までの // 個数、平均値、最大値、最小値を計算して出力 日本語で書いた部分をC言語化すれば動くと思います。 ちなみに、上記1.のパターンで作る場合、 int main(int argc, char *argv[]){ ここのargcに引数の件数が格納されますので、 個数分だけargvを読んであげればいいと思います。 詳しくはお手元の教本のどっかに書いてあるはず。 あと、(2),(3)に比べて(1)は妙に難しい気がします。 がんばって!

murasame-alk
質問者

お礼

回答ありがとうございました。 友人や先輩に聞いてなんとかできました。

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

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

(1) #include <stdio.h> #include <stdlib.h> int main() { printf("# of 500/100/50/10 yen coins:\n"); printf( "2/0/0/0\n" "1/5/0/0\n" "1/4/2/0\n" "1/4/1/5\n" "1/4/0/10\n" "1/3/4/0\n" "1/3/3/5\n" "1/3/2/10\n" "1/3/1/15\n" "1/3/0/20\n" "1/2/6/0\n" "1/2/5/5\n" "1/2/4/10\n" "1/2/3/15\n" "1/2/2/20\n" "1/2/1/25\n" "1/2/0/30\n" "1/1/8/0\n" "1/1/7/5\n" "1/1/6/10\n" "1/1/5/15\n" "1/1/4/20\n" "1/1/3/25\n" "1/1/2/30\n" "1/1/1/35\n" "1/1/0/40\n" "1/0/10/0\n" "1/0/9/5\n" "1/0/8/10\n" "1/0/7/15\n" "1/0/6/20\n" "1/0/5/25\n" "1/0/4/30\n" "1/0/3/35\n" "1/0/2/40\n" "1/0/1/45\n" "1/0/0/50\n"); printf( "0/10/0/0\n" "0/9/2/0\n" "0/9/1/5\n" "0/9/0/10\n" "0/8/4/0\n" "0/8/3/5\n" "0/8/2/10\n" "0/8/1/15\n" "0/8/0/20\n" "0/7/6/0\n" "0/7/5/5\n" "0/7/4/10\n" "0/7/3/15\n" "0/7/2/20\n" "0/7/1/25\n" "0/7/0/30\n" "0/6/8/0\n" "0/6/7/5\n" "0/6/6/10\n" "0/6/5/15\n" "0/6/4/20\n" "0/6/3/25\n" "0/6/2/30\n" "0/6/1/35\n" "0/6/0/40\n" "0/5/10/0\n" "0/5/9/5\n" "0/5/8/10\n" "0/5/7/15\n" "0/5/6/20\n" "0/5/5/25\n" "0/5/4/30\n" "0/5/3/35\n" "0/5/2/40\n" "0/5/1/45\n" "0/5/0/50\n" "0/4/12/0\n" "0/4/11/5\n" "0/4/10/10\n" "0/4/9/15\n" "0/4/8/20\n" "0/4/7/25\n" "0/4/6/30\n" "0/4/5/35\n" "0/4/4/40\n" "0/4/3/45\n" "0/4/2/50\n" "0/4/1/55\n" "0/4/0/60\n" "0/3/14/0\n" "0/3/13/5\n" "0/3/12/10\n" "0/3/11/15\n" "0/3/10/20\n" "0/3/9/25\n" "0/3/8/30\n" "0/3/7/35\n" "0/3/6/40\n" "0/3/5/45\n" "0/3/4/50\n" "0/3/3/55\n" "0/3/2/60\n" "0/3/1/65\n" "0/3/0/70\n" "0/2/16/0\n" "0/2/15/5\n" "0/2/14/10\n" "0/2/13/15\n" "0/2/12/20\n" "0/2/11/25\n" "0/2/10/30\n" "0/2/9/35\n" "0/2/8/40\n" "0/2/7/45\n" "0/2/6/50\n" "0/2/5/55\n" "0/2/4/60\n" "0/2/3/65\n" "0/2/2/70\n" "0/2/1/75\n" "0/2/0/80\n" "0/1/18/0\n" "0/1/17/5\n" "0/1/16/10\n" "0/1/15/15\n" "0/1/14/20\n" "0/1/13/25\n" "0/1/12/30\n" "0/1/11/35\n" "0/1/10/40\n" "0/1/9/45\n" "0/1/8/50\n" "0/1/7/55\n" "0/1/6/60\n" "0/1/5/65\n" "0/1/4/70\n" "0/1/3/75\n" "0/1/2/80\n" "0/1/1/85\n" "0/1/0/90\n" "0/0/20/0\n" "0/0/19/5\n" "0/0/18/10\n" "0/0/17/15\n" "0/0/16/20\n" "0/0/15/25\n" "0/0/14/30\n" "0/0/13/35\n" "0/0/12/40\n" "0/0/11/45\n" "0/0/10/50\n" "0/0/9/55\n" "0/0/8/60\n" "0/0/7/65\n" "0/0/6/70\n" "0/0/5/75\n" "0/0/4/80\n" "0/0/3/85\n" "0/0/2/90\n" "0/0/1/95\n" "0/0/0/100\n"); return EXIT_SUCCESS; } どこか難しいところはありますかね>#3. とはいえ疲れた.

murasame-alk
質問者

お礼

回答ありがとうございました。 友人や先輩に聞いてなんとかできました。 質問の仕方が悪かったですね。 単純に手打ちでパターンを全て出力するのではなく、アルゴリズムを用いたプログラムを作らなければいけない問題でした。 お手数を掛けまして申し訳ありません。

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

3つ全部どうぞ /***** (1)のプログラム *****/ #include "stdio.h" #include "stdlib.h" #include "string.h" /*コインの枚数情報*/ struct CoinGroup { const int coin; /*コイン種別*/ int count; /*枚数(組み合わせ毎に書き換える)*/ }; static CoinGroup coinGroup[] = { { 500, 0 }, { 100, 0 }, { 50, 0 }, { 10, 0 }, { 0, 0 }, }; void exchange( CoinGroup* group, int money ) { int size = money / group->coin; group->count = 0; while( group->count <= size ) { int amount = group->coin * group->count; /*まだ小さい硬貨がある?*/ if( 0 < ( group + 1 )->coin ) { /*次の硬貨で枚数の組み合わせを計算する*/ exchange( group + 1, money - amount ); } /*最大枚数に達した?*/ if( !( money - amount ) ) { /*これ以上小さい硬貨がない時は 全ての硬貨の枚数を出力する*/ if( 0 >= ( group + 1 )->coin ) { CoinGroup* temp = coinGroup; while( 0 < temp->coin ) { printf( "[%d]%d\t", temp->coin, temp->count ); ++temp; } printf( "\n" ); } break; } ++( group->count ); } } int main() { exchange( coinGroup, 1000 ); return 0; } /***** (2)のプログラム *****/ #include <stdio.h> int main() { const char* str[] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; char buffer[ 64 ]; printf( "%d桁までの整数を入力してください:", sizeof( buffer ) - 1 ); scanf( "%s", buffer ); for( char* ptr = buffer; '\0' != *ptr; ptr++ ) { int ix = *ptr - '0'; if( 0 <= ix && 9 >= ix ) printf( "%s ", str[ ix ] ); } return 0; } /***** (3)のプログラム *****/ #include <stdio.h> #include <stdlib.h> #define MAX_INPUT_COUNT 100 int main() { int count = 0; int total = 0; int min = 0; int max = 0; while( true ) { /*数値以外が入力されたら抜けるように -1で初期化しておく*/ int input = -1; printf( "整数を入力してください(0~100):" ); scanf( "%d", &input ); /*0~100以外の値が入力されたら終了*/ if( 0 > input || 100 < input ) break; /*最小値を記憶*/ if( !count || min > input ) min = input; /*最大値を記憶*/ if( !count || max < input ) max = input; /*総和を記憶*/ total += input; /*個数を加算*/ ++count; } printf( "個数 =%d\n", count ); if( 0 < count ) { printf( "平均値=%.1f\n", ( double )total / count ); printf( "最大値=%d\n", max ); printf( "最小値=%d\n", min ); } return 0; }

murasame-alk
質問者

お礼

回答ありがとうございました。 友人や先輩に聞いてなんとかできました。 詳細に書いていただいたので、このプログラムも試してみたいと思います。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「いまいちわからない」なら, わかることは全部書いてください.

murasame-alk
質問者

お礼

回答ありがとうございました。 友人や先輩に聞いてなんとかできました。 質問者としてのマナー違反ですね。 申し訳ありませんでした。 今後、質問をする際は気をつけます。

すると、全ての回答が全文表示されます。
  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.1

学校の課題なので、テキストや授業ノートにヒントは必ずある。 全てコードを提示してもらってとりあえず解決したとして、そのアルゴリズムを説明できなければ丸写しがバレバレだが、それって課題を正解できない以上の問題にならないか? 一度に3つというのは、頼りすぎ。 自分でどこまで考えたのか? コード化の前に、日本語で処理の流れ手順を整理すべし。

murasame-alk
質問者

お礼

回答ありがとうございました。 友人や先輩に聞いてなんとかできました。 確かに焦っていたとはいえ甘えすぎでした。 忠言ありがとうございます。

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

関連するQ&A