ガイドコースCS 50トレーニング第2期第2週


C言語


コンパイラ


私たちが自分で書いたコードは「ソースコード」と呼ばれています.これをバイナリ形式で記述された「マシンコード」に変換してこそ、コンピュータはそれを理解することができます.この操作は、コンパイラという名前のプログラムによって実行されます.
ソースコード->コンパイラ->マシンコード

砂箱コマンド

$ clang hello.c
clangという名前のコンパイラhelloでcはコンパイルコードを表す.a.outという名前のファイルを生成
$ ./a.out
./コマンドでa.outプログラムを実行します(./から.現在のフォルダを表します)
$ clang -o string string.c -lcs50
ここで-o stringはstringです文字列c.マシンコードoutを使用して格納されるコマンド-lcs 50は、-lというパラメータであり、「link」という追加の「cs 50」ファイルが含まれています.これにより、コンパイル時にcs 50ファイルに接続することができます.
複雑なプロセスではなく、次のmakeコマンドを使用して簡単なコンパイルを実行できます.
$ make string

CS 50ライブラリでのget関数

  • get_char
  • get_double
  • get_float
  • get_int
  • get_long
  • get_string
  • フォーマット指定子

  • %c : char
  • %f : float,double
  • %i : int
  • %li : long
  • %s : string
  • あふれ出る


    ボウルのサイズには限度がありますが、限度を超えると問題が発生します.

    チームタスク👩🏻‍💻


    1.在庫量と売上高の求め問題


    ぎじふごう
    1受注番号
    2既存在庫から受注数量を差し引いた在庫量
    3残存在庫が0未満の場合
    4在庫残量に応じて入力、出力してください
    5それ以外の場合
    6スイカの価格に付加税を加え、注文数量に既存の売上高を乗じて現在の売上高を加算
    7既存在庫量を残存在庫量にリセット
    8在庫残量が0より大きい場合
    9列目に戻ります
    そうでなければ
    11終了
    #include <cs50.h>
    #include <stdio.h>
    
    // 주문시 재고를 감소시켜준다.
    int order(int product, int count){
    	product = product - count;
    	return product;
    }
    
    // 판매량을 계산한다.
    int getSalesRate(int price, int count){
    	return price*count;	
    }
    
    // 부가가치세를 계산한다.
    int getTax(int amount){
    	return amount / 10;
    }
    
    // 오늘 하루 총 매출량에 대한 정보를 프린트해준다.
    void printTodayCalculate(int orderCount, int originalCount, int afterOrderCount, int amount){
        printf("---------------------------------\n");
        printf("주문 건수 : %i\n", orderCount);
        printf("기존 재고량 : %i\n", originalCount);
        printf("남은 재고량 : %i\n", afterOrderCount);
        printf("매출액(부가세 포함): %i\n", amount);
        printf("---------------------------------\n");
        
        if(afterOrderCount == 0){
            printf("********************\n");
            printf("**** sold out ! ****\n");
            printf("********************\n");
        }
    }
    
    // 남은 재고량과 주문량을 비교하여 주문 가능한지 확인한다
    bool validOrderCount(int remainStock, int orderCount){
    	if(remainStock < orderCount) return true;
    	else return false;
    }
    
    int main(void){
    	int originalStock = 5;
    	int watermelonePrice = 10000;
    	int orderCount;
    	int amount;
    	int tax;
        int totalPrice = 0;
    	int remainStock = originalStock;
    
    	while(remainStock > 0){
            orderCount = get_int("주문시킬 양을 입력해주세요 : ");
    		if(validOrderCount(remainStock, orderCount)){
    			printf("주문량이 재고보다 많습니다 . 다시 주문해주세요 :  ");
    			
    		}else{
    			remainStock = order(originalStock, orderCount);
    			amount = getSalesRate(watermelonePrice, orderCount);
    			tax = getTax(amount);
                totalPrice += amount + tax;
                printTodayCalculate(orderCount, originalStock, remainStock, totalPrice);
                originalStock = remainStock;
    		}
    	}
    	
    	return 0;
    }

    2.預金額の問題


    ぎじふごう
    1預金金額の入力
    2預金金額と預金金額に1.2を乗じた値を出力する
    3終了
    #include <cs50.h>
    #include <stdio.h>
    
    int main(void)
    {
        double myMoney = get_double("예금할 금액 : ");
        double totalMoney = myMoney * 12;
        printf("매달 %0.f원씩 1년 동안 저금할 경우 받게 되는 금액은 %0.f원 입니다.\n", myMoney, totalMoney * 1.2 );
    }
    

    3.曜日メニューの印刷に関する質問


    ぎじふごう
    月曜日を入力
    2月曜日なら
    3月曜日:清国味噌印刷
    4そうでなければ火曜日なら
    5火曜日:ビビンバ出力
    6そうでなければ、水曜日なら
    7水曜日:味噌汁
    8そうでなければ木曜日なら
    9木曜:出力カット麺
    10金曜日がそうでなければ
    11金曜日:冷麺を出力
    12そうじゃない土曜日なら
    土曜日
    14いいえ、日曜日が日曜日なら
    15日曜日:五三焼肉の輸出
    16終了
    #include <cs50.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
        string answer = get_string("요일을 입력하세요 : ");
    
        if(strcmp(answer, "월요일") == 0){
            printf("월요일 : 청국장\n");
        }
        else if(strcmp(answer, "화요일") == 0 ){
            printf("화요일 : 비빔밥\n");
        }
        else if(strcmp(answer, "수요일") == 0){
            printf("수요일 : 된장찌개\n");
        }
        else if(strcmp(answer, "목요일") == 0){
            printf("목요일 : 칼국수\n");
        }
        else if(strcmp(answer, "금요일") == 0){
            printf("금요일 : 냉면\n");
        }
        else if(strcmp(answer, "토요일") == 0){
            printf("토요일 : 소불고기\n");
        }
        else{
            printf("일요일 : 오삼불고기\n");
        }
    }

    レビュー🏻


    私たちのグループはそれぞれのコードをアップロードすると、隊員たちがコメントするように行います.私のコードに対するコメントは「関数を使用して可読性を確保する」です.実際,単純なコードを記述する際には,必ず関数を使用するかどうか疑問視されるが,関数を使用するチームメンバーのコードを見ると,なぜ関数を使用するのか一目で分かる.関数や注釈処理を使用するチームメンバーのコードは確かに簡潔で分かりやすい.私のコードは私一人だけではないので、チームメンバーに理解してもらうために、関数の使用を生活化して、可読性と効率を高める練習をします.