Download : sample-001.c ( utf8 版 )
/*
 * 2016/06/17 sample-001.c
 */
/*
 * 文字の「計算」(1)
 */
#include <stdio.h>
/*
 * main 関数
 */
int main ( int argc, char *argv[] ) {
	putchar ( 'a' );		/* 文字「a」を出力する */
	putchar ( '\n' );		/* 文字「\n」(改行)を出力する */
	return 0;
}
$ ./sample-001.exe a $
Download : sample-002.c ( utf8 版 )
/*
 * 2016/06/17 sample-002.c
 */
/*
 * 文字の「計算」(2)
 */
#include <stdio.h>
/*
 * main 関数
 */
int main ( int argc, char *argv[] ) {
	putchar ( 'a' + 1 );	/* 文字「a」に 1 を加えると... 「b」になる */
	putchar ( '\n' );
	putchar ( '1' + 1 );	/* 文字「1」に 1 を加えると... 「2」になる */
	putchar ( '\n' );
	putchar ( '9' + 1 );	/* 文字「9」に 1 を加えると... 「10」にならない */
	putchar ( '\n' );
	return 0;
}
$ ./sample-002.exe b 2 : $
Download : sample-003.c ( utf8 版 )
/*
 * 2016/06/17 sample-003.c
 */
/*
 * 文字の「計算」(3)
 */
#include <stdio.h>
/*
 * main 関数
 */
int main ( int argc, char *argv[] ) {
	putchar ( 'e' - 1 );	/* 文字「e」から 1 を引くと... 「d」になる */
	putchar ( '\n' );
	putchar ( '5' - 1 );	/* 文字「5」から 1 を引くと... 「4」になる */
	putchar ( '\n' );
	putchar ( '0' - 1 );	/* 文字「0」から 1 を引くと... 「-1」にならない */
	putchar ( '\n' );
	return 0;
}
$ ./sample-003.exe d 4 / $
Download : sample-004.c ( utf8 版 )
/*
 * 2016/06/17 sample-004.c
 */
/*
 * 文字の「計算」(4)
 */
#include <stdio.h>
/*
 * main 関数
 */
int main ( int argc, char *argv[] ) {
	printf ( "一文字を入力して、[Enter] を押してください : " );
	putchar ( getchar() + 1 );		/* 入力された文字の次の文字 */
	putchar ( '\n' );		/* 文字「\n」(改行)を出力する */
	getchar();	/* 改行を読み捨てる */
	printf ( "もう一度、一文字を入力して、[Enter] を押してください : " );
	putchar ( getchar() - 1 );		/* 入力された文字の前の文字 */
	putchar ( '\n' );		/* 文字「\n」(改行)を出力する */
	return 0;
}
B i
$ ./sample-004.exe < sample-004.in 一文字を入力して、[Enter] を押してください : B C もう一度、一文字を入力して、[Enter] を押してください : i h $
Download : sample-005.c ( utf8 版 )
/*
 * 2016/06/17 sample-005.c
 */
/*
 * 文字の「計算」(5)
 */
#include <stdio.h>
/*
 * main 関数
 */
int main ( int argc, char *argv[] ) {
	printf ( "英大字を入力して、[Enter] を押してください : " );
	putchar ( getchar() - 'A' + 'a' );		/* 大文字を小文字に変換 */
	putchar ( '\n' );		/* 文字「\n」(改行)を出力する */
	getchar();	/* 改行を読み捨てる */
	printf ( "英小文字を入力して、[Enter] を押してください : " );
	putchar ( getchar() - 'a' + 'A' );		/* 小文字を大文字に変換 */
	putchar ( '\n' );		/* 文字「\n」(改行)を出力する */
	return 0;
}
B i
$ ./sample-005.exe < sample-005.in 英大字を入力して、[Enter] を押してください : B b 英小文字を入力して、[Enter] を押してください : i I $
/*
 * 20160527-02-QQQQ.c
 *	出力する繰返し回数を整数で指定する ntimeprint を作りなさい
 */
