#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\>