当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
/*
* DATE sample-001.c
*/
#include <stdio.h>
#include <string.h> /* strcmp に必要 */
#include "s_turtle.h" /* 亀プログラムの場合に必要 */
/*
* 亀プログラム
*/
/*
* void jump_n ( char *n )
* char *n 足跡の長さを表す
* 指定された長さだけ現在向いている方向に足跡を残こさず跳ねる
*/
void jump_n ( char *n ) {
if ( !strcmp ( n, "" ) ) {
/* n が空文字列 ("") なら何もしない */
} else {
s_turtle_jump(); /* とりあえず、一歩跳ねる */
jump_n ( n + 1 ); /* 文字列を短くして、再帰呼出し */
}
}
/*
* void move_n ( char *n )
*
* char *n 足跡の長さを表す
* 指定された長さだけ現在向いている方向に足跡を残して歩く
*/
void move_n ( char *n ) {
if ( !strcmp ( n, "" ) ) {
/* n が空文字列 ("") なら何もしない */
} else {
s_turtle_move(); /* とりあえず、一歩歩く */
move_n ( n + 1 ); /* 文字列を短くして、再帰呼出し */
}
}
/*
* void turn_n ( char *n )
*
* 現在向いている方向から時計回りに n * 45 度向きを変える
*/
void turn_n ( char *n ) {
if ( !strcmp ( n, "" ) ) {
/* n が空文字列 ("") なら何もしない */
} else {
s_turtle_turn(); /* とりあえず、45 度向きをかえる */
turn_n ( n + 1 ); /* 文字列を短くして、再帰呼出し */
}
}
/*
* void turn_90 ( void )
*
* 現在向いている方向から時計回りに 90 度向きを
* 進行方向の「右」に向きを変える
*/
void turn_90 ( void ) {
turn_n ( "12" );
}
/*
* void turn_180 ( void )
*
* 現在向いている方向から時計回りに 180 度向きを
* 進行方向の「後ろ」に向きを変える
*/
void turn_180(void) {
turn_n ( "1234" );
}
/*
* void turn_270 ( void )
*
* 現在向いている方向から時計回りに 270 度向きを
* 進行方向の「左」に向きを変える
*/
void turn_270 ( void ) {
turn_n ( "123456" );
}
/*
* void move_n_and_turn ( char *n )
*
* 現在向いている方向から n 歩進んで右を向く
* 四角形の一辺を書く
*/
void move_n_and_turn ( char *n ) {
move_n ( n );
/* 向きを変える */
turn_90();
}
/*
* void draw_n_sqare( char *n );
*
* 一辺が n の長さの四角形を書く
*/
void draw_n_sqare( char *n ) {
/* 「長さ n の辺を書いて右を向く」という事を 4 回繰り返す */
move_n_and_turn(n);
move_n_and_turn(n);
move_n_and_turn(n);
move_n_and_turn(n);
}
/*
* main
*/
int main ( void ) {
/*
* 最初は真中 (0,0) で上を向いている
*/
draw_n_sqare ( "12345678901234567890" ); /* 長さ 20 の矩形を書く */
turn_270();
jump_n ( "1234" ); /* 四歩ジャンプする */
draw_n_sqare ( "12345678901234567890" ); /* 長さ 20 の矩形を書く */
turn_270();
jump_n ( "1234" ); /* 四歩ジャンプする */
draw_n_sqare ( "12345678901234567890" ); /* 長さ 20 の矩形を書く */
turn_270();
jump_n ( "1234" ); /* 四歩ジャンプする */
draw_n_sqare ( "12345678901234567890" ); /* 長さ 20 の矩形を書く */
/* 次の二行は失くてもよいが.. *.
turn_270();
jump_n ( "1234" ); /* 四歩ジャンプする */
return 0;
}
C:\usr\c>sample-001 C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/*
* 2013/05/31 sample-002.c
*/
/*
* 文字「a」を出力する
*/
#include <stdio.h>
void main ( void ) {
putchar ( 'a' ); /* 「a」という「文字」を画面に出力 */
}
C:\usr\c>sample-002 aC:\usr\c>
Download : sample-003.c ( SJIS 版 )
/*
* 2013/05/31 sample-003.c
*/
/*
* エスケープコード (「\」)の利用
*/
#include <stdio.h>
void main ( void ) {
printf ( "「\\」 を出すには 「'\\\\'」とする ==> " );
putchar ( '\\' );
printf ( "\n" );
printf ( "「'」を出すには 「'\\''」とする ==> " );
putchar ( '\'' );
printf ( "\n" );
printf ( "「ビープ音」を出すには 「'\\a'」とする ==> " );
putchar ( '\a' ); /* ここで文字は表示されず、音が出る */
printf ( "\n" );
printf ( "「\"」を出すには 「'\"'」だけでよい ==> " );
putchar ( '"' );
printf ( "\n" );
}
C:\usr\c>sample-003 「\」 を出すには 「'\\'」とする ==> \ 「'」を出すには 「'\''」とする ==> ' 「ビープ音」を出すには 「'\a'」とする ==> ^G 「"」を出すには 「'"'」だけでよい ==> " C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/*
* 2013/05/31 sample-004.c
*/
/*
* 文字列
*/
#include <stdio.h>
void main ( void ) {
printf ( "文字列\n" ); /* 「文字列」+「改行」が表示される */
}
C:\usr\c>sample-004 文字列 C:\usr\c>
Download : sample-005.c ( SJIS 版 )
/*
* 2013/05/31 sample-005.c
*/
/*
* 文字列の中のエスケープコード
*/
#include <stdio.h>
void main ( void ) {
printf ( "エスケープコード(「\\」)の扱いは、基本文字と同じ\n" );
printf ( "「\\」と出力したければ、「\\\\」とかけばよい\n" );
printf ( "文字では「'」を出すのに「\\'」としたが文字列では「'」で良い\n" );
printf ( "その代わりに文字列では「\"」を出すのには「\\\"」する必要がある\n" );
}
C:\usr\c>sample-005 エスケープコード(「\」)の扱いは、基本文字と同じ 「\」と出力したければ、「\\」とかけばよい 文字では「'」を出すのに「\'」としたが文字列では「'」で良い その代わりに文字列では「"」を出すのには「\"」する必要がある C:\usr\c>
Download : sample-006.c ( SJIS 版 )
/*
* 2013/05/31 sample-006.c
*/
#include <stdio.h>
#include <string.h>
#include "s_turtle.h"
/*
*
*/
#define EOS '\0'
/*
* 亀プログラム
*
* void do_turtle ( char *program )
* char *program -- 亀命令列
*/
void do_turtle ( char *program ) {
if ( *program == EOS ) {
/* 何もしない */
} else {
/*
* 一文字分の処理 : program の先頭の文字によって挙動をかえる
*/
if ( *program == 'm' ) { /* move 命令 !! */
s_turtle_move();
} else if ( *program == 'j' ) { /* jump 命令 !! */
s_turtle_jump();
} else if ( *program == 't' ) { /* turn 命令 !! */
s_turtle_turn();
} else { /* その他 */
/* 何だか解らないので無視する */
}
/*
* 残りの処理
*/
do_turtle ( program + 1 ); /* 再帰呼び出し */
}
}
/*
*
*/
int main ( void ) {
do_turtle ( "mmmmmmttmmmmmmttmmmmmmttmmmmmmtt" ); /* 四角を書く */
do_turtle ( "mmmmmmmmmmmmttmmmmmmmmmmmmttmmmmmmmmmmmmttmmmmmmmmmmmmtt" ); \
/* 四角を書く */
return 0;
}
C:\usr\c>sample-006 C:\usr\c>
Download : sample-007.c ( SJIS 版 )
/*
* 2013/05/31 sample-007.c
*/
#include <stdio.h>
#include <string.h>
#include "s_turtle.h"
/*
*
*/
#define EOS '\0'
/*
* 亀プログラム
*
*/
/*
* void do_1_turtle ( char *program )
* char *program -- 亀のプログラム ( 先頭の文字しか見ない .. )
* 文字列の先頭により何をするか考え、それだけを実行する
*/
void do_1_turtle ( char *program ) {
if ( *program == EOS ) {
/* 何もしない */
} else if ( *program == 'm' ) { /* move 命令 !! */
s_turtle_move();
} else if ( *program == 'j' ) { /* jump 命令 !! */
s_turtle_jump();
} else if ( *program == 't' ) { /* turn 命令 !! */
s_turtle_turn();
} else { /* その他 */
/* 何だか解らないので無視する */
}
}
/*
* void do_n_turtle ( char *program, char *length )
* char *program -- 亀プログラム ( 先頭しか見ない.. )
* char *length -- 命令を繰り返す回数を表す
* 文字列の先頭を指定した長さだけ繰り返す
*/
void do_n_turtle ( char *program, char *length ) {
if ( *length == EOS ) {
/* なにもしない */
} else {
do_1_turtle ( program ); /* とりあえず「一回」やる */
do_n_turtle ( program, length + 1 ); /* 「残り」をやる (再帰呼び出し) */
}
}
/*
* void do_turtle ( char *program ) {
* char *program -- 数字を含む亀プログラム
* 文字列の先頭が数字の場合、次の命令をその数字の表す数だけ繰り返す
*/
void do_turtle ( char *program ) {
if ( *program == EOS ) { /* 空文字列なら */
/* なにもしない (終了) */
} else {
/*
* 一文字分の処理 : program の先頭の文字によって挙動をかえる
*/
if ( *program == '2' ) { /* 「数字」の処理 */
do_n_turtle ( program + 1, "12" ); /* 「次」を繰り返す */
do_turtle ( program + 2 ); /* 「残り(次の次)」をやる (再帰) */
} else if ( *program == '3' ) {
do_n_turtle ( program + 1, "123" );
do_turtle ( program + 2 );
} else if ( *program == '4' ) {
do_n_turtle ( program + 1, "1234" );
do_turtle ( program + 2 );
} else if ( *program == '5' ) {
do_n_turtle ( program + 1, "12345" );
do_turtle ( program + 2 );
} else if ( *program == '6' ) {
do_n_turtle ( program + 1, "123456" );
do_turtle ( program + 2 );
} else if ( *program == '7' ) {
do_n_turtle ( program + 1, "1234567" );
do_turtle ( program + 2 );
} else if ( *program == '8' ) {
do_n_turtle ( program + 1, "12345678" );
do_turtle ( program + 2 );
} else if ( *program == '9' ) {
do_n_turtle ( program + 1, "123456789" );
do_turtle ( program + 2 );
} else { /* まだ、する事がある */
do_1_turtle ( program ); /* とりあえず「先頭」のみを一度やる */
do_turtle ( program + 1 ); /* 「残り」をやる (再帰) */
}
}
}
/*
*
*/
int main ( void ) {
do_turtle ( "6m2t6m2t6m2t6m2t" ); /* 四角を書く */
do_turtle ( "6m6m2t6m6m2t6m6m2t6m6m2t" ); /* 四角を書く */
return 0;
}
C:\usr\c>sample-007 C:\usr\c>
Download : sample-008.c ( SJIS 版 )
/*
* 2013/05/31 sample-008.c
*/
#include <stdio.h>
#include <string.h>
#include "s_turtle.h"
/*
*
*/
#define EOS '\0'
/*
* 亀プログラム
*
*/
/*
* void do_1_turtle ( char *program )
* char *program -- 亀のプログラム ( 先頭の文字しか見ない .. )
* 文字列の先頭により何をするか考え、それだけを実行する
*/
void do_1_turtle ( char *program ) {
if ( *program == EOS ) {
/* 何もしない */
} else if ( *program == 'm' ) { /* move 命令 !! */
s_turtle_move();
} else if ( *program == 'j' ) { /* jump 命令 !! */
s_turtle_jump();
} else if ( *program == 't' ) { /* turn 命令 !! */
s_turtle_turn();
} else { /* その他 */
/* 何だか解らないので無視する */
}
}
/*
* void do_n_turtle ( char *program, char *length )
* char *program -- 亀プログラム ( 先頭しか見ない.. )
* char *length -- 命令を繰り返す回数を表す
* 文字列の先頭を指定した長さだけ繰り返す
*/
void do_n_turtle ( char *program, char *length ) {
if ( *length == EOS ) {
/* なにもしない */
} else {
do_1_turtle ( program ); /* とりあえず「一回」やる */
do_n_turtle ( program, length + 1 ); /* 「残り」をやる (再帰呼び出し) */
}
}
/*
* void do_turtle ( char *program ) {
* char *program -- 数字を含む亀プログラム
* 文字列の先頭が数字の場合、次の命令をその数字の表す数だけ繰り返す
*/
void do_turtle ( char *program ) {
if ( *program == EOS ) { /* 空文字列なら */
/* なにもしない (終了) */
} else {
/*
* 一文字分の処理 : program の先頭の文字によって挙動をかえる
*/
if ( *program == '2' ) { /* 「数字」の処理 */
do_n_turtle ( program + 1, "12" ); /* 「次」を繰り返す */
do_turtle ( program + 2 ); /* 「残り(次の次)」をやる (再帰) */
} else if ( *program == '3' ) {
do_n_turtle ( program + 1, "123" );
do_turtle ( program + 2 );
} else if ( *program == '4' ) {
do_n_turtle ( program + 1, "1234" );
do_turtle ( program + 2 );
} else if ( *program == '5' ) {
do_n_turtle ( program + 1, "12345" );
do_turtle ( program + 2 );
} else if ( *program == '6' ) {
do_n_turtle ( program + 1, "123456" );
do_turtle ( program + 2 );
} else if ( *program == '7' ) {
do_n_turtle ( program + 1, "1234567" );
do_turtle ( program + 2 );
} else if ( *program == '8' ) {
do_n_turtle ( program + 1, "12345678" );
do_turtle ( program + 2 );
} else if ( *program == '9' ) {
do_n_turtle ( program + 1, "123456789" );
do_turtle ( program + 2 );
} else { /* まだ、する事がある */
do_1_turtle ( program ); /* とりあえず「先頭」のみを一度やる */
do_turtle ( program + 1 ); /* 「残り」をやる (再帰) */
}
}
}
/*
* void triangl_n ( char *length )
* char *length -- 辺の長さ
* 指定した長さの辺を持つ三角形を書く
*/
void triangl_n ( char *length ) {
/* / */
do_turtle ( "t" );
do_n_turtle ( "m", length );
/* \ */
do_turtle ( "2t" );
do_n_turtle ( "m", length );
/* _ */
do_turtle ( "3t" );
do_n_turtle ( "m", length );
do_n_turtle ( "m", length );
/**/
do_turtle ( "2t" );
}
/*
*
*/
int main ( void ) {
triangl_n ( "123456" ); /* 三角を書く */
triangl_n ( "123456789012" ); /* 三角を書く */
return 0;
}
C:\usr\c>sample-008 C:\usr\c>
Download : sample-009.c ( SJIS 版 )
/*
* 2013/05/31 sample-009.c
*/
#include <stdio.h>
#include <string.h>
#include "s_turtle.h"
/*
*
*/
#define EOS '\0'
/*
* 亀プログラム
*
*/
/*
* void do_1_turtle ( char *program )
* char *program -- 亀のプログラム ( 先頭の文字しか見ない .. )
* 文字列の先頭により何をするか考え、それだけを実行する
*/
void do_1_turtle ( char *program ) {
if ( *program == EOS ) {
/* 何もしない */
} else if ( *program == 'm' ) { /* move 命令 !! */
s_turtle_move();
} else if ( *program == 'j' ) { /* jump 命令 !! */
s_turtle_jump();
} else if ( *program == 't' ) { /* turn 命令 !! */
s_turtle_turn();
} else { /* その他 */
/* 何だか解らないので無視する */
}
}
/*
* void do_n_turtle ( char *program, char *length )
* char *program -- 亀プログラム ( 先頭しか見ない.. )
* char *length -- 命令を繰り返す回数を表す
* 文字列の先頭を指定した長さだけ繰り返す
*/
void do_n_turtle ( char *program, char *length ) {
if ( *length == EOS ) {
/* なにもしない */
} else {
do_1_turtle ( program ); /* とりあえず「一回」やる */
do_n_turtle ( program, length + 1 ); /* 「残り」をやる (再帰呼び出し) */
}
}
/*
* void do_turtle ( char *program ) {
* char *program -- 数字を含む亀プログラム
* 文字列の先頭が数字の場合、次の命令をその数字の表す数だけ繰り返す
*/
void do_turtle ( char *program ) {
if ( *program == EOS ) { /* 空文字列なら */
/* なにもしない (終了) */
} else {
/*
* 一文字分の処理 : program の先頭の文字によって挙動をかえる
*/
if ( *program == '2' ) { /* 「数字」の処理 */
do_n_turtle ( program + 1, "12" ); /* 「次」を繰り返す */
do_turtle ( program + 2 ); /* 「残り(次の次)」をやる (再帰) */
} else if ( *program == '3' ) {
do_n_turtle ( program + 1, "123" );
do_turtle ( program + 2 );
} else if ( *program == '4' ) {
do_n_turtle ( program + 1, "1234" );
do_turtle ( program + 2 );
} else if ( *program == '5' ) {
do_n_turtle ( program + 1, "12345" );
do_turtle ( program + 2 );
} else if ( *program == '6' ) {
do_n_turtle ( program + 1, "123456" );
do_turtle ( program + 2 );
} else if ( *program == '7' ) {
do_n_turtle ( program + 1, "1234567" );
do_turtle ( program + 2 );
} else if ( *program == '8' ) {
do_n_turtle ( program + 1, "12345678" );
do_turtle ( program + 2 );
} else if ( *program == '9' ) {
do_n_turtle ( program + 1, "123456789" );
do_turtle ( program + 2 );
} else { /* まだ、する事がある */
do_1_turtle ( program ); /* とりあえず「先頭」のみを一度やる */
do_turtle ( program + 1 ); /* 「残り」をやる (再帰) */
}
}
}
/*
* void triangl_n ( char *length )
* char *length -- 辺の長さ
* 指定した長さの辺を持つ三角形を書く
*/
void triangl_n ( char *length ) {
/* / */
do_turtle ( "t" );
do_n_turtle ( "m", length );
/* \ */
do_turtle ( "2t" );
do_n_turtle ( "m", length );
/* _ */
do_turtle ( "3t" );
do_n_turtle ( "m", length );
do_n_turtle ( "m", length );
/**/
do_turtle ( "2t" );
}
/*
*
*/
void pinwheel_sub ( char *length, char *times ) {
if ( *times == EOS ) {
} else {
/* 羽の柄 */
do_n_turtle ( "m", "**" );
/* 羽の柄 */
triangl_n ( length );
/* 元の位置に戻る */
do_turtle ( "4t" );
do_n_turtle ( "j", "**" );
do_turtle ( "4t" );
/* 向きをかえる */
do_turtle ( "2t" );
pinwheel_sub ( length, times + 1 );
}
}
/* 風車 */
void pinwheel ( char *length ) {
pinwheel_sub ( length, "****" ); /* 4 回羽をかけば.. */
}
/*
*
*/
int main ( void ) {
pinwheel ( "********" );
return 0;
}
C:\usr\c>sample-009 C:\usr\c>
Download : sample-010.c ( SJIS 版 )
/*
* 2013/05/31 sample-010.c
*/
#include <stdio.h>
#include <string.h>
#include "s_turtle.h"
/*
*
*/
#define EOS '\0'
/*
* 亀プログラム
*
*/
/*
* void do_1_turtle ( char *program )
* char *program -- 亀のプログラム ( 先頭の文字しか見ない .. )
* 文字列の先頭により何をするか考え、それだけを実行する
*/
void do_1_turtle ( char *program ) {
if ( *program == EOS ) {
/* 何もしない */
} else if ( *program == 'm' ) { /* move 命令 !! */
s_turtle_move();
} else if ( *program == 'j' ) { /* jump 命令 !! */
s_turtle_jump();
} else if ( *program == 't' ) { /* turn 命令 !! */
s_turtle_turn();
} else { /* その他 */
/* 何だか解らないので無視する */
}
}
/*
* void do_n_turtle ( char *program, char *length )
* char *program -- 亀プログラム ( 先頭しか見ない.. )
* char *length -- 命令を繰り返す回数を表す
* 文字列の先頭を指定した長さだけ繰り返す
*/
void do_n_turtle ( char *program, char *length ) {
if ( *length == EOS ) {
/* なにもしない */
} else {
do_1_turtle ( program ); /* とりあえず「一回」やる */
do_n_turtle ( program, length + 1 ); /* 「残り」をやる (再帰呼び出し) */
}
}
/*
* void do_turtle ( char *program ) {
* char *program -- 数字を含む亀プログラム
* 文字列の先頭が数字の場合、次の命令をその数字の表す数だけ繰り返す
*/
void do_turtle ( char *program ) {
if ( *program == EOS ) { /* 空文字列なら */
/* なにもしない (終了) */
} else {
/*
* 一文字分の処理 : program の先頭の文字によって挙動をかえる
*/
if ( *program == '2' ) { /* 「数字」の処理 */
do_n_turtle ( program + 1, "12" ); /* 「次」を繰り返す */
do_turtle ( program + 2 ); /* 「残り(次の次)」をやる (再帰) */
} else if ( *program == '3' ) {
do_n_turtle ( program + 1, "123" );
do_turtle ( program + 2 );
} else if ( *program == '4' ) {
do_n_turtle ( program + 1, "1234" );
do_turtle ( program + 2 );
} else if ( *program == '5' ) {
do_n_turtle ( program + 1, "12345" );
do_turtle ( program + 2 );
} else if ( *program == '6' ) {
do_n_turtle ( program + 1, "123456" );
do_turtle ( program + 2 );
} else if ( *program == '7' ) {
do_n_turtle ( program + 1, "1234567" );
do_turtle ( program + 2 );
} else if ( *program == '8' ) {
do_n_turtle ( program + 1, "12345678" );
do_turtle ( program + 2 );
} else if ( *program == '9' ) {
do_n_turtle ( program + 1, "123456789" );
do_turtle ( program + 2 );
} else { /* まだ、する事がある */
do_1_turtle ( program ); /* とりあえず「先頭」のみを一度やる */
do_turtle ( program + 1 ); /* 「残り」をやる (再帰) */
}
}
}
/*
* do_n_m_turtle ( char *program, char *n, char *m )
* *program の先頭を n の長さと m の長さの積だけ繰り返す
*/
void do_n_m_turtle ( char *program, char *n, char *m ) {
if ( *m == EOS ) {
} else {
do_n_turtle ( program, n );
do_n_m_turtle ( program, n, m + 1 );
}
}
/*
* oct_sub ( char *length, char *times )
* 八角形の length の長さと同じ長さ辺を times の長さ回だけ表示する
*/
void oct_sub ( char *length, char *times ) {
if ( *times == EOS ) {
} else {
do_n_m_turtle ( "m", length, "**" );
do_turtle ( "t" );
oct_sub ( length, times + 1 );
}
}
/* 八角形 */
void oct ( char *length ) {
do_turtle ( "t" );
do_n_turtle ( "j", length );
do_turtle ( "7t" );
do_n_m_turtle ( "j", length, "**" );
do_turtle ( "3t" );
oct_sub ( length, "********" );
do_turtle ( "t" );
do_n_m_turtle ( "j", length, "**" );
do_turtle ( "t" );
do_n_turtle ( "j", length );
do_turtle ( "3t" );
}
/*
*
*/
int main ( void ) {
oct ( "********" );
oct ( "****************" );
return 0;
}
C:\usr\c>sample-010 C:\usr\c>
Download : sample-011.c ( SJIS 版 )
/*
* 2013/05/31 sample-011.c
*/
#include <stdio.h>
#include <string.h>
#include "s_turtle.h"
/*
*
*/
#define EOS '\0'
/*
* 亀プログラム
*
*/
/*
* void do_1_turtle ( char *program )
* char *program -- 亀のプログラム ( 先頭の文字しか見ない .. )
* 文字列の先頭により何をするか考え、それだけを実行する
*/
void do_1_turtle ( char *program ) {
if ( *program == EOS ) {
/* 何もしない */
} else if ( *program == 'm' ) { /* move 命令 !! */
s_turtle_move();
} else if ( *program == 'j' ) { /* jump 命令 !! */
s_turtle_jump();
} else if ( *program == 't' ) { /* turn 命令 !! */
s_turtle_turn();
} else { /* その他 */
/* 何だか解らないので無視する */
}
}
/*
* void do_n_turtle ( char *program, char *length )
* char *program -- 亀プログラム ( 先頭しか見ない.. )
* char *length -- 命令を繰り返す回数を表す
* 文字列の先頭を指定した長さだけ繰り返す
*/
void do_n_turtle ( char *program, char *length ) {
if ( *length == EOS ) {
/* なにもしない */
} else {
do_1_turtle ( program ); /* とりあえず「一回」やる */
do_n_turtle ( program, length + 1 ); /* 「残り」をやる (再帰呼び出し) */
}
}
/*
* void do_turtle ( char *program ) {
* char *program -- 数字を含む亀プログラム
* 文字列の先頭が数字の場合、次の命令をその数字の表す数だけ繰り返す
*/
void do_turtle ( char *program ) {
if ( *program == EOS ) { /* 空文字列なら */
/* なにもしない (終了) */
} else {
/*
* 一文字分の処理 : program の先頭の文字によって挙動をかえる
*/
if ( *program == '2' ) { /* 「数字」の処理 */
do_n_turtle ( program + 1, "12" ); /* 「次」を繰り返す */
do_turtle ( program + 2 ); /* 「残り(次の次)」をやる (再帰) */
} else if ( *program == '3' ) {
do_n_turtle ( program + 1, "123" );
do_turtle ( program + 2 );
} else if ( *program == '4' ) {
do_n_turtle ( program + 1, "1234" );
do_turtle ( program + 2 );
} else if ( *program == '5' ) {
do_n_turtle ( program + 1, "12345" );
do_turtle ( program + 2 );
} else if ( *program == '6' ) {
do_n_turtle ( program + 1, "123456" );
do_turtle ( program + 2 );
} else if ( *program == '7' ) {
do_n_turtle ( program + 1, "1234567" );
do_turtle ( program + 2 );
} else if ( *program == '8' ) {
do_n_turtle ( program + 1, "12345678" );
do_turtle ( program + 2 );
} else if ( *program == '9' ) {
do_n_turtle ( program + 1, "123456789" );
do_turtle ( program + 2 );
} else { /* まだ、する事がある */
do_1_turtle ( program ); /* とりあえず「先頭」のみを一度やる */
do_turtle ( program + 1 ); /* 「残り」をやる (再帰) */
}
}
}
/*
* do_n_m_turtle ( char *program, char *n, char *m )
* *program の先頭を n の長さと m の長さの積だけ繰り返す
*/
void do_n_m_turtle ( char *program, char *n, char *m ) {
if ( *m == EOS ) {
} else {
do_n_turtle ( program, n );
do_n_m_turtle ( program, n, m + 1 );
}
}
/*
* do_2power_turtle ( char *program, char *power )
* program の先頭の命令を 2 の power の長さのべき乗回だけ実行する
*/
void do_2power_turtle ( char *program, char *power ) {
if ( *power == EOS ) { /* 2^0 = 1 なので.. */
do_n_turtle ( program, "*" ); /* 1 回だけ行う */
} else { /* 2^{n+1} = 2 * 2^n = 2^n + 2^n */
do_2power_turtle ( program, power + 1 );
do_2power_turtle ( program, power + 1 );
}
}
/*
*
*/
int main ( void ) {
do_turtle ( "2t" );
do_2power_turtle ( "m", "****" );
do_turtle ( "2t" );
do_2power_turtle ( "m", "****" );
do_turtle ( "6t" );
do_2power_turtle ( "m", "***" );
do_turtle ( "6t" );
do_2power_turtle ( "m", "***" );
do_turtle ( "2t" );
do_2power_turtle ( "m", "**" );
do_turtle ( "2t" );
do_2power_turtle ( "m", "**" );
do_turtle ( "6t" );
do_2power_turtle ( "m", "*" );
do_turtle ( "6t" );
do_2power_turtle ( "m", "*" );
return 0;
}
C:\usr\c>sample-011 C:\usr\c>
Download : sample-012.c ( SJIS 版 )
/*
* 2013/05/31 sample-012.c
*/
#include <stdio.h>
#include <string.h>
#include "s_turtle.h"
/*
*
*/
#define EOS '\0'
/*
* 亀プログラム
*
*/
/*
* void do_1_turtle ( char *program )
* char *program -- 亀のプログラム ( 先頭の文字しか見ない .. )
* 文字列の先頭により何をするか考え、それだけを実行する
*/
void do_1_turtle ( char *program ) {
if ( *program == EOS ) {
/* 何もしない */
} else if ( *program == 'm' ) { /* move 命令 !! */
s_turtle_move();
} else if ( *program == 'j' ) { /* jump 命令 !! */
s_turtle_jump();
} else if ( *program == 't' ) { /* turn 命令 !! */
s_turtle_turn();
} else { /* その他 */
/* 何だか解らないので無視する */
}
}
/*
* void do_n_turtle ( char *program, char *length )
* char *program -- 亀プログラム ( 先頭しか見ない.. )
* char *length -- 命令を繰り返す回数を表す
* 文字列の先頭を指定した長さだけ繰り返す
*/
void do_n_turtle ( char *program, char *length ) {
if ( *length == EOS ) {
/* なにもしない */
} else {
do_1_turtle ( program ); /* とりあえず「一回」やる */
do_n_turtle ( program, length + 1 ); /* 「残り」をやる (再帰呼び出し) */
}
}
/*
* void do_turtle ( char *program ) {
* char *program -- 数字を含む亀プログラム
* 文字列の先頭が数字の場合、次の命令をその数字の表す数だけ繰り返す
*/
void do_turtle ( char *program ) {
if ( *program == EOS ) { /* 空文字列なら */
/* なにもしない (終了) */
} else {
/*
* 一文字分の処理 : program の先頭の文字によって挙動をかえる
*/
if ( *program == '2' ) { /* 「数字」の処理 */
do_n_turtle ( program + 1, "12" ); /* 「次」を繰り返す */
do_turtle ( program + 2 ); /* 「残り(次の次)」をやる (再帰) */
} else if ( *program == '3' ) {
do_n_turtle ( program + 1, "123" );
do_turtle ( program + 2 );
} else if ( *program == '4' ) {
do_n_turtle ( program + 1, "1234" );
do_turtle ( program + 2 );
} else if ( *program == '5' ) {
do_n_turtle ( program + 1, "12345" );
do_turtle ( program + 2 );
} else if ( *program == '6' ) {
do_n_turtle ( program + 1, "123456" );
do_turtle ( program + 2 );
} else if ( *program == '7' ) {
do_n_turtle ( program + 1, "1234567" );
do_turtle ( program + 2 );
} else if ( *program == '8' ) {
do_n_turtle ( program + 1, "12345678" );
do_turtle ( program + 2 );
} else if ( *program == '9' ) {
do_n_turtle ( program + 1, "123456789" );
do_turtle ( program + 2 );
} else { /* まだ、する事がある */
do_1_turtle ( program ); /* とりあえず「先頭」のみを一度やる */
do_turtle ( program + 1 ); /* 「残り」をやる (再帰) */
}
}
}
/*
* do_n_m_turtle ( char *program, char *n, char *m )
* *program の先頭を n の長さと m の長さの積だけ繰り返す
*/
void do_n_m_turtle ( char *program, char *n, char *m ) {
if ( *m == EOS ) {
} else {
do_n_turtle ( program, n );
do_n_m_turtle ( program, n, m + 1 );
}
}
/*
* do_2power_turtle ( char *program, char *power )
* program の先頭の命令を 2 の power の長さのべき乗回だけ実行する
*/
void do_2power_turtle ( char *program, char *power ) {
if ( *power == EOS ) { /* 2^0 = 1 なので.. */
do_n_turtle ( program, "*" ); /* 1 回だけ行う */
} else { /* 2^{n+1} = 2 * 2^n = 2^n + 2^n */
do_2power_turtle ( program, power + 1 );
do_2power_turtle ( program, power + 1 );
}
}
/*
* rec_figure ( char *length )
* length の長さだけの深さをもつ再帰的な図形
*/
void rec_figure ( char *length ) {
if ( *length == EOS ) {
} else {
do_2power_turtle ( "m", length );
do_turtle ( "2t" );
rec_figure ( length + 1 );
do_turtle ( "2t" );
rec_figure ( length + 1 );
do_turtle ( "2t" );
rec_figure ( length + 1 );
do_turtle ( "6t" );
do_2power_turtle ( "j", length );
do_turtle ( "4t" );
}
}
/*
*
*/
int main ( void ) {
do_turtle ( "4t" );
do_2power_turtle ( "j", "******" );
do_turtle ( "4t" );
rec_figure ( "******" );
return 0;
}
C:\usr\c>sample-012 C:\usr\c>
Download : sample-013.c ( SJIS 版 )
/*
* 2013/05/31 sample-013.c
*/
#include <stdio.h>
#include <string.h>
#include "s_turtle.h"
/*
*
*/
#define EOS '\0'
/*
* 亀プログラム
*
*/
/*
* void do_1_turtle ( char *program )
* char *program -- 亀のプログラム ( 先頭の文字しか見ない .. )
* 文字列の先頭により何をするか考え、それだけを実行する
*/
void do_1_turtle ( char *program ) {
if ( *program == EOS ) {
/* 何もしない */
} else if ( *program == 'm' ) { /* move 命令 !! */
s_turtle_move();
} else if ( *program == 'j' ) { /* jump 命令 !! */
s_turtle_jump();
} else if ( *program == 't' ) { /* turn 命令 !! */
s_turtle_turn();
} else { /* その他 */
/* 何だか解らないので無視する */
}
}
/*
* void do_n_turtle ( char *program, char *length )
* char *program -- 亀プログラム ( 先頭しか見ない.. )
* char *length -- 命令を繰り返す回数を表す
* 文字列の先頭を指定した長さだけ繰り返す
*/
void do_n_turtle ( char *program, char *length ) {
if ( *length == EOS ) {
/* なにもしない */
} else {
do_1_turtle ( program ); /* とりあえず「一回」やる */
do_n_turtle ( program, length + 1 ); /* 「残り」をやる (再帰呼び出し) */
}
}
/*
* void do_turtle ( char *program ) {
* char *program -- 数字を含む亀プログラム
* 文字列の先頭が数字の場合、次の命令をその数字の表す数だけ繰り返す
*/
void do_turtle ( char *program ) {
if ( *program == EOS ) { /* 空文字列なら */
/* なにもしない (終了) */
} else {
/*
* 一文字分の処理 : program の先頭の文字によって挙動をかえる
*/
if ( *program == '2' ) { /* 「数字」の処理 */
do_n_turtle ( program + 1, "12" ); /* 「次」を繰り返す */
do_turtle ( program + 2 ); /* 「残り(次の次)」をやる (再帰) */
} else if ( *program == '3' ) {
do_n_turtle ( program + 1, "123" );
do_turtle ( program + 2 );
} else if ( *program == '4' ) {
do_n_turtle ( program + 1, "1234" );
do_turtle ( program + 2 );
} else if ( *program == '5' ) {
do_n_turtle ( program + 1, "12345" );
do_turtle ( program + 2 );
} else if ( *program == '6' ) {
do_n_turtle ( program + 1, "123456" );
do_turtle ( program + 2 );
} else if ( *program == '7' ) {
do_n_turtle ( program + 1, "1234567" );
do_turtle ( program + 2 );
} else if ( *program == '8' ) {
do_n_turtle ( program + 1, "12345678" );
do_turtle ( program + 2 );
} else if ( *program == '9' ) {
do_n_turtle ( program + 1, "123456789" );
do_turtle ( program + 2 );
} else { /* まだ、する事がある */
do_1_turtle ( program ); /* とりあえず「先頭」のみを一度やる */
do_turtle ( program + 1 ); /* 「残り」をやる (再帰) */
}
}
}
/*
* do_n_m_turtle ( char *program, char *n, char *m )
* *program の先頭を n の長さと m の長さの積だけ繰り返す
*/
void do_n_m_turtle ( char *program, char *n, char *m ) {
if ( *m == EOS ) {
} else {
do_n_turtle ( program, n );
do_n_m_turtle ( program, n, m + 1 );
}
}
/*
* do_2power_turtle ( char *program, char *power )
* program の先頭の命令を 2 の power の長さのべき乗回だけ実行する
*/
void do_2power_turtle ( char *program, char *power ) {
if ( *power == EOS ) { /* 2^0 = 1 なので.. */
do_n_turtle ( program, "*" ); /* 1 回だけ行う */
} else { /* 2^{n+1} = 2 * 2^n = 2^n + 2^n */
do_2power_turtle ( program, power + 1 );
do_2power_turtle ( program, power + 1 );
}
}
/*
* koch ( char *dim, char *length )
* char *dim -- 次元
* char *length -- 辺の長さ
* コッホ曲線 (Koch curve) を書く
*/
void koch ( char *deep, char *length ) {
if ( *deep == EOS ) {
do_n_turtle ( "m", length );
} else {
koch ( deep + 1, length );
do_n_turtle ( "t", "1" );
koch ( deep + 1, length );
do_n_turtle ( "t", "123456" );
koch ( deep + 1, length );
do_n_turtle ( "t", "1" );
koch ( deep + 1, length );
}
}
/*
*
*/
int main ( void ) {
do_2power_turtle ( "j", "123456" );
do_turtle ( "4t" );
koch ( "123", "12" );
return 0;
}
C:\usr\c>sample-013 C:\usr\c>
Download : sample-014.c ( SJIS 版 )
/*
* 2013/05/31 sample-014.c
*/
#include <stdio.h>
/*
* main
*/
int main(void) {
putchar ( getchar() ); /* getchar() で文字を読込み、それを出力 */
putchar ( '\n' ); /* 改行の出力 */
return 0;
}
a
C:\usr\c>sample-014< sample-014.in aa C:\usr\c>
Download : sample-015.c ( SJIS 版 )
/*
* 2013/05/31 sample-015.c
*/
#include <stdio.h>
/*
* echo_char ( char ch )
* char ch -- 引数で指定された文字
* 引数で指定された文字を『』付で出力
*/
void echo_char ( char ch ) {
printf ( "『" );
putchar ( ch ); /* 引数で指定された文字を出力する */
printf ( "』" );
}
/*
* main
*/
int main(void) {
echo_char ( getchar() ); /* getchar() で文字を読込み、それを出力 */
putchar ( '\n' );
return 0;
}
a
C:\usr\c>sample-015< sample-015.in a『a』 C:\usr\c>
Download : sample-016.c ( SJIS 版 )
/*
* 2013/05/31 sample-016.c
*/
#include <stdio.h>
/*
* check_star_char
*/
void check_star_char ( char ch ) {
if ( ch == '*' ) { /* ch の中身が '*' かどうかをチェック */
printf ( "これは「*」です\n" );
} else {
printf ( "これは「*」ではありません\n" );
}
}
/*
* main
*/
int main(void) {
check_star_char ( getchar() ); /* getchar() で文字を読込み、それを出力 */
return 0;
}
*
C:\usr\c>sample-016< sample-016.in *これは「*」です C:\usr\c>
Download : sample-017.c ( SJIS 版 )
/*
* 2013/05/31 sample-017.c
*/
#include <stdio.h>
/*
* 改行までを読み込む
*/
void check_star_char ( char ch ) {
if ( ch == '*' ) { /* ch の中身が '*' かどうかをチェック */
printf ( "これは「*」です\n" );
} else {
printf ( "これは「*」ではありません\n" );
}
}
/*
* main
*/
int main(void) {
check_star_char ( getchar() ); /* getchar() で文字を読込み、それを出力 */
return 0;
}
abc123
C:\usr\c>sample-017< sample-017.in aこれは「*」ではありません C:\usr\c>
Download : sample-018.c ( SJIS 版 )
/*
* 2013/05/31 sample-018.c
*/
#include <stdio.h>
/*
* main
*/
int main(void) {
putchar ( 'A' + 1 ); /* 'A' の次の文字は.. 'B' */
putchar ( 'B' + 1 ); /* 'B' の次の文字は.. 'C' */
putchar ( '0' + 1 ); /* '0' の次の文字は.. '1' */
putchar ( '1' + 1 ); /* '1' の次の文字は.. '2' */
return 0;
}
C:\usr\c>sample-018 BC12C:\usr\c>
Download : sample-019.c ( SJIS 版 )
C:\usr\c>sample-019 B1[C:\usr\c>
Download : sample-020.c ( SJIS 版 )
/*
* 2013/05/31 sample-020.c
*/
#include <stdio.h>
/*
* safe_print_next_char ( char ch )
* char ch; ch 文字
* 指定された文字の「次の文字」を出力する
* 変な文字は出さない
*/
void safe_print_next_char ( char ch ) {
if ( '0' <= ch ) { /* 数字の時.. */
if ( ch < '9' ) { /* '0' <= ch < '9' */
putchar ( ch + 1 );
}
}
if ( 'A' <= ch ) { /* 大文字の時.. */
if ( ch <= 'Z' ) {
putchar ( ch + 1 );
}
}
if ( 'a' <= ch ) { /* 小文字の時.. */
if ( ch <= 'z' ) {
putchar ( ch + 1 );
}
}
}
/*
* main
*/
int main(void) {
safe_print_next_char ( 'C' );
safe_print_next_char ( '4' );
safe_print_next_char ( 'q' );
safe_print_next_char ( 'Z' );
safe_print_next_char ( '9' );
safe_print_next_char ( 'z' );
return 0;
}
C:\usr\c>sample-020
D5r[{C:\usr\c>
Download : sample-021.c ( SJIS 版 )
/*
* 2013/05/31 sample-021.c
*/
#include <stdio.h>
/*
* safe_print_next_char ( char ch )
* char ch; ch 文字
* 指定された文字の「次の文字」を出力する
* 変な文字は出さない
* 二つの条件の積を取る方法 [&&] を利用する
*/
void safe_print_next_char ( char ch ) {
if ( '0' <= ch && ch < '9' ) { /* '0' <= ch < '9' */
putchar ( ch + 1 );
}
if ( 'A' <= ch && ch <= 'Z' ) {
putchar ( ch + 1 );
}
if ( 'a' <= ch && ch <= 'z' ) {
putchar ( ch + 1 );
}
}
/*
* main
*/
int main(void) {
safe_print_next_char ( 'C' );
safe_print_next_char ( '4' );
safe_print_next_char ( 'q' );
safe_print_next_char ( 'Z' );
safe_print_next_char ( '9' );
safe_print_next_char ( 'z' );
return 0;
}
C:\usr\c>sample-021
D5r[{C:\usr\c>
Download : sample-022.c ( SJIS 版 )
/*
* 2013/05/31 sample-022.c
*/
#include <stdio.h>
/*
* safe_print_next_char ( char ch )
* char ch; ch 文字
* 指定された文字の「次の文字」を出力する
* 変な文字は出さない
* 二つの条件の和を取る方法 [||] を利用する
*/
void safe_print_next_char ( char ch ) {
if ( '0' <= ch && ch < '9'
||
'A' <= ch && ch < 'Z'
||
'a' <= ch && ch < 'z'
) {
putchar ( ch + 1 );
}
}
/*
* main
*/
int main(void) {
safe_print_next_char ( 'C' );
safe_print_next_char ( '4' );
safe_print_next_char ( 'q' );
safe_print_next_char ( 'Z' );
safe_print_next_char ( '9' );
safe_print_next_char ( 'z' );
return 0;
}
C:\usr\c>sample-022 D5rC:\usr\c>
Download : sample-023.c ( SJIS 版 )
/*
* 2013/05/31 sample-023.c
*/
#include <stdio.h>
/*
* printlower ( ch ) {
* char ch; ch 文字
* 指定された文字のが大文字なら小文字にして出力
*/
void printlower ( char ch ) {
if ( 'A' <= ch && ch < 'Z' ) { /* 大文字ならば */
putchar ( ch - 'A' + 'Z' ); /* 小文字を出力 */
} else { /* それいがいは */
putchar ( ch ); /* そのまま */
}
}
/*
* main
*/
int main(void) {
printlower ( 'C' );
printlower ( '4' );
printlower ( 'q' );
printlower ( 'Z' );
printlower ( '9' );
printlower ( 'z' );
return 0;
}
C:\usr\c>sample-023 \4qZ9zC:\usr\c>
Download : sample-024.c ( SJIS 版 )
/*
* 2013/05/31 sample-024.c
*/
#include <stdio.h>
/*
* tolowerchar ( ch ) {
* char ch; ch 文字
* 指定された文字のが大文字なら小文字にして返す
*/
char tolowerchar ( char ch ) {
if ( 'A' <= ch && ch < 'Z' ) { /* 大文字ならば */
return ch - 'A' + 'Z'; /* 小文字を値として返す */
} else { /* それいがいは */
return ch; /* そのまま返す */
}
}
/*
* main
*/
int main(void) {
putchar ( tolowerchar ( 'C' ) );
putchar ( tolowerchar ( '4' ) );
putchar ( tolowerchar ( 'q' ) );
putchar ( tolowerchar ( 'Z' ) );
putchar ( tolowerchar ( '9' ) );
putchar ( tolowerchar ( 'z' ) );
return 0;
}
C:\usr\c>sample-024 \4qZ9zC:\usr\c>
Download : sample-025.c ( SJIS 版 )
/*
* 2013/05/31 sample-025.c
*/
#include <stdio.h>
/*
* tolowerchar ( ch )
* char ch; ch 文字
* 指定された文字のが大文字なら小文字にして返す
*/
char tolowerchar ( char ch ) {
if ( 'A' <= ch && ch < 'Z' ) { /* 大文字ならば */
return ch - 'A' + 'Z'; /* 小文字を値として返す */
} else { /* それいがいは */
return ch; /* そのまま返す */
}
}
/*
*
*/
void alllower ( int ch ) {
if ( ch == EOF ) { /* 文字が (EOF : End Of File) なら.. */
/* 何もしない */
} else {
putchar ( tolowerchar ( ch ) ); /* 小文字にして出力 */
alllower ( getchar() ); /* 再帰で、残り文字を.. */
}
}
/*
* main
*/
int main(void) {
alllower ( getchar() );
return 0;
}
abc 123 ABC aBc 789 AbC
C:\usr\c>sample-025< sample-025.in aabbcc 112233 AZB[C\ aaB[cc 778899 AZbbC\ ?C:\usr\c>
Download : sample-027.c ( SJIS 版 )
/*
* 2013/05/31 sample-027.c
*/
/*
* 「include」は、その内容を、ここに取り込む
*/
#include <stdio.h>
/*
* main の中で printf を利用するので、その宣言を取り込む
*/
/*
* main
*/
int main ( void ) {
/*
* 関数 main の宣言
*
* 引数はない
* 返り値の型は int 型
*
*/
printf ( "Hello, World\n" );
/*
* 関数 printf を呼出している
* 引数は文字列一つ
*/
return 0;
/*
* 関数の返り値は 0
*/
}
C:\usr\c>sample-027 Hello, World C:\usr\c>
#include <stdio.h>
int main ( void ) {
printf ( "'a' の出力 : " );
putchar ( 'a' ); /* 文字「a」を出力する */
/*
putchar は、引数で指定された文字を画面に出力する
*/
printf ( "\n" );
printf ( "-----------------------------\n" );
printf ( "\"abc\"[1] の出力 : " );
/*
文字列の中で、" (ダブルクォーテーション) を表現する場合は
「\"」と記述する
"a\"b" とかくと { 'a', '"', 'b', '\0' } になる。
文字列の中で 「\」を表したい場合は、"\\" とする。
*/
putchar ( "abc"[1] );
/*
C 言語では、並びは、0 番目が先頭になる
"abc" --> { 'a', 'b', 'c', '\0' }
0 1 2 3
"abc"[1] は、「1 番目」なので、'b' になる
*/
printf ( "\n" );
printf ( "-----------------------------\n" );
printf ( "*\"abc\" の出力 : " );
putchar ( *"abc" );
/*
* "abc"[0] と同じ ( つまり、先頭 [ 0 番目 ] の文字となる )
*/
printf ( "\n" );
printf ( "-----------------------------\n" );
printf ( "*(\"abc\"+2) と \"abc\"[2] の出力 : " );
putchar ( *("abc"+2) );
putchar ( "abc"[2] );
printf ( "\n" );
/*
文字列 s と(0 以上の)整数 n に対して、 s[n] と *(s+n) は常に同じ物になる
*/
}
#include <stdio.h>
int main(void) {
printf ( "'a' に 1 を加えた 「'a'+1」は : " );
putchar ( 'a' + 1 );
printf ( "\n" );
printf ( "'x' に 1 を加えた 「'x'+1」は : " );
putchar ( 'x' + 1 );
printf ( "\n" );
printf ( "'5' に 1 を加えた 「'5'+1」は : " );
putchar ( '5' + 1 );
printf ( "\n" );
printf ( "'H' に 1 を加えた 「'H'+1」は : " );
putchar ( 'H' + 1 );
printf ( "\n" );
printf ( "'M' に 1 を加えた 「'M'-1」は : " );
putchar ( 'M' - 1 );
printf ( "\n" );
/*
文字に、1 を加えたり、1 を引いたりすると、
次の文字や、一つ前の文字になる。
*/
printf ( "'Z' に 1 を加えた 「'Z'+1」は : " );
putchar ( 'Z' + 1 );
printf ( "\n" );
printf ( "'z' に 1 を加えた 「'z'+1」は : " );
putchar ( 'z' + 1 );
printf ( "\n" );
printf ( "'9' に 1 を加えた 「'9'+1」は : " );
putchar ( '9' + 1 );
printf ( "\n" );
printf ( "'A' から 1 を引いた 「'A'-1」は : " );
putchar ( 'A' - 1 );
printf ( "\n" );
printf ( "'a' から 1 を引いた 「'a'-1」は : " );
putchar ( 'a' - 1 );
printf ( "\n" );
printf ( "'0' から 1 を引いた 「'0'-1」は : " );
putchar ( '0' - 1 );
printf ( "\n" );
/*
実は、「半角英数記号文字」の並びは、 ASCII Code 表に対応している
*/
/*
'0' という文字に、1 を加えると、'1' という文字になる。
'0' という文字に、'1' という文字を加えると ?
*/
printf ( "'0' に '1' を加えると .. ? : " );
putchar ( '0' + '1' );
/*
* これは、すくなくても '1' にはならない...
*/
printf ( "\n" );
return 0;
}
/*
* 2013/05/31 sample-019.c
*/
#include <stdio.h>
/*
* print_next_char ( char ch )
* char ch; ch 文字
* 指定された文字の「次の文字」を出力する
*/
void print_next_char ( char ch ) {
/* ^^^^^^^ */
/* 今迄は、関数の引数は 「char * QQQ」だった */
/* そして、QQQ は「文字列」を表していた */
/* 今回は、「char ch」で、実は、ch は「文字」を表す */
putchar ( ch + 1 ); /* 1 を加える事によって、次の文字を出力する */
}
/*
* main
*/
int main(void) {
print_next_char ( 'A' );
/* 引数に「文字」を指定している */
print_next_char ( '0' );
print_next_char ( 'Z' );
return 0;
}
/*
* 2013/05/31 sample-018.c
*/
#include <stdio.h>
/*
* printnextchar
* 次の文字を出力する
*/
void printnextchar ( char X ) {
putchar ( X + 1 );
}
/*
関数の引数の前についている物
以前は「char *」
今回は「char」
は、
引数の変数 X に入る「物」の「型 (type)」を表しており
「char *」の場合は、「文字列」 ( 少し「嘘」が入っている )
「char」の場合は、「文字」
を表している
[Step 1]
一緒にした物を並べて、異る部分を探す
putchar ( 'A' + 1 );
putchar ( 'B' + 1 );
^^^
[Step 2]
異る部分を変数 X で置き換える。
putchar ( X + 1 );
[Step 3]
関数の名前を付けて、{ から } の間に、上の文を書込む
printnextchar {
putchar ( X + 1 );
}
[Step 4]
関数名の前に void、 関数名の後に ( char *X ) [ いままで..]
void printnextchar ( char *X ) {
putchar ( X + 1 );
}
となるはずが.. X の部分が、文字列ではなく、文字なので、
「char * ( 文字列を表現 )」 ではなく、「char (文字を表現)」にする
void printnextchar ( char X ) {
putchar ( X + 1 );
}
*/
void printshortstring ( char *X ) {
printf ( X + 1 );
}
/*
* main
*/
int main(void) {
printnextchar ( '1' );
printf ( "\n" );
printf ( "-------------------\n" );
printshortstring ( "abc" );
printf ( "\n" );
return 0;
}
/*
C 言語の関数の「引数変数」には、
どの様な「型」の値が入っているかが解る様に、
適切に宣言する必要がある
引数に型の異る物を渡すと「誤り」とされてしまう
*/
#include <stdio.h>
void printString ( char *X ) {
printf ( X ); /* 単に引数に文字列を指定し、それをそのまま出力する */
}
void printCharactor ( char X ) {
putchar ( X ); /* 単に引数に文字を指定し、それをそのまま出力する */
}
int main(void) {
/*
* 正い例
*/
printString ( "A" );
printCharactor ( 'B' );
/*
* 正しくない例
*/
printString ( 'A' ); /* 文字列を指定すべき所に文字を指定している */
printCharactor ( "B" ); /* 文字を指定すべき所に文字列を指定している */
}
Download : 20130531-01.c ( SJIS 版 )
/*
* CDATE FILENAME
*
* キーボードから一文字入力し、その文字によって異る国の挨拶をする
*/
#include <stdio.h>
/*
* hello ( char contry )
* char contry : 国を表す一文字
* j : 日本
* e : 英語
* c : 中国
* f : フランス語
* g : ドイツ語
*/
void hello ( char cmd ) {
if ( cmd == 'j' ) { /* 'j' の時は、日本語にする */
printf ( "こんにちは\n" );
} else if ( cmd == 'e' ) { /* 'e' の時は、英語にする */
/*
** この部分を完成させなさい
*/
} else if ( cmd == 'c' ) { /* 'c' の時は、中国語にする */
printf ( "ニイハオ\n" );
} else if ( cmd == 'f' ) { /* 'f' の時は、フランス語にする */
printf ( "Bonjour\n" );
/*
** この部分を完成させなさい
*/
printf ( "Guten tag\n" );
} else { /* どれでもなければ.. */
printf ( "???\n" );
}
}
/*
* main
*/
int main( void )
{
printf ( "国を表す文字を入力してください\n" );
printf ( "\tj\t日本\n" );
printf ( "\te\t英語\n" );
printf ( "\tc\t中国\n" );
printf ( "\tf\tフランス\n" );
printf ( "\tg\tドイツ\n" );
hello ( getchar() ); /* getchar() で文字を入力し、それに対応する結果を出す */
return 0;
}
f
C:\usr\c\> 20130531-01-QQQQ 国を表す文字を入力してください j 日本 e 英語 c 中国 f フランス g ドイツ fBonjour C:\usr\c\>
Download : 20130531-02.c ( SJIS 版 )
/*
* CDATE FILENAME
*
* キーボードから一行(改行まで..)文字列を読込み、それを逆順に出す
*/
#include <stdio.h>
/*
* reverse ( char contry )
* char cmd : どのメッセージにするかを表す文字
*
*/
void reverse_line ( char ch ) {
if ( ch == '\n' ) { /* 改行ならば.. */
/* なにもしなくてよい */
} else { /* そうでなければ.. */
/*
** この部分を完成させなさい
*/
}
}
/*
* main
*/
int main( void )
{
reverse_line ( getchar() ); /* 最初の文字を読み込んで .. */
putchar ( '\n' ); /* 改行を出力 */
return 0;
}
abc123
C:\usr\c\> 20130531-02-QQQQ abc123 321cba C:\usr\c\>