C.K PRIVATE PICマイコン,

WEB・PIC

C.K PRIVATE PICマイコン

C.K PRIVATE / 2010年・PICマイコンのページです
PICマイコンプログラムの基礎の紹介です

2010.9.18   C++

C++のソフトがマイクロソフトからフリーでありますので、下記は簡単に出来るかと思うので
PG初心者の方は是非やってみてください

変数の値の表示

printf("文字列");
とすると、ダブルクォーテーションでくくられた文字列が表示されます
この文字列の中に「%○」「○はbd,f,cなど」が存在すると、その部分に、ダブルクォーテーション
の後ろにある文字や数値を埋め込むことが出来ます
整数の時は%d、浮動少数の場合は%f、文字の場合は%cを指定します
「よくわからなくても下記PGを書いて実行してみてください」
printf("1年は%d日です\n,365);
とすれば
1年は365日です
と、表示されます%dの部分が365に置き換わったのです
この置き換えは複数行うことが出来ます
printf("%d日は%d年です\n,365,1);

最初の%dは365に、次の%dは1に置き換えられて、「365日は1年です」
と表示されます、さてそれでは下記のソースを書いてみましょう

/* format01.c */

#include<stdio.h>

int main()
{
int a,b,c;
a = 10;
b = 15;
c = a+b;

printf("%dたす%dは%dです\n",a,b,c);
return 0;
}
このソースをビルドすると「10たす15は25です」とでます

2010.8.14   continue

掛け算のPGです

/*continue01.c*/
#include<stdio.h>

int main()
{
int i,j;
for(i = 1; i < 10; i++) {
for(j = 1; j<10; j++){
if(i > j)
continue;
printf("%d X %d = %2d\n" , i,j,i*j);
}
printf("------------------\n");
}
return 0;
}

2010.7.17   演算子優先順位

演算子を複数使用するときは演算子の優先順位や結合規則をあれこれ考えて
プログラムするよりも、数学と同じで先に計算してほしいところを( )
でくくっておくと間違いがありません

/* op04.c */

#include<stdio.h>
int main()
{
double shincho = 1.72, taijyu = 65.2;

printf("BMIは体重(kg)を身長(m)の2乗で割ったものです\n");
printf("これが25を超えると肥満です\n");
printf("例えば身長%4.2fmで体重%4.2fkgの人では\n",
shincho, taijyu);
printf("BMI = %4.2f ÷ (%4.2f × %4.2f)で計算します\n",
taijyu, shincho, shincho);
printf("その結果は%4.1fでした\n",
taijyu/(shincho*shincho));
return 0;
}

実行結果は下記になります
BMIは体重(kg)を身長(m)の2乗で割ったものです
これが25を超えると肥満です
例えば身長1.72mで体重65.20kgの人では
BMI = 65.20÷(1.72×1.72)で計算します
その結果は22.0でした


2010.7.3  例PG

/* format04.c */

#include<stdio.h>

int main()
{
double pai = 3.14159265358979;
int mon = 2;
float flt = 1.2f;

printf("%5.2hf\n", flt);
printf("%-5.2f\n", flt);
printf("%05.2f\n", flt);
printf("%+08.2f\n", flt);
printf("%-08.2f\n", flt);

printf("%d\n", mon =3 );

printf("%e\n", pai);

printf("%08.2f\n", pai);
printf("%05d\n", mon);

printf("円周率は%fです\n", pai);
printf("円周率は%1fです\n", pai);
printf("もう少し詳しい値は%10.8lfです\n", pai);
printf("もう少し詳しい値は%15.13lfです\n", pai);
printf("もう少し詳しい値は%20.18fです\n", pai);
printf("円周率は%010.2f\n", pai);
printf("円周率は%-10.2f\n", pai);
printf("円周率は%10.2f\n", pai);

return 0;
}

これで出る値は下記になります
1.20
1.20
01.20
+0001.20
1.20
3
3.14159e+000
00003.14
00003
円周率は3.141593です
円周率は3.141593です
もう少し詳しい値は3.14159265です
もう少し詳しい値は3.1415926535898です
もう少し詳しい値は3.141592653589790000です
円周率は0000003.14
円周率は3.14
円周率は 3.14


2010.6.26  関係演算子と条件式

この演算子をはさむ2つの数の大小を比較をする>、>=、<、<=と
2つの数が等しいことを示す等値演算子==、
その否定!=があります、
=ひとつでは代入演算子、
==並べると等しいことをしめす等値演算子になります、もし、a<bが成立する(真)ならば式a<bの値は1、そうでない
場合は(偽)ならば0というように、比較の結果を0と1でしめします
論理否定演算子!によって、結果の否定を表します、複数の論理を論理積演算子
&&と論理和演算子||を使って結ぶことも出来ます

たとえばa < b && b < c
は、aはb未満かつbはc未満を意味し

a >= b || b >= c
は。aはb以上またはbはc以上を意味します

a >= b は、 !(a < b) と同じ

b >= c は !(b < c) と同じです

ですから
!(a < b) || !(b < c)をさらに否定した式
! (!(a < b) || !(b < c)) は a < b && b < c と同じ値を取ります
AND,OR、NOT、の演算子(プール代数)におけるド、モルガンの定理のC言語版といえます
結合の優先順位は高いほうから論理否定演算子!、大小の比較(4種類)、
等値演算子== とその否定 !=、
論理積&&、 論理和||と言う順になります、

||より&&の優先順位が高いことを忘れないようにしてください
a < b && b < c || C < d は (a < b && b < c ) || c < d であり
a < b && (b < c || c < d)ではありません
優先順位の関わるミスを防ぐために、論理的には不要であっても()で式を
まとめておくと、ミスを防ぐばかりでなく、分かりやすくなります


2010.6.19  サブルーチンを関数にする

C言語のプログラムはmain()を頂点とするサブルーチンの集まりと考えても
さしつかえないと思います、サブルーチンを用いる利点といえば
メインプログラムから複数回使われる処理を抜き出しして、それをコールするように
することがまず浮かびます
下のようにサブルーチンに分割すれば全体が短くなり、共通した処理が1行で記述できます

subルーチン() ←main()で複数回使われる処理をまとめた関数
{
:
:
}

main()
{
subルーチン(); ←上の処理が1行でかける


subルーチン();


subルーチン();


2010.6.12  多次元配列

2次元、3次元配列

/*array06.c*/
#include<stdio.h>

int main()
{
int a[3][2] = {10,20,30,40,50,60,};
int i,j;

/*各要素の値を確かめる*/
for (i = 0; i < 3; i ++){
for(j = 0; j < 2; j ++){
printf("a[%d][%d] = %d\n",i,j,a[i][j]);
}
}
printf("\n");
/*各要素のアドレスを確かめる*/
for(i = 0; i< 3 ; i++){
for(j = 0; j < 2; j ++){
printf("&a[%d][%d] = %p (a[%d] + %d) = %p\n",
i,j,&a[i][j],i,j,(a[i]+j));
}
}
printf("\n");

/*a[m][n]を*(*(*(a+m)+n)と書けるのか確かめる*/

for(i = 0; i < 3; i ++){
for(j = 0; j < 2 ; j++){
printf("*(*(a+%d)+%d) =%d\n",
i,j,*(*(a+i)+j));
}
}
return 0;
}


2010.5.29  ファンクション

/*function01.c*/
#include<stdio.h>

/*自作関数のプロトコル宣言*/
int func(int,int);

int main()
{
int a,b,c;

a = 10;
b = 20;
c = func(a,b);

printf("%d x %d = %d\n",a,b,c);
return 0;
}
int func(int a, int b)
{
int c;
c = a * b;
return c;
}


2010.5.22  エスケープシーケンス

#include<stdio.h>
int main()
{
printf("商品名\t定価\t個数\小計\n");
printf("----------------------------\n");
printf("テレビ\t20.000\1\tt20.000\n");
printf("ラジオ\t5.000\2\t10.000\n");
printf("本\t1.000\t12\t12.000\n");
printf("----------------------------\n");
printf("合計\t\t\t42.000\n");
return 0;
}


そうすると下記のような画面になります
商品名 定価 個数 小計
ーーーーーーーーーーーーーーーーー
テレビ 20.000 1 20.000
ラジオ 5.000 2 10.000
本 1.000 12 12.000
ーーーーーーーーーーーーーーーーーーー
合計 42.000

 

 

エスケープシーケンス 意味
------------------------------------------------------------------
\n 改行(New line)
現在の印字位置を次の行の先頭位置に移動する
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
\t タブ(horizontal)
次の水平タブ位置に移動する
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
\b バックスペース(Backspace)
現在の行で前に移動する
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
\r キャリッジリターン(carriage Return)
現在行の最初の位置に移動
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
\f ページフィード(Form feed)
次の理論ページの最初に移動
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
\' シングルクォーテーション(single quotation mark)
一重引用符
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
\" ダブルクォーテーション(double quotation mark)
二重引用符
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
\0 ヌル文字(null)
空文字
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
\\ 円記号(¥)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
¥? クエスチョンマーク(?)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
\a ベル音(Alert)
ベル音を鳴らす、印字位置は不変
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
¥xhh 16進拡張(hexadecimal)
16進でhhのコードを持つ文字
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
¥ooo 8進拡張(octal)
8進でoooのコードを持つ文字
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


2010.5.15  while

while
/*while01.c*/

 

#include<stdio.h>
int main()
{
int i =10;

while(i>0){
printf("%2d回目の実行です\n",11-i);
i--;

}
return 0;
}

 

ホワイルとは簡単にいうとループさせる部分です、勿論その条件を決めてループさせることが可能です


2010.5.8  for

#include<stdio.h>
int main()
{
int i,j;

for(i=0; i<4; i++){
printf("外側のfor文の1, i = %d\n", i);

for(j=0; j<3; j++){
printf("\t内側のfor文, j = %d\n", j);

}
printf("外側のfor文の2, i = %d\n", i);
}
return 0;
}

外側のfor文で、iは0から3まで1つづつ増加します
それぞれについて内側のfor文でjが2まで回ります、
意味が分かったでしょうか?
さて、for文を使うプログラムの注意点はなんでしょうか、もし
何回繰り返してが起こっても継続条件式が偽にならなかったら
どうでしょうか
いつまでたってもプログラムは終了しませんね
こんなプログラムを走らせるとシステムがハングアップする危険が
ありますので注意してください
for文で継続条件式を省略するとどうなるでしょうか
これは無限ループになります、無限ループから脱出はできるでしょうか?
いくつかの方法があります、簡単なのはbreak文を使うことです
すでに使ってきましたがbreak文は switch,while,do-while文を終了させます

2010.5.1  getchar関数


標準入力から文字を読み込みます
int getchar(void);
入力バッファ
c=getchar();
とすると入力した文字がcに代入されます
次はメニューを表示して、希望のメニューの文字を入力をしてもらう
プログラムです
ユーザーが’X’または’x’を入力しない限りプログラムは終了しません

/* switch02.c */
#include <stdio.h>
int main()
{
int c;
int end = 0;

while(1){
printf(".........MENU.......\n");
printf("A:ゲーム\n");
printf("B:音楽\n");
printf("C:表計算\n");
printf("X:終了\n");
printf(".....................\n");
printf("----->");

while(1){
c = getchar();
if(c != '\n') /*cが’¥n’でないなら*/
break; /*whileループを抜ける*/
}

switch(c){
case'A':
case'a':
printf("\nゲームばかりしないでください\n\n");
break;
case'B':
case'b':
printf("\n音楽が選択されました\n\n");
break;
case'C':
case'c':
printf("\n表計算が選択されました\n\n");
break;
case'X':
case'x':
end = 1;
break;
default:
printf("\n不正な入力です\n\n");
break;
}
if (end ==1) /*endが1なら*/
break; /*whileループを抜ける*/
}
printf("\n終了です\n");
return 0;
}

***while(1){
c = getchar();
if(c != '\n') /*cが’¥n’でないなら*/
break; /*whileループを抜ける*/
}***
に注目してくださいユーザがAキーを押してEnterキーを押すと
入力バッファには'A'と'\n'が蓄えられると書きました、そこで、cが
'\n'でなくなったらループを抜けて次の処理に移ります、
これで、希望通りの動作になったはずです


2010.4.24  else


#include<stdio.h>

int main()
{
int age;
printf("このたびは「猫ランド」に\n"
"ご来園ありがとうございます\n");
printf("--------------------------------");
printf("年齢を入力してください---");
scanf("%d",&age);

if(age<6){
printf("入場料は無料です\n");
} /*ageが6未満の場合*/
else{ /*それ以外の場合*/
printf("入場料1000円をいただきます\n");
}

printf("------------------------------------\n");
printf("では、ごゆっくりお楽しみください\n");

return 0;
}
結果は前回と同じです
ただ違うのは二個目のifがelseに変わったことです


2010.4.17  scanf

scanf関数
標準入力データから整形済みデータを読み込み

scanf関数の変換指定子
変換指定子 入力

%c 文字入力
%d 10進整数
%f float型浮動小数点数
%lf double型浮動小数点数
%s 文字列
%p ポインタ
%o 8進数入力
%x 16進数入力
%u 符号なし、10進整数


scanfとif

1;年齢を尋ねる
2;6歳未満なら無料
3;6歳以上なら1000円

/*nyujoryo.c*/
#include<stdio.h>

int main()
{
int age;
printf("このたびは「猫ランド」に\n"
"ご来園ありがとうございます\n");
printf("--------------------------------");
printf("年齢を入力してください---");
scanf("%d",&age);

if(age<6){
printf("入場料は無料です\n");
} /*ageが6未満の場合*/
if(age>=6){
printf("入場料1000円をいただきます\n");
} /*ageが6歳以上の場合*/

printf("------------------------------------\n");
printf("では、ごゆっくりお楽しみください\n");

return 0;
}

結果は打ち込む数字にもよりますが、18と仮定すると

このたびは「猫でもランド」にご来園ありがとうございます
-------------------------------------------------------
年齢を入力してください---18
入場料1000円をいただきます
--------------------------------------------------------
では、ごゆっくりお楽しみください


2010.4.10  if

if文
ある条件を満たしたとき(条件が真であるとき)にのみ
実行されるようにしたい場合に使う、制御文がifとなります

if(条件){
文1;
文2;
} /*セミコロンは不要*/

ifを使う上で注意があります
ifの真文がが実行されるのは制御式の値がいくつのときか??
「真は1だから 1のときだろう」
と思った人は多いいと思うのですが
それは違います!、勿論制御式の値が1の時は真文が実行されます
しかし0以外であれば真文は実行されます、C言語で「真」という場合は
「1」の場合と「0」以外を指す場合があります
「偽」は常に0です、どのように使い分けられているかというと
真を1とするのは、論理演算(ビット単位ではない)の結果の時です
真を0以外とするのは、それ以外の式の時です
if(a = 2 ){
文1;

a = 2は「aに2を代入する」という意味で、式の値は2です、2は0以外
なので文1は実行されます、そして次の文を上とつなげてみてください

a = 2;
if(a == 2){
文1;

aには上で2が代入されています、(a==2)は論理演算で、aと2が等しいので
真となり、式の値は1ですね、したがって0意外なので文1が実行されます



2010.4.3  シフト演算子

 

シフト演算子
これは右又は左にずらす演算子です、かけ算、割り算を高速で処理することが
出来ます、(>>)は、ビットを右にずらします
下記の図を見てください(1000 0000)のビットを1つ右にずらす
(シフトする)と(0100 0000)となります、左に出来た隙間は0で埋め
右にはみ出たビットは無視します、これは、値が2分の1になりました
さらにビットを1つ右にシフトすると(0010 0000)となります
またまた値が2分の1になりました

右シフト
10000000     1000 0000=128
1つ右にずらす
0で埋める → 0100000〇←無視する    0100 0000=64
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
左シフト
00001100 0000 1100=12
1つ左にずらす
無視する→00011000←0で埋める 0001 1000= 24 
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
E>>nと書くとnビット右にシフトさせます

/* shift01.c*/
#include <stdio.h>
int main()
{
short a = 12, b = 100, c = -50;

printf("%dを左に1ビットシフト --- %d\n", a,a << 1);
printf("さらに1ビット左シフト --- %d\n", a<<2);
printf("さらに1ビット左シフト --- %d\n", a<<3);
printf("さらに1ビット左シフト --- %d\n", a<<4);
printf("\n");
printf("%dを右に1ビットシフト");

printf("さらに1ビット右シフト ----%d\n",b,b>>1);
printf("さらに1ビット右シフト ----%d\n",b>>2);
printf("さらに1ビット右シフト ----%d\n",b>>3);
printf("さらに1ビット右シフト ----%d\n",b>>4);
printf("(処理系依存)\n");
printf("%dを左に1ビットシフト ---%d\n",c,c<<1);
printf("%dを右に1ビットシフト ---%d\n",c,c>>1);

return 0;
}

 

結果は下記になります
12を左に1ビットシフト --- 24
さらに1ビット左シフト  --- 48
さらに1ビット左シフト  --- 96

100を右に1ビットシフトーーー -50
さらに1ビット右シフト --- 25
さらに1ビット右シフト --- 12
さらに1ビット右シフト --- 6
(処理系依存)
-50を左に1ビットシフト --- -100
-50を右に1ビットシフト --- -25


2010.3.27  補数演算子

補数演算子
この他に「~」という演算子(補数演算子)があります、これは、各ビット
を反転させます

/*bit03.c*/
#inclue<stdio.h>
int main()
{
int a =10;
printf("a = %08X\n~a= %08X\n", a, ~a);

return 0;
}

結果は下記のようになったと思います
a = 0000000A
~a =FFFFFFF5

10は32ビットで表すと
(0000 0000 0000 0000 0000 0000 0000 1010).....(1)
となり、これを16進に直すと0x0000000A(1)のビットを反転すると
(1111 1111 1111 1111 1111 1111 1111 0101)となり
これを、16進で表すと0xFFFFFFF5ですね


2010.3.20  ビット演算子

ビット単位の演算を行うものをビット演算子といいます
ビット論理演算子ともいいます、どんなものかというと
代表的な物として下記があります
& ビット積演算子、ビット単位をで比較してともに1なら1
| ビット和演算子、どちらかが1なら1
^ ビット差演算子、互いに異なれば1

/*bit10.c*/
#include<stdio.h>
int main()
{
unsigned short a,b;

a = 1;
b = 3;

printf("a & b = %d\n", a & b);
printf("a | b = %d\n", a | b);
printf("a ^ b = %d\n", a ^ b);

return 0;
}

結果は下記のようになります

a & b = 1
a | b = 3
a ^ b = 2

なぜかというと下記のようになるからです

ビット積 上で書いたように共に1なら1、どちらかが0なら0
0000 0000 0000 0001 (1)
&0000 0000 0000 0011 (3)
ーーーーーーーーーーーーーーーーーーーーー
0000 0000 0000 0001 (1)

ビット和 どちらかが1なら1
0000 0000 0000 0001 (1)
|0000 0000 0000 0011 (3)
ーーーーーーーーーーーーーーーーーーーーー

ビット差 異なれば1、同じであれば0
0000 0000 0000 0001 (1)
^ 0000 0000 0000 0011 (3)
--------------------------------------------
0000 0000 0000 0010

ちなみに1を2進数であらわすと
0000 0000 0000 0001
3を2進数であらわすと
0000 0000 0000 0011
だいぶ分かってきたと思うのですが一応
5を2進数であらわすと
0000 0000 0000 0101
です


2010.3.13  キャスト演算子

いきなりですが、骨折したときには皆さんギプスを巻いてもらいますね?
ギプスはオランダ語で英語ではキャストといいます、キャストは鋳造する
とかある形にするという意味があります
要するには無理矢理型にはめる、という意味です、
これと同じようにC言語にはキャスト演算子というものがあります

/* cast01.c */
#include<stdio.h>

int main()
{
int a = 10, b = 4;
double c;

c = a / b;

printf("%d ÷ %d = %f...(1)\n",a,b, a/b);
printf("%d ÷ %d = %f...(2)\n",a,b,c);
printf("%d ÷ %d = %f...(3)\n",a,b,(double)a/b);
/*int型の変数をdouble型にキャストする*/

return 0;
}


2010.3.6  代入演算子

代入演算子

「a = a + 6;]は変数aに6を加えて、その値をaに代入する式です

これと同じように次のように書くことが出来ます
a += 6; つまり A = A + B; は A += Bと書くことが出来ます
[+=]を加算代入演算子と呼びます

[-=] 減算代入演算子
[*=]  乗算代入演算子
[/=] 除算代入演算子
[%=] 剰余代入演算子
というものもあります、使い方は上の説明と同じです、それぞれの
演算結果を左辺に代入します

/* as01.c */
#include<stdio.h>

int main()
{
int a1,a2,a3,a4;

a1 = 5;
a1 = a1 + 2;
printf("a1 = %d\n",a1);

a2 = 5;
a2 += 2;
printf("a2 = %d\n", a2);

a3 = 5;
a3 = a3++ + 2;
printf("a3 = %d\n", a3);

a4 = 5;
printf("a4 = %d\n", a4 ++ + 2);

return 0;
}
結果は




となります


2010.2.27  演算子

==は右辺と左辺が等しい時に真となります、これを等価演算子といいます
!=は非等価演算子といい、右辺と左辺が等しくないときに真となります

式の値としては真の時1、偽の時0となります

/* eq01.c */
#include<stdio.h>

int main()
{
int a =10;

printf("aの値は%dです\n",a);
printf("a == 10の値は%dです\n",a == 10);
printf("a == 20の値は%dです\n",a == 20);
printf("a != 10の値は%dです\n",a != 10);
printf("a != 20の値は%dです\n",a != 20);

return 0;
}
結果は下記です
aの値は10です
a == 10の値は1です
a == 20の値は0です
a != 10の値は0です
a != 20の値は1です


2010.2.20  不等号演算子

>(左辺は右辺より大きい) <(左辺は右辺より小さい)
<=(左辺は右辺より大きい又は等しい)
>=(左辺は右辺より小さい又は等しい)

不等号演算子(inequality operator)といいます
これも、数学の不等式とイメージ的には同じです
例えば、次のことが言えます
「5>3」は正しい(真、true)
「5<3]は正しくない(偽、false)
不等号演算では、式が真である場合、式の値は1となります、偽である
場合は0となります

/* s101.c */

#include<stdio.h>
int main()
{
int a;
a =5;

/*正しい*/
printf("a<10は[%d]です\n",a<10);
/*正しくない*/
printf("a>10は[%d]です\n",a>10);

return 0;
}

結果は下記のようになります
a<10は「1」です
a>10は「0」です


2010.2.13  一覧

フィールド    指定値        意味
ーーーーーーーーーーーーーーーーーーーーーーー
flags        -           変換されると引数を左詰めにします、 指定しないと右詰めになります
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
          +           出力する値が符号付の場合「+」または
                      「-」の符号をつけます、指定しないと
                      マイナスと0の場合は0は追加されません
                      省略すると0は追加されません
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
width       数値          文字幅を指定します
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
precision    数値           精度を指定します、つまり小数点以下の
                        桁数を指定します
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
typeのプレフィックス  h          short intに適応させます
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
          I              long修飾りです
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
          L              long double修です
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
type        d,i              10進(Decimal)整数を指定します
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
          o               符号なし8進数(Octal)を指定します
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
          u               符号なし16進(hexadecimal)整数でa.b.
                          c.d.e.f.を使います
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
          x               符号なし16進(hexadecimal)整数で
                          A,B,C,D,E,Fを使います
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
          f               浮動小数点(Floating-point)を指定します
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
         e,E               指数(Exponent)変換を指定します
                         ±○、○○e○○または±○、○○E○○、
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
         c                 文字(Charavter)変換を指定します
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
         s               文字列(String)変換を指定します
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
         p               ポインタ(pointer)変換を指定します
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


2010.1.30  Visual C++

今回もCの基本PGです
下記をフリーのVisual C++のソフトを使ってやってみてください

/* op04.c */

#include<stdio.h>
int main()
{
double shincho = 1.72, taijyu = 65.2;

printf("BMIは体重(kg)を身長(m)の2乗で割ったものです\n");
printf("これが25を超えると肥満です\n");
printf("例えば身長%4.2fmで体重%4.2fkgの人では\n",
shincho, taijyu);
printf("BMI = %4.2f ÷ (%4.2f × %4.2f)で計算します\n",
taijyu, shincho, shincho);
printf("その結果は%4.1fでした\n",
taijyu/(shincho*shincho));
return 0;
}

2010.1.16  bitとbyte

8ビットの情報量を1バイトと呼びます
1バイトでは2の8乗で256種類情報を使えるということです

2バイトは上と同じなので16ビットです2の16乗で65536です
ゲームなどでも昔16ビットとか32ビットとか言いましたよね?
メガドライブや、スーパーファミコンの時代・・・
そのときのビットっていう値は上記なんですよぉ

2010.1.9  ピン位置表

PICって種類がほんといっぱいありますよね★
だから僕はいつも簡単なピン位置のコピーしたものをPCの横に置いてあります
何か作りたくても、すぐにわからなきゃ効率が悪いですからね★

ちなみに今日はPICのPGでも使えますが、基本的なC言語の
PGです、凄く簡単なPGですが、実際自分で打ってみてビルドして
実行してみてください、PGの面白さがわかるかも★

 

/* format01.c */

#include<stdio.h>

int main()
{
  int a,b,c;
  a = 10;
  b = 15;
  c = a+b;

  printf("%dたす%dは%dです\n",a,b,c);
  return 0;
}
このソースをビルドすると「10たす15は25です」とでます

2010.1.1  ポインタ

ポインタの基本
最初に、ポインタとはアドレスを格納するための変数です
ポインタを使うためには一般の変数と同じようにブロックの最初に宣言する必要があります
int a;
int *pa;
pa = &a;
とすると変数aのアドレスがpaに代入されましたね、このとき「ポインタpaは変数aを指している」
とか「変数aへのポインタpa」などと表現します
下記が例PGです

/*pointer01.c*/
#include<stdio.h>

int main()
{
int a;
int *lpa;

lpa = &a;

printf("適当な整数値を入力してください----");
scanf("%d",&a);
printf("変数aに%dが代入されました。\n",a);
printf("変数aのアドレスは%pです。\n",&a);
printf("変数aを指しているポインタはlpaです。\n");
printf("*lpaの値は%dです。\n",*lpa);

return 0;
}