-1

このプログラムは現在、関数を使用せずに動作していますが、よりモジュール化するためにそれらを実装したいと考えています。

私の問題は、関数の使用方法、関数の呼び出し方法、実装方法がまったくわからないことです..今、それらを理解する方法について本当に混乱しています。

#include <stdio.h>
#include <conio.h>
#define BERBER 27.95
#define PILE 15.95

void main () {
    int budget,lenh,wah,ftl,ftw;
    float convert,area,costl,costw;

    printf("WELCOME TO OUR SHOP!");
    printf("\nWE SALE CARPETS");
    printf("\nLength in <feet and inches>:\n");
    scanf_s("%d %d",&lenh,&ftl);fflush(stdin);
    printf("\nWidth in <feet and inches>:\n");
    scanf_s("%d %d",&wah,&ftw);fflush(stdin);

    costl=lenh(ftl/12.0);
    costw=wah(ftw/12.0);
    area=costl*costw;
    printf("\nTotal cost of the length : %.2f",costl);
    printf("\nTotal cost of the width : %.2f",costw);

    printf("\nYour budget:");scanf("%d",&budget);

    if (budget<BERBER) {
        convert=area*PILE;
        printf("\nYOu can only afford PILE");
    } else if (budget>PILE) {
        convert=area*BERBER;
        printf("\nYou can afford BERBER");
    } else {
        printf("\nThe choose is in you if you choose BERBER or PILE");
    }
    getch();
}
4

3 に答える 3

1

あなたのために解決策を書くことなく、私は正しい方向にあなたをプッシュするはずの疑似コードを提供します(実装するのはあなた次第です):

float GetArea(){
  float area;

  // - output the greeting
  // - prompt user for inputs (width/length
  // - total area

  return area;
}

float GetBudget(){
  float budget;

  // - prompt user for budget

  return budget;
}

void CheckBudget(float area, float budget) {
  // -check your area vs budget
  // - output appropriate response
}

void main(){ // Starting Point
  float area, budget;

  // - call GetArea() and store it
  // - call GetBudget() and store it
  // - call CheckBudget() referencing both of these values

  // done

}

これは、断片を分解してリファクタリングする 1 つの方法です。他にもたくさんのアプローチがありますのでご安心ください。元のタスクと「作業単位」と見なされるものについて考えてみてください。再利用/再実行したいものはすべて関数の良い例です。

于 2012-12-06T15:29:23.447 に答える
0

関数を使用する主なポイントは、コードを小さな再利用可能なチャンクにモジュール化することです。コードに「再利用可能な」部分がない場合、関数を作成する必要はないかもしれません。例えば:

int main()
{
    printf("The color is blue\n");
    printf("I like blue\n");

    printf("The color is red\n");
    printf("I like red\n");

    printf("The color is green\n");
    printf("I like green\n");
    return 0;
}

ここでは、同じことを何度も繰り返していますが、1 つの部分だけを変更しています。これを関数にすることができます。

void printit(const char * color)
{
    printf("The color is %s\n", color);
    printf("I like %s\n", color);
}

int main()
{
    printit("blue");
    printit("red");
    printit("green");
    return;
}

main()これで、一般的なタスクを処理する関数を使用してクリーンアップしました。毎回違う部分(色)を変数にして関数に渡し、印刷内容をカスタマイズできるようにしました。もちろん、これは非常に単純化された例です。


レビューすると、コードには実際には「再利用可能な」部分はありません...しかし、関数を使用して単純にクリーンに保ちたい場合があります。プログラムには3つの部分があります。

  1. ユーザーからの入力
  2. 計算をする
  3. ユーザーへの出力

したがって、必要に応じて 3 つの機能を実行できます。(このような単純なプログラムには少しやり過ぎですが、教育目的では問題ありません)。

void welcome_and_input(int * lenh, int * wah, int *ftl, int *ftw)
    printf("WELCOME TO OUR SHOP!");
    printf("\nWE SALE CARPETS");
    printf("\nLength in <feet and inches>:\n");
    scanf_s("%d %d\\n",lenh,ftl);
    printf("\nWidth in <feet and inches>:\n");
    scanf_s("%d %d\\n",wah,ftw);
}

void main () {
    int budget,lenh,wah,ftl,ftw;
    float convert,area,costl,costw;

    welcome_and_input(&lenh, &wah, &ftl, &ftw);

そのコードを理解できるかどうかを確認してください。ウェルカム メッセージと入力要求を受け取り、それを関数に分割します。

于 2012-12-06T15:36:39.857 に答える
0

ホリー、あなたのケースで質問を送信する前に、「c + 関数 + チュートリアル」などを使用して Google でチュートリアルを検索すると、ほとんどの質問に答える Web サイトがたくさん見つかります。次に、特定の問題がある場合は、ここに詳細を記載して質問を投稿できます。

私はいい人だから...これはあなたのコードを使った関数の簡単な例です(area_calculation関数を使って面積計算を行います):

#include <stdio.h>
#include <conio.h>
#define BERBER 27.95
#define PILE 15.95

//Prototype 
float area_calculation (float costl, float costw);

void main () {
    int budget,lenh,wah,ftl,ftw;
    float convert,area,costl,costw;

    printf("WELCOME TO OUR SHOP!");
    printf("\nWE SALE CARPETS");
    printf("\nLength in <feet and inches>:\n");
    scanf_s("%d %d",&lenh,&ftl);fflush(stdin);
    printf("\nWidth in <feet and inches>:\n");
    scanf_s("%d %d",&wah,&ftw);fflush(stdin);

    costl=lenh(ftl/12.0);
    costw=wah(ftw/12.0);
    //Call to the function area_calculation 
    area=area_calculation (costl,costw);
    printf("\nTotal cost of the length : %.2f",costl);
    printf("\nTotal cost of the width : %.2f",costw);

    printf("\nYour budget:");scanf("%d",&budget);

    if (budget<BERBER) {
        convert=area*PILE;
        printf("\nYOu can only afford PILE");
    } else if (budget>PILE) {
        convert=area*BERBER;
        printf("\nYou can afford BERBER");
    } else {
        printf("\nThe choose is in you if you choose BERBER or PILE");
    }
    getch();
}

//definition of the function area_calculation
float area_calculation (float costl, float costw)
{
    return (costl * costw);
}
于 2012-12-06T15:36:43.843 に答える