Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
C言語よくある誤り
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
自然言語処理研究室
April 11, 2013
Programming
380
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
420
データサイエンス13_解析.pdf
jnlp
0
550
データサイエンス12_分類.pdf
jnlp
0
380
データサイエンス11_前処理.pdf
jnlp
0
510
Recurrent neural network based language model
jnlp
0
190
自然言語処理研究室 研究概要(2012年)
jnlp
0
170
自然言語処理研究室 研究概要(2013年)
jnlp
0
130
自然言語処理研究室 研究概要(2014年)
jnlp
0
160
自然言語処理研究室 研究概要(2015年)
jnlp
0
240
Other Decks in Programming
See All in Programming
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
230
What We Talk About When We Talk About XP
m_seki
2
660
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
160
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
130
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
7.8k
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
470
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
380
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
4
3.1k
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
150
Family mrubyの進捗
kishima
1
130
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
250
Jetpack Compose メカニズム
skydoves
0
450
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
The Curse of the Amulet
leimatthew05
3
15k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
550
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
600
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
340
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Crafting Experiences
bethany
1
350
Building Flexible Design Systems
yeseniaperezcruz
330
41k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Writing Fast Ruby
sferik
630
63k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Making Projects Easy
brettharned
120
6.8k
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日に作成しました。