文字列と配列
Point1 基礎事項
「文字」と「文字列」は扱いが異なる。
文字…1文字     文字列…2文字以上(1文字でも文字列扱いになる)


5.5.1 文字コード
例28の実行結果
A[Enter]
A     65     41     →Aは文字、65は10進数、41は16進数表現
z[Enter]                (%c)    (%d)       (%x)
%(終了)■
アルファベットの大文字と小文字はアスキーコードで0x(20)(10進数で32)違うだけ。
また、例28の「!='z'」となっているところを「!='\n'」とするとエンターキーで終了できる。


5.5.2 1次元配列
配列変数を使う。(配列変数…複数の変数を番号(添字)で管理し、まとめたもの)
int a[8]のメモリ空間
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
 10  20  15   25  41  35  33   22
※宣言文で宣言した数字より1少ないので注意。a[8]で宣言したらa[7]まで使える。
使い方
     データ型  配列変数名[要素数];     
(例)   int a[4]
        a[0]〜a[3]も計4つが使える。


5.5.3 文字列
printfの補足 %c:文字表示   %s:文字列表示   %d:10進表示
%x:16進表示  %o:8進表示
定数の補足 0x20:16進数   015:8進数   'a':文字
"abc":文字列
配列宣言とともに文字列を代入する方法
     char 配列変数名[要素数]=”代入したい文字列”;     
代入したい文字列…文字数=要素数−1以内
実行時に文字列を代入する方法(キーボードから)
     gets(配列変数名);     
※配列の最後の要素に「\0(数値の0)」が置かれる。(文字列の最後を表すため)
 これは自動的に代入されるのでプログラマは代入する必要がない。



Point2 問題
練習44 小文字を大文字に変換するプログラムを作れ。
{int c,d;
 while((c=getchar())!='z'){ d=c-0x20; printf("%c-->%c\n",c,d); }}


練習45 getchar()を用いて、大文字は小文字に、小文字は大文字に変換するプログラムを作れ。
{int c,d;
 while((c=getchar())!='\n'){
 if(c>0x60) 
←小文字ならば
 d=c-0x20;
 else d=c+0x20;
 printf("%c-->%c\n",c,d); }}


練習46 英文を1行小文字で入力したとき、文の先頭の文字を大文字にするプログラムを作れ。
{int c,flag; flag=1;               状態変数flag→状態を知るために使う
 while((c=getchar())!='\n'){               
flag…旗
 if(flag==1){ c-=0x20; flag=0; }           
0…降ろす(何もしない)
 else if(c=='.') flag=1;                   
1…挙げる(次にくる文字を
 printf("%c",c); }                          
大文字にしなさい)
 printf("\n"); }


練習47 例29のプログラムを改良し、8人の合計点と平均点を出力せよ。
{int i,s;
 int a[8]={10,20,15,25,41,35,33,22};
 float avg;
 s=0;
 for(i=0;i<8;i++){ s=s+a[i]; }
 avg=s/8.0;
 printf("合計=%d 平均=%5.2f\n",s,avg); }


練習48 例29のプログラムを改良し、8人の最高点と最低点を出力せよ。
{int i,max,min;
 int a[8]={10,20,15,25,41,35,33,22};
 max=min=a[0]; 
→暫定1位、暫定最下位
 for(i=1;i<8;i++){ if(max<a[i]){ max=a[i]; } if(min>a[i]){ min=a[i]; } }
 printf("最高=%d 最低=%d\n",max,min); }


練習49 文字列の長さを求めるプログラムを作れ。
{int i;
 char a[256]="This is a pen";
 i=0;
 while(a[i] !='\0'){ i++; } 
→(a[13] !='\0')になったら抜けなさい、という指示。
 printf("%s=%d文字\n",a,i); }


練習50 練習49のプログラムを改良し、gets(a)を用いて、キーボードから入力した文字の文字数を表示するプログラムを作れ。
{int i;
 char a[256];
 gets(a);
 i=0;
 while(a[i] !='\0'){ i++: }
 printf("%s=%d文字\n",a,i); }

Page Top



br→
main_box