はじめての C

テストの結果を記録したリストから標準入力して 名前と各点数および平均点をディスプレイに表示するプログラムを作成せよ。
sscanf を使用すること。

テキストのとおりにコードを作成すると コンパイルはできるけど

  • gets みたいな dangerous な関数は使うな !

と警告をうけてしまう。今回は sscanf なしでプログラムを組み立てるか。
まずはリストの作成。

  1. kitayama 70 42
  2. okada 65 51
  3. nisio 32 46
  4. okamoto 82 58
  5. catharine 75 49

ファイル名は test.list(↑各先頭のナンバーは実際にはナシ)。

  1. /* siken */
  2. #include
  3. #define MAX 5 /* マクロ ? まだテキストにはでてない */
  4. struct Test {
  5. char name[30];
  6. int prev;
  7. int later;
  8. int ave;
  9. };
  10. main()
  11. {
  12. struct Test s[100]; /* 構造体の配列 */
  13. int i, j;
  14. for ( i = 0 ; i < MAX ; i++ ) {
  15. scanf("%s %d %d", s[i].name, &s[i].prev, &s[i].later);
  16. s[i].ave = (s[i].prev + s[i].later) / 2;
  17. }
  18. for ( j = 0 ; j < MAX ; j++ ) {
  19. printf("%s %d %d %d\n", s[j].name, s[j].prev, s[j].later, s[j].ave);
  20. }
  21. }

(標準入力は → $./siken < test.list)

座標系上の直線 1 のそれぞれの端点は
a(0, 0), b(3, 5)
である。
構造体を使用してディスプレイ上に直線 1 の位置を表示するプログラムを作成せよ。

  1. /* line */
  2. #include
  3. struct Point {
  4. float x;
  5. float y;
  6. };
  7. struct Line {
  8. int no;
  9. struct Point a, b;
  10. };
  11. main()
  12. {
  13. struct Line line;
  14. line.no = 1;
  15. line.a.x = 0.0;
  16. line.a.y = 0.0;
  17. line.b.x = 3.0;
  18. line.b.y = 5.0;
  19. printf("line name : %d\n", line.no);
  20. printf("point a : (%f, %f)\n", line.a.x, line.a.y);
  21. printf("point b : (%f, %f)\n", line.b.x, line.b.y);
  22. }

関数を使って 上のコードを改造せよ。

  1. /* line.2 */
  2. #include
  3. struct Point {
  4. float x;
  5. float y;
  6. };
  7. struct Line {
  8. int no;
  9. struct Point a, b;
  10. };
  11. struct Line func1(void);
  12. main()
  13. {
  14. struct Line line;
  15. line = func1();
  16. printf("line name : %d\n", line.no);
  17. printf("point a : (%f, %f)\n", line.a.x, line.a.y);
  18. printf("point b : (%f, %f)\n", line.b.x, line.b.y);
  19. }
  20. struct Line func1(void) {
  21. struct Line line;
  22. line.no = 1;
  23. line.a.x = 0.0;
  24. line.a.y = 0.0;
  25. line.b.x = 3.0;
  26. line.b.y = 5.0;
  27. return line;
  28. }

text: 金山典世さん(稚内北星)のページ