キーボードから文字列を入力すると,何文字入力されたかを画面に表示するプログラムを作成する.
ヒント:文字列の終わりはnull文字で判断する.
#include <stdio.h>
void main()
{
char c[256];
int i;
printf("文字列を入力してください:");
scanf("%s", c);
for(i=0; c[i] != 0; i++); /* これで,文字数を数えている.null文字は,0 */
printf("入力された文字列は,%s で,%d 文字です\n", c, i); /* なぜ,i が文字数なのか */
}
これまで習った配列,文字列では,要素は横方向へ増えていく一次元でした.
下の成績表のように,二次元のデータはどう扱ったらよいでしょう.このような成績表は,出席番号と科目という 2つの要素から成り立っています.つまり,2つの添え字があれば,点数を読み出せます.
| 出席番号 | 国語 | 数学 | 理科 | 社会 | 英語 |
| 1 | 65 | 71 | 74 | 82 | 97 |
| 2 | 84 | 83 | 74 | 64 | 65 |
| 3 | 74 | 74 | 78 | 80 | 78 |
| 4 | 90 | 90 | 90 | 90 | 90 |
| 5 | 87 | 78 | 85 | 60 | 88 |
| 6 | 93 | 95 | 94 | 92 | 95 |
この表を配列を用いて効率よく扱うためには,二次元配列を用います.
int seiseki[6][5]; |
宣言のみ [6][5]は配列の大きさ (縦6人分、横5科目分 確保する) |
int seiseki[6][5]={{65,71,74,82,97},
{84,83,74,64,65},
{74,74,78,80,78},
{90,90,90,90,90},
{87,78,85,60,88},
{93,95,94,92,95}};
|
宣言 + 初期化 |
| seiseki[0][2] = 0; | 代入 |
| printf("%d\n", seiseki[1][0]); | 参照 |
次の成績表から,各人の合計点,偏差値を求めなさい.
ヒント: 出席番号は1から始まるが,配列は0から始まることに注意しよう
| 出席番号 | 国語 | 数学 | 理科 | 社会 | 英語 | 合計点 | 偏差値 |
| 1 | 65 | 71 | 74 | 82 | 97 | - | - |
| 2 | 84 | 83 | 74 | 64 | 65 | - | - |
| 3 | 74 | 74 | 78 | 80 | 78 | - | - |
| 4 | 90 | 90 | 90 | 90 | 90 | - | - |
| 5 | 87 | 78 | 85 | 60 | 88 | - | - |
| 6 | 93 | 95 | 94 | 92 | 95 | - | - |
これができた人は,標準偏差を求めてから各点数の偏差値を求めてみよう.
偏差値の求め方:
偏差値=(得点−平均値)/標準偏差*10+50
標準偏差:
標準偏差= 
平方根は,sqrt()関数を用いて求めることができます.
使い方:
#include <math.h>
double sqrt(double x);
例: s = sqrt(a+b+c);
さらに,できた人は,結果を成績のよい順に並べ替えてみよう.