#include <stdio.h>
/*
 * ntimeprint ( int times, char *message )
 *
ntimesprint ( 3, "abc" );
	->
		"abc"
		"abc"
		"abc"
	->
		"abc"
		"abc"
		"abc"
	->
		printf ( "abc" );
		ntimesprint ( 2, "abc" );
	ntimesprint ( times, message );
	->
		printf ( message );
		ntimesprint ( times - 1, message );
	終了する場合
		times が 0 の時に、なにもしなくてよい
 */
void ntimeprint ( int times, char *message ) {
	if ( times <= 0 ) {	/* 非正なら、回数として不適切か、終わり */
		/* 何もしないくてよい */
	} else {								/* 繰返し回数が正ならば.. */
		printf ( message );					/* 少なくても一度は出力し.. */
	/*
	**	 この部分を完成させなさい
	*/
	}
}
/*
 * main
 */
int main ( void ) {
	printf ( "「Hello」を 3 回\n" );
	ntimeprint ( 3, "Hello\n" ); 
	printf ( "「ハ」を 30 回\n" );
	ntimeprint ( 30, "ハ" ); 
	printf ( "\n" );
	return 0;
}
/*
 * 20160527-03-QQQQ.c
 *	負の整数も処理できる printint を作成しなさい
 *	ただし、正の整数を出力する printpositiveintsub, printpositiveint を利用してよい
 */
#include <stdio.h>
/*
 * printint
 */
void printpositiveint( int n ) {
	print_n_digit ( n );
		/*
			n > 0 の時はちゃんと仕事をしてくれる
			n == 0 の時と、
			n < 0 の時、どうすればよいか ?
		*/
}
/*
	-123
		-, 123
		-, (-1)*(-123)
*/
void printint ( int n ) {
	 if ( n < 0 ) {		/* 負の時は.. */
	 	putchar ( '-' );
	 	printpositiveint ( (-1)* n );
	 } else if ( n == 0 ) {
	 	putchar ( '0' );
	 } else {			/* 正の時には.. */
		printpositiveint ( n );
	 }
}
/*
 * printintln
 */
void printintln ( int n ) {
	printint ( n );
	putchar ( '\n' );
}
/*
 * main
 */
int main ( void ) {
	printf ( "123 の出力\n" );
	printintln ( 123 );
	printf ( "-123 の出力\n" );
	printintln ( -123 );
	printf ( "123 + 456 の出力\n" );
	printintln ( 123 + 456 );
	printf ( "123 - 456 の出力\n" );
	printintln ( 123 - 456 );
  return 0;
}
/*
 * CDATE FILENAME
 *
 *	キーボードから一行(改行まで..)文字列を読込み、それを逆順に出す
 */
#include <stdio.h>
/*
 * reverse ( char contry )
 *	char cmd : どのメッセージにするかを表す文字
 *		
 *		abc\n
 *			cba\n
 *
 *		abc \n
 *			cba \n
 *
 *		abc
 *			cba
 *
 *		a bc
 *			cb a
 *
 *		reverse_line(getchar())
 *			revese_line()
 *			putchar ( 'a' );
 */
void reverse_line ( char ch ) {
	if ( ch == '\n' )	{			/* 改行ならば.. */
		/* なにもしなくてよい */
	} else {						/* そうでなければ.. */
	/*	ここに一行 */
		putchar ( ch );
	}
}
/*
 *	main
 */
