太田研究室 | 電気電子システム学科 | 岡山理科大学
あれやこれやの理由により、講義では取り扱わないC言語プログラムを紹介します。 解説は特にしませんので自分で勉強してください。
これらのプログラムは以下の環境で動作することを確認しています。
! Visual C++ Express 2013 でコンパイルする場合は、SDLチェックを外してください。
プログラミングの重要なファクターにも関わらず、存在を無視されがちなgoto文。使い方だけでも覚えてあげましょう。
プログラムの実行を中断するには、[Ctrl]+[C]を押してください。
#include <stdio.h> int main(void) { int i = 0; A: printf("%d\n", i++); goto A; return 0; }
goto文は多重ループを強制的に抜け出るときなどに便利です。
#include <stdio.h> int main(void) { int a, b; for(a = 1; a <= 10000; a++){ for(b = 1; b <= 10000; b++){ if(a*b == 1234567) goto OWARI; } } OWARI: if(a <= 10000){ printf("%d×%d = %d\n", a, b, a*b); }else{ printf("見つからなかった。\n"); } return 0; }
関係演算子を使うよ。実用性は全く無いよ。
#include <stdio.h> int main(void) { int a = 0, b = 0; a == b && printf("a=bです。\n") || printf("a≠bです。\n"); a = 2; a == b && printf("a=bです。\n") || printf("a≠bです。\n"); return 0; }
テンポラリ変数なんか使わなくても交換できます。
#include <stdio.h> int main(void) { int a = 70, b = -5; printf("a = %d, b = %d\n", a, b); a = a+b; b = a-b; a = a-b; printf("a = %d, b = %d\n", a, b); return 0; }
こういう書き方もあります。
#include <stdio.h> int main(void) { int a = 70, b = -5; printf("a = %d, b = %d\n", a, b); a ^= b ^= a ^= b; printf("a = %d, b = %d\n", a, b); return 0; }
電卓アプリを起動します。
#include <stdio.h> #include <stdlib.h> int main(void) { system("calc"); return 0; }
! このプログラムはWindowsのシャットダウンを行いますので、実行する前に他のアプリケーションを終了させてください。 このプログラムは自己責任のもとで実行してください。パソコンに不具合など生じても当方は一切責任を負いません。
#include <stdio.h> #include <stdlib.h> int main(void) { system("shutdown /r /t 60"); return 0; }
3分を計ります。
#include <stdio.h> #include <windows.h> int main(void) { printf("3分を計ります。\n\a"); Sleep(60000); printf("あと2分です。\n\a"); Sleep(60000); printf("あと1分です。\n\a"); Sleep(60000); printf("3分になりました。\n\a\a\a"); return 0; }
どれかキーを押しておみくじを引きます。
#include <stdio.h> #include <conio.h> #include <windows.h> int main(void) { char *omikuji[] = {"大吉", "中吉", "小吉", "吉 ", "末吉", "凶 ", "大凶"}; int i = 0, n; n = sizeof(omikuji) / sizeof(char*); printf("どれかキーを押してください。\n\nあなたの運勢は\n"); while(!kbhit()){ printf("%s\r", omikuji[i]); i = (i+1) % n; Sleep(20); } getch(); printf("\n"); return 0; }
ミリ秒単位で時間を計ります。
#include <stdio.h> #include <conio.h> #include <time.h> int main(void) { long a, b; printf("どれかキーを押すと計測を始めます。\n"); getch(); printf("どれかキーを押すと計測を止めます。\n"); a = clock(); while(!kbhit()){ b = clock() - a; printf("%03d'%02d.%03d\r", b/60000, (b%60000)/1000, (b%60000)%1000); } getch(); printf("\n計測おわり!\n"); return 0; }
処理の進捗状況を示すプログレスバー(もどき)を表示します。
#include <stdio.h> #include <windows.h> int main(void) { int i; for(i = 0; i <= 100; i++){ printf("%-20.*s %3d%%\r", i/5, "********************", i); Sleep(100); } printf("\n"); return 0; }
©2014 OHTA Hiroshi@Okayama University of Science