当日のOHP資料です。
makefile :本日の演習用の資料( c:\usr\c\20120608(1)に保存する)
今日の"s_print.h"を使うプログラムは、20120608フォルダ内に作成する。
C:\usr\c\20120608> make foobar.exe C:\usr\c\20120608>
makeを使わないでccでやりたい場合は次のように「-I」オプションで、headerファイル(この場合はs_print.h )があるフォルダを指定する必要がある。
C:\usr\c\20120608> cc -Ic:\usr\c\include foobar.exe foobar.c C:\usr\c\20120608>
Download : sample-001.c ( SJIS 版 )
/*
* 2012/06/08 sample-001.c
*/
/*
* 関数を利用しない場合 (各国語で、挨拶を二回ずつ繰り返す)
*/
#include <stdio.h>
void main ( void ) {
printf ( "Hello, World\n" );
printf ( "Hello, World\n" );
printf ( "こんにちは、皆さん\n" );
printf ( "こんにちは、皆さん\n" );
printf ( "ニーハオ、ダァジァハァオ\n" );
printf ( "ニーハオ、ダァジァハァオ\n" );
}
C:\usr\c>sample-001 Hello, World Hello, World こんにちは、皆さん こんにちは、皆さん ニーハオ、ダァジァハァオ ニーハオ、ダァジァハァオ C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/*
* 2012/06/08 sample-003.c
*/
/*
* 各国語毎に関数を作成
*/
#include <stdio.h>
void english ( void ) {
printf ( "Hello, World\n" );
printf ( "Hello, World\n" );
}
void japanese ( void ) {
printf ( "こんにちは、皆さん\n" );
printf ( "こんにちは、皆さん\n" );
}
void chainese ( void ) {
printf ( "ニーハオ、ダァジァハァオ\n" );
printf ( "ニーハオ、ダァジァハァオ\n" );
}
void main ( void ) {
english();
japanese();
chainese();
}
C:\usr\c>sample-002 Hello, World Hello, World こんにちは、皆さん こんにちは、皆さん ニーハオ、ダァジァハァオ ニーハオ、ダァジァハァオ C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/*
* 2012/06/08 sample-003.c
*/
/*
* 挨拶を二回繰り返すという、引数付の関数を作る
*/
#include <stdio.h>
void sayTwice ( char *hello ) {
printf ( hello );
printf ( hello );
}
void english ( void ) {
sayTwice ( "Hello, World\n" );
}
void japanese ( void ) {
sayTwice ( "こんにちは、皆さん\n" );
}
void chainese ( void ) {
sayTwice ( "ニーハオ、ダァジァハァオ\n" );
}
void main ( void ) {
english();
japanese();
chainese();
}
C:\usr\c>sample-003 Hello, World Hello, World こんにちは、皆さん こんにちは、皆さん ニーハオ、ダァジァハァオ ニーハオ、ダァジァハァオ C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/*
* 2012/06/08 sample-004.c
*/
/*
* 文字「a」を出力する
*/
#include <stdio.h>
void main ( void ) {
putchar ( 'a' ); /* 「a」という「文字」を画面に出力 */
}
C:\usr\c>sample-004 aC:\usr\c>
Download : sample-005.c ( SJIS 版 )
/*
* 2012/06/08 sample-005.c
*/
/*
* 文字版「Hello, World」
*/
#include <stdio.h>
void main ( void ) {
putchar ( 'H' );
putchar ( 'e' );
putchar ( 'l' );
putchar ( 'l' );
putchar ( 'o' );
putchar ( ',' );
putchar ( ' ' ); /* 空白の出力 */
putchar ( 'W' );
putchar ( 'o' );
putchar ( 'r' );
putchar ( 'l' );
putchar ( 'd' );
putchar ( '\n' ); /* 改行の出力 */
}
C:\usr\c>sample-005 Hello, World C:\usr\c>
Download : sample-006.c ( SJIS 版 )
/*
* 2012/06/08 sample-006.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-006 「\」 を出すには 「'\\'」とする ==> \ 「'」を出すには 「'\''」とする ==> ' 「ビープ音」を出すには 「'\a'」とする ==> 「"」を出すには 「'"'」だけでよい ==> " C:\usr\c>
Download : sample-007.c ( SJIS 版 )
/*
* 2012/06/08 sample-007.c
*/
/*
* 文字列
*/
#include <stdio.h>
void main ( void ) {
printf ( "文字列\n" ); /* 「文字列」+「改行」が表示される */
}
C:\usr\c>sample-007 文字列 C:\usr\c>
Download : sample-008.c ( SJIS 版 )
/*
* 2012/06/08 sample-008.c
*/
/*
* 文字列の中のエスケープコード
*/
#include <stdio.h>
void main ( void ) {
printf ( "エスケープコード(「\\」)の扱いは、基本文字と同じ\n" );
printf ( "「\\」と出力したければ、「\\\\」とかけばよい\n" );
printf ( "文字では「'」を出すのに「\\'」としたが文字列では「'」で良い\n" );
printf ( "その代わりに文字列では「\"」を出すのには「\\\"」する必要がある\n" );
}
C:\usr\c>sample-008 エスケープコード(「\」)の扱いは、基本文字と同じ 「\」と出力したければ、「\\」とかけばよい 文字では「'」を出すのに「\'」としたが文字列では「'」で良い その代わりに文字列では「"」を出すのには「\"」する必要がある C:\usr\c>
Download : sample-009.c ( SJIS 版 )
/*
* 2012/06/08 sample-009.c
*/
/*
* 文字列の計算
*/
#include <stdio.h>
void main ( void ) {
printf ( "\"abc\" に 1 を加えると \"bc\" と同じになる ==> " );
printf ( "abc" + 1 ); /* 「bc」と表示される */
printf ( "\n" );
printf ( "*\"abc\" と頭に 「*」をつけると先頭の文字 ('a') になる ==> " );
putchar ( *"abc\n" ); /* 文字列「abc」の先頭の文字「a」が表示される */
printf ( "\n" );
printf ( "\"abc\"[2] とお尻に 「[数値]」をつけると「『数値』番目の文字」になる ==> " );
/* だだし、先頭(1文字目) は 0 番目であり 「n 番目」は 「n + 1 文字目」になる */
putchar ( "abc\n"[2] ); /* 文字列「abc」の 2 番目(2+1文字目) の文字「c」が表示される */
printf ( "\n" );
if ( "abc"[0] == 'b' ) {
printf ( "\"abc\"[0] と 'b' は等しいです\n" );
printf ( "実際 \"abc\"[0] は " );
putchar ( "abc"[0] );
printf ( "でした\n" );
} else {
printf ( "\"abc\"[0] と 'b' は等しくないです\n" );
printf ( "実際 \"abc\"[0] は " );
putchar ( "abc"[0] );
printf ( "でした\n" );
}
if ( "abc"[1] == 'b' ) {
printf ( "\"abc\"[1] と 'b' は等しいです\n" );
printf ( "実際 \"abc\"[1] は " );
putchar ( "abc"[1] );
printf ( "でした\n" );
} else {
printf ( "\"abc\"[1] と 'b' は等しくないです\n" );
printf ( "実際 \"abc\"[1] は " );
putchar ( "abc"[1] );
printf ( "でした\n" );
}
if ( "abc"[3] == '\0' ) {
printf ( "\"abc\"[3] は EOS (\\0) が入っています\n" );
} else {
printf ( "\"abc\"[3] は EOS (\\9) が入っていません\n" );
}
}
C:\usr\c>sample-009
"abc" に 1 を加えると "bc" と同じになる ==> bc
*"abc" と頭に 「*」をつけると先頭の文字 ('a') になる ==> a
"abc"[2] とお尻に 「[数値]」をつけると「『数値』番目の文字」になる ==> c
"abc"[0] と 'b' は等しくないです
実際 "abc"[0] は aでした
"abc"[1] と 'b' は等しいです
実際 "abc"[1] は bでした
"abc"[3] は EOS (\0) が入っています
C:\usr\c>
Download : sample-010.c ( SJIS 版 )
/*
* 2012/06/08 sample-010.c
*/
/*
* 仮引数の型宣言と実引数の型
*/
#include <stdio.h>
void tenChar ( char x ) { /* 文字を 10 回出力する */
/*
引数(x)は「文字列」ではなく、「文字」なので「char」で宣言する
*/
putchar ( x ); /* 「char」型(文字型) なので putchar を使う */
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
}
void tenString ( char *x ) { /* 文字列を 10 回出力する */
/*
引数(x)は「文字列」なので「char *」で宣言する
*/
printf ( x ); /* 「char *」型(文字列型) なので printf を使う */
printf ( x );
printf ( x );
printf ( x );
printf ( x );
printf ( x );
printf ( x );
printf ( x );
printf ( x );
printf ( x );
}
void main ( void ) {
printf ( "'a' を 10 回、出力する\n" );
tenChar ( 'a' );
printf ( "\n" );
printf ( "\"a\" を 10 回、出力する\n" );
tenString ( "a" );
printf ( "\n" );
/*
tenChar ( "a" ) とか tenString ( 'a' ) とすると.. ?
*/
}
C:\usr\c>sample-010 'a' を 10 回、出力する aaaaaaaaaa "a" を 10 回、出力する aaaaaaaaaa C:\usr\c>
Download : sample-011.c ( SJIS 版 )
/*
* 2012/06/08 sample-009.c
*/
/*
* 文字列の計算
*/
#include <stdio.h>
void tenChar ( char x ) { /* 文字を 10 回出力する */
/*
引数(x)は「文字列」ではなく、「文字」なので「char」で宣言する */
*/
putchar ( x ); /* 「char」型(文字型) なので putchar を使う */
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
putchar ( x );
}
void tenString ( char *x ) { /* 文字列を 10 回出力する */
/*
引数(x)は「文字列」なので「char *」で宣言する */
*/
printf ( x ); /* 「char *」型(文字列型) なので printf を使う */
printf ( x );
printf ( x );
printf ( x );
printf ( x );
printf ( x );
printf ( x );
printf ( x );
printf ( x );
printf ( x );
}
void main ( void ) {
printf ( "'a' を 10 回、出力する\n" );
tenChar ( 'a' );
printf ( "\n" );
printf ( "\"a\" を 10 回、出力する\n" );
tenString ( "a" );
printf ( "\n" );
/*
tenChar ( "a" ) とか tenString ( 'a' ) とすると.. ?
*/
}
C:\usr\c>sample-011
"abc" に 1 を加えると "bc" と同じになる ==> bc
*"abc" と頭に 「*」をつけると先頭の文字 ('a') になる ==> a
"abc"[2] とお尻に 「[数値]」をつけると「『数値』番目の文字」になる ==> c
"abc"[0] と 'b' は等しくないです
実際 "abc"[0] は aでした
"abc"[1] と 'b' は等しいです
実際 "abc"[1] は bでした
"abc"[3] は EOS (\0) が入っています
C:\usr\c>
Download : sample-101.c ( SJIS 版 )
/*
* 2012/06/08 sample-001.c
*/
/*
* 整数の扱い
*/
#include <stdio.h>
#include "s_print.h"
int main ( void ) {
s_print_int ( 1 ); /* 整数 1 を出力する */
s_print_newline(); /* 改行 */
return 0;
}
C:\usr\c>sample-101 1 C:\usr\c>
Download : sample-102.c ( SJIS 版 )
/*
* 2012/06/08 sample-002.c
*/
/*
* 整数と文字列の扱い
*/
#include <stdio.h>
#include "s_print.h"
int main ( void ) {
s_print_int ( 123 ); /* 整数 123 を出力する */
s_print_newline(); /* 改行 */
s_print_string ( "123" ); /* 文字列 "123" を出力する */
s_print_newline(); /* 改行 */
return 0;
}
C:\usr\c>sample-102 123 123 C:\usr\c>
Download : sample-103.c ( SJIS 版 )
/*
* 2012/06/08 sample-003.c
*/
/*
* 整数と文字列と取り違えると .. ?
*/
#include <stdio.h>
#include "s_print.h"
int main ( void ) {
s_print_int ( "123" ); /* 文字列を整数として出力しようとした */
s_print_newline(); /* 改行 */
s_print_string ( 123 ); /* 整数を文字列として出力しようとした */
s_print_newline(); /* 改行 */
return 0;
}
C:\usr\c>sample-103 C:\usr\c>
Download : sample-104.c ( SJIS 版 )
/*
* 2012/06/08 sample-004.c
*/
/*
* 関数に整数を渡す
*/
#include <stdio.h>
#include "s_print.h"
/*
* 同じ整数を二度出力する
*/
void print_int_two ( int n ) { // 引数が整数なので、引数の宣言は int になる
s_print_int ( n );
s_print_newline();
s_print_int ( n );
s_print_newline();
}
/*
* main
*/
int main ( void ) {
s_print_int_two ( 123 ); /* 整数 123 を二度出力する */
return 0;
}
C:\usr\c>sample-104 C:\usr\c>
Download : sample-105.c ( SJIS 版 )
/*
* 2012/06/08 sample-005.c
*/
/*
* 整数の計算
*/
#include <stdio.h>
#include "s_print.h"
/*
* 二つの和を出力する
*/
void print_int_wa ( int n, int m ) {
s_print_int ( n );
s_print_string ( " と " );
s_print_int ( m );
s_print_string ( " の和は " );
s_print_int ( n + m );
s_print_string ( " です。" );
s_print_newline();
}
/*
* main
*/
int main ( void ) {
print_int_wa ( 123, 957 );
print_int_wa ( -21, 45 );
return 0;
}
C:\usr\c>sample-105 123 と 957 の和は 1080 です。 -21 と 45 の和は 24 です。 C:\usr\c>
Download : sample-106.c ( SJIS 版 )
/*
* 2012/06/08 sample-006.c
*/
/*
* 整数の大小比較
*/
#include <stdio.h>
#include "s_print.h"
/*
* 二つの比較結果を出力する
*/
void print_int_compare ( int n, int m ) {
s_print_int ( n );
s_print_string ( " と " );
s_print_int ( m );
s_print_string ( " では " );
if ( n > m ) { /* n の方が大きければ.. */
s_print_int ( n );
} else {
s_print_int ( m );
}
s_print_string ( " の方が大きい。" );
s_print_newline();
}
/*
* main
*/
int main ( void ) {
print_int_compare ( 10, 20 );
print_int_compare ( 40, 30 );
print_int_compare ( 4, -4 );
return 0;
}
C:\usr\c>sample-106 10 と 20 では 20 の方が大きい。 40 と 30 では 40 の方が大きい。 4 と -4 では 4 の方が大きい。 C:\usr\c>
Download : sample-107.c ( SJIS 版 )
/*
* 2012/06/08 sample-007.c
*/
/*
* 整数の等号比較 ( == を使う )
*/
#include <stdio.h>
#include "s_print.h"
/*
* 二つの比較結果を出力する
*/
void print_int_equal ( int n, int m ) {
s_print_int ( n );
s_print_string ( " と " );
s_print_int ( m );
s_print_string ( " は等し" );
if ( n == m ) { /* n と m は等しい */
s_print_string ( "い" );
} else {
s_print_string ( "くない" );
}
s_print_string ( "です。" );
s_print_newline();
}
/*
* main
*/
int main ( void ) {
print_int_equal ( 10, 20 );
print_int_equal ( 30, 30 );
return 0;
}
C:\usr\c>sample-107 10 と 20 は等しくないです。 30 と 30 は等しいです。 C:\usr\c>
Download : sample-108.c ( SJIS 版 )
/*
* 2012/06/08 sample-008.c
*/
/*
* 整数の等号比較 ( != を使う )
*/
#include <stdio.h>
#include "s_print.h"
/*
* 二つの比較結果を出力する
*/
void print_int_equal ( int n, int m ) {
s_print_int ( n );
s_print_string ( " と " );
s_print_int ( m );
s_print_string ( " は等し" );
if ( n != m ) { /* n と m は等しくない */
s_print_string ( "くない" );
} else {
s_print_string ( "い" );
}
s_print_string ( "です。" );
s_print_newline();
}
/*
* main
*/
int main ( void ) {
print_int_equal ( 10, 20 );
print_int_equal ( 30, 30 );
return 0;
}
C:\usr\c>sample-108 10 と 20 は等しくないです。 30 と 30 は等しいです。 C:\usr\c>
Download : sample-109.c ( SJIS 版 )
/*
* 2012/06/08 sample-009.c
*/
/*
* 再帰と整数
*/
#include <stdio.h>
#include "s_print.h"
/*
* n から 1 までを出力する
*/
void print_n_to_one ( int n ) {
if ( n == 0 ) { /* n が 0 の時 */
/* なにもしなくてよい */
} else { /* そうでなければ... */
s_print_int ( n ); /* n を出し.. */
s_print_newline();
print_n_to_one ( n - 1 ); /* 再帰で残りをする */
}
}
/*
* main
*/
int main ( void ) {
s_print_string ( "5 〜 1 : \n" );
print_n_to_one ( 5 ); /* 5 〜 1 を出力 */
s_print_newline();
s_print_string ( "10 〜 1 : \n" );
print_n_to_one ( 10 ); /* 10 〜 1 を出力 */
return 0;
}
C:\usr\c>sample-109 5 〜 1 : 5 4 3 2 1 10 〜 1 : 10 9 8 7 6 5 4 3 2 1 C:\usr\c>
Download : sample-110.c ( SJIS 版 )
/*
* 2012/06/08 sample-010.c
*/
/*
* 総和の計算
*/
#include <stdio.h>
#include "s_print.h"
/*
* n から 1 までを sum に加えた結果を出力する
*/
void print_n_to_one_sum_sub ( int n, int sum ) {
if ( n == 0 ) { /* n が 0 の時 */
/* もう計算しなくてもよいので結果を出力 */
s_print_string ( "合計は " );
s_print_int ( sum );
s_print_string ( "です。" );
s_print_newline();
} else { /* そうでなければ... */
print_n_to_one_sum_sub ( n - 1, sum + n );
/* 再帰処理 */
}
}
void print_n_to_one_sum ( int n ) {
print_n_to_one_sum_sub ( n, 0 ); /* 最初は 1 〜 n を 0 に加える */
}
/*
* main
*/
int main ( void ) {
s_print_string ( "1 から 5 : " );
print_n_to_one_sum ( 5 );
s_print_string ( "1 から 10 : " );
print_n_to_one_sum ( 10 );
return 0;
}
C:\usr\c>sample-110 1 から 5 : 合計は 15です。 1 から 10 : 合計は 55です。 C:\usr\c>
Download : sample-111.c ( SJIS 版 )
/*
* 2012/06/08 sample-011.c
*/
/*
* 何かを n 回繰り返す
*/
#include <stdio.h>
#include "s_print.h"
/*
* 文字列を 10 回出力する
*/
void print_string_n_times ( int n, char *str ) {
if ( n == 0 ) { /* n が 0 の時 */
/* 仕事はすんだので何もしない */
} else { /* そうでなければ... */
s_print_string ( str ); /* 取りあえず、文字列を出力し.. */
print_string_n_times ( n - 1, str );
/* 再帰処理 */
}
}
/*
* main
*/
int main ( void ) {
print_string_n_times ( 3, "Hello, World\n" ); /* "Hello, World\n" を 3 回出力 \
*/
print_string_n_times ( 5, "こんにちは\n" ); /* "こんにちは\n" を 5 回出力 */
return 0;
}
C:\usr\c>sample-111 Hello, World Hello, World Hello, World こんにちは こんにちは こんにちは こんにちは こんにちは C:\usr\c>
Download : sample-112.c ( SJIS 版 )
/*
* 2012/06/08 sample-012.c
*/
/*
* 何かを n 回繰り返す
*/
#include <stdio.h>
#include "s_print.h"
/*
* "*" を n 回出力
*/
void print_asta_n_times ( int n ) {
if ( n == 0 ) { /* n が 0 の時 */
/* 仕事はすんだので何もしない */
} else { /* そうでなければ... */
s_print_string ( "*" ); /* 取りあえず、"*" 出力し.. */
print_asta_n_times ( n - 1 );
/* 再帰処理 */
}
}
void print_triangle ( int n ) {
if ( n == 0 ) { /* n が 0 の時 */
/* 仕事はすんだので何もしない */
} else { /* そうでなければ... */
print_asta_n_times ( n ); /* アスタリスクを n 個出力 */
s_print_newline();
print_triangle ( n - 1 );
/* 再帰処理 */
}
}
/*
* main
*/
int main ( void ) {
print_triangle ( 3 );
s_print_newline();
print_triangle ( 5 );
return 0;
}
C:\usr\c>sample-112 *** ** * ***** **** *** ** * C:\usr\c>
Download : sample-113.c ( SJIS 版 )
/*
* 2012/06/08 sample-013.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* ペアノの公理 (自然数の定義)
* i) 0 は自然数
* ii) x が自然数ならば x + 1 も自然数
* iii) i) と ii) 以外に自然数はない
*/
/*
* 和の定義
* n, m が自然数の時に n + m とは何か
*
* m ( n が 0 の時 )
* n + m {
* ( x + m ) + 1 ( n = x + 1 の時 )
*/
/*
* a と b の和を計算する
*/
void addition ( int n, int m ) {
if ( n == 0 ) { /* n が 0 の時 */
s_print_int ( m );
} else {
addition ( n - 1, m + 1 ); /* x + m を計算 */
}
}
main()
{
addition ( 3, 4 );
printf ( "\n" );
addition ( 5, 9 );
printf ( "\n" );
/* 足し算をする */
}
C:\usr\c>sample-113 7 14 C:\usr\c>
Download : sample-114.c ( SJIS 版 )
/*
* 2012/06/08 sample-014.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* 積の定義
* n, m が自然数の時に n * m とは何か
*
* 0 ( n が 0 の時 )
* n + m {
* ( x * m ) + m ( n = x + 1 の時 )
*/
/*
* n と m のかけ算
*/
void multiply_sub ( int n, int m, int mul ) {
if ( n == 0 ) { /* n が 0 の時 */
s_print_int ( mul ); /* 結果を出力 */
} else {
multiply_sub ( n - 1, m, mul + m ); /* x * m を計算 */
}
}
void multiply ( int n, int m ) {
multiply_sub ( n, m, 0 );
}
main()
{
multiply ( 3, 4 );
s_print_newline();
multiply ( 5, 8 );
s_print_newline();
}
C:\usr\c>sample-114 12 40 C:\usr\c>
Download : sample-115.c ( SJIS 版 )
/*
* 2012/06/08 sample-015.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* 引き算の定義
* n, m が自然数の時に n - m とは何か ( n >= m )
*
* n ( m が 0 の時 )
* n - m {
* y - x ( m = x + 1 の時 )
* ( n = y + 1 の時 )
*/
/*
* n と m の差
*/
void diffirence ( int n, int m ) {
if ( m == 0 ) { /* m が 0 の時 */
s_print_int ( n );
} else {
diffirence ( n - 1, m - 1 ); /* y - x を計算 */
}
}
main()
{
diffirence ( 7, 3 );
printf ( "\n" );
diffirence ( 13, 8 );
printf ( "\n" );
}
C:\usr\c>sample-115 4 5 C:\usr\c>
引数無しの関数の作り方: sample-001.cからsample-002.cを作るまでの説明
引数付関数の作り方: sample-002.cからsample-003.cを作るまでの説明
Download : 20120608-01.c ( SJIS 版 )
/*
* DATE-DIR-QQQQ.c
*
* putchar で自分の名前(ローマ字)を出力する
*/
#include <stdio.h>
/*
* main
*/
int main( void )
{
/*
* putchar を使って、自分名前を表示する
* 以下は "Kurino Shun-ichi" の場合
*/
putchar ( 'K' );
putchar ( 'u' );
putchar ( 'r' );
putchar ( 'i' );
putchar ( 'n' );
putchar ( 'o' );
putchar ( ' ' );
putchar ( 'S' );
putchar ( 'h' );
putchar ( 'u' );
putchar ( 'n' );
putchar ( '-' );
putchar ( 'c' );
putchar ( 'h' );
putchar ( 'i' );
putchar ( '\n' );
return 0;
}
C:\usr\c\> 20120608-01 Kurino Shun-chi C:\usr\c\>
Download : 20120608-02.c ( SJIS 版 )
/*
* DATE-DIR-QQQQ.c
*
* 余りを計算するプログラム
*/
#include <stdio.h>
#include "s_print.h"
/*
* 余りの定義
* n, m が自然数の時に n mod m ( n を m で割った余り ) とは何か ( m > 0 )
*
* n ( m > n の時 )
* n mod m {
* (n-m) mod m ( その他の時 )
*/
void remainder_sub ( int n, int m, int mm, int nn ) {
/* ^ ^ 変化*/
/* ^^ 最初の m を記憶して、後から利用できるようにしている */
/* ^^ 割り始め n を覚えておく */
if ( m == 0 ) { /* m が 0 : 引き算が終った */
/*
** この部分を完成させなさい
*/
} else if ( n == 0 ) { /* n が 0 : m の方が大きかった */
s_print_int ( nn ); /* 余りを出力 */
} else {
/*
** この部分を完成させなさい
*/
}
}
/*
* remainder : print ( n mod m )
*/
void remainder ( int n, int m ) {
/*
** この部分を完成させなさい
*/
}
/*
* main
*/
int main()
{
printf ( "10 mod 4 = " );
remainder ( 10, 4 );
printf ( "\n" );
printf ( "10 mod 3 = " );
remainder ( 10, 3 );
printf ( "\n" );
printf ( "10 mod 2 = " );
remainder ( 10, 2 );
printf ( "\n" );
return 0;
}
C:\usr\c\> 20120608-02 10 mod 4 = 2 10 mod 3 = 1 10 mod 2 = 0 C:\usr\c\>