ce-1. C プログラミング入門
1
金子邦彦
(C プログラミング応用)(全14回)
URL: https://www.kkaneko.jp/pro/c/index.html
C言語の基本構文、関数の作成と呼び出し、条件分岐、
繰り返し処理の習得。
【学習内容の構成】
1. C言語の特徴:1970年にUNIX記述用に作成された手
続き型・コンパイラ型言語
2. 関数の構造:main関数を起点とした複数関数の定義
と呼び出し
3. 変数とデータ型:int型(整数)、char型(文字)、
double型(浮動小数)によるデータ管理
4. 制御構造:if文による条件分岐、for文・while文によ
る繰り返し処理
• 前提:特になし
• 意義:メモリ操作など細かな制御が可能な汎用言語の
基礎習得
2
C言語
• D. M. Ritchieが1970年にUNIXを記述するために作
成した言語
• きめ細かな操作ができる
• メモリの操作など
• ANSI により規格化、汎用性が高い
• 広く利用されている
• 手続き型言語のひとつ
• コンパイラ型言語のひとつ
•3
メッセージ表示プログラム
•4
画面に表示されたメッセージ
#include "stdio.h"
int main()
{
printf("Hello, World¥n");
}
#include "stdio.h"
int main()
{
printf("Hello, World¥n");
}
メッセージ表示プログラム
•5
1つの関数
(関数名: main)
main 関数の中で,
関数 printf を使っている
#include "stdio.h"
int main()
{
printf("Hello, World¥n");
}
メッセージ表示プログラム
•6
main 関数
の本体
個々の文の終了を示す
(セミコロン)
関数名
#include "stdio.h"
int main()
{
printf("Hello, World¥n");
}
プログラムの流れ
•7
printf 関数
メイン関数
printf("Hello,World¥n");
関数呼び出し
戻り
プログラムの実行開始
プログラムの実行終了
例題1.棒グラフ
• 整数から,その長さだけの棒を表示する関数 bar
を作る
例) 6 → ******
• 関数 bar を使って,「整数を読み込んで,読み込
んだ長さの棒を表示するメイン関数を作る
•8
棒グラフ
•9
メッセージ「len =」が
表示されるので,キー
ボードで「6 Enter」と
すると,長さ6の棒グラ
フが表示される
実行結果の例
プログラム実行順
• 普通,プログラム中の文は,上から下へ順に実行
される
• 関数呼び出しでは,関数の先頭に「ジャンプ」す
る.
関数呼び出しの例) bar( len );
• 呼び出された関数の中で return 文に出会うと,関
数呼び出しの場所に戻る.
•10
このことは,C言語が「手続き型言語」と言われる理由の1つ
棒グラフ
#include "stdio.h"
#include <math.h>
void bar( int len )
{
int i;
for (i=0; i<len; i++) {
printf("*");
}
printf("¥n");
return;
}
int main()
{
int len;
char buf[256];
int ch;
printf( "len =" );
fgets( buf, 256, stdin );
sscanf_s( buf, "%d¥n", &len );
bar( len );
ch = getchar();
ch = getchar();
return 0;
}
•11
bar関数
main関数
プログラム実行は
main 関数(メイン
関数)から始まる
複数の関数を含む
プログラム
#include "stdio.h"
#include <math.h>
void bar( int len )
{
int i;
for (i=0; i<len; i++) {
printf("*");
}
printf("¥n");
return;
}
int main()
{
int len;
char buf[256];
int ch;
printf( "len =" );
fgets( buf, 256, stdin );
sscanf_s( buf, "%d¥n", &len );
bar( len );
ch = getchar();
ch = getchar();
return 0;
}
関数呼び出し
プログラム実行順
•12
①
②
③
⑦
④
⑤
⑥
戻り
メイン関数の先頭行
がプログラム実行の始まり
メイン関数内の return
がプログラム実行の終わり
⑧
⑨
#include "stdio.h"
#include <math.h>
void bar( int len )
{
int i;
for (i=0; i<len; i++) {
printf("*");
}
printf("¥n");
return;
}
int main()
{
int len;
int ch;
printf( "len=" );
scanf_s( "%d", &len );
bar( len );
ch = getchar();
ch = getchar();
return 0;
}
プログラムの流れ
•13
bar 関数
メイン関数
bar( len );
関数呼び出し
return;
プログラムの実行開始
プログラムの実行終了
* printf, scanf の
呼び出しについては
図では省略
変数
• 変数
• 変数名
•14
データ(数値や文字)を入れるもの
英数字かアンダーバー(_)で作られる
最初の文字には数字は使えない
大文字と小文字を区別する
変数 i
#include "stdio.h"
#include <math.h>
void bar( int len )
{
int i;
for (i=0; i<len; i++) {
printf("*");
}
printf("¥n");
return;
}
int main()
{
int len;
char buf[256];
int ch;
printf( "len =" );
fgets( buf, 256, stdin );
sscanf_s( buf, "%d¥n", &len );
bar( len );
ch = getchar();
ch = getchar();
return 0;
}
•15
変数 i をメモリエリア中に確保
len をメモリエリア中に確保
変数 len, buf, ch
をメモリエリア中に確保
•16
データ型は2種類
使っている
整数を扱う int 型
文字を扱う char 型
整数は, 5, -3, 0 など
文字は, 1, 0, 3, -, a など
数字(1, 0, 3 など)も文字の一種
#include "stdio.h"
#include <math.h>
void bar( int len )
{
int i;
for (i=0; i<len; i++) {
printf("*");
}
printf("¥n");
return;
}
int main()
{
int len;
char buf[256];
int ch;
printf( "len =" );
fgets( buf, 256, stdin );
sscanf_s( buf, "%d¥n", &len );
bar( len );
ch = getchar();
ch = getchar();
return 0;
}
変数 i をメモリエリア中に確保
len をメモリエリア中に確保
変数 len, buf, ch
をメモリエリア中に確保
例題.平方根の計算
• 浮動小数データを読み込んで,平方根の計算と表
示を行うプログラムを作る.
• 但し,負の数の場合には,メッセージを表示すること.
• 負の数であるかどうかによって条件分岐を行うために if
文を使う.
例) 9のとき: 3
-1のとき: メッセージを表示
•17
条件分岐とは
• 「ある条件式」が成り立てばAを、成り立たなけ
ればBを実行
•18
Yes
No
B A
条件式
平方根の計算
•19
実行結果の例
x=9
sqrt(9.000000)=3.000000
x=-1
負なので計算できません
#include "stdio.h"
#include <math.h>
int main()
{
double x;
double y;
char buf[256];
int ch;
printf("x=");
fgets( buf, 256, stdin );
sscanf_s( buf, "%lf¥n", &x );
if ( x < 0 ) {
printf("負なので計算できません¥n");
}
else {
y = sqrt(x);
printf("sqrt(%f)=%f¥n", x, y);
}
ch = getchar();
ch = getchar();
return 0;
}
条件が成り立つ場合
に実行される部分
条件式
条件が成り立たない
場合に実行される部分
•20
#include "stdio.h"
#include <math.h>
int main()
{
double x;
double y;
char buf[256];
int ch;
printf("x=");
fgets( buf, 256, stdin );
sscanf_s( buf, "%lf¥n", &x );
if ( x < 0 ) {
printf("負なので計算できません¥n");
}
else {
y = sqrt(x);
printf("sqrt(%f)=%f¥n", x, y);
}
ch = getchar();
ch = getchar();
return 0;
}
実行順
(x<0) の場合
①
②
③
④
⑤
⑥
⑦
•21
#include "stdio.h"
#include <math.h>
int main()
{
double x;
double y;
char buf[256];
int ch;
printf("x=");
fgets( buf, 256, stdin );
sscanf_s( buf, "%lf¥n", &x );
if ( x < 0 ) {
printf("負なので計算できません¥n");
}
else {
y = sqrt(x);
printf("sqrt(%f)=%f¥n", x, y);
}
ch = getchar();
ch = getchar();
return 0;
}
実行順
(x≧0) の場合
•22
①
②
③
④
⑤
⑥
⑦
⑧
繰り返しとは
• 繰り返しとは,ある条件が満たされるまで,同じ
ことを繰り返すこと.
• 繰り返しを行うための文としてwhile文, for 文 など
がある.
•23
条件
繰り返し
• C言語での繰り返しは次の3通り
• while文
• do-while文
• for文
• ループ変数 (ループカウンタ)
• 繰り返しの回数を数える変数
• インクリメント 値を1増やす (i++)
• デクリメント 値を1減らす (i--)
•24
for 文による繰り返し
•25
初期式
条件式
再設定式
Yes
No
1.まず,「初期式」を実行
2.次に,「条件式」を実行.条件式が成立すれば,
式と「再設定式」を実行し,「条件式」に戻る
式
例題.繰り返し計算と
ファイル出力
• 次のページのプログラムの機能
• 計算の繰り返し
• キーボードからのデータ読み込み
• ファイルへの書き出し
•26