C言語の復習

実習課題

作成・提出するC++ソースファイル名などについては,情報処理実習1と同様,153Rxxxxxx-yy-z.cpp とすること.
(xxxxxxは学籍番号,yyは実習の回数,zは課題番号)
ファイル名が正しく設定されていないと採点ができない場合がある.

課題1

出席番号,氏名がデータとして与えられたとき,各人の名前と平均点を表示したい.

まず,出席番号,名前,点数2個,平均点を格納する構造体を作る.
例:


struct seiseki
{
    int num;
    char name[10];
    float scores[2];
    float average;
};

各人の2科目の合計点を計算し,全員分の名前と平均点を画面に表示せよ.

データは以下の通りとする.

出席番号 名前  語学   力学 平均点
1 佐藤 65 71
2 鈴木 84 83
3 高橋 74 74
4 田中 90 90
5 渡辺 87 78
6 伊藤 93 95

課題2

50人分の名前と点数がファイル(50data.txt)に格納されている.
ファイルからデータをすべて読み込み,構造体の配列に格納した後,名前と点数をまず画面に表示せよ. 必ず構造体を定義すること.
次に,全員の平均点を計算し画面に表示せよ.

注:ファイル名の漢字が文字化けする場合は,こちらのファイル50data.sjis.txtで試してみよ. 文字コードをShiftJISにしてある.

課題3

整数型配列に初期値として,{10,20,30,40,50}を設定したとき,全ての要素の値を表示するプログラムをポインタを用いて作成せよ.

ヒント:


#include <stdio.h>
 
int main()
{
    int a[5] = {10, 20, 30, 40, 50};
    int *p;
    int i;
 
    p = ???;
 
    for(i=0; i<5; i++) {
        printf(" 配列の %d 番目は???です\n", ?????? );  /* aではなくpを使って表示 */
    }

    return 0;
}

課題4

下のmain()関数を用い,キーボードから10個の値を実数型配列に入力,それらの平均値,最大最小値を算出する関数をそれぞれ作成せよ.
配列の中身を画面に表示する計4つの関数を作成し,動作確認せよ.
これらの関数は,配列のサイズが10以外でも正しく動作するように作成すること.例えば,100個,1000個の配列でも動作すること.



???? input(...)
{
        /*ここにキーボードから入力する処理を書く*/
}

???? average(...)
{
        /*ここに平均値を計算する処理を書く*/
}

???? max_min(...)
{
        /* ここに最大値と最小値を求める処理を書く.2つの値を返す必要があるが... */
}


???? output(...)
{
        /*ここに画面出力処理を書く*/
}


int main()
{
    /* main関数内は変更しないこと */
    /* プログラム作成中に以下を一時的に変更することは構わない.*/
    /*最終的に以下の形となっていればよい. */

    const int N = 10;  /* データ個数.この値を 5 や 20 に変更しても正しく動作すること */
    float data[N];     /* 実数型配列 */
    float max, min;    /* 最大値・最小値を格納 */

    input(data, N);    /* 10個の要素をKBDから入力する関数*/

    printf("平均値 = %f\n", average(data,N) );   /* 平均値を算出する関数 */

    max_min(data, N, &max, &min);    /* 最大値と最小値を算出する関数 */

    printf("最大値 = %f,最小値 = %f \n",max,min);

    output(data, N);    /* 配列の中身を画面に出力する関数 */

    return 0;
}