int main( void )
{
	reverse_line ( getchar() );	/* 最初の文字を読み込んで .. */
	putchar ( '\n' );			/* 改行を出力 */
	return 0;
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
	putchar ( 'A' );	/* 画面に「A」を出力する */
				/* 文字は、「'」で挟む */
				/* 一文字しか挟めない (はさんだ結果は何時でも一文字) */
				/* '\n' (改行が一文字) / '\\' (「\」一文字) */
				/* 出力の時には、putchar 関数を利用する */
	putchar ( '\n' );	/* 改行を出力 */
	return 0;
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
	putchar ( 'A' );	/* 「A」という文字が出る */
	putchar ( '\n' );
	putchar ( 'A' + 1 );	/* 何が出るか */
	putchar ( '\n' );
	putchar ( 'B' + 1 );	/* たぶん「C」だろう.. */
	putchar ( '\n' );
	putchar ( 'X' - 1 );	/* たぶん「W」だろう.. */
	putchar ( '\n' );
	putchar ( 'a' + 1 );	/* 何が出るか */
	putchar ( '\n' );
	putchar ( '1' + 1 );	/* 何が出るか */
	putchar ( '\n' );
	putchar ( 'A' + 10 );	/* 何が出るか */
	putchar ( '\n' );
	putchar ( 'Z' + 1 );	/* 何が出るか */
	putchar ( '\n' );
	putchar ( 'A' - 1 );	/* 何が出るか */
	putchar ( '\n' );
	putchar ( '9' + 1 );	/* 何が出るか */
	putchar ( '\n' );
	putchar ( '0' - 1 );	/* 何が出るか */
	putchar ( '\n' );
	putchar ( 62 );	/* 何が出るか 「>」がでてくる( 62 == '>' ) */
	putchar ( '\n' );
	return 0;
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
	printf ( "一文字入力してください : ");
	putchar ( getchar() );	/* キーボードから一文字入力して、
								それを、そのまま主力する */
	putchar ( '\n' );
	return 0;
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
	printf ( "一文字入力してください : ");
	putchar ( getchar() + 1 );	/* キーボードから一文字入力して、
								それを、そのまま主力する */
	putchar ( '\n' );
	return 0;
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
	printf ( "大文字入力してください : ");
	putchar ( getchar() - 'A' + 'a'  );	/* キーボードから一文字入力して、
								それを、そのまま主力する */
	putchar ( '\n' );
	return 0;
}
int main(int argc, char *argv[]) {
	sub();		#include <stdio.h>
void sub(void) {			/* 関数定義 */
	printf ( "関数\n" );
}
/* 関数呼び出し */
	return 0;
}
#include <stdio.h>
void sub(void) {			/* 関数定義 */
	printf ( "関数\n" );
}
#include <stdio.h>
int main(int argc, char *argv[]) {
	sub();		/* 関数呼び出し */
	return 0;
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
	printf ( "Hello, World\n" );
	return 0;
}
#include <stdio.h>
/*
	printf と同じ様に、文字列を画面に出力する
		!! printf は使わない
		出力には、putchar しか習っていない
			putchar : 文字を出力する関数
				文字列を出力するには、「直接」は利用できない
*/
void myprintf ( char *message ) {
	putchar ( message );	/* これは、だめ */
}
int main(int argc, char *argv[] ) {
	myprintf ( "Hello, World\n" );
	return 0;
}
#include <stdio.h>
/*
	printf と同じ様に、文字列を画面に出力する
		!! printf は使わない
		出力には、putchar しか習っていない
			putchar : 文字を出力する関数
				文字列を出力するには、「直接」は利用できない
	例
		"ABC" を出力する
		->	'A',  "BC"
		->	*"ABC", "ABC" + 1
		->
			putchar ( *"ABC" );
			myprintf ( "ABC" + 1 );
	->	一般化
			myprintf ( message )
				putchar ( *message );
				myprintf ( message + 1 );
					再起が利用できる
	->	再起を利用するときには、終わりの処理
		message == "" の時はなにもしなくてよい
*/
void myprintf ( char *message ) {
	if ( !strcmp ( message, "" ) ) {
		/* なにもしない */
	} else {
		putchar ( *message );
		myprintf ( message + 1 );
	}
}
int main(int argc, char *argv[] ) {
	myprintf ( "Hello, World\n" );
	return 0;
}
#include <stdio.h>
/*
	整数値(int 型の数)を出力したい
	その数が一桁の非負の数 ( 0 ? 9 )
*/
void print_one_digit ( int number ) {
	/*
			number == 0 の時には、'0' を出力するので putchar ( '0' ):
	*/
	if ( number == 0 ) {
		putchar ( '0' );
	} else if ( number == 1 ) {
		putchar ( '1' );
	} /* ... */ else if ( number == 9 ) {
		putchar ( '9' );
	} else {
		putchar ( '?' );
	}
}
int main(int argc, char *argv[] ) {
	print_one_digit ( 0 );		/* '0' ではなく 0 とあるので整数 */
	putchar ( '\n' );
	print_one_digit ( 9 );		/* 整数値 9 を出力 */
	putchar ( '\n' );
	print_one_digit ( 100 );	/* 整数値 100 を出力 */
	putchar ( '\n' );
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
	print_one_digit ( 0 );		/* '0' ではなく 0 とあるので整数 */
	putchar ( '\n' );
	print_one_digit ( 9 );		/* 整数値 9 を出力 */
	putchar ( '\n' );
	print_one_digit ( 100 );	/* 整数値 100 を出力 */
	putchar ( '\n' );
}
#include <stdio.h>
/*
	二桁の整数を表示する
		47
		4, 7
			4 は十の位
			7 は一の位
			47 / 10 --> 4.7 x -> 4 ( 小数点以下は切り捨て )
			47 % 10 -->       -> 7 ( % は割ったあまり )
		47/10 と 47 % 10 をだせばよい
*/
void print_two_digit ( int number ) {
	print_one_digit ( number / 10 );	/* 十の位 */
	print_one_digit ( number % 10 );	/* 一の位 */
}
int main(int argc, char *argv[] ) {
	print_two_digit ( 47 );
	putchar ( '\n' );
	print_two_digit ( 83 );
	putchar ( '\n' );
	print_one_digit ( 123 );	/* 整数値 123 を出力 */
	putchar ( '\n' );
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
	print_n_digit ( 1 );
	putchar ( '\n' );
	print_n_digit ( 83 );
	putchar ( '\n' );
	print_n_digit ( 123 );	/* 整数値 123 を出力 */
	putchar ( '\n' );
	print_n_digit ( 0 );
	putchar ( '\n' );
}
#include <stdio.h>
/*
	キーボードから、改行があるまで、文字列を入力し、
	それを出力する
		cf. 一文字入力して、一文字出力するプログラムはすでにやっている
		abc\n
			abc\n
		a bc\n
			a bc\n
*/
void print_echo_line ( char ch ) {
	if ( ch == '\n' ) {
		putchar ( '\n' );
	} else {
		putchar ( ch );
		print_echo_line ( getchar() );
	}
}
int main(int argc, char *argv[] ) {
	print_echo_line ( getchar() );
	return 0;
}
#include <stdio.h>
/*
	1234
		(->	12, 34)	x
		->	1, 234	x
		->	123, 4	o
				123 = 1234 / 10, 4 = 1234 % 10
	number
		->
			number / 10, number % 10
		->
			print_n_digit ( number / 10 );
			print_one_digit ( number % 10 );
	number == 0 ????????????????
*/
void print_n_digit ( int number ) {
	if ( number == 0 ) {
		/* ????????? */
	} else {
		print_n_digit ( number / 10 );
		print_one_digit ( number % 10 );
	}
}
#include <stdio.h>
void print_one_digit ( int number ) {
	/*
			number == 0 の時には、'0' を出力するので putchar ( '0' ):
			number == 1 の時には、'1' を出力するので putchar ( '1' ):
			number == 1 の時には、'0'+1 を出力するので putchar ( '0'+1 ):
			number == 1 の時には、'0'+number を出力するので putchar ( '0'+number ):
		number >= 0 と仮定する
	*/
	if ( number < 10 ) {
		putchar ( '0' + number );
	} else {
		putchar ( '?' );
	}
}
Download : 20160617-01.c ( utf8 版 )
/*
 * 20160617-01-QQQQ.c
 *
 *	「Hello, 自分の名前」と出力するプログラム (二度目)
 *
 *	コンパイル :
 *		cc -c 20160617-01-QQQQ.c
 *		cc -o 20160617-01-QQQQ.exe 20160617-01-QQQQ.o
 *	実行 :
 *		./20160617-01-QQQQ.exe
 *
 */
#include <stdio.h>
/*
 * main
 */
int main ( int argc, char *argv ) {	/* コマンドライン引数を追加 */
	/*
	**	 この部分を完成させなさい
	*/
  return 0;
}
$ ./20160617-01-QQQQ.exe Hello 栗野俊一 $