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