C言語プログラミング--1ガイドライン

9200 ワード

第一章ガイド
1.1入門
くだらないことは言わないで、hello worldは歩きます!
#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("Hello world!");
    system("pause");
    return 0;
}

#include標準ライブラリ情報を含む
main関数--プログラムエントリ
printf標準ライブラリIO関数、印刷されたライブラリ関数
システムはシステム関数を呼び出して、ウィンドウを表示しやすくて、きらめくことはありません
return関数は0を返します.
注意1:printf関数では、改行のみを表すことができ、プログラムコードの改行では代用できません.そうしないと、コンパイルエラー情報が表示されます.
printf(“hello, world
");//コンパイラからエラーメッセージが表示されます
注意2:printfは自動的に改行しません
printf(“hello, “);
printf(“world”);
printf(““);
この3つの式はprintf(「Hello world!」)に等しい.
注意3:1文字、エスケープ文字、t水平タブ、bチェックアウト、二重引用符、\バックスラッシュ
1.2変数と式
0~300ステップ20の摂氏華氏温度を印刷します.℃=(5/9)*(F-32)
コードは次のとおりです.
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int fa, ce;  //fa      ;ce       
    int lower, upper, step;  //lower  ;upper  ;step   
    
    //      
    lower = 0;
    upper = 300;
    step = 20;
    
    fa = lower;
    while(fa <= upper)
    {
             ce = 5*(fa - 32)/9;
             printf("%d\t%d
", fa, ce); fa = fa + step; } system("pause"); return 0; }

注1:/*コメント内容*/
注2:変数は宣言後に使用する必要があります.宣言は通常、関数の先頭にあり、実行可能な文の前に、タイプと変数名からなる変数のプロパティを説明するために使用されます.複数の変数を一度に宣言できます.
例えば、int a,b,c;//カンマで区切ります
注意3:intとfloatの値範囲は機械そのものに依存し、intは通常16ビット、値範囲は-215~215-1である.
(-32768~32767)は、32ビットのintタイプもあり、floatは通常32ビット、少なくとも6ビットの有効数字である
c言語で提供される基本的なデータ型は、次のとおりです.
char文字
ショートカット
int整型
longロングフォーム
フロートがた
ダブル精度浮動小数点型
注意3:整数除算操作は小数部を捨て、5/9=0;浮動小数点は5.0/9.0を捨てずに浮動小数点数を得る
注意4:printfはc言語の一部ではなく、ANSI標準ライブラリの関数です.
注意5:%dは変換説明子であり、出力のフォーマットを規定する
%3.0 f---印刷された浮動小数点数は少なくとも3文字の幅を占め、小数点と小数点を含まない
%6.1 f---印刷数は少なくとも6文字幅で、小数点以下の1文字幅
1.3 for文
for文は上記whileループを実現する
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int fa;
    for(fa = 0;fa <= 300;fa += 20)
    {
         printf("%3d\t%6.1f
",fa,(5.0/9.0)*(fa-32)); } system("pause"); return 0; }

1.4符号定数
#define名前置換テキスト
eg:#define  STEP  20
注意:置換テキストは、数値に限らず、任意の文字列で使用できます.通常、名前は大文字で、後にカンマはありません.
1.5文字入出力
標準ライブラリIO:文字ストリーム方式で処理
getchar():次の入力文字をテキストストリームから読み出し、結果値として返します.
putchar():通常はスクリーンで1文字印刷
文字:マシン内部にビットモードで格納し、charは専用の文字型データであり、intでもよい
EOF:end of fileファイル終了子、stdioに定義.hの中で、整数型の数で、いかなるcharのタイプの文字に属しないで、windowsの下で同時にcrtl+zは入力EOFに等しいです
ファイル:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int c;
    c = getchar();
    while(c != EOF)
    {
           putchar(c);
           c = getchar();
    }     
    system("pause");
    return 0;
}

最適化後:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int c;
    while((c = getchar()) != EOF)
    {
           putchar(c);
    }     
    system("pause");
    return 0;
}

while((c = getchar()) !=EOF):cに割り当てられた文字を読み込み、EOFであるかどうかを判断し、実行ループでない場合、終了ループである場合.
文字数:whileバージョン
#include <stdio.h>
#include <stdlib.h>
int main()
{
    long num;
    num = 0;
    while((getchar()) != EOF)
    {
           ++num;
    } 
    printf("%ld",num);    
    system("pause");
    return 0;
}

文字数:forバージョン
#include <stdio.h>
#include <stdlib.h>
int main()
{
    double num;
    for(num = 0;getchar() != EOF;num++ )
    {
          ;
    } 
    printf("%.0f",num);    
    system("pause");
    return 0;
}

注意:forサイクルには少なくとも1つのサイクル体が必要であるので、使用します.空の文を表す
ローの数:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int c, num;
    num = 0;
    while((c = getchar()) != EOF)
    {
        if(c == '
') num++; } printf("%d",num); system("pause"); return 0; }

'’:1文字定数、対応するASCII値
単語カウントたんごうカウント:行カウントと文字カウントの統合
#include <stdio.h>
#include <stdlib.h>
#define IN 1  /* inside a word */
#define OUT 0
int main()
{
    int c, nl, nw, nc, state;
    state = OUT;
    nl = nw = nc = 0;
    while((c = getchar()) != EOF)
    {
        nc++;
        if(c == '
') nl++; if(c == ' ' || c == '\t' || c == '
') { state = OUT; } else if(state == OUT) { state = IN; nw++; } } printf("%d %d %d",nl,nw,nc); system("pause"); return 0; }

注意:付与値と値がある場合は、右から左に結合します.
a = b = c = 0 ;a=(b=(c=0));
1.6配列
≪プログラム・ターゲット|Program Targets|oem_src≫:各数値、空白文字(スペース、タブ、改行)の統計
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int c;        //      
    int i;               //    ,
    int  ndigit[10]; //                
    int nwhite,nother;   //      
    
    nwhite = nother = 0;
    for(i = 0;i < 10;i++)
    {
           ndigit[i] = 0;
    } 
    
    while((c = getchar()) != EOF)
    {
        if(c >= '0' && c <= '9')
        {
             ndigit[c - '0']++;
        }
        else if(c == ' ' || c == '
' || c == '\t') { nwhite++; } else { nother++; } } printf("digits ="); for(i = 0;i < 10;i++) { printf("%d ",ndigit[i]); } printf("white space = %d",nwhite); printf("other = %d",nother); system("pause"); return 0; }

注意:int ndigit[10];//ndigit変数を宣言するのは10個の整数で構成された配列で、c言語配列の下には0から始まり、10個の要素はそれぞれndigit[0]、ndigit[1],.....ndigit[9];配列のすべての要素をループすることができます.
配列の下付き文字は、任意の整数式、変数、定数で指定できます.
1.7関数
標準ライブラリ関数:printfなど
カスタム関数かすたむかんすう:eg:int power(m,n)mのn乗を求める
#include<stdio.h>
#include<stdlib.h>
int power(int m,int n); //    ,    ,       
int main()
{
    printf("5 3   :%d
",power(5,3)); printf("15 2 :%d",power(15,2)); system("pause"); return 0; } int power(int m, int n) { int i; int result; result = 1; for(i = 1;i <= n;i++) { result = result * m; } return result; }

注:関数定義は、1つのソースファイルまたは複数のソースファイルに表示されます.関数のパラメータ名は、関数内部でのみ有効であり、他の関数では表示されません.
形式パラメータ:関数定義でカッコに現れる変数mとn
実際のパラメータ:関数呼び出し形式パラメータに対応する値、5と3,51と2
戻り値:power関数の計算結果はmain関数、return式に返されます.
1.8パラメータ---値呼び出し
c言語では、被変調関数は、主変調関数の変数の値を直接変更することはできず、そのプライベートな一時コピーの値しか変更できません.値呼び出し.
必要に応じて、関数はプライマリ・コール関数の変数--設定値を指定する変数のアドレス(ポインタ)を変更できます.この場合、呼び出される関数は対応するパラメータをポインタ・タイプとして宣言する必要があります.
配列パラメータの場合--配列名をパラメータとする場合、関数配列の開始要素に渡されるアドレスに等しい.この場合、配列要素を付与するのではなく、呼び出される関数では、配列要素の値を下付きなどで変更できます.
1.9文字配列
プログラムターゲット:テキスト行のセットを読み込み、最長のテキスト行を印刷します.
#include<stdio.h>
#include<stdlib.h>
#define MAXLENGTH 100
int getline(char line[],int maxline);
void copy(char to[], char from[]);
int main()
{
    int currentLength;
    int maxLengthSoFar;
    
    char line[MAXLENGTH];
    char longest[MAXLENGTH];
    
    maxLengthSoFar = 0;
    while((currentLength = getline(line,MAXLENGTH)) > 0)
    {
         if(currentLength > maxLengthSoFar)
         {
               maxLengthSoFar = currentLength;  
               copy(longest,line);      
         }
    }
    
    if(maxLengthSoFar > 0)
    {
         printf("%s",longest);             
    }
    system("pause");
    return 0;
}
int getline(char line[],int maxline)
{
    int c;
    int i;
    for(i = 0;i <= maxline && (c=getchar()) != EOF && c != '
';i++) { line[i] = c; } if(c == '
') { line[i] = c; i++; } line[i] = '\0'; return i; } void copy(char to[], char from[]) { int i; i = 0; while((to[i] = from[i]) != '\0') { i++; } }

注意:c言語の「helloo」の文字列定数は、文字配列の形で格納され、'0'フラグで終了します.printf関数のフォーマット仕様%sに対応するパラメータは、この形式の文字列でなければなりません.
1.10外部変数と役割ドメイン
関数のプライベート変数:関数内の変数、ローカル変数は関数呼び出し時にのみ存在し、関数の実行が完了して終了すると消失します.
自動変数auto値は、関数呼び出し実行中に存在し、関数に入るたびに明示的に付与されます.
関数の外部に定義された変数:すべての関数で変数名でこのタイプの変数、外部変数、グローバル範囲でアクセスできるため、関数間で通信できます.
外部変数:定義はすべての関数の外で、一度しか定義できません.定義後に記憶ユニットを割り当てます.外部変数にアクセスする必要がある関数では、対応する外部変数を宣言する必要があります.extern文で明示的に宣言できます.外部変数の定義が関数の前に表示される場合は、extern宣言を省略できます.通常、すべての外部変数の定義はソースファイルの先頭に配置されます.プログラムに複数のソースファイル、変数のfile 1で定義されている場合、file 2でextern宣言を使用して変数とその定義との関係を確立します.
通常:変数と関数のextern宣言をヘッダファイルに置く.h;ソースファイルの先頭にincludeが入ります.
定義:変数を作成するか、ストレージ・ユニットを割り当てます.
宣言:変数の性質を説明し、記憶ユニットを割り当てない.
外部変数に依存しすぎると、一定のリスクが発生し、プログラム内のデータ関係が曖昧になります.外部変数の値が意外に変更されたり、不用意に変更されたりする可能性がありますが、プログラムの変更は非常に困難になります.汎用性を失った.