キーボードから文字列を入力すると,何文字入力されたかを画面に表示するプログラムを作成する.
ヒント:文字列の終わりは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);
さらに,できた人は,結果を成績のよい順に並べ替えてみよう.