当日のOHP資料です。
次のファイルを、c:\usr\cに保存する。
Download : sample-001.c ( SJIS 版 )
/*
* CDATE sample-001.c
*/
/*
* 最初のプログラムは "Hello, World"
*
* 利用方法
* コンパイル
* cc -o sample-001.exe sample-001.c
* 実行
* sample-001
*/
/*
* #include は、ファイルをこの場所に取り込む命令
* #include <stido.h> は c:\min\mingw\include\stdio.h を取り込む
*/
#include <stdio.h>
/*
* main 関数
*/
/*
* main の前の int は、main が整数値を返す事を意味する
* main の返す整数値は、コマンドプロンプトの ERRORLEVEL で確認できる
* 通常は 0 は正常 / それ以外は、エラー状態(その数値はエラーコード)
*/
int main ( int argc, char *argv[] ) {
/*
* 引数の argc, argv はコマンドラインの引数の情報を担う
* argc は、引数の個数 + 1 を表す ( なので、引数がなければ 1 になる )
* argv は、コマンドラインの情報が空白で区切られたもの
* argv[0] は、コマンド名を表す文字列
* argv[i] は、i 番目のコマンドライン引数を表す文字列となる
*/
/*
* このプログラムのメイン部分
* 別のプログラムを作成するなら、この部分を差し替える
*/
/*
* "Hello, World" という文字列と改行 ( "\n" ) を表示する
*/
printf ( "Hello, World\n" );
/*
* return 0; で、0 が関数の値として返る ( 0 なので、「正常終了」って事 )
*/
return 0;
}
C:\usr\c>sample-001 Hello, World C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/*
* 2013/06/21 sample-002.c
*/
/*
* 様々な入出力
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-002.exe sample-002.c
* 実行
* sample-002
*/
#include <stdio.h>
/*
* s_input.h, s_print.h を読み込む
* これによって、s_input_int や s_print_int 関数が利用できるようになる
* s_input.h, s_print.h は c:\usr\c\include にあるものを利用する
* このために、コンパイルする時に -Ic:\usr\include を追加する
*/
#include "s_input.h"
#include "s_print.h"
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
/*
* printf 同様、
* 引数で与えれた文字列を出力する
*/
s_print_string ( "abc" );
/* 改行を出力する
* : putchar ( '\n' ) や
* printf ("\n");と同じ
*/
s_print_newline();
/*
* ここまでで「abc\n」が表示される事になる。
*/
/*
* putchar と同様、
* 引数で与えれた文字を出力する
*/
s_print_char ( 'a' );
s_print_newline();
/*
* ここまでで「a\n」が表示される事になる。
*/
/*
* 引数で与えれた整数値を出力する
*/
s_print_int ( 123 );
s_print_newline();
/*
* ここまでで「123\n」が表示される事になる。
*/
/*
* この後は入力
*/
s_print_string ( "Input String : " );
/*
* s_input_string() は、キーボードから一行文字列を読み込む
* 読み込まれた結果をそのまま s_print_string() で出力している
*/
s_print_string ( s_input_string() );
s_print_newline();
/*
* ここまでで、「入力された文字列」がそのまま表示される
*/
s_print_string ( "Input Int : " );
/*
* s_input_int() は、キーボードから数値を一つ読み込む
* 読み込まれた結果をそのまま s_print_int() で出力している
*/
s_print_int ( s_input_int() );
s_print_newline();
/*
* ここまでで、「入力された整数」がそのまま表示される
*/
s_print_string ( "Input Char : " );
/*
* s_input_char() は、キーボードから文字を一つ読み込む
* 読み込まれた結果をそのまま s_print_char() で出力している
*/
s_print_char ( s_input_char() );
s_print_newline();
/*
* ここまでで、「入力された文字」がそのまま表示される
*/
return 0;
}
abc 123 x
C:\usr\c>sample-002< sample-002.in abc a 123 Input String : abc Input Int : 123 123 Input Char : x x C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/*
* 2013/06/21 sample-003.c
*/
/*
* 型の違い
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-003.exe sample-003.c
* 実行
* sample-003
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
/*
* 型が違っても表示は同じ
*/
s_print_string ( "整数 : " );
s_print_int ( 9 );
s_print_newline();
s_print_string ( "文字 : " );
s_print_char ( '9' );
s_print_newline();
s_print_string ( "文字列 : " );
s_print_string ( "9" );
s_print_newline();
/*
* 整数の場合の +1
*/
s_print_string ( "整数の計算 : 9 + 1 = " );
s_print_int ( 9 + 1 );
s_print_newline();
/*
* 文字の場合の +1
*/
s_print_string ( "文字の計算 : '9' + 1 = " );
s_print_char ( '9' + 1 );
s_print_newline();
/*
* 文字列の場合の +1
*/
s_print_string ( "文字の計算 : \"9\" + 1 = " );
s_print_string ( "9" + 1 );
s_print_newline();
/*
* 型によって、計算結果が異る
*/
return 0;
}
C:\usr\c>sample-003 整数 : 9 文字 : 9 文字列 : 9 整数の計算 : 9 + 1 = 10 文字の計算 : '9' + 1 = : 文字の計算 : "9" + 1 = C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/*
* 2013/06/21 sample-004.c
*/
/*
* 整数の四則計算式
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-004.exe sample-004.c
* 実行
* sample-004
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
/*
* 加法(足し算)
*/
s_print_string ( "12 + 5 = " );
s_print_int ( 12 + 5 ); /* 整数の 12 と 5 を加える */
s_print_newline();
/*
* 減法(引き算)
*/
s_print_string ( "12 - 5 = " );
s_print_int ( 12 - 5 ); /* 整数の 12 から 5 を引く */
s_print_newline();
/*
* 乗法(かけ算)
*/
s_print_string ( "12 * 5 = " );
s_print_int ( 12 * 5 ); /* 整数の 12 に 5 をかける */
s_print_newline();
/*
* 商法(割り算)
*/
s_print_string ( "12 / 5 = " );
s_print_int ( 12 / 5 ); /* 整数の 12 を 5 で割る */
s_print_newline();
/*
* 式の優先順位やかっこも利用可能
*/
s_print_string ( "1 + 2 * 3 = " );
s_print_int ( 1 + 2 * 3 ); /* かけ算が優先される */
s_print_newline();
s_print_string ( "(1 + 2) * 3 = " );
s_print_int ( (1 + 2) * 3 ); /* かっこの中の計算が優先される */
s_print_newline();
return 0;
}
C:\usr\c>sample-004 12 + 5 = 17 12 - 5 = 7 12 * 5 = 60 12 / 5 = 2 1 + 2 * 3 = 7 (1 + 2) * 3 = 9 C:\usr\c>
Download : sample-005.c ( SJIS 版 )
/*
* 2013/06/21 sample-005.c
*/
/*
* 文字列の演算式
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-005.exe sample-005.c
* 実行
* sample-005
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
/*
* 文字列への加法
*/
s_print_string ( "\"abc\" + 1 = " );
s_print_string ( "abc" + 1 ); /* 文字列が短くなる */
s_print_newline();
/*
* 先頭の文字の取出し
*/
s_print_string ( "*\"abc\" = " );
s_print_char ( *"abc" ); /* 先頭の文字が出て来る */
s_print_newline();
return 0;
}
C:\usr\c>sample-005 "abc" + 1 = bc *"abc" = a C:\usr\c>
Download : sample-006.c ( SJIS 版 )
/*
* 2013/06/21 sample-006.c
*/
/*
* 関数呼出しを含む形の「式」
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-006.exe sample-006.c
* 実行
* sample-006
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
/*
* 加法(足し算)
*/
s_print_string ( "12 + 5 = " );
s_print_int ( 12 + 5 ); /* 整数の 12 と 5 を加える */
s_print_newline();
/*
* 減法(引き算)
*/
s_print_string ( "12 - 5 = " );
s_print_int ( 12 - 5 ); /* 整数の 12 から 5 を引く */
s_print_newline();
/*
* 乗法(かけ算)
*/
s_print_string ( "12 * 5 = " );
s_print_int ( 12 * 5 ); /* 整数の 12 に 5 をかける */
s_print_newline();
/*
* 商法(割り算)
*/
s_print_string ( "12 / 5 = " );
s_print_int ( 12 / 5 ); /* 整数の 12 を 5 で割る */
s_print_newline();
return 0;
}
C:\usr\c>sample-006 12 + 5 = 17 12 - 5 = 7 12 * 5 = 60 12 / 5 = 2 C:\usr\c>
#include <stdio.h>
int main ( int argc, char *argv[] ) {
printf ( "こんにちは、みなさん。\n" );
printf ( "こんにちは、みなさん。\n" );
printf ( "こんにちは、みなさん。\n" );
return 0;
}
#include <stdio.h>
int main ( int argc, char *argv[] ) {
printf ( argv[0] );
printf ( "\n" ); /* 改行 */
return 0;
}
#include <stdio.h>
int main ( int argc, char *argv[] ) {
printf ( argv[1] );
/* argv[1] は、コマンドライン引数の一つ目になる */
printf ( "\n" ); /* 改行 */
return 0;
}
#include <stdio.h>
int main ( int argc, char *argv[] ) {
/*
* 出力 (画面に何か出す)
*/
printf ( "abc\n" ); /* 文字列を出す */
putchar ( 'a' ); /* 文字を出す */
/*
* 入力 (キーボードから情報を、プログラム内に取り入れる
*/
getchar(); /* キーボードから、一文字読込み
その結果を関数の値とする */
/* kbhit, inkey .. などは、ゲーム関係でやったが例外 */
putchar ( getchar() ); /* 読み込んだ文字をそのまま出す */
}
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
int main ( int argc, char *argv[] ) {
s_print_string ( "abc\n" );
/* printf ( "abc\n" ) と同じ */
s_print_char ( 'a' );
/* putchar ( 'a' ); */
/* 文字列には string, 文字の時には char と規則的憶えられる */
s_print_char ( s_input_char() );
/* putchar ( getchar() ) */
/* 出力が print なら、入力は、input となる */
s_print_string ( s_input_string() );
/* s_input_string() は文字列を入力して返す */
/*
入力(input) 出力(print)
文字(char)
getchar putchar
s_input_char s_print_char
文字列(string)
--- printf
s_input_string s_print_string
整数(int)
--- ---
s_input_int s_print_int
*/
}
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
int main ( int argc, char *argv[] ) {
s_print_string ( "12 + 5 = " );
s_print_int ( 12 + 5 );
/*
「12 + 5」
は、
「12」,「+」,「5」
に分解
「12」,「5」, は、それぞれ、整数の 12 と 5
それから、「+」は、整数の和の演算子と解釈される
「12」という表現から、12 という整数値が得られ
「5」という表現から、5 という整数値が得られ
12 と 5 の整数和が計算されて、
整数値の 17 がえられる
それが、s_print_int で表示されます。
cf. 2 * 3 の * はかけ算
* "abc" の * は、先頭の文字の取出し
*/
s_print_newline();
}
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
int main ( int argc, char *argv[] ) {
s_print_string ( "12 + 5 = " );
s_print_int ( 12 + 5 );
s_print_newline();
s_print_string ( "12 - 5 = " );
s_print_int ( 12 - 5 );
s_print_newline();
s_print_string ( "12 * 5 = " );
s_print_int ( 12 * 5 );
s_print_newline();
s_print_string ( "12 / 5 = " );
s_print_int ( 12 / 5 );
s_print_newline();
s_print_string ( "12 % 5 = " );
s_print_int ( 12 % 5 );
s_print_newline();
}
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
* 引数で渡された、整数値を表示した後に
* その引数の値を返す
*/
int echo_int ( int i ) {
s_print_char ( '[' );
s_print_int ( i );
s_print_char ( ']' );
s_print_newline ();
return i;
}
void seq ( int a, int b ) {
s_print_string ( "一つ目 = " );
s_print_int ( a );
s_print_newline();
s_print_string ( "二つ目 = " );
s_print_int ( b );
s_print_newline();
}
int main ( int argc, char *argv[] ) {
seq ( 12, 100 );
s_print_int ( echo_int ( 12 ) );
s_print_newline();
/*
echo_int が 12 をだして
そのあと s_print_int が 12 だすので、二回 12 がでる
*/
seq ( echo_int (12), echo_int (100) );
/*
途中は兎も角、最終的には、
seq ( 12, 100 );
と同じなる。
常識的には..
[12]
[100]
一つ目 = 12
二つ目 = 100
だろう...だが..
関数の引数は、後ろから評価(計算/呼出し)される
*/
}
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
int add_int ( int a, int b ) {
/* 「a + b = a と b の和」と表示する */
s_print_int ( a );
s_print_char ( '+' );
s_print_int ( b );
s_print_char ( '=' );
s_print_int ( a + b );
s_print_newline();
}
int main ( int argc, char *argv[] ) {
add_int ( 12, 7 );
/* 12+7=19 と表示される */
add_int ( s_input_int(), s_input_int() );
/* ^^^^^^^^^^^^ 最初はこっち
ここに 34 (最初にいれた数)がくる
^^^^^^^^^^^^^ 次にここがよばれる
ここに 8 がはいる
*/
}
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
int add_int ( int a, int b ) {
/* 「a + b = a と b の和」と表示する */
s_print_int ( a );
s_print_char ( '+' );
s_print_int ( b );
s_print_char ( '=' );
s_print_int ( a + b );
s_print_newline();
}
void add_int_1 ( int i ) {
add_int ( i, s_input_int() );
/* ^ ^^^^^^^^^^^^^ 後からここ
34 8
*/
}
int main ( int argc, char *argv[] ) {
add_int_1 ( s_input_int() );
/* ^^^^^^^^^^^^^ 最初にここ
34 が入る
*/
}
/*
* CDATE FILENAME
*
* 二つの整数値をキーボードから入力し、その四則並びに余りを出力する
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* print_int_result
*/
void print_int_result ( char *name, int a, int b, char op, int value ) {
s_print_string ( name );
s_print_string ( " : " );
s_print_int ( a );
/*
** この部分を完成させなさい → op と b を出す必要..
** s_print_char ( op ); ...
*/
s_print_char ( '=' );
s_print_int ( value );
s_print_newline();
}
/*
* print_int_calc
*/
void print_int_calc ( int a, int b ) {
print_int_result ( "和", a, b, '+', a + b );
print_int_result ( "差", a, b, '-', a - b );
/*
** この部分を完成させなさい → あと積、商を出す
** print_int_result ( "積", a, b, '*', a * b ); ..
*/
print_int_result ( "余り", a, b, '%', a % b );
}
/*
* print_int_calc_1
*/
void print_int_calc_1 ( int a ) {
print_int_calc ( a, s_input_int() );
}
/*
* main
*/
int main( int argc, char *argv[] )
{
print_int_calc_1 ( s_input_int() );
return 0;
}
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* p-007.c : 整数の四則をコピー
* 12 と 5
* これを
* 12.34 と 5.67
* にする事を考えます
*/
#include "s_input.h"
#include "s_print.h"
int main ( int argc, char *argv[] ) {
s_print_string ( "12.34 + 5.67 = " );
s_print_double ( 12.34 + 5.67 );
s_print_newline();
s_print_string ( "12.34 - 5.67 = " );
s_print_double ( 12.34 - 5.67 );
s_print_newline();
s_print_string ( "12.34 * 5.67 = " );
s_print_double ( 12.34 * 5.67 );
s_print_newline();
s_print_string ( "12.34 / 5.67 = " );
s_print_double ( 12.34 / 5.67 );
s_print_newline();
}
Download : 20130621-01.c ( SJIS 版 )
/*
* CDATE FILENAME
*
* 二つの整数値をキーボードから入力し、その四則並びに余りを出力する
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* print_int_result
*/
void print_int_result ( char *name, int a, int b, char op, int value ) {
s_print_string ( name );
s_print_string ( " : " );
s_print_int ( a );
/*
** この部分を完成させなさい → op と b を出す必要..
** s_print_char ( op ); ...
*/
s_print_char ( '=' );
s_print_int ( value );
s_print_newline();
}
/*
* print_int_calc
*/
void print_int_calc ( int a, int b ) {
print_int_result ( "和", a, b, '+', a + b );
print_int_result ( "差", a, b, '-', a - b );
/*
** この部分を完成させなさい → あと積、商を出す
** print_int_result ( "積", a, b, '*', a * b ); ..
*/
print_int_result ( "余り", a, b, '%', a % b );
}
/*
* print_int_calc_1
*/
void print_int_calc_1 ( int a ) {
print_int_calc ( a, s_input_int() );
}
/*
* main
*/
int main( int argc, char *argv[] )
{
print_int_calc_1 ( s_input_int() );
return 0;
}
12 5
C:\usr\c\> 20130621-01-QQQQ 和 : 12+5=17 差 : 12-5=7 積 : 12*5=60 商 : 12/5=2 余り : 12%5=2 C:\usr\c\>
Download : 20130621-02.c ( SJIS 版 )
/*
* CDATE FILENAME
*
* 二つの浮動小数点数値をキーボードから入力し、その四則を出力する
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* print_double_result
*/
void print_double_result ( char *name, double a, double b, char op, double \
value ) {
s_print_string ( name );
s_print_string ( " : " );
s_print_double ( a );
/*
** この部分を完成させなさい
*/
s_print_char ( '=' );
s_print_double ( value );
s_print_newline();
}
/*
* print_double_calc
*/
void print_double_calc ( double a, double b ) {
print_double_result ( "和", a, b, '+', a + b );
print_double_result ( "差", a, b, '-', a - b );
/*
** この部分を完成させなさい
*/
}
/*
* print_double_calc_1
*/
void print_double_calc_1 ( double a ) {
print_double_calc ( a, s_input_double() );
}
/*
* main
*/
int main( double argc, char *argv[] )
{
print_double_calc_1 ( s_input_double() );
return 0;
}
12.34 5.67
C:\usr\c\> 20130621-02-QQQQ 和 : 12.340000+5.670000=18.010000 差 : 12.340000-5.670000=6.670000 積 : 12.340000*5.670000=69.967800 商 : 12.340000/5.670000=2.176367 C:\usr\c\>