ページ 1 / 1
すいません 急ぎで解答をお願いします。
Posted: 2017年5月26日(金) 11:54
by tennga
コーヒー豆の名前と100gあたりの値段をメンバとして持つ構造体
を定義し,以下の3種の豆を定義する.
• Mocha 350円/100g
• Kona 450円/100g
• Blend 300円/100g
標準入力からコーヒー豆の名前と重量(g)を入力したときに,価格
を標準出力に出力するプログラムを作成せよ.
出力がこうなります。
$ ./a.out
豆の種類: Blend
分量(g): 350
価格: 1050
冷やかしなどはいりません
すみません雑な質問ですけど解答していただければ助かります、、、
Re: すいません 急ぎで解答をお願いします。
Posted: 2017年5月26日(金) 16:14
by asd
構造体の定義は分かりますか?
実際にコーヒー豆の構造体を定義するところから始めてはいかがでしょうか。
それが分かれば実行中にキーボードから入力を受け付け受け取る部分を追加し、
入力された値に応じて適切な構造体から100g単価を取得した上で入力されたグラム数から合計額を計算し出力する流れになるかと思います。
ここは仕様を書くと自動でプログラムが作成される場ではないと思いますので、
まずはできるところからやってみてください。
Re: すいません 急ぎで解答をお願いします。
Posted: 2017年5月26日(金) 19:47
by purin52002
まずは自分で書けるところまで書いてみてください。
そのあとデバッグしていきましょう。
、、、というのもやっぱり冷やかしになってしまうのかしらorz
Re: すいません 急ぎで解答をお願いします。
Posted: 2017年5月26日(金) 22:21
by みけCAT
tennga さんが書きました:標準入力からコーヒー豆の名前と重量(g)を入力したときに,価格
を標準出力に出力するプログラムを作成せよ.
これは質問ではなく命令ではないですか?
tennga さんが書きました:すみません雑な質問ですけど解答していただければ助かります、、、
質問はどこですか?
(これが課題かはわかりませんが)課題の丸投げは禁止です。
フォーラムルールを読んで従ってください。
どう質問していいか解らない時は、以下のテンプレをコピペして、
各項目に対して答える形で記載して下さい。
[hr]
[1] 質問文
[1.1] 自分が今行いたい事は何か
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
[1.4] 今何がわからないのか、知りたいのか
[2] 環境
[2.1] OS : Windows, Linux等々
[2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
[3] その他
・どの程度C言語を理解しているか
・ライブラリを使っている場合は何を使っているか
[hr]
Re: すいません 急ぎで解答をお願いします。
Posted: 2017年5月27日(土) 07:12
by box
tennga さんが書きました:
冷やかしなどはいりません
じゃあ、冷やかしでないのを。
コード:
#include <stdio.h>
#include <string.h>
#define LEN (20)
typedef struct {
char name[LEN];
int price;
} Coffee;
void get_price(Coffee *coffee, int kind)
{
char name[LEN];
int weight, i;
printf("豆の種類:"), scanf("%s", name);
printf("分量(g):"), scanf("%d", &weight);
for (i = 0; i < kind; i++) {
if (strcmp(name, coffee[i].name) == 0) {
printf("価格:%.0f\n", (double) coffee[i].price * weight / 100);
return;
}
}
printf("その豆は売ってません。\n");
}
int main(void)
{
Coffee coffee[] = {
{ "Mocha", 350 },
{ "Kona", 450 },
{ "Blend", 300 },
};
get_price(coffee, sizeof(coffee) / sizeof(coffee[0]));
return 0;
}
Re: すいません 急ぎで解答をお願いします。
Posted: 2017年5月27日(土) 08:22
by かずま
box さんが書きました:
コード:
Coffee coffee[] = {
{ "Mocha", 350 },
{ "Kona", 450 },
{ "Blend", 300 },
};
これは、次のように実行時に初期化が行われます。
コード:
Coffee coffee[3];
memcpy(coffee[0].name, "Mocha\0\0\0\0\0\0\0\0\0\0\0\0\0\0", LEN);
coffee[0].price = 350;
memcpy(coffee[1].name, "Kona\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", LEN);
coffee[1].price = 450;
memcpy(coffee[2].name, "Blend\0\0\0\0\0\0\0\0\0\0\0\0\0\0", LEN);
coffee[2].price = 300;
次のように static を付けると、実行時には何もしません。
コード:
static Coffee coffee[] = {
{ "Mocha", 350 },
{ "Kona", 450 },
{ "Blend", 300 },
};
box さんが書きました:
コード:
printf("価格:%.0f\n", (double) coffee[i].price * weight / 100);
分量が奇数の時、Mocha と Kona は 1円未満の端数が出て切り上げに
なってしまいます。
客商売では端数切捨てにしてほしいなあ、と思います。
コード:
#include <stdio.h>
struct { const char *種類; int 価格; } 表[] = {
{ "Mocha", 350 }, { "Kona", 450 }, { "Blend", 300 }
};
const int 個数 = sizeof 表 / sizeof *表;
int main(void)
{
char 種類[100]; int 分量, i;
printf("豆の種類: ");
scanf("%99s", 種類);
printf("分量(g): ");
if (scanf("%d", &分量) != 1) return 1;
for (i = 0; i < 個数 && strcmp(種類, 表[i].種類); i++) ;
if (i < 個数) printf("価格: %d\n", 表[i].価格 * 分量 / 100);
return 0;
}
VC++ では名前に日本語が使えます。
tennga さんには、すべての回答者にコメントや質問や感謝の言葉などを
返信されることを希望します。解決へのチェックも忘れずに。