#include <stdio.h> #include "s_print.h" /* * 二次関数 * 与えられた整数値の二乗を計算して返す void squre(void) { } * 値を返す場合は、値の型を示す必要がある * -> 整数なので int 型 * いままで、関数名の前の void と無条件にかいていたが.. * それを int にする int squre(void) { } * 引数を持つ関数なので、() の中を引数の宣言にかえる * 整数(int)型の引数を x とすることにする.. int squre(int x) { } * 計算した結果を考える * f(x) = x^2 : x -> x*x * 「式」としては、「x*x」が計算式 * この計算式の値を、関数の値として返す場合には return 命令を使う。 */ int squre(int x) { return x*x; } int main(void) { s_print_int ( 13 ); s_print_string ( "の二乗は " ); s_print_int ( squre ( 13 ) ); /* 引数に 13 指定して関数呼出し */ /* その結果(関数が返した値)を出力 */ s_print_string ( "です。\n" ); s_print_string ( "これは、\n" ); s_print_int ( 5 ); s_print_string ( " の二乗 " ); s_print_int ( squre ( 5 ) ); s_print_string ( " と " ); s_print_int ( 12 ); s_print_string ( " の二乗 " ); s_print_int ( squre ( 12 ) ); s_print_string ( " の和 " ); s_print_int ( squre ( 5 ) + squre ( 12 ) ); s_print_string ( " に等しいので、直角三角形の斜辺の長さになっています。" ); return 0; }
#include <stdio.h> #include "s_print.h" /* * 二次関数 * 与えられた整数値の二乗を計算して返す void squre(void) { } * 値を返す場合は、値の型を示す必要がある * -> 整数なので int 型 * いままで、関数名の前の void と無条件にかいていたが.. * それを int にする int squre(void) { } * 引数を持つ関数なので、() の中を引数の宣言にかえる * 整数(int)型の引数を x とすることにする.. int squre(int x) { } * 計算した結果を考える * f(x) = x^2 : x -> x*x * 「式」としては、「x*x」が計算式 * この計算式の値を、関数の値として返す場合には return 命令を使う。 */ int squre(int x) { s_print_string ( "(squre が呼び出されています)" ); /* 機能を追加 */ return x*x; /* 計算結果を返す */ } int main(void) { s_print_int ( 13 ); s_print_string ( "の二乗は " ); s_print_int ( squre ( 13 ) ); /* 引数に 13 指定して関数呼出し */ /* その結果(関数が返した値)を出力 */ s_print_string ( "です。\n" ); s_print_string ( "これは、\n" ); s_print_int ( 5 ); s_print_string ( " の二乗 " ); s_print_int ( squre ( 5 ) ); s_print_string ( " と " ); s_print_int ( 12 ); s_print_string ( " の二乗 " ); s_print_int ( squre ( 12 ) ); s_print_string ( " の和 " ); s_print_int ( squre ( 5 ) + squre ( 12 ) ); s_print_string ( " に等しいので、直角三角形の斜辺の長さになっています。" ); squre(10); /* 関数 squre が 10 の二乗の 100 を返すけど その値は、そのまま捨てられるだけで、 問題ない */ return 0; }
#include <stdio.h> #include "s_input.h" /* s_input_int() で整数値を入力する */ #include "s_print.h" /* s_print_string() を利用する */ /* * キーボードから一つの整数を入力して * 奇数か偶数かを答える * A か B のどちらか一方を実行したい if () { A; } else { B; } 何時 A を実行するか ? という条件 P を考え、 これを if の後ろの () の中にいれる if (P) { A; } else { B; } */ int main(void) { s_print_string ( "整数値を一つ入力してください : " ); if ( s_input_int() % 2 == 0 ) { /* 入力された値を 2 で割った余りが 0 なら.. */ /* 偶数なので */ /* 復習 : 「%」 は整数割り算の余りを計算する ( 10 % 3 -> 1 ) */ /* 「==」 は二つの整数が等しいと成立する */ s_print_string ( "その数は偶数です\n" ); } else { s_print_string ( "その数は奇数です\n" ); } return 0; }
#include <stdio.h> #include "s_input.h" /* s_input_int() で整数値を入力する */ #include "s_print.h" /* s_print_string() を利用する */ /* * 偶数、奇数を判定するプログラムを * 値を返す関数で実現する * 与えられた整数値が偶数の場合は、「偶数」という文字列を * そうでない場合は「奇数」という文字列を返す */ /* 文字列を値として返すので、関数の前は「char *」になる */ /* 引数は整数値なので、int */ char *parity( int x ) { if ( x % 2 == 0 ) { /* x を 2 で割った余りが 0 なので */ /* 偶数 */ return "偶数"; /* 「文字列」も値して返せる */ } else { return "奇数"; /* 「文字列」も値して返せる */ } } int main(void) { s_print_string ( "整数値を一つ入力してください : " ); s_print_string ( parity( s_input_int() ) ); s_print_string ( "です。\n" ); return 0; }
#include <stdio.h> #include "s_input.h" /* s_input_int() で整数値を入力する */ #include "s_print.h" /* s_print_string() を利用する */ /* * 「正の数」、「負の数」、「零」を答える * if 構文では、二択しかできないが * それを幾つも組合せると、多選択が可能になる */ char *parity( int x ) { if ( x > 0 ) { /* x は正の数 */ return "正の数"; } else { if ( x < 0 ) { return "負の数"; } else { return "零"; } } } int main(void) { s_print_string ( "整数値を一つ入力してください : " ); s_print_string ( parity ( s_input_int() ) ); s_print_string ( "です。\n" ); return 0; }
#include <stdio.h> #include "s_print.h" #include "s_input.h" int main(void) { s_print_string ( "整数値を入力してください : " ); if ( s_input_int() > 0 ) { s_print_string ( "その数は正でした。\n" ); } /* else 以下(else 節)がない */ /* else {} があったと同じ振舞をする */ s_print_string ( "おわり\n" ); return 0; }
#include <stdio.h> #include "s_input.h" #include "s_print.h" /* * 0 から 9 の整数値にたいして * 零から九の漢数字を返す関数 */ char *kansuuji( int n ) { if ( n == 0 ) { return "零"; } else { if ( n == 1 ) { return "一"; } else { if ( n == 2 ) { return "ニ"; } else { return "しらない"; } } } } int main(void) { s_print_string ( kansuuji( 1 ) ); s_print_string ( kansuuji( 0 ) ); s_print_string ( kansuuji( 3 ) ); s_print_string ( "\n" ); }
#include <stdio.h> #include "s_input.h" #include "s_print.h" /* * 0 から 9 の整数値にたいして * 零から九の漢数字を返す関数 * n 個の条件から n 選択する場合の特別な例 */ char *kansuuji( int n ) { if ( n == 0 ) { /* 0 の場合 */ return "零"; } else if ( n == 1 ) { /* 1 の場合 */ return "一"; } else if ( n == 2 ) { /* 2 の場合 */ return "ニ"; } else { /* .. その他 */ return "しらない"; } } int main(void) { s_print_string ( kansuuji( 1 ) ); s_print_string ( kansuuji( 0 ) ); s_print_string ( kansuuji( 3 ) ); s_print_string ( "\n" ); }
#include <stdio.h> #include "s_input.h" /* s_input_int() で整数値を入力する */ #include "s_print.h" /* s_print_string() を利用する */ /* * 「正の数」、「負の数」、「零」を答える * if 構文では、二択しかできないが * それを幾つも組合せると、多選択が可能になる */ int main(void) { s_print_string ( "整数値を一つ入力してください : " ); if ( s_input_int() > 0 ) { /* x は正の数 */ s_print_string( "正の数" ); } else { if ( s_input_int() < 0 ) { s_print_string( "負の数" ); } else { s_print_string( "零" ); } } s_print_string ( "です。\n" ); return 0; }
Download : 20140606-01.c ( SJIS 版 )
/* * CDATE FILENAME * * 数当てを行う */ #include <stdio.h> #include "s_print.h" /* s_print_int を利用するので.. */ #include "s_input.h" /* s_input_int を利用するので.. */ /* * prompt */ int prompt(void) { s_print_string ( "私が選んだ数を予想して入力してください : " ); return s_input_int(); } /* */ void game ( int input, int answer ) { if ( input == answer ) { s_print_string ( "お見事です。あたりました。\n" ); } else { if ( input > answer ) { s_print_string ( "その数は大きすぎます。\n" ); } else { s_print_string ( "その数は小さすぎます。\n" ); } game( prompt(), answer ); } } /* * main */ int main( void ) { s_print_string ( "私が考えた 1 〜 100 数を予想して当ててみてください。\n" ); game ( prompt(), (rand()%100) + 1 ); return 0; }
50 75 83 90 85 84
C:\usr\c\> 20140606-01-QQQQ 私が考えた 1 〜 100 数を予想して当ててみてください。 私が選んだ数を予想して入力してください : その数は小さすぎます。 私が選んだ数を予想して入力してください : その数は小さすぎます。 私が選んだ数を予想して入力してください : その数は小さすぎます。 私が選んだ数を予想して入力してください : その数は大きすぎます。 私が選んだ数を予想して入力してください : その数は大きすぎます。 私が選んだ数を予想して入力してください : お見事です。あたりました。 C:\usr\c\>
Download : 20140606-02.c ( SJIS 版 )
/* * CDATE FILENAME * * 与えられた自然数の素因数を出力する * * 12 は.. * * * * * * */ #include <stdio.h> #include "s_print.h" /* s_print_int を利用するので.. */ /* * void print_prime_factor_sequence ( int n, int p ) * 機能 : p 以上の n の素因数を小さい順に並べで表示する * 条件 : n には p 未満の素因数を含まれていないものとする * int n : p 未満の素因数を含まれていない自然数 * 返り値 : なし */ void print_prime_factor_sequence ( int n, int p ) { if ( p > n ) { /* もう n には p 以上の素因数を含まない */ /* 何もしなくてよい */ /* 本来、ここにくるのは n = 1 の時だが、念の為 */ } else if ( n % p == 0 ) { /* n が p を素因数として含む */ s_print_char ( ' ' ); /* 隙間を空け */ s_print_int ( p ); /* 素因数を表示し */ /* もう一度 p の要素があるかもしれないので、そこから試す [再帰] */ /* ** この部分を完成させなさい */ } else { /* n が p を素因数として含まない */ /* 本来は p の次の素数を試すべきだが.. */ /* その代りに p + 1 を試す (のは無駄だが、正く動く) [再帰] */ /* ** この部分を完成させなさい */ } } /* * void print_prime_factor_of ( int n ) * 機能 : n の素因数を出力する * int n : 素因数を表示したい自然数 * 返り値 : なし */ void print_prime_factor_of ( int n ) { if ( n < 1 ) { /* 与えらた数が自然数ではない */ s_print_int ( n ); s_print_string ( "は、自然数ではありません\n" ); } else if ( n == 1 ) { /* 与えられた数が 1 の場合 */ s_print_int ( n ); s_print_string ( "の素因数はありません\n" ); } else { s_print_int ( n ); s_print_string ( "の素因数分解は" ); /* ** この部分を完成させなさい */ s_print_string ( " となります。\n" ); } } /* * main */ int main( void ) { print_prime_factor_of ( 12 ); return 0; }
abc123
C:\usr\c\> 20140606-02-QQQQ 12の素因数分解は 2 2 3 となります。 C:\usr\c\>