#include <stdio.h>
#include "s_print.h"
/*
f(x)=x^2
f(3) -> 3*3 -> 9
*/
int f(int x) {
return x*x;
}
int main(void)
{
s_print_string ( "f(3)=" );
s_print_int ( f(3) );
/*
f(3)
->
x=3 // 変数 x に値 3 が割り当たっている
f(x) // 「x に 3 が代入」された
->
x=3
return x*x;
->
x=3
return 3*3;
->
return 9;
->
9
*/
s_print_string ( "\n" );
/*
「f(3)=9」と表示されるはず..
*/
/*
同様にして
f(4)
->
x = 4
f(x)
..
16
*/
return 0;
}
#include <stdio.h>
#include "s_print.h"
int f(int x) {
s_print_string ( "(x=" );
s_print_int ( x );
s_print_string ( ")" );
/*
x には 3 が割り当てられていた
*/
x = 7; /* 「変数 x に値 7 を代入」
代入(の典型的な書かた) */
s_print_string ( "(x=" );
s_print_int ( x );
s_print_string ( ")" );
return x*x;
}
int main(void)
{
s_print_string ( "f(3)=" );
s_print_int ( f(3) );
/*
x に 3 が代入
*/
s_print_string ( "\n" );
/*
「f(3)=(x=3)(x=7)49」
^^^^^^^^^^ は f の中で出力した
と表示されるはず..
*/
return 0;
}
#include <stdio.h>
#include "s_print.h"
void fab ( int a, int b ) {
s_print_string ( "a= " ); s_print_int ( a );
s_print_string ( ", b= " ); s_print_int ( b );
s_print_string ( "\n" );
a = b; /* a に b の値を代入 */
s_print_string ( "a= " ); s_print_int ( a );
s_print_string ( ", b= " ); s_print_int ( b );
s_print_string ( "\n" );
}
void fba ( int a, int b ) {
s_print_string ( "a= " ); s_print_int ( a );
s_print_string ( ", b= " ); s_print_int ( b );
s_print_string ( "\n" );
b = a; /* b に a の値を代入 */
s_print_string ( "a= " ); s_print_int ( a );
s_print_string ( ", b= " ); s_print_int ( b );
s_print_string ( "\n" );
}
int main(void) {
s_print_string ( "fab(3,7) を呼び出す\n" );
fab(3,7);
s_print_string ( "fba(3,7) を呼び出す\n" );
fba(3,7);
return 0;
}
/*
二つの整数型の変数 a, b があり、異る値が入っている
ものとする。
このとき、a と b の値を交換したいが、どうすればよいか ?
*/
void exchange ( int a, int b, int work ) {
s_print_string ( "a= " ); s_print_int ( a );
s_print_string ( " b= " ); s_print_int ( b ); s_print_string ( "\n" );
/*
a の値と b の値を交換
*/
/* a = 3, b = 7, work = 0 [←どうでも良い..] */
work = a;
/* a = 3, b = 7, work = 3 */
a = b;
/* a = 7, b = 7, work = 3 */
b = work;
/* a = 7, b = 3, work = 3 */
/* a = 7, b = 3, work = 3 [←どうでもよい] */
/*
「work」という変数は、
全体の作業をするための中間的な存在
<-反-> 関数の引数
「引数以外の形で使えると便利」
-> 局所(local)変数 [ auto 変数 ] の作りかた
「局所変数宣言」
*/
s_print_string ( "a= " ); s_print_int ( a );
s_print_string ( " b= " ); s_print_int ( b ); s_print_string ( "\n" );
}
int main(void) {
exchange ( 3, 7, 0 );
/*
a=3, b=7
a=7, b=3
*/
}
/*
二つの整数型の変数 a, b があり、異る値が入っている
ものとする。
このとき、a と b の値を交換したいが、どうすればよいか ?
*/
void exchange ( int a, int b ) {
int work; /* work という局所変数の宣言 */
/* work にはどのような値が最初に
割り当たっているかは不明(定) */
s_print_string ( "a= " ); s_print_int ( a );
s_print_string ( " b= " ); s_print_int ( b ); s_print_string ( "\n" );
/*
a の値と b の値を交換
*/
/* a = 3, b = 7, work = ? [←どうでも良い..] */
work = a; /* 局所変数は、最初に初期化する */ /* a = 3, b = 7, work = 3 */
a = b; /* a = 7, b = 7, work = 3 */
b = work; /* a = 7, b = 3, work = 3 */
/* a = 7, b = 3, work = 3 [←どうでもよい] */
/*
「work」という変数は、
全体の作業をするための中間的な存在
<-反-> 関数の引数
「引数以外の形で使えると便利」
-> 局所(local)変数 [ auto 変数 ] の作りかた
「局所変数宣言」
*/
s_print_string ( "a= " ); s_print_int ( a );
s_print_string ( " b= " ); s_print_int ( b ); s_print_string ( "\n" );
}
int main(void) {
exchange ( 3, 7 );
/*
a=3, b=7
a=7, b=3
*/
}
#include <stdio.h>
#include "s_print.h"
/*
* 'a' 〜 'z' までの文字を出す
*/
int main(void) {
char ch;
ch = 'a'; /* 時間 (0) */
while ( ch <= 'z' ) { /* ch の値が 'z' 以下の間 (t-1) */
putchar ( ch ); /* その文字を出力し (t-2) */
ch = ch + 1; /* 出力する文字の値を 1 ふやす (t-3) */
}
/* 時間 (2) */
return 0;
}
/*
時間 変数 条件(ch <= 'z')
0 ch == 'a' 成立 while に入る直前
0-1 条件が成立するので本体実行
0-2 putchar (ch) -> 'a'
0-3 ch == 'b' ch の値を 1 ふやす
1 ch == 'b' 成立 while に入る直前
1-1 条件が成立するので本体実行
1-2 putchar (ch) -> 'b'
1-3 ch == 'c' ch の値を 1 ふやす
2 ch == 'c' 成立 while に入る直前
2-1 条件が成立するので本体実行
2-2 putchar (ch) -> 'c'
2-3 ch == 'd' ch の値を 1 ふやす
....
t ch == 'z' 成立 while に入る直前
t-1 条件が成立するので本体実行
t-2 putchar (ch) -> 'z'
t-3 ch == ';' ch の値を 1 ふやす
t+1 ch == ';' 不成立
2 終了
while ( ch <= 'z' ) {
putchar ( ch );
ch = ch + 1;
}
同じ
putchar ( ch );
ch = ch + 1;
putchar ( ch );
ch = ch + 1;
...
putchar ( ch );
ch = ch + 1;
*/
#include <stdio.h>
#include "s_print.h"
/*
* 'a' 〜 'z' までの文字を出す
*/
void printatoz ( char ch ) {
if ( ch <= 'z' ) {
putchar ( ch );
printatoz ( ch + 1 );
}
}
int main(void) {
char ch;
printatoz ( 'a' );
return 0;
}
1+5/2 -> int 型 = 3
1.0+5/2 -> double 型の値になる
A) 3.0 ◎
B) 3.5 ×
1.0+5/2
-> 1.0+(5/2)
-> (double)1.0+((int)5/(int)2)
-> (double)1.0+(int)2
-> (double)1.0+(double)2
-> (double)1.0+(double)2.0
-> (double)3.0
1+5/2.0
-> 1+(5/2.0)
-> 1+(5.0/2.0)
-> 1+2.5
-> 1.0+2.5
-> 3.5
キャストを使わずに、浮動小数点数に変換
*1.0
+0.0
3*1.0 -> 3.0
4+0.0 -> 4.0
==
while 文の構文規則(書き方)
while ( 条件 ) {
命令
}
while 文の意味
「条件」が成立する間「命令」を繰り返す
cf. if の構文とよくにている
if ( 条件 ) {
命令
} else {}
Download : 20140627-01.c ( SJIS 版 )
/*
* TITLE
*
* CDATE FILENAME
*
* 一つ浮動小数点数値をキーボードから入力し、その立方根を出力する
* 手段としては、「二分法」を使う
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
*
*/
#define EPSILON 0.00000001 /* 誤差幅 */
/*
* double regula_falsi_cubic_root ( double a, double min, double mid, double \
max )
* double a 立方根の元になる数(正を仮定している)
* double min, max 根の入る区間の範囲
* double mid min と mid の中点
* return a 立方根
* 二分法により、a の立方根を求める
* 0 < min < a の立方根 < max
*/
double regula_falsi_cubic_root ( double a, double min, double mid, double \
max ) {
if ( max - min < EPSILON ) { /* 十分に精度が上った */
return mid; /* 中点の値を答として返す */
} else { /* まだ、狭める必要がある */
/* min が解のどちら側にあるかを調べ.. それに併せて区間を調整 */
/* f(x)=x^3-a */
if ( mid * mid * mid - a < 0.0 ) { /* f(mid) の符号を確認 */
/* 解の左にあった */
/*
** この部分を完成させなさい
*/
} else { /* 解の右にあった */
return regula_falsi_cubic_root ( a, min, (min+mid)/2.0, mid );
}
}
}
/*
* double cubic_root ( double a )
* double a 立方根の元になる数
* return a 立方根
* a の立方根を求めて結果として返すが、
* 計算の基本は、regula_falsi_cubic_root にまかせる
* ここでは、計算の正規化を行う
*/
double cubic_root ( double a ) {
if ( a < 0.0 ) { /* a が負の数ならば.. */
/* -a の立方根を計算し、負数を返す */
/*
** この部分を完成させなさい
*/
} else if ( a < 1.0 ) { /* a が 1.0 以下なら */
/*
** この部分を完成させなさい
*/
/* 立方根は a と 1.0 の間にある */
} else { /* そうでなければ.. */
return regula_falsi_cubic_root ( a, 1.0, (1.0+a)/2.0, a );
/* 立方根は 1.0 と a の間にある */
}
}
/*
* void print_cubic_root ( double a )
* double a 立方根を計算する数
* 元の数と、立方根を出力する
*/
void print_cubic_root ( double a ) {
s_print_double ( a );
s_print_string ( " の立方根は " );
/*
** この部分を完成させなさい
*/
s_print_string ( " です。\n" );
}
/*
* main
*/
int main( double argc, char *argv[] )
{
s_print_string ( "実数値を一つ入力してください : " );
print_cubic_root ( s_input_double() );
return 0;
}
12.34
C:\usr\c\> 20140627-01-QQQQ 実数値を一つ入力してください : 12.340000 12.340000 の立方根は 2.310850 です。 C:\usr\c\>
Download : 20140627-02.c ( SJIS 版 )
/*
* TITLE
*
* CDATE FILENAME
*
* キーボードから三つの整数を入力し、小さい順に出力する
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* main
*/
int main( int argc, char *argv[] )
{
int i1; /* 三つの入力された整数を保存する変数 */
/*
** この部分を完成させなさい
*/
int i3;
int o1; /* 小さい順に値を入れる */
int o2; /* 小さい順に値を入れる */
/*
** この部分を完成させなさい
*/
s_print_string ( "一つ目の整数を入力してください : " );
i1 = s_input_int();
s_print_string ( "二つ目の整数を入力してください : " );
i2 = s_input_int();
s_print_string ( "三つ目の整数を入力してください : " );
/*
** この部分を完成させなさい
*/
/*
* 数を比較して、一番小さい物をみつける
*/
if ( i1 < i2 ) {
if ( i2 < i3 ) {
/*
** この部分を完成させなさい
*/
} else if ( i1 < i3 ) {
o1 = i1;
o2 = i3;
o3 = i2;
} else {
o1 = i3;
o2 = i1;
o3 = i2;
}
} else {
if ( i1 < i3 ) {
o1 = i2;
o2 = i1;
o3 = i3;
} else if ( i2 < i3 ) {
/*
** この部分を完成させなさい
*/
} else {
o1 = i3;
o2 = i2;
o3 = i1;
}
}
/*
* 出力
*/
/*
** この部分を完成させなさい
*/
s_print_char ( ',' );
s_print_int ( o2 );
s_print_char ( ',' );
s_print_int ( o3 );
s_print_newline();
return 0;
}
4 1 3
C:\usr\c\> 20140627-02-QQQQ 一つ目の整数を入力してください : 4 二つ目の整数を入力してください : 1 三つ目の整数を入力してください : 3 1,3,4 C:\usr\c\>
-->