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 栗野俊一 $