C詳細注意


大学一年生の時の学習ノートを出して、共有して、にこにこしています.しかし、当時使用されていたコンパイラはTCまたはVC 6.0であり、つまり使用されていたC標準は最新のC 99標準ではなくC 90であったため、現在のコンパイル結果とは若干異なっていた.もちろん勉強は手を出すことを主とし、本の知識をそのままにしては何も学べない.この文書は、自己拡張のためにのみ使用されます.
C詳細注意(2008年2月13日整理)
1.scanf()では%lfで二重精度数、%fで浮動小数点数を表します.printf()汎用%fでは異なります.2.2 D浮動小数点数配列の入力は必ず変数を宣言し、次にこの変数に値を割り当ててから、その変数値を配列に割り当てます.次のコードを参照してください.
#include <stdio.h>
main(){
  float a[2][3], x;
  int i, j;
  for(i = 0; i < 2; i++) {
    for (j = 0; j < 3; j++) {
      scanf("%f", x);
      a[i][j] = x;
    }
  }
}
 
3.整数はコンピュータで正確に表示され、2進数で表すことができる.8進数で表す場合、1番目の数字の前に0(数字)を加えなければならない.16進数で0 xを加えなければならない.符号のない整数の末尾にはuまたはUを加えなければならない.長い整数の末尾にはlまたはLを加えなければならない.
4.auto,registerとstatic,extern内の比較:
(一)autoとregister型変数の初期化はプログラム実行中に完了する.
staticとextern型変数の初期化はコンパイル中に完了します.
(二)staticとextern型変数は定数または定数式でしか初期化できない.
autoおよびregister型変数は、定数または定数式のほかに、初期化された変数で初期化できます.
  次のようになります.
int a = 3 + 2, b = 6, c = a + 1; 
static float x = 5.6 + 7.3, y = 0.7;
 
(三)autoとregister型変数が初期化されていない場合、その値は不定である.
staticとextern型変数が初期化されていない場合、その値は0です.
5.算術演算子において、%は整形演算量に対してのみ演算を加えることができる.2つの整数の剰余を計算する場合、剰余の記号は被除数と同じである.
 次のようになります.
3%(-2) = 1;
-3 % 2 = -1; 
3 % 2 = 1;
-3 % (-2) = -1;
 
6.2 D配列が1 Dポインタにアドレスを転送するときは、配列名に*を付けることに注意してください.そうしないと、演算エラーが発生する可能性があります.
次のようになります.
 
int a[3][4] = {...}, *p;
 p = a; /* TC       ,   ,        */
 p = *a; /*    p = a[0]     */
 
7.scanf()には、指定したカラム数をスキップしたことを示す「*」の付加的な説明子が%後にあります.
例えば、scanf("%2 d%*3 d%2 d",&a,&b);12 345 67と入力すると、12はaに割り当てられ、67はbに割り当てられる.
8.printf()、scanf()を呼び出すたびに、出力入力の文字数に等しい整数値が返されます.(printf()は、すべての文字数を出力し、scanf()は割り当てられたアドレス数を返します.
例えば、n=scanf("a=%d,%d,%d",&a,&b,&c);nは3.
9.getchar()はリターンキーで入力を終了することを要求するため、2つのgetchar()が順番に現れると、最初のgetchar()は終了フラグとしてのリターンキーが2番目のgetchar()に受信される.同様に、getchar()がscanf()の後ろに現れると、scanf()が入力を終了することを要求するリターンキャラクタも受信される.
10.エスケープ文字は、特定の文字または8進数または16進数に続く整数です.[10進数にはできません]
例:以下のC言語の合法的な文字定数に属するのは___である.
A) '\97' B)"A"C)'\t' D)"\0"
Cを選択します.Aの97は正しい8進数または16進数ではありません.
11 printf()の%xと%Xは、16進数にabcdefというアルファベットが表示されると、前者は小文字、後者は大文字を表示する16進数を出力するために使用されます.
12.配列を定義する場合、TCにおける配列長は65535(2^16-1)を超えず、すなわちa[65536]を定義するとエラーとなる.
13.elseとifのペアリング関係(誤りやすい点).ifがルータペアリングの他のelseを持たない場合、elseは常に自分の前に最も近いifとペアリングされる.
例:次のような手順がある
main() {
int a = 2, b = -1, c = 2;
if (a < b)
if (b < 0) c = 0;
else c++;
printf("%d", c);
このプログラムの出力結果は___A)0 B)1 C)2 D)3(選択C)
14.switchの後の式eは文字型または整数型のみであり、カッコ内に置く必要があります.各caseでも整数定数または整数定数式しか使用できません.caseとその後の式の間にスペースを残す必要があります.caseに表示される文字定数は自動的に整数型に変換されます.
15.「%s」で制御されるscanf()およびgets()関数とprintf()およびput()関数は、文字列の入力出力時にアドレス項目を入出力項目として要求する.1次元配列に対しては、配列名がアドレス量であり、2次元配列に対しては、配列名が最初の下付きアドレス量とする.
例えば、ch[10][80]ではprintf("%s",ch[1]);出力
16.printf()関数は、文字列を出力するときに'0'文字に遭遇したときに終了します.改行機能はありません.puts()関数は'0'文字に遭遇したときに出力を終了し、'0'文字を自動的に改行文字に変換します.
例:str="Good morning"の場合printf("%s%s",str,str);出力はGood morningGood morning
puts(str);puts(str);出力は
Good morning
Good morning
17.タイプ変換では、浮動小数点型データを整数型に変換するには、以下の数種類しか変換できません.
(unsigned)int; (unsigned)long; (unsigned)long long;
例えば、float f=23456.789;short s=f;/*Error!*/
18.gets(char*)関数は、scanf()で%sでスペースを読み取ることができないのとは異なり、スペース付き文字列を読み込んで文字配列に格納できます.
19.ヘッダファイルが重複して定義されないようにする:
#ifndef __headerfileXXX__
#define __headerfileXXX__
...
ファイルの内容
...
#endif