21.1.14


#1.コース:コンピュータ科学の基礎(1-3課)
#2.授業内容:全員向けコンピュータ科学(CS 502019)
  • 計算事故
  • バイナリ:再起動します.コンピュータ言語.
    バイナリを1桁で表す単位をビット、8バイト(8ビット)と表す.
  • 情報の表示(コンピュータ処理文字、写真、ビデオ等)
  • .
    文字:ASCIIコードを使用して文字に数字+Unicode(記号など)を付ける

    (小文字が異なるAskyコードリンク)
    色:RGB&その程度の数値の組み合わせ.(画素連続)
    画像/ビデオ:複数の画像の連続.(バイナリとRGB連続)
    音楽:音符の連続を数字で表す.
  • アルゴリズム
    ある事柄を実行する段階的な方法.(ステップ1、電話帳の検索に等しい);段階的に効果的に問題を解決する.規則の順序付け.(精度と効率に基づくアルゴリズム評価)
  • 疑似コード(C、python...)
    関数#カンスウ#
    if/else:条件文
    答えは真実/偽:Boolean
    ループ
  • スクラッチベース/深化
    じっけんスクラッチ
  • コードの原理、コードの効率(減少、抽象)
  • C言語ベース(CS 50 Sandboxより)
  • "hello, world"
  • #include <stdio.h>
    
    int main(void){
        printf("hello wolrd!");
    }
    一重引用符
    ソースコードをマシンコードと認識することをコンパイラと呼ぶ.(ソースコード:c,python...,マシンコード:00001...)
    ターミナルで
    clang hello.c(a.out 생성)
    ./a.out(실행)
    私に改行させたいなら?
    #include <stdio.h>
    
    int main(void){
        printf("hello wolrd!\n");
    }
    n個別に記入する必要があります(再コンパイル後...)
    ファイナルターミナル
    $ clang hello.c
    $ ./a.out
    hello wolrd!
    a.outを除いて、他のものを試してみます.
    $ clang -o hello hello.c
    $ ./hello
    hello wolrd!
    それ以外にls,rmなどは端末と同じである.(ファイルをチェック、クリア...)
  • 文字列の処理:変数を事前に宣言する必要があります.
  • #include <cs50.h>
    #include <stdio.h>
    
    int main(void){
    string animal = get_string("what is your favorite animal?\n");
    printf("my favorite animal is, %s\n", animal);
    }
    #後ろにあるのはライブラリです.(get....python importなど、いくつかの機能を可能にします.)
    %~:正規表現として使用します.
    これからはあまり複雑なことはありません.
    $ clang -o hello hello.c
    $ ./hello
    に代わる
    make ~(파일명)
    ./~
    결과 나오면 거기에 animal 값 입력
    what is your favorite animal?
    cat
    my favorite animal is, cat
    入力すると、前にしたことはしなくてもいいです.
    まだあります.ファイルの名前を付けるときにコンパイラを自動的に接続する
  • 条件文とループ
    条件文はJavaScriptまたはPythonに似ています
    for,whileも
  • に似ている
    int i = 0;
    while(i < 50)
    {
        printf("hello, world\n");
        i += 1;
    }
    
    for (int i = 0 ; i < 10 ; i += 1) # ; 사이사이에 다 넣기
    {
        printf("hello, world\n");
    }
    No rule to make target
    間違えたらclangで解けます
  • データ型(ブール、char、double、float、int、long、string...)
  • 基本例
    #include <cs50.h>
    #include<stdio.h>
    
    int main(void){
    int age = get_int("what's your age\n");
    int days = age * 365;
    printf("You are at least %i days old.\n", days);
    }
    
    what's your age
    50
    You are at least 18250 days old.
    コードの可読性を考える(int dayを減らすことができると考えられる)
    小数点ですね.
    #include <cs50.h>
    #include<stdio.h>
    
    int main(void){
        float price = get_float("What's the price?\n");
        printf("Your total is %f.\n", price * 1.0625);
    }
    
    What's the price?
    100
    Your total is 106.250000.
    ここで2 fに変更すると2桁しか表示されません(Python文字列を使用した正規表現を考慮)
    if文でシールドを記述する
    #include <cs50.h>
    #include <stdio.h>
    
    int main(void){
        int n = get_int("n: ");
    
        if (n % 2 == 0){
            printf("even\n");
        }
        else{
            printf("odd\n");
        }
    
    }
    elseに特別な条件をつけないのもPythonと同じです.
    コメントは//に書けばいいです.
    or|||を使用できます.&および
  • ユーザ定義関数/ネスト反復文
  • #include <cs50.h>
    #include <stdio.h>
    
    int main(void){
    
        for (int i = 0; i < 3 ; i++){
            printf("cough\n");
        }
    
    }
    関数を加えるとこうなります.
    void cough(void){
            printf("cough\n");
    }
    
    int main(void)
    {
        for (int i = 0; i < 3 ; i++)
        {
        cough();
        }
    }
    作成した関数は、咳(void位置)条件を次のホームページに印刷します.結果は上の複文と同じですが、それぞれのキャラクターに集中できます.
    コードが長くなると、関数の条件をさらに明確にするための措置
    #include <cs50.h>
    #include <stdio.h>
    
    void cough(void); //위로 복사해서 올린다.
    
    int main(void)
    {
        for (int i = 0; i < 3 ; i++)
        {
        cough();
        }
    }
    void cough(void){
            printf("cough\n");
    }
    メインの結果値に基づいて値が指定されている場合(main値で操作するために必要な出力回数;咳関数をパラメータとしてmain関数をパラメータとして操作するのと同様).
    
    #include <stdio.h>
    
    void cough(int n);
    
    int main(void)
    {    cough(3);
    }
    void cough(int n){
        for (int i = 0; i < n ; i++){
            printf("cough\n");
        }
    }
    負の値の場合、値が出ないdo-whileの例が返されます.
    #include<cs50.h>
    #include <stdio.h>
    
    int get_positive_int(void);
    
    int main(void){
        int i = get_positive_int();
        printf("%i\n", i);
    }
    
    int get_positive_int(void){
        int n;
        do
        {
            n = get_int("Positive Integer: ");
            
        }
        while(n < 1);
        return n;
    }
    スーパーマリオゲームを使ったリピートサイクル:Python星を描く原理に似ています.
  • ハードウェアの限界:コンピュータができることは限られています.(例えば、レム容量の制限)これをオーバーフローと呼ぶ.
  • #include <cs50.h>
    #include<stdio.h>
    
    int main(void)
    {
        float x = get_float("x:");
        float y = get_float("y:");
        printf("x/y = %.50f\n", x / y);
    }
    
    x:0.34
    y:0.56
    x/y = 0.60714286565780639648437500000000000000000000000000
    無限の数字を100%正確に計算して記憶することはできないので、1/10まで正確にしたいと思います.(ハードウェア自体の制限)
    無限反復文もそうです.途中で突然エラーが発生しました
  • アレイ

  • コンパイル(このプロシージャを通過したときにのみうなずく)
    前処理(#include)->完了(複数のコマンドにコンパイル)->アセンブリ(0101010101010...)->リンク(成果物)

  • デバッグ:エラーの解決方法(エラーが発生した場合、help 50を使用してエラー検索できます)

  • コード設計:check 50(コードテスト)、style 50(コードの審美状態検査)

  • シナリオ1:コンピュータが情報を格納する方法
  • #include <stdio.h>
    
    int main(void){
        char c1 = 'H';
        char c2 = 'I';
        char c3 = '!';
        printf("%c %c %c\n", c1, c2, c3);
    }
    H I !
    
    만일 정수로 하려면?
    
    #include <stdio.h>
    
    int main(void){
        char c1 = 'H';
        char c2 = 'I';
        char c3 = '!';
        printf("%i %i %i\n", (int)c1, (int)c2, (int)c3);
    }
    72 73 33 // by 아스키코드
    
    各値(c 1,c 2,c 3)は、1つの格の意味を格納する.(実際にはバイナリですが、Askyコードに従って出力されます.)
    大きさによってリムで数字を整理しているのも見たので、実際にリストを作ることにしました.
    #include <stdio.h>
    #include <cs50.h>
    
    int main(void){
        int scores[3]; // 리스트와 인덱스 활용
        scores[0] = 72;
        scores[1] = 73;
        scores[2] = 33;
    
        printf("Average : %i\n", (scores[0]+scores[1]+scores[2]) / 3);
    
    }
    59
  • アレイ2
  • グローバル変数の表示を容易にする
    #include <stdio.h>
    #include <cs50.h>
    
    const int N = 3; //전역변수
    
    int main(void){
    
        int scores[N];
        scores[0] = 72;
        scores[1] = 73;
        scores[2] = 33;
    
        printf("Average : %i\n", (scores[0]+scores[1]+scores[2]) / N);
    
    }
    より効率的なコードの置き換え
    #include <stdio.h>
    #include <cs50.h>
    
    float average(int length, int array[]);
    int main(void){
    
        int n = get_int("Number of scores: ");
        int scores[n];
        for (int i = 0; i<n; i++){
            scores[i] = get_int("Score %i:", i + 1);
        }
        printf("Average : %f\n", average(n, scores));
    
    }
    
    float average(int length, int array[]){
        int sum = 0;
        for (int i = 0; i<length; i++){
            sum += array[i];
        }
        return (float) sum / (float) length;
    }
    
    関数を作成して整数と名前を付けて計算します(この整数は認識され計算されるので、この値は整数になり、小数点しか加算されないのでfloatを貼り付けます)
  • 文字列と配列
    文字列(string)はcharの配列(1文字1文字の配列であるため、シーケンス型の)
  • である.
    文字列の終了情報をnull,0と呼び,終了文字とも呼ぶ.(長さの大きさ)
    HI! -> 3+1バイト(終端文字を含む)
    1 D配列+2 D配列(各アルファベットをインデックス;文字列出力原理を表示);Pythonからfori in~~を引いて1文字列をインデックスとして整理すればよい.
    #include <stdio.h>
    #include <cs50.h>
    
    int main(void){
        string names[4];
        names[0] = "EMMA";
        names[1] = "RORY";
        names[2] = "BRIAN";
        names[3] = "DAVID";
    
        printf("%s\n", names[0]);
        printf("%c%c%c%c\n", names[0][0], names[0][1], names[0][2], names[0][3]);
    }
    EMMA
    EMMA
  • 文字列(文字列内で文字を検索/他の文字に置換)
  • を使用する.
    文字列1
    #include <cs50.h>
    #include <stdio.h>
    
    int main(void){
        string s = get_string("Input: ");
        printf("Output: ");
        for (int i = 0; s[i] != '\0' ; i++){
            printf("%c", s[i]);
        }
            printf("\n");
    }
    Input: EMMA
    Output: EMMA
    儀式.
    #include <cs50.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(void){
        string s = get_string("Input: ");
        printf("Output: ");
        for (int i = 0; i < strlen(s) ; i++){
            printf("%c", s[i]);
        }
            printf("\n");
    }
    
    改善の余地:
        for (int i = 0,  n = strlen(s); i < n ; i++)
    他の文字列で文字を変更:macbookの更新後にエラーが発生しました.まずハーモニーを知りましょう
    #include <cs50.h>
    #include <ctype.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
        string s = get_string("Before: ");
        printf("After:  ");
        for (int i = 0, n = strlen(s); i < n; i++)
        {
            printf("%c", toupper(s[i]));
        }
        printf("\n");
    }
    
    これは何を入力するのか、アスキーコードで計算して大文字に変更するのか、よくわかりません.覚えておきましょう(ここはPass)
  • コマンドラインパラメータ:int main(void)の説明
    コマンドラインパラメータ(../argv david;パラメータの受信と出力など)が受信された場合、
  • となる.
    # include <cs50.h>
    # include <stdio.h>
    
    int main(int argc, string argv[]){
    
        if (argc == 2){
            printf("hello, %s\n", argv[1]);
        } else {
            printf("hello, world\n");
        }
    }
    $ ./argv David
    hello, David
    main関数のデフォルトは戻り値です.(0,問題なし)
    c言語関数の例では、他の関数がそれ自体を最初の戻り値(self)としているように見える.
    # include <cs50.h>
    # include <stdio.h>
    
    int main(int argc, string argv[]){
    
        if (argc !=2){
            printf("missing~\n");
            return 1;
        }
            printf("hello, %s\n", argv[0]);
            return 0;
    }
    
    $ ./exit
    missing~
    $ ./exit david
    hello, ./exit
    
    直接出力すると、デフォルトの戻り値を表し、入力した戻り値は最初の入力値(david)であり、0を返します./終了します.他の場所で最初の因子は自分,selfの意味に関連する概念である.
    問題はすべて解決して、電気が切れました...ほほほ、まず復習するなら、明日自分でもう一度和弦を打ってください.すべてのc言語が理解できなくても、まず概念を決めてから行きましょう.