学校の課題で出たプログラムなのですが、いまいちわかりません。
(1)1000円を500円、100円、50円、10円を使って両替する全てのパターンを出力するプログラム。
(2)整数を入力し、上位の桁から順に各桁の英語読みを出力するプログラム。配列使用。
(3)0~100までの任意の値を複数入力して、入力された値の個数、平均値、最大値、最小値を出力するプログラム。
(2)については、315と入力するとthree one fiveと出力されるプログラムです。
(3)については、複数入力と入力された値の個数の部分がわかりません。
コードを全て記述して教えてくれればうれしいですが、考え方、ヒントだけでも結構です。
非常に困っています。助けてください。
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)は妙に難しい気がします。
がんばって!
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.
とはいえ疲れた.
回答ありがとうございました。
友人や先輩に聞いてなんとかできました。
質問の仕方が悪かったですね。
単純に手打ちでパターンを全て出力するのではなく、アルゴリズムを用いたプログラムを作らなければいけない問題でした。
お手数を掛けまして申し訳ありません。
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_COUNT100
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;
}
回答ありがとうございました。
友人や先輩に聞いてなんとかできました。
詳細に書いていただいたので、このプログラムも試してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Java java 入力された文字列を数値に置き換えて整数にし、計算をしたいです。 <を10として /を1とし 4 2022/05/16 21:08
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# 3つの倍精度浮動小数点値の平均を求めて、3つの引数全てを平均値に変更するメソッドを作成し、キーボード 1 2022/07/13 16:04
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java Java 南京錠 2 2023/02/04 11:46
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CTRL+Dでループを抜けるには
-
コンパイルエラーについて
-
入力したお金の金額からお札の...
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
4の倍数を論理演算で表す。。
-
Segmentation fault
-
三角形の判別
-
両替プログラムなど
-
WM_CLOSEで閉じれないウィンド...
-
ヌメロンの対戦相手
-
関数をこえてプログラムを強制...
-
c言語でAからZまでを表示する...
-
矢印キーの反応が悪くなります
-
CPU温度・負荷等を調べるには
-
C言語について
-
【C言語教えてください】sin波...
-
unsigned int型について
-
Cプログラムについて
-
なぜに0が表示されるの?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
strcmp
-
コンパイルエラーについて
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
cshの文字列操作(0埋め)
-
4の倍数を論理演算で表す。。
-
C言語 プログラミング
-
%P と %X の違い
-
8人分のテストの点数を入力し、...
-
C言語での、年複利の計算方法...
-
printf( " %2d", p * q );
-
hit&bolwのプログラミングがで...
-
scanfに文字が入力されたときに...
-
error C2143: 構文エラー : ';'...
-
printfの出力内の文字をdefine...
-
テキストカーソル位置の取得
-
unsigned int型について
おすすめ情報