Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
C言語よくある誤り
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
自然言語処理研究室
April 11, 2013
Programming
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
C言語よくある誤り
自然言語処理研究室
April 11, 2013
More Decks by 自然言語処理研究室
See All by 自然言語処理研究室
データサイエンス14_システム.pdf
jnlp
0
410
データサイエンス13_解析.pdf
jnlp
0
530
データサイエンス12_分類.pdf
jnlp
0
370
データサイエンス11_前処理.pdf
jnlp
0
500
Recurrent neural network based language model
jnlp
0
170
自然言語処理研究室 研究概要(2012年)
jnlp
0
160
自然言語処理研究室 研究概要(2013年)
jnlp
0
120
自然言語処理研究室 研究概要(2014年)
jnlp
0
150
自然言語処理研究室 研究概要(2015年)
jnlp
0
230
Other Decks in Programming
See All in Programming
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
270
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
260
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
170
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.1k
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.1k
Lessons from Spec-Driven Development
simas
PRO
0
210
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
190
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
200
さぁV100、メモリをお食べ・・・
nilpe
0
140
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.1k
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.8k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
590
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Into the Great Unknown - MozCon
thekraken
41
2.6k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Being A Developer After 40
akosma
91
590k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
290
Believing is Seeing
oripsolob
1
150
Practical Orchestrator
shlominoach
191
11k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Transcript
Cプログラミング よくある誤り 山本 和英 長岡技術科学大学 電気系
このスライドは... • C言語プログラミング初心者を対象に作成して います。 • C言語でよく見かける誤り(計14種類)をレベル 別に例示し、解説しています。 – 解答を見る前に、何が誤りかを自分で考えてみて ください。
• このスライドに書かれている誤りを一通り覚える ことでかなりの初歩的なミスを回避できると思 います。
誤りには4段階ある • レベル1: コンパイルエラー – コンパイルできないのですぐに気付く • レベル2: 実行時エラー – 実行中にエラーが出てプログラムが停止 •
レベル3: エラー表示されない – 正しくない出力が出るだけなので気付きにくい • レベル4: アルゴリズムの誤り – 最も気付きにくい
レベル1: コンパイルエラー (6問)
問1-1 if (a < b) brake; どこかに間違いがあるので (以下同様)、次のスライドを 見る前に、何が誤りなのかを 考えてみてください。
解1-1: スペルミス if (a < b) break; break; や continue;
など、つ づりを間違う。
問1-2 int 0, p, q;
解1-2: 見間違い int o, p, q; 0(ゼロ)と O(オー)、1(いち) と l(エル)などを間違う。
表示しているフォントに よってはほとんど見分け がつかない場合もある。 なお、O(オー)やl(エル)と いう変数が宣言されて いるとコンパイルエラー は出ないので、難易度が レベル2にアップする。
問1-3 printf ("Hello!!")
解1-3: 記号忘れ printf ("Hello!!"); 閉じ括弧"}"やセミコロン ";"を忘れる。 左の例では文末のセミコ ロン ; を忘れている。
問1-4 for (i=1, i<10, i++) printf ("%d", i):
解1-4: 記号間違い for (i=1; i<10; i++) printf ("%d", I); コンマ","
コロン":" セミコ ロン";"の使い方を間違え る。左の例では、 • for文の , →; • printf の最後 :→; の2つ(3ヶ所)が間違い。
問1-5 i = i + 1;
解1-5: 全角スペース i = i + 1; コメントやprintf ("...")以外 に全角スペース(「 」)が
(うっかり)入力されてい る。これは(当然ながら)見 た目では全く分からない のでエラーメッセージで 判断するしかない。 前のスライドでも文中に 全角スペースが入ってい る。
問1-6 void main(void){ int p=0; for (i=0; i<10; i++) printf
("%d", p); }
解1-6: 変数の未宣言 void main(void){ int i, p=0; for (i=0; i<10;
i++) printf ("%d", p); } 使っている変数を宣言し ていない。 左の例では i を宣言して いない。
レベル2: 実行時エラー (2問)
問2-1 int s = 0; int t = 3 /
s;
解2-1: ゼロで割り算している。 int s = 0; int t = 3
/ s; 自分が予期しない理由で ある変数が0になってし まい、その変数で除算を してしまう時がある。 この本当の原因は割り算 している部分ではなく、他 の場所で変数が正しく代 入されないことなので、 割り算部分に問題はな い。
問2-2 int i, a[10]; for (i=0; i<=10; i++){ scanf ("%d",
&a[i]); }
解2-2: 配列の範囲外使用 int i, a[10]; for (i=0; i<=10; i++){ scanf
("%d", &a[i]); } int a[10] の 宣 言 は a[0] ~ a[9]を確保するのでa[10] は存在しない。 このエラーは一応レベル 2に入れたが、実行時に エラーが出ないこともあ る(つまりレベル3の場合 がある)ので注意。
レベル3: エラー表示されない (間違った結果になる) (6問)
問3-1 int a=3, b=5; printf ("%f\n", a / b);
解3-1: 数値型の誤り int a=3, b=5; printf ("%f\n", (double) a /
b); 特に割り算において、小数点 以下も必要なのに整数型を 整数型で割ってしまう。 左の例の場合、%fのように実 数で表示させようとしても、 表示させる以前の a / b を計 算した瞬間に 0 になる(割る 数と割られる数の両方が整 数だと答えは必ず整数で計 算しようとする)。
問3-2 double r = 0.0; while (r != 1.0) {
... r += 0.1; }
解3-2: 実数による条件分岐 実数には若干の誤差が 出るので、条件判断(if, for, while) に実数を使う時は 注意しないといけない。 左の例では、r がぴったり
1 にならない可能性が高 いので、正しく動作しない 可能性が高い。 double r = 0.0; while (r != 1.0) { ... r += 0.1; }
問3-3 int a; a = a + 3;
解3-3: 初期化を忘れる 変数を宣言すると初期 値は0だと思い込んでい ろんな処理をしてしまう。 とても大きくおかしな値 が出力される時はだい たいこれが原因である。 コンパイル時にエラーが 出ない。
int a = 0; a = a + 3;
問3-4 if (a = b) break;
解3-4: "=" と "==" を間違える 初心者にとてもよくある 誤り。左の例の場合、コン パイルでエラーは出ない ことに注意。 if
(a == b) break;
問3-5 for (i = 1; i < 10; i++); printf
("表示\n");
解3-5: ';'のつけすぎ エラーも出ないので初心 者にはかなり気付きにく い。 C言語の「文末」には ; が 必要と覚えていると、左 の例のように
for 文にま でつけてしまう。 for (i = 1; i < 10; i++) printf ("表示\n");
問3-6 // aが 0 以外なら"表示2"を表示させたい if (a == 0) if
(b == 0) printf ("表示1"); else printf ("表示2"); }
解3-6: if と else の対応 前スライドのプログラムは問題な さそうだが、「表示2」が表示され るのはaが0でbが0以外の時( ) ※
で あり、決してaが0以外の時ではな い。つまり else は一番近い if に対 する else である。また、字下げ(イ ンデント)にだまされてもいけな い。(コンパイラにとって字下げは 関係ない) ※のようにしたいのであれば左の ようにすればよい。誤解を減らす ために if文には常に {...} をつける ことを推奨する。 // aが 0 以外なら"表示2"を表示させたい if (a == 0) { if (b == 0) { printf ("表示1"); } } else { printf ("表示2"); }
レベル4: アルゴリズムの誤り (0問)
アルゴリズムの誤り • そもそもプログラム以前にアルゴリズムが間 違っている場合。 – 例えば、4行4列の行列式にサラスの方法を用い る、など。 • 自分では正しいと思っているからそのアルゴリズ ムを使用しているため、間違いに最も気付きにく
い。 – 検証可能な出力をする、などの方法で確認するし かなく、場合によっては検証できない問題もあ る。
おわりに
間違いを減らすために • エラーが出ている場合は、エラーメッセージをよ く読む – 英語の場合は読むのが大変だが、それでも読ん だほうが近道だ • エラーが出ない誤りの場合は、このスライドで紹 介したような誤りをよく記憶しておく
– 出力結果が何かおかしいと感じた時に、「気付き にくいエラー」をしていないかよく考える
本スライドに関する照会先 山本 和英 長岡技術科学大学 電気系
[email protected]
このスライドは 2012年4月23日に作成しました。