C言語入門
~ 読みやすいコードを書く ~
本日の目標
• 読みやすい(可読性の高い)コードを書け
るようになる
• 1ヶ月後に見返しても、すぐ理解できるよ
うなコードを書けるようになる
(「1ヶ月前に書いたコードは他人が書いたコード」といわれる)
1
読みやすいコードは
永遠のテーマ
なぜ可読性の高いコードを
書く必要があるのか?
コードが汚いと…
• 理解するのに時間がかかる
• バグが紛れ込みやすい
• 修正・改修が困難になる
• 「一緒に仕事したくない」と思われる
4
汚いコードとは?
• 記述が統一されていない
• 命名(変数名、関数名など)が不適切
• コメントで補足しないと意味が伝わらない
• ひとつの関数の処理が長い
• 冗長的な処理が多い
などなど・・・
5
可読性の高いコードとは?
可読性の高いコードとは?
• プログラマのワーキングメモリを浪費させない
• インデント・スペース・改行が適切に使われてお
り、構造的にわかりやすい
• 記述が統一されており、処理を予測できる
• 変数名・関数名などに意味を持たせている
• 理解を阻むノイズ(冗長)がない(短い)
7
インデントをつかう 8
#include <stdio.h>
int main(void){
int a;
printf("西暦を入力してください。¥n");
printf("西暦 :");
scanf(“%d”,&a);
// 入力値を判定して「うるう年」、「平年」を表示する
if(0==a%400){
puts ("うるう年です。");
}else if(a%100==0){
printf("平年です。¥n");
}else if(0==a%4){
puts(“うるう年です。");
}else{
printf("平年です。¥n");
}
return 0;
}
#include <stdio.h>
int main(void){
int a;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”,&a);
// 入力値を判定して「うるう年」、「平年」を表示する
if(0==a%400){
puts(“うるう年です。");
}else if(a%100==0){
printf("平年です。¥n");
}else if(0==a%4){
puts(“うるう年です。”);
}else{
printf("平年です。¥n");
}
return 0;
}
インデントがないコード インデントをつかったコード
中括弧 {} がでてきたら
インデントをつける
スペースをつかう 9
#include <stdio.h>
int main(void){
int a;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”,&a);
// 入力値を判定して「うるう年」、「平年」を表示する
if(0==a%400){
puts("うるう年です。");
}else if(a%100==0){
printf("平年です。¥n");
}else if(0==a%4){
puts(“うるう年です。”);
}else{
printf("平年です。¥n");
}
return 0;
}
#include <stdio.h>
int main(void){
int a;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”, &a);
// 入力値を判定して「うるう年」、「平年」を表示する
if (0 == a % 400) {
puts("うるう年です。");
} else if (a % 100 == 0) {
printf("平年です。¥n");
} else if (0 == a % 4) {
puts(“うるう年です。”);
} else {
printf("平年です。¥n");
}
return 0;
}
スペースがないコード スペースをつかったコード
キーワードや式などの間に
スペースをいれる
※関数名と()の間にはスペース
を入れない
改行をつかう 10
#include <stdio.h>
int main(void){
int a;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”, &a);
// 入力値を判定して「うるう年」、「平年」を表示する
if (0 == a % 400) {
puts("うるう年です。");
} else if (a % 100 == 0) {
printf("平年です。¥n");
} else if (0 == a % 4) {
puts(“うるう年です。”);
} else {
printf("平年です。¥n");
}
return 0;
}
#include <stdio.h>
int main(void){
int a;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”, &a);
// 入力値を判定して「うるう年」、「平年」を表示する
if (0 == a % 400) {
puts(“うるう年です。”);
} else if (a % 100 == 0) {
printf("平年です。¥n");
} else if (0 == a % 4) {
puts(“うるう年です。”);
} else {
printf("平年です。¥n");
}
return 0;
}
改行がないコード 改行をつかったコード
処理のグループごとに改行で区切る
※ このコードを例にとると
1. 変数の宣言
2. 数値の入力
3. 判定処理
記述を統一する 11
#include <stdio.h>
int main(void){
int a;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”, &a);
// 入力値を判定して「うるう年」、「平年」を表示する
if (0 == a % 400) {
puts(“うるう年です。”);
} else if (a % 100 == 0) {
printf("平年です。¥n");
} else if (0 == a % 4) {
puts(“うるう年です。”);
} else {
printf("平年です。¥n");
}
return 0;
}
#include <stdio.h>
int main(void){
int a;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”, &a);
// 入力値を判定して「うるう年」、「平年」を表示する
if (a % 400 == 0) {
printf("うるう年です。¥n");
} else if (a % 100 == 0) {
printf("平年です。¥n");
} else if (a % 4 == 0) {
printf(“うるう年です。¥n”);
} else {
printf("平年です。¥n");
}
return 0;
}
統一されていないコード 統一されているコード
if文の条件は、
式を伴なう比較は、左辺に式を書く
不等号なら「左辺 < 右辺」
などなど
適切な変数名をつける 12
#include <stdio.h>
int main(void){
int a;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”, &a);
// 入力値を判定して「うるう年」、「平年」を表示する
if (a % 400 == 0) {
printf("うるう年です。¥n");
} else if (a % 100 == 0) {
printf("平年です。¥n");
} else if (a % 4 == 0) {
printf(“うるう年です。¥n”);
} else {
printf("平年です。¥n");
}
return 0;
}
#include <stdio.h>
int main(void){
int year;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”, &year);
// 入力値を判定して「うるう年」、「平年」を表示する
if (year % 400 == 0) {
printf("うるう年です。¥n");
} else if (year % 100 == 0) {
printf("平年です。¥n");
} else if (year % 4 == 0) {
printf(“うるう年です。¥n”);
} else {
printf("平年です。¥n");
}
return 0;
}
意味のない変数名のコード 意味のある変数名のコード
yearなら変数に「年(西暦)」が
入っていることがわかる
コメントを使わず伝える 13
#include <stdio.h>
int main(void){
int year;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”, &year);
// 入力値を判定して「うるう年」、「平年」を表示する
if (year % 400 == 0) {
printf("うるう年です。¥n");
} else if (year % 100 == 0) {
printf("平年です。¥n");
} else if (year % 4 == 0) {
printf(“うるう年です。¥n”);
} else {
printf("平年です。¥n");
}
return 0;
}
#include <stdio.h>
int isLeapYear(int year) {
if (year % 400 == 0) {
return 1;
} else if (year % 100 == 0) {
return 0;
} else if (year % 4 == 0) {
return 1;
} else {
return 0;
}
}
int main(void){
int year;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”, &year);
if (isLeapYear(year)) {
printf("うるう年です。¥n");
} else {
printf("平年です。¥n");
}
return 0;
}
コメントがあるコード コメントを使わず伝えるコード
main処理に注目すると、
1. if(isLeapYear)だけでうるう年の
判定だとわかる
2. うるう年の判定条件を考えなくてよい
冗長的な処理を削除する 14
#include <stdio.h>
int isLeapYear(int year) {
if (year % 400 == 0) {
return 1;
} else if (year % 100 == 0) {
return 0;
} else if (year % 4 == 0) {
return 1;
} else {
return 0;
}
}
int main(void){
int year;
printf(“西暦を入力してください。¥n”);
printf("西暦 :");
scanf(“%d”, &year);
if (isLeapYear(year)) {
printf("うるう年です。¥n");
} else {
printf("平年です。¥n");
}
return 0;
}
#include <stdio.h>
int isLeapYear(int year) {
if (year % 400 == 0
|| (year % 4 == 0 && year % 100 != 0)) {
return 1;
} else {
return 0;
}
}
int main(void){
int year;
printf("西暦を入力してください。¥n");
printf("西暦 :");
scanf("%d", &year);
if (isLeapYear(year)) {
printf("うるう年です。¥n");
} else {
printf("平年です。¥n");
}
return 0;
}
冗長的なコード 冗長を排除したコード
isLeapYear のreturnが
シンプルになる
※ 冗長させたほうが分かりやすい
場合は、そのままにしておく
修正前後のコードの比較 15
#include <stdio.h>
int main(void){
int a;
printf("西暦を入力してください。¥n");
printf("西暦 :");
scanf(“%d”,&a);
// 入力値を判定して「うるう年」、「平年」を表示する
if(0==a%400){
puts ("うるう年です。");
}else if(a%100==0){
printf("平年です。¥n");
}else if(0==a%4){
puts(“うるう年です。");
}else{
printf("平年です。¥n");
}
return 0;
}
#include <stdio.h>
int isLeapYear(int year) {
if (year % 400 == 0
|| (year % 4 == 0 && year % 100 != 0)) {
return 1;
} else {
return 0;
}
}
int main(void){
int year;
printf("西暦を入力してください。¥n");
printf("西暦 :");
scanf("%d", &year);
if (isLeapYear(year)) {
printf("うるう年です。¥n");
} else {
printf("平年です。¥n");
}
return 0;
}
修正前のコード 修正後のコード
これが正解とは限らない
「読みやすさ」を意識して
プログラミングしてください

More Related Content

PDF
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
PPTX
11_C言語入門 - 繰り返し処理について
PPTX
10_C言語入門 - 条件分岐について(論理演算子と条件演算子)
PPTX
1-1_C言語入門 - C言語について
PPTX
9_C言語入門 - 条件分岐について(switch case)
PPTX
1-2_C言語入門 - プログラマに必要な能力
PPTX
4_C言語入門 - n進数と基数変換について
PPTX
3_C言語入門 - C言語の基本
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
11_C言語入門 - 繰り返し処理について
10_C言語入門 - 条件分岐について(論理演算子と条件演算子)
1-1_C言語入門 - C言語について
9_C言語入門 - 条件分岐について(switch case)
1-2_C言語入門 - プログラマに必要な能力
4_C言語入門 - n進数と基数変換について
3_C言語入門 - C言語の基本

Viewers also liked (20)

PPTX
8_C言語入門 - 条件分岐について(if-else if-else)
PPTX
7_C言語入門 - 型変換について
PPTX
5_C言語入門 - 変数について
PPTX
6_C言語入門 - 式と演算子について
PPTX
2_C言語入門 - VisualStudioについて
PDF
やさしく知りたいC言語
PPT
コードゴルフのススメ(C言語)
PPTX
C言語超入門
PDF
C言語講習会1
PPTX
情報システム系
PDF
オペレーティングシステム 第2回-公開用
PDF
第三回ネットワークチーム講座資料
PDF
[中1英語] 01_英語の勉強の仕方
PPTX
Scis2017 2007-01-27-02
PDF
[C13] フラッシュドライブで挑むOracle超高速化と信頼性の両立 by Masashi Fukui
PDF
情報技術の基本と仮想化について
PDF
情報セキュリティと標準化I 第1回-公開用
PPTX
基本情報技術者試験 勉強会
PPTX
講演資料 201606 web公開版
PDF
オペレーティングシステム 第1回-公開用
8_C言語入門 - 条件分岐について(if-else if-else)
7_C言語入門 - 型変換について
5_C言語入門 - 変数について
6_C言語入門 - 式と演算子について
2_C言語入門 - VisualStudioについて
やさしく知りたいC言語
コードゴルフのススメ(C言語)
C言語超入門
C言語講習会1
情報システム系
オペレーティングシステム 第2回-公開用
第三回ネットワークチーム講座資料
[中1英語] 01_英語の勉強の仕方
Scis2017 2007-01-27-02
[C13] フラッシュドライブで挑むOracle超高速化と信頼性の両立 by Masashi Fukui
情報技術の基本と仮想化について
情報セキュリティと標準化I 第1回-公開用
基本情報技術者試験 勉強会
講演資料 201606 web公開版
オペレーティングシステム 第1回-公開用
Ad

Similar to 12_C言語入門 - 読みやすいソースコードを書く (20)

PDF
プログラマ講習第2回
PPTX
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
PPTX
C言語 学習教材
PDF
講座C入門
PDF
プログラマ講習第3回
PDF
X hago2 shortcoding 20110827
PDF
#5:プログラミングの基本
PPTX
C言語 学習教材
PDF
C-HelperでC言語を効率的に学習しよう
PDF
プログラミング作法
PPTX
競技プログラミングのためのC++入門
PDF
基礎からC言語 part1
PDF
C言語の宣言読み方講座
PDF
Who enjoy a coding standard?
PDF
C言語講習会2
PDF
[xDNCL] 配布資料
PDF
Who enjoy a coding standard? ver. 0.30
PDF
Cプログラマのためのカッコつけないプログラミングの勧め
プログラマ講習第2回
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
C言語 学習教材
講座C入門
プログラマ講習第3回
X hago2 shortcoding 20110827
#5:プログラミングの基本
C言語 学習教材
C-HelperでC言語を効率的に学習しよう
プログラミング作法
競技プログラミングのためのC++入門
基礎からC言語 part1
C言語の宣言読み方講座
Who enjoy a coding standard?
C言語講習会2
[xDNCL] 配布資料
Who enjoy a coding standard? ver. 0.30
Cプログラマのためのカッコつけないプログラミングの勧め
Ad

Recently uploaded (17)

PDF
8_「世の中の流行はどのようにして生まれるのか」学校法人聖ドミニコ学園竹野はるいpptx.pdf
PDF
12_「家族とは何か」星の杜中学校小倉ももこ『家族ってなに』inspirehigh.pdf
PDF
12_星の杜中学校小倉ももこ『家族ってなに』inspirehigh発表物.pdf
PDF
10_「孤独は敵なのか?」 桜花学園高等学校堀川愛可さんinspirehigh.pdf
PDF
13_「他者と自分、対立を防ぐには?」市原中央高等学校 大野リリinspirehigh.pdf
PDF
My Inspire High Award 2024(岡田秀幸).pptx.pdf
PDF
3_「本当の『悪者』って何?」鷗友学園女子中学校_福島 雪乃さんinspirehigh.pdf
PDF
外国人が日本のテーブルマナーに驚く理由は?_公文国際学園高等部 角田 恵梨佳さん
PDF
11_「なぜ議会への関心が低いのか?」長野県長野西高等学校 片桐 菜々美さん.pdf
PDF
6_「老いることは不幸なこと?」植草学園大学附属高等学校森 珠貴さんinspirehigh.pdf
PPTX
PPT KANJI IRODORI SHOKYUU 1 BAB 9 (FURIGANA)
PDF
9_前田音葉さん:「Yakushima Islandってなんか変じゃない?」.pdf
PDF
14_「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」公文国際学園高等部古澤琴子.pdf
PDF
7_「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」明治大学付属中野八王子中学校宮本ゆりかさん.pdf
PDF
共同売店から考える沖縄の新しい流通のしくみ2025琉球大学流通原論講義資料.pdf
PDF
「なぜ、好きなことにいつかは飽きるの?」大塚莉子 - My Inspire High Award 2024.pdf
PDF
5_「AIと仲良くなるには?」日本大学東北高等学校南梨夢乃さんinspirehigh.pdf
8_「世の中の流行はどのようにして生まれるのか」学校法人聖ドミニコ学園竹野はるいpptx.pdf
12_「家族とは何か」星の杜中学校小倉ももこ『家族ってなに』inspirehigh.pdf
12_星の杜中学校小倉ももこ『家族ってなに』inspirehigh発表物.pdf
10_「孤独は敵なのか?」 桜花学園高等学校堀川愛可さんinspirehigh.pdf
13_「他者と自分、対立を防ぐには?」市原中央高等学校 大野リリinspirehigh.pdf
My Inspire High Award 2024(岡田秀幸).pptx.pdf
3_「本当の『悪者』って何?」鷗友学園女子中学校_福島 雪乃さんinspirehigh.pdf
外国人が日本のテーブルマナーに驚く理由は?_公文国際学園高等部 角田 恵梨佳さん
11_「なぜ議会への関心が低いのか?」長野県長野西高等学校 片桐 菜々美さん.pdf
6_「老いることは不幸なこと?」植草学園大学附属高等学校森 珠貴さんinspirehigh.pdf
PPT KANJI IRODORI SHOKYUU 1 BAB 9 (FURIGANA)
9_前田音葉さん:「Yakushima Islandってなんか変じゃない?」.pdf
14_「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」公文国際学園高等部古澤琴子.pdf
7_「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」明治大学付属中野八王子中学校宮本ゆりかさん.pdf
共同売店から考える沖縄の新しい流通のしくみ2025琉球大学流通原論講義資料.pdf
「なぜ、好きなことにいつかは飽きるの?」大塚莉子 - My Inspire High Award 2024.pdf
5_「AIと仲良くなるには?」日本大学東北高等学校南梨夢乃さんinspirehigh.pdf

12_C言語入門 - 読みやすいソースコードを書く

  • 5. コードが汚いと… • 理解するのに時間がかかる • バグが紛れ込みやすい • 修正・改修が困難になる • 「一緒に仕事したくない」と思われる 4
  • 6. 汚いコードとは? • 記述が統一されていない • 命名(変数名、関数名など)が不適切 • コメントで補足しないと意味が伝わらない • ひとつの関数の処理が長い • 冗長的な処理が多い などなど・・・ 5
  • 8. 可読性の高いコードとは? • プログラマのワーキングメモリを浪費させない • インデント・スペース・改行が適切に使われてお り、構造的にわかりやすい • 記述が統一されており、処理を予測できる • 変数名・関数名などに意味を持たせている • 理解を阻むノイズ(冗長)がない(短い) 7
  • 9. インデントをつかう 8 #include <stdio.h> int main(void){ int a; printf("西暦を入力してください。¥n"); printf("西暦 :"); scanf(“%d”,&a); // 入力値を判定して「うるう年」、「平年」を表示する if(0==a%400){ puts ("うるう年です。"); }else if(a%100==0){ printf("平年です。¥n"); }else if(0==a%4){ puts(“うるう年です。"); }else{ printf("平年です。¥n"); } return 0; } #include <stdio.h> int main(void){ int a; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”,&a); // 入力値を判定して「うるう年」、「平年」を表示する if(0==a%400){ puts(“うるう年です。"); }else if(a%100==0){ printf("平年です。¥n"); }else if(0==a%4){ puts(“うるう年です。”); }else{ printf("平年です。¥n"); } return 0; } インデントがないコード インデントをつかったコード 中括弧 {} がでてきたら インデントをつける
  • 10. スペースをつかう 9 #include <stdio.h> int main(void){ int a; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”,&a); // 入力値を判定して「うるう年」、「平年」を表示する if(0==a%400){ puts("うるう年です。"); }else if(a%100==0){ printf("平年です。¥n"); }else if(0==a%4){ puts(“うるう年です。”); }else{ printf("平年です。¥n"); } return 0; } #include <stdio.h> int main(void){ int a; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”, &a); // 入力値を判定して「うるう年」、「平年」を表示する if (0 == a % 400) { puts("うるう年です。"); } else if (a % 100 == 0) { printf("平年です。¥n"); } else if (0 == a % 4) { puts(“うるう年です。”); } else { printf("平年です。¥n"); } return 0; } スペースがないコード スペースをつかったコード キーワードや式などの間に スペースをいれる ※関数名と()の間にはスペース を入れない
  • 11. 改行をつかう 10 #include <stdio.h> int main(void){ int a; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”, &a); // 入力値を判定して「うるう年」、「平年」を表示する if (0 == a % 400) { puts("うるう年です。"); } else if (a % 100 == 0) { printf("平年です。¥n"); } else if (0 == a % 4) { puts(“うるう年です。”); } else { printf("平年です。¥n"); } return 0; } #include <stdio.h> int main(void){ int a; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”, &a); // 入力値を判定して「うるう年」、「平年」を表示する if (0 == a % 400) { puts(“うるう年です。”); } else if (a % 100 == 0) { printf("平年です。¥n"); } else if (0 == a % 4) { puts(“うるう年です。”); } else { printf("平年です。¥n"); } return 0; } 改行がないコード 改行をつかったコード 処理のグループごとに改行で区切る ※ このコードを例にとると 1. 変数の宣言 2. 数値の入力 3. 判定処理
  • 12. 記述を統一する 11 #include <stdio.h> int main(void){ int a; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”, &a); // 入力値を判定して「うるう年」、「平年」を表示する if (0 == a % 400) { puts(“うるう年です。”); } else if (a % 100 == 0) { printf("平年です。¥n"); } else if (0 == a % 4) { puts(“うるう年です。”); } else { printf("平年です。¥n"); } return 0; } #include <stdio.h> int main(void){ int a; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”, &a); // 入力値を判定して「うるう年」、「平年」を表示する if (a % 400 == 0) { printf("うるう年です。¥n"); } else if (a % 100 == 0) { printf("平年です。¥n"); } else if (a % 4 == 0) { printf(“うるう年です。¥n”); } else { printf("平年です。¥n"); } return 0; } 統一されていないコード 統一されているコード if文の条件は、 式を伴なう比較は、左辺に式を書く 不等号なら「左辺 < 右辺」 などなど
  • 13. 適切な変数名をつける 12 #include <stdio.h> int main(void){ int a; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”, &a); // 入力値を判定して「うるう年」、「平年」を表示する if (a % 400 == 0) { printf("うるう年です。¥n"); } else if (a % 100 == 0) { printf("平年です。¥n"); } else if (a % 4 == 0) { printf(“うるう年です。¥n”); } else { printf("平年です。¥n"); } return 0; } #include <stdio.h> int main(void){ int year; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”, &year); // 入力値を判定して「うるう年」、「平年」を表示する if (year % 400 == 0) { printf("うるう年です。¥n"); } else if (year % 100 == 0) { printf("平年です。¥n"); } else if (year % 4 == 0) { printf(“うるう年です。¥n”); } else { printf("平年です。¥n"); } return 0; } 意味のない変数名のコード 意味のある変数名のコード yearなら変数に「年(西暦)」が 入っていることがわかる
  • 14. コメントを使わず伝える 13 #include <stdio.h> int main(void){ int year; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”, &year); // 入力値を判定して「うるう年」、「平年」を表示する if (year % 400 == 0) { printf("うるう年です。¥n"); } else if (year % 100 == 0) { printf("平年です。¥n"); } else if (year % 4 == 0) { printf(“うるう年です。¥n”); } else { printf("平年です。¥n"); } return 0; } #include <stdio.h> int isLeapYear(int year) { if (year % 400 == 0) { return 1; } else if (year % 100 == 0) { return 0; } else if (year % 4 == 0) { return 1; } else { return 0; } } int main(void){ int year; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”, &year); if (isLeapYear(year)) { printf("うるう年です。¥n"); } else { printf("平年です。¥n"); } return 0; } コメントがあるコード コメントを使わず伝えるコード main処理に注目すると、 1. if(isLeapYear)だけでうるう年の 判定だとわかる 2. うるう年の判定条件を考えなくてよい
  • 15. 冗長的な処理を削除する 14 #include <stdio.h> int isLeapYear(int year) { if (year % 400 == 0) { return 1; } else if (year % 100 == 0) { return 0; } else if (year % 4 == 0) { return 1; } else { return 0; } } int main(void){ int year; printf(“西暦を入力してください。¥n”); printf("西暦 :"); scanf(“%d”, &year); if (isLeapYear(year)) { printf("うるう年です。¥n"); } else { printf("平年です。¥n"); } return 0; } #include <stdio.h> int isLeapYear(int year) { if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { return 1; } else { return 0; } } int main(void){ int year; printf("西暦を入力してください。¥n"); printf("西暦 :"); scanf("%d", &year); if (isLeapYear(year)) { printf("うるう年です。¥n"); } else { printf("平年です。¥n"); } return 0; } 冗長的なコード 冗長を排除したコード isLeapYear のreturnが シンプルになる ※ 冗長させたほうが分かりやすい 場合は、そのままにしておく
  • 16. 修正前後のコードの比較 15 #include <stdio.h> int main(void){ int a; printf("西暦を入力してください。¥n"); printf("西暦 :"); scanf(“%d”,&a); // 入力値を判定して「うるう年」、「平年」を表示する if(0==a%400){ puts ("うるう年です。"); }else if(a%100==0){ printf("平年です。¥n"); }else if(0==a%4){ puts(“うるう年です。"); }else{ printf("平年です。¥n"); } return 0; } #include <stdio.h> int isLeapYear(int year) { if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { return 1; } else { return 0; } } int main(void){ int year; printf("西暦を入力してください。¥n"); printf("西暦 :"); scanf("%d", &year); if (isLeapYear(year)) { printf("うるう年です。¥n"); } else { printf("平年です。¥n"); } return 0; } 修正前のコード 修正後のコード