C言語プログラミング能力認定試験3級 向けトレース教材
本教材は、試験対策を目的にしています。
ポインタ・構造体などの上位概念は使わず、3級レベルの文法だけです
1. 必須文法のおさらい(これだけ分かれば全部読める)
① 変数と代入
int a = 10;
a = a + 5; // a は 15 になる
=は代入右辺を計算して左辺に入れる
② if文(条件分岐)
if(x > 5){
y = 1;
}else{
y = 0;
}
条件が真(true)なら if 側
偽(false)なら else 側
③ for文(回数が決まっている繰り返し)
for(i=0; i<5; i++){
sum = sum + i;
}
意味:
i=0 で開始
i<5 の間くり返す
1回ごとに i++
④ 配列(センサ値・ログ保存の基本)
int data[4] = {10, 20, 30, 40};
| 添字 | 値 |
|---|---|
| data[0] | 10 |
| data[1] | 20 |
| data[2] | 30 |
| data[3] | 40 |
⑤ 論理演算子(組み込みで超重要)
if(x >= 10 && x <= 100)
&&両方 true||どちらか true
2. 実務モデル①:センサ異常値除外+平均
▶ 想定シナリオ
センサ値を配列で取得
異常値は無視
正常値だけで平均
▶ Cコード
int sensor[6] = {12, 105, 18, 0, 25, 110};
int i;
int sum = 0;
int count = 0;
for(i=0;i<6;i++){
if(sensor[i] >= 10 && sensor[i] <= 100){
sum = sum + sensor[i];
count = count + 1;
}
}
if(count > 0){
sum = sum / count;
}
▶ 処理の考え方
| 値 | 判定 | sum | count |
|---|---|---|---|
| 12 | OK | 12 | 1 |
| 105 | NG | 12 | 1 |
| 18 | OK | 30 | 2 |
| 0 | NG | 30 | 2 |
| 25 | OK | 55 | 3 |
| 110 | NG | 55 | 3 |
平均 = 55 / 3 = 18(整数除算)
3. 実務モデル②:エラー回数で強制リセット
▶ 想定シナリオ
通信結果が1=正常、0=エラー
エラーが3回続いたらリセット
▶ Cコード(約50行)
int frames[12]={1,0,1,0,0,1,0,1,0,0,0,1};
int i;
int okCount=0;
int errCount=0;
int resetCount=0;
int state=1; // 1:動作中 0:リセット要求
for(i=0;i<12;i++){
if(state==0){
state=1;
errCount=0;
okCount=0;
resetCount=resetCount+1;
}
if(frames[i]==1){
okCount=okCount+1;
}else{
errCount=errCount+1;
}
if(errCount>=3){
state=0;
}
}
▶ 実務でよくある構造
監視 → 異常検出 → カウンタ加算 → 閾値超え → 状態変更
マイコン制御はほぼこの繰り返し。
4. 試験で狙われるポイント
✔ ① 初期値
int sum = 0;
ここが0でないと全部ズレる。
✔ ② ループ条件
i < 6
<= にすると1回多く回る。
✔ ③ ifの位置
if(state==0){...}
if(frames[i]==1){...}
順番が変わると結果が変わる → 超頻出ひっかけ。
✔ ④ 整数除算
55 / 3 = 18
小数は出ない。必ず切り捨て。
5. トレース手順テンプレ(試験本番用)
変数の初期値を書く
for / while 1周ずつ表で追う
ifの条件を必ず評価
変更された変数だけ更新
ループ終了条件を確認