- p-001.c (SJIS)
p-001.c
#include <stdio.h>
int main(void) {
printf ( "Hello, World\n" );
return 0;
}
- p-002.c (SJIS)
p-002.c
#include <stdio.h>
#include "s_print.h"
int main(void) {
s_print_string ( "今年は " ); /* 文字列 */
s_print_int ( 2014 ); /* 整数値 */
s_print_string ( "年です。\n" ); /* が混在している場合 */
/*
s_print_string ( "今年は 2014 年です。\n" );
printf ( "今年は 2014 年です。\n" );
*/
return 0;
}
- p-003.c (SJIS)
p-003.c
#include <stdio.h>
#include "s_print.h"
void func ( int year ) {
s_print_string ( "今年は " ); /* 文字列 */
s_print_int ( year ); /* 整数値 */
s_print_string ( "年です。\n" ); /* が混在している場合 */
s_print_string ( "来年は " );
s_print_int ( year + 1 ); /* 年が整数なので計算ができる*/
s_print_string ( "年になります。\n" );
}
int main(void) {
func ( 2014 );
return 0;
}
- p-004.c (SJIS)
p-004.c
#include <stdio.h>
int main(void) {
/*
s_print_string ( "今年は " );
s_print_int ( 2014 );
s_print_string ( "年です。\n" );
*/
printf ( "今年は %d 年です。\n", 2014 );
/*
基本は文字列「今年は %d 年です。\n」が表示される
違いは ^^^ の部分が 「2014」に置き換わる
結果としては「今年は 2014 年です。\n」が表示される
*/
return 0;
}
- p-005.c (SJIS)
p-005.c
#include <stdio.h>
int main(void) {
printf ( "今年は %d 年です。\n来年は %d になります。\n",
2014, 2014 + 1 );
/*
今年は %d 年です。\n来年は %d になります。\n
^^ 2014 ^^ 2014+1
今年は 2014 年です。
来年は 2015 になります。
*/
return 0;
}
- p-006.c (SJIS)
p-006.c
#include <stdio.h>
int main(void) {
printf ( "今年は %d 年です。\nその 4 文の一は %f になります。\n",
2014, 2014/4.0 );
/* %d の所は、int 型の値を埋込む
%f の所には、double 型の値を埋込む
!! 「型」の事を意識する必要がある
*/
return 0;
}
- p-007.c (SJIS)
p-007.c
#include <stdio.h>
int main(void) {
printf ( "abc\n" ); /* これまでの文字列の出力 */
printf ( "x=%d\n", 123 );
/* 整数値の埋め込みは %d を使う
出力したい整数値の指定は、二つ目以後の引数で指定
*/
printf ( "u=%d, v=%d\n", 123, 456 );
/* 個々の書式指定に対応して引数をふやす
書式指定の個数と、引数の個数は対応
*/
printf ( "p=%f\n", 124.456 );
/* 浮動小数点数の場合は、%f を使う
整数の出力と浮動小数点数は指定が異る
*/
printf ( "英語の「%s」は、日本語の「%s」です。",
"dog", "犬" );
/* 文字列の中に文字列を埋込む事ができる
文字列の場合は、書式指定として %s を使う */
printf ( "文字列「%s」の最初の文字は「%c」です\n",
"abc", *"abc" );
return 0;
}
- p-008.c (SJIS)
p-008.c
#include <stdio.h>
int main(void) {
int x = 1;
printf ( "x=%d\n", x ); /* 「x=1」と表示 */
return 0;
}
- p-009.c (SJIS)
p-009.c
#include <stdio.h>
int main(void) {
int x = 1;
printf ( "%d", x ); /* 「1」のみが出力される */
return 0;
}
- p-010.c (SJIS)
p-010.c
#include <stdio.h>
int main(void) {
int x;
scanf ( "%d", &x ); /* キーボードから整数値を
一つ読込み(入力し)、
その値を x に代入 */
/* x = s_input_int(); */
printf ( "%d", x ); /* 「1」のみが出力される */
return 0;
}
- p-011.c (SJIS)
p-011.c
/*
* 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) の符号を確認 */
/* mid の左に解がある */
/*
[min,max] の中に答えがある
f(mid) = mid^3-a ( mid = (min+max)/2 )
が 負か、正かによって、
[min,mid] か [mid,max]
のどちらかに答えがある事がわかる
*/
return regula_falsi_cubic_root ( a, mid, (mid+max)/2.0, max );
} else {
/* mid の右に解がある */
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 の立方根を計算し、負数を返す */
return - cubic_root ( - a );
} else if ( a < 1.0 ) { /* a が 1.0 以下なら */
/*
f(1)=1^3 - a > 0
区間は [0,1] を指定すれば良い
*/
/*
return a / cubic_root(1.0/a)*cubic_root(1.0/a);
*/
return regula_falsi_cubic_root (a,0.0,(0.0+1.0)/2.0,1.0);
/* 立方根は a と 1.0 の間にある */
} else { /* そうでなければ.. */
/* a>1 の時は、f(a)=a^3-a > 0, 区間は [1,a] を指定 */
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_double ( cubic_root ( a ) );
s_print_string ( " です。\n" );
/*
printf ( "%f の立方根は、%f です。\n",
a, cubic_root ( a ) );
*/
}
/*
* main
*/
int main( double argc, char *argv[] )
{
s_print_string ( "実数値を一つ入力してください : " );
print_cubic_root ( s_input_double() );
return 0;
}
- p-012.c (SJIS)
p-012.c
/*
* TITLE
*
* CDATE FILENAME
*
* キーボードから三つの整数を入力し、小さい順に出力する
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* main
*
* 三つの数をキーボードから入力し、
* 一旦、変数に代入しておく ( その値を何度も利用したいから *)
* -> 代入をするまえは、関数の引数にする必要があった
* -> なので、ちょっと面倒
* -> 代入を使うと、すっきします。
*/
int main( int argc, char *argv[] )
{
int i1; /* 三つの入力された整数を保存する変数 */
int i2;
int i3;
/* i1, i2, i3, 入力順 */
int o1; /* 小さい順に値を入れる */
int o2; /* 小さい順に値を入れる */
int o3;
/* o1, o2, o3, 大きさ順序 */
s_print_string ( "一つ目の整数を入力してください : " );
i1 = s_input_int();
s_print_string ( "二つ目の整数を入力してください : " );
i2 = s_input_int();
s_print_string ( "三つ目の整数を入力してください : " );
i3 = s_input_int();
/*
* 数を比較して、一番小さい物をみつける
*/
/* 一番小さい者をさがして o1 にいれる */
if ( i1 < i2 ) {
/* i2 は最小ではない */
/* i1 は最大でもない */
/* i2 と i3 のうち、大きい方が最大*/
/* i1 と i3 のうち、小さい方が最小*/
if ( i2 < i3 ) {
/* i3 が最大 */
/* i1 が最小 (why, i1<i2, i2<i3 -> i1<i3) */
o1 = i1; /* i1 が最小なので */
o2 = i2;
o3 = i3; /* i3 が最大なので */
} else if ( i1 < i3 ) { /* i2 は最大, i1, i3 の関係は */
o1 = i1;
o2 = i3;
o3 = i2;
} else {
o1 = i3;
o2 = i1;
o3 = i2;
}
} else {
/* i1 > i2 */
if ( i1 < i3 ) { /* i3 が最大 */
o1 = i2;
o2 = i1;
o3 = i3;
} else if ( i2 < i3 ) {
/* i1 が最大という事はわかってて.. */
/* i2 が最小とわかる */
o1 = i2;
o2 = i3;
o3 = i1;
} else {
o1 = i3;
o2 = i2;
o3 = i1;
}
}
/*
* 出力 (小さいものから大きいものへと出力
*/
s_print_int ( o1 );
s_print_char ( ',' );
s_print_int ( o2 );
s_print_char ( ',' );
s_print_int ( o3 );
s_print_newline();
return 0;
}
- memo.txt (SJIS)
memo.txt
s_print_string / s_print_int
個々の表示を、対象とするデータの型の違いに応じて呼び出す
型が異れば、処理の方法が違うので..
でも...
複数のデータが混在する表示はよくある
文字列の中に「他の型の値を埋込」んで表示する事が多い
その為の専用の関数を準備してある
printf がそれ
printf の機能
基本は、(これまで学んだように..) 最初の引数で指定
した文字列を画面に出力する
文字列の中に、「書式指定」とよばれる % で始まる文字列
を埋込むと、そこには、その「書式指定」に従った形で、
二つめ以降の引数に指定されたデータの値が、「その場所
に埋め込まれて」表示される
「値を『書式付き(format)』で出力(print)する」ので
print with format -> printf
書式指定には、様々なものがある
-> 自分で調べてください
%d 整数値を標準の形式で出力する
%f 浮動小数点数値を標準の形式で出力する
%c 文字型の値
%s 文字列
%% 書式指定ではなく、% 自身を出力する
他に色々な事ができる
例
表示の桁数を指定できる
表示の右揃え左揃えや、表示形式も指定できる
整数数値は、進数 ( 16, 8 ) も指定できる
scanf
書式指定をした入力
最初の引数に書式を指定
二つ目「以降」は、その読み込んだ値を代入する変数名に「&」を付けたものを指定する
int x;
scanf ( "%d", &x ); ← x に整数が読み込まれる
double y;
scanf ( "%f", &y ); ← y に浮動小数点数が読み込まれる
int i1;
int i2;
scanf ( "%d%d", &i1, &i2 );
← 二つの整数値が、i1, i2 にそれぞれ読み込まれる
キーボードから「123 456」といれる
int i1;
int i2;
scanf ( "%d,%d", &i1, &i2 );
キーボードから「123,456」といれる
i1 = s_input_int();
sscanf
fscanf
scanf の対象は変数なので、次のようにはできない
printf ( "%d", 1 ); /* 「1」のみが出力される */
scanf ( "%d", &1 ); /* ??? */
%d 整数値
%f 浮動小数点数値
%c 文字型の値