当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
/*
* 2012/06/15 sample-001.c
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h" /* 入力のために必要 */
/*
* main
*/
int main(void)
{
s_print_string ( "整数をキーボードから入力して、改行キーを押してください : " );
s_print_int ( s_input_int() ); /* */
s_print_newline();
s_print_string ( "文字をキーボードから入力して、改行キーを押してください : " );
s_print_char ( s_input_char() ); /* */
s_print_newline();
return 0;
}
/*
*
*/
123 c
C:\usr\c>sample-001< sample-001.in 整数をキーボードから入力して、改行キーを押してください : 123 123 文字をキーボードから入力して、改行キーを押してください : c c C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/*
* 2012/06/15 sample-002.c
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h" /* 入力のために必要 */
/*
* input_add
*/
int input_add ( int n )
{
s_print_string ( "整数をキーボードから加える数を入力して、改行キーを押してください : " );
return n + s_input_int();
}
/*
* main
*/
int main(void)
{
s_print_string ( "一つ目の整数をキーボードから入力して、改行キーを押してください : " );
s_print_int ( input_add ( s_input_int() ) );
s_print_newline();
return 0;
}
/*
*
*/
123 392
C:\usr\c>sample-002< sample-002.in 一つ目の整数をキーボードから入力して、改行キーを押してください : 123 整数をキーボードから加える数を入力して、改行キーを押してください : 392 515 C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/*
* 2012/06/15 sample-003.c
*/
#include <stdio.h>
#include <stdlib.h> /* rand を使うために必要 */
#include "s_print.h"
/*
* main
*/
int main(void)
{
s_print_int ( rand() ); /* rand には引数が要らない */
s_print_newline();
s_print_int ( rand() ); /* 呼出す毎に異なる値になる */
s_print_newline();
s_print_int ( rand() );
s_print_newline();
s_print_int ( rand() );
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c>sample-003 1804289383 846930886 1681692777 1714636915 C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/*
* 2012/06/15 sample-004.c
*/
#include <stdio.h>
#include <stdlib.h> /* rand を使うために必要 */
#include "s_print.h"
/*
* saikoro
*/
int saikoro(void) {
return rand() % 6 + 1; /* 6 で割った余りは 0 〜 5, これに 1 を加えれば 1 〜 6 になる */
}
/*
* main
*/
int main(void)
{
s_print_int ( saikoro() ); /* saikoro には引数が要らない */
s_print_newline();
s_print_int ( saikoro() ); /* 呼出す毎に異なる値になる */
s_print_newline();
s_print_int ( saikoro() );
s_print_newline();
s_print_int ( saikoro() );
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c>sample-004 2 5 4 2 C:\usr\c>
Download : sample-005.c ( SJIS 版 )
/*
* 2012/06/15 sample-005.c
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h" /* 入力のために必要 */
/*
* min_max_game_check
*/
extern void min_max_game ( int question, int count );
/*
* min_max_game_check
*/
void min_max_game_check ( int question, int count, int answer )
{
if ( question == answer ) {
s_print_string ( "正解です。" );
s_print_newline();
s_print_int ( count );
s_print_string ( "回で発見できました。" );
} else if ( question < answer ) {
s_print_string ( "大きすぎます" );
s_print_newline();
min_max_game ( question, count + 1 );
} else {
s_print_string ( "小さすぎます" );
s_print_newline();
min_max_game ( question, count + 1 );
}
}
/*
* min_max_game
*/
void min_max_game ( int question, int count )
{
s_print_int ( count );
s_print_string ( "回目の予想です。" );
s_print_newline();
s_print_string ( "予想する数を入力してください :" );
min_max_game_check ( question, count, s_input_int() );
}
/*
* main
*/
int main( void )
{
s_print_string ( "1 〜 1000 の数を予想してください\n" );
min_max_game ( rand() % 1000 + 1, 1 );
return 0;
}
/*
*
*/
100 500 400 300 350 370 380 385 384
C:\usr\c>sample-005< sample-005.in 1 〜 1000 の数を予想してください 1回目の予想です。 予想する数を入力してください :100 小さすぎます 2回目の予想です。 予想する数を入力してください :500 大きすぎます 3回目の予想です。 予想する数を入力してください :400 大きすぎます 4回目の予想です。 予想する数を入力してください :300 小さすぎます 5回目の予想です。 予想する数を入力してください :350 小さすぎます 6回目の予想です。 予想する数を入力してください :370 小さすぎます 7回目の予想です。 予想する数を入力してください :380 小さすぎます 8回目の予想です。 予想する数を入力してください :385 大きすぎます 9回目の予想です。 予想する数を入力してください :384 正解です。 9回で発見できました。C:\usr\c>
-->
Download : 20120622-01.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 my_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 {
/*
** この部分を完成させなさい
*/
}
}
/*
* my_remainder : print ( n mod m )
*/
void my_remainder ( int n, int m ) {
/*
** この部分を完成させなさい
*/
}
/*
* main
*/
int main()
{
printf ( "10 mod 4 = " );
my_remainder ( 10, 4 );
printf ( "\n" );
printf ( "10 mod 3 = " );
my_remainder ( 10, 3 );
printf ( "\n" );
printf ( "10 mod 2 = " );
my_remainder ( 10, 2 );
printf ( "\n" );
return 0;
}
C:\usr\c\> 20120622-01 10 mod 4 = 2 10 mod 3 = 1 10 mod 2 = 0 C:\usr\c\>
Download : 20120622-02.c ( SJIS 版 )
/*
* DATE-DIR-QQQQ.c
*
* 文字列の長さを計算する my_string_length
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
#define EOS '\0' /* End Of String */
int my_string_length ( char *str ) {
if ( *str == EOS ) { /* "" は 長さ 0 */
/*
** この部分を完成させなさい
*/
} else { /* 残りの長さ + 1 */
/*
** この部分を完成させなさい
*/
}
}
/*
*
*/
int main ( void ) {
s_print_int ( my_string_length ( "abc" ) ); /* 3 と表示されるはず */
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c\> 20120622-02 3 C:\usr\c\>
Download : 20120622-03.c ( SJIS 版 )
/*
* DATE-DIR-QQQQ.c
*
* cos のグラフ
*/
#include <stdio.h>
#include <math.h> /* 数学関数を利用する場合はこれを追加する */
#include "s_print.h"
#include "s_input.h"
/*
*
*/
void plot_dot_sub ( double pos, double value ) {
if ( pos >= value ) { /* 印刷位置まだきた */
s_print_char ( '*' ); /* 「点」を出力 */
s_print_newline (); /* この行は終り */
} else {
s_print_char ( ' ' ); /* 空白を出力 */
plot_dot_sub ( pos + 1.0, value ); /* 続きを計算 */
}
}
/*
* 0 〜 79 で、 -1.0 〜 1.0 を表現するには、
* x | -1.0 〜 1.0 | x
* --+-------------+---------------
* y | 0 〜 79 | ( x + 1 ) * 40
*/
#define WIDTH 80.0 /* 一行の中のカラム数を定義 */
void plot_dot ( double value ) {
plot_dot_sub ( 0.0, ( value + 1.0 ) * WIDTH/2.0 );
}
/*
*
*/
void print_cos_curve( double top, double end, double step ) {
if ( top >= end ) {
/* 何もする必要はない */
} else {
/*
** この部分を完成させなさい
*/
}
}
/*
*
*/
#define PI 3.141592
int main ( void ) {
print_cos_curve( 0, 2 * PI, 0.1 ); /* PI は 円周率 */
return 0;
}
/*
*
*/
C:\usr\c\> 20120622-03
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
C:\usr\c\>
Download : 20120622-04.c ( SJIS 版 )
/*
* DATE-DIR-QQQQ.c
*
* 正の整数値をキーボードから入力し、素数かどうかを判定した結果を表示する
* 0 以下の値が入った場合は、終了する
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
int min_factor ( int number, int factor ) {
if ( number % factor == 0 ) { /* number は factor で割り切れる */
return factor; /* それを返す */
} else {
/* factor を一つ大きくして、試す */
/*
** この部分を完成させなさい
*/
}
}
void prime_check ( int number, int factor ) {
if ( factor == number ) { /* 最大の約数が自分と同じ */
s_print_int ( number );
/*
** この部分を完成させなさい
*/
} else {
s_print_int ( number );
s_print_string ( " は、 " );
s_print_int ( factor );
/*
** この部分を完成させなさい
*/
}
}
void prime_check_loop ( int number ) {
if ( number <= 0 ) { /* 0 より小かった */
s_print_string ( "0 以下の数 " );
s_print_int ( number );
s_print_string ( " が入力されたので終了します。\n" );
} else {
if ( number == 1 ) {
/*
** この部分を完成させなさい
*/
} else {
prime_check ( number, min_factor ( number, 2 ) );
}
/* 再帰 */
s_print_string ( "整数値を入力してください(0 以下で終了) : " );
prime_check_loop ( s_input_int() );
}
}
/*
*
*/
int main ( void ) {
s_print_string ( "整数値を入力してください(0 以下で終了) : " );
prime_check_loop ( s_input_int() );
return 0;
}
/*
*
*/
4 1 7 -1
C:\usr\c\> 20120622-04 整数値を入力してください(0 以下で終了) : 4 は、 2 で割り切れるので、合成数でした。 整数値を入力してください(0 以下で終了) : 1 は、素数でありません。 整数値を入力してください(0 以下で終了) : 7 は、素数でした。 整数値を入力してください(0 以下で終了) : 0 以下の数 -1 が入力されたので終了します。 C:\usr\c\>