式と演算子の問題です

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

式と演算子の問題です

#1

投稿記事 by モノクマ » 2年前

初めてこの掲示板を使わせていただきますm(_ _)m
早速ですがわからない問題があります。お知恵を貸していただきたいです。

問題文
「ある青果店では りんご 1個80円, みかん 1個50円, もも1個120円で販売している。
以下の実行結果のように, りんご, みかん, ももの個数をそれぞれ整数で入力すると, 果物の合計の個数と代金を表示するプログラムを完成させなさい. 」

ただし,
- 変数宣言を書き換えたり, 追加してはならない (使用して良い変数は x と price のみ)
- 消費税は考慮しない
- 果物の個数の合計は100個未満と仮定して良い
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
実行結果
りんご> 3
みかん> 4
もも> 5
合計 12点のお買い上げで, 1040円です
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
という問題です。
一応自分なりに考えましたが、果物の合計の部分がどうしてもわかりません。
下のが私が作ったものです。どなたか教えてください。

コード:

#include <stdio.h>

int main(void)
{
    int x, price = 0;
    printf("りんご> ");
    scanf("%d",&x);
    price=price+x*80;
    printf("みかん> ");
    scanf("%d",&x);
    price=price+x*50;
    printf("もも> ");
    scanf("%d",&x);
    price=price+x*120;


    printf("合計 %d点のお買い上げで, %d円 です\n",x,price);
    

    
    return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 式と演算子の問題です

#2

投稿記事 by みけCAT » 2年前

普通に果物の個数を合計すればいいと思います。
「変数宣言を追加してはならない」という条件があったのですね。考え直します。

コード:

#include <stdio.h>

int main(void)
{
    int x, number = 0, price = 0;
    printf("りんご> ");
    scanf("%d",&x);
    number=number+x;
    price=price+x*80;
    printf("みかん> ");
    scanf("%d",&x);
    number=number+x;
    price=price+x*50;
    printf("もも> ");
    scanf("%d",&x);
    number=number+x;
    price=price+x*120;


    printf("合計 %d点のお買い上げで, %d円 です\n",number,price);
    

    
    return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 式と演算子の問題です

#3

投稿記事 by みけCAT » 2年前

「果物の個数の合計は100個未満」という条件があり、果物の個数は負にはならないはずなので、
果物の個数は7ビット(0~127)で表すことができます。
したがって、C言語のint型は少なくとも-32767~32767の整数を格納することができるので、
変数priceの下位1バイト(8ビット)に1個の果物の個数を、
その次の1バイトにもう1個の果物の個数を格納することができます。
3個目の果物の個数は、xに読み込んでそのまま使えばいいでしょう。

コード:

#include <stdio.h>

int main(void)
{
    int x, price = 0;
    printf("りんご> ");
    scanf("%d",&x);
    price=x;
    printf("みかん> ");
    scanf("%d",&x);
    price=price+x*256;
    printf("もも> ");
    scanf("%d",&x);


    printf("合計 %d点のお買い上げで, %d円 です\n",
        (price%256)+(price/256)+x,
        80*(price%256)+50*(price/256)+120*x);
    

    
    return 0;
}
また、int型に十分大きな数を格納できる環境(例えば、典型的なint型が4バイトの環境)では、
priceの下位1バイトに個数の合計を、残りのバイトに値段の合計を格納することもできます。

コード:

#include <stdio.h>

int main(void)
{
    int x, price = 0;
    printf("りんご> ");
    scanf("%d",&x);
    price=price+x*80*256+x;
    printf("みかん> ");
    scanf("%d",&x);
    price=price+x*50*256+x;
    printf("もも> ");
    scanf("%d",&x);
    price=price+x*120*256+x;


    printf("合計 %d点のお買い上げで, %d円 です\n",price%256,price/256);
    

    
    return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

モノクマ

Re: 式と演算子の問題です

#4

投稿記事 by モノクマ » 2年前

なるほど!そんなやり方があるのですね!
いやー奥が深いです…。みけCATさんありがとうございましたm(_ _)m

モノクマ

Re: 式と演算子の問題です

#5

投稿記事 by モノクマ » 2年前

続けての質問なのですが、次の問題も自分にはよく分かりません(汗
どなたかお知恵を貸していただきたいです。自分のc言語の技術は初心者レベルです。
(すいません。自分のレベルが表現しづらいです…。問題はスレの題名の内容です)

問題
以下の実行結果のように, 正の整数を入力すると, 入力した整数の一の位, 十の位, 百の位の数をそれぞれ順に表示するプログラムを作成しなさい.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
実行結果
正の整数を入力> 98765
一の位は 5
十の位は 6
百の位は 7
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

全然わかりません…。

コード:

#include <stdio.h>

int main(void)
{
    int x;
    printf("正の整数を入力> ");
    scanf("%d", &x);
    
    
    printf("一の位は %d\n",x);

    
    printf("十の位は %d\n",x);

    
    printf("百の位は %d\n",x);
    

    return 0;
}

モノクマ

Re: 式と演算子の問題です

#6

投稿記事 by モノクマ » 2年前

続けての質問なのですが、次の問題も自分にはよく分かりません(汗
どなたかお知恵を貸していただきたいです。自分のc言語の技術は初心者レベルです。
(すいません。自分のレベルが表現しづらいです…。問題はスレの題名の内容です)

問題
以下の実行結果のように, 正の整数を入力すると, 入力した整数の一の位, 十の位, 百の位の数をそれぞれ順に表示するプログラムを作成しなさい.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
実行結果
正の整数を入力> 98765
一の位は 5
十の位は 6
百の位は 7
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

全然わかりません…。

コード:

#include <stdio.h>

int main(void)
{
    int x;
    printf("正の整数を入力> ");
    scanf("%d", &x);
    
    
    printf("一の位は %d\n",x);

    
    printf("十の位は %d\n",x);

    
    printf("百の位は %d\n",x);
    

    return 0;
}

Butter
記事: 18
登録日時: 3年前

Re: 式と演算子の問題です

#7

投稿記事 by Butter » 2年前

一の位は
x%10で求められます
98765%10=5

int型の割り算は、小数点以下が切り捨てなので
十の位は
(x/10)%10で求められます
98765/10=9876
9876%10=6

同様に百の位は
(x/100)%10で求められます

これをprintfのところに入れればいいと思います
とても暇で忙しい

box
記事: 2002
登録日時: 13年前

Re: 式と演算子の問題です

#8

投稿記事 by box » 2年前

質問の内容が違うものになったら、新しくトピックを立てる方がよいと思います。

コード:

#include <stdio.h>

int main(void)
{
    int n, i;
    char *s[] = { "いち", "じゅう", "ひゃく" };

    printf("正の整数を入力> ");
    scanf("%d", &n);
    for (i = 0; i < 3; i++, n /= 10) {
        printf("%sの位は %d\n", s[i], n % 10);
    }
    return 0;
}
一、十、百が漢字でないのは、当方の開発環境のせいだと思ってください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

モノクマ

Re: 式と演算子の問題です

#9

投稿記事 by モノクマ » 2年前

butterさんboxさんありがとうございます!
いろいろなやり方があるのですね…。
また新しい質問がありましたら新しくトピックを作ろうと思います!

返信

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