$B%l%]!<%H(B

$B%l%]!<%H2]Bj(B

$B%l%]!<%H2]Bj#1!K(B N$B!_(BN$B$N@5J}9TNs(BA(N$B$H9TNs$NMWAG$O(Bmain$B4X?tFb$G5,Dj$7$F$h$$(B)$B$r(BLU$BJ,2r$7!$(B N$B!_(B1$B$N%Y%/%H%k(Bb$B!J$=$NMWAG$O(Bmain$B4X?tFb$G5,Dj$7$F$h$$!K$rMQ0U$7!$(BAx=b$B$r2r$/%W%m%0%i%`$r:n@.$7$F$/$@$5$$!%(B $B$3$N;~!$(BLU$BJ,2rMQ$N%b%8%e!<%k(B(lu.h,lu.c$B!K$H0J2<$K<($9$h$&$J(B main.c $B$rJL%U%!%$%k$G:n@.$7$F$/$@$5$$!%(B main.c$B!"(Blu.h$B5Z$S(Blu.c $B$N%U%!%$%k%j%9%H$r%l%]!<%H$K5-:\$7$F$/$@$5$$!%!J%W%m%0%i%`Cf$K>\:Y$K%3%a%s%H$r5-F~$7$F$/$@$5$$!K(B

main.c
#include <stdio.h>
#include <stdlib.h>
#include "array1d.h"
#include "array2d.h"
#include "lu.h"

int
main(void) {
    int N; /* $B9TNs$N%5%$%:(B */
    double det; /* $B9TNs<0(B */
    matrix A; /* $B85$N9TNs(B */
    vector b; /* $B1&JU%Y%/%H%k(B */

    N = 4; /* $B9TNs%5%$%:$N;XDj(B */

    /* $B85$N9TNs$N=i4|2=(B */
    A = ARRAY2D_new(N, N);
    A[0][0] = 8;
    A[0][1] = 16;
    A[0][2] = 24;
    A[0][3] = 32;
    A[1][0] = 2;
    A[1][1] = 7;
    A[1][2] = 12;
    A[1][3] = 17;
    A[2][0] = 6;
    A[2][1] = 17;
    A[2][2] = 32;
    A[2][3] = 59;
    A[3][0] = 7;
    A[3][1] = 22;
    A[3][2] = 46;
    A[3][3] = 105;

    /* $B1&JU%Y%/%H%k$N=i4|2=(B */
    b = ARRAY1D_new(N);
    b[0] = 160;
    b[1] = 70;
    b[2] = 198;
    b[3] = 291;

    /* $B%Y%/%H%k!&9TNs$NI=<((B*/   
    printf("$B85$N9TNs(BA = \n");
    ARRAY2D_print(A, N, N, "%f");
    printf("$B1&JU%Y%/%H%k(Bb = \n");
    ARRAY1D_print(b, N, "%f");

    printf("\nAx=b$B$r2r$/(B\n");

    /* LU$BJ,2r

$B%l%]!<%H2]Bj#2!K(B $B%l%]!<%H2]Bj#1$G:n@.$7$?%W%m%0%i%`$rMQ$$$F0J2<$N(B2$B$D$NO"N)J}Dx<0$r2r$-!$$=$N2r$r%l%]!<%H$K5-:\$7$F$/$@$5$$!%(B $B$b$7!$2r$,5a$^$i$J$$>l9g$O!$$=$N860x$r5fL@$7$F!$BP:vJ}?K$r<($7$F$/$@$5$$!%(B

$B%*%W%7%g%s2]Bj(B

$B%*%W%7%g%s2]Bj#1!K(B $B%l%]!<%H2]Bj(B1$B$G:n@.$7$?(BLU$BJ,2r$rMQ$$$?O"N)J}Dx<0$r2r$/%b%8%e!<%k$r!$%T%\%C%HA*Br$rMQ$$$F2~NI$7$F$/$@$5$$!%(B $B2~NI$7$?%W%m%0%i%`%j%9%H$r%l%]!<%H$K5-:\!J%3%a%s%H$r>\:Y$K=q$/!K$7!$%T%\%C%HA*Br$r9T$&%a%j%C%H$K$D$$$F!$9M;!$7$F$/$@$5$$!%(B

$B%*%W%7%g%s2]Bj#2!K(B $B0J2<$N%b%8%e!<%k72$O%S%k%I$,DL$j$^$;$s!%(B student.h, student.c, classroom.h, classroom.c $B$rE,@Z$K=$@5$7$F%S%k%I$7$F main.c
#include "student.h"
#include "classroom.h"

#define MAX_STUDENT_NUM 10 // $B@8EL>pJs%G!<%?$N:GBgEPO?2DG=?t(B
// $B8=:_$NEPO?@8EL?t(B
int student_num;

int
main(void){
	classroom cls;
	student st[MAX_STUDENT_NUM];
	// $BEPO?@8EL?t$N=i4|2=(B
	student_num = 0;
	// $B?75,$G@8EL>pJs$rDI2C$9$k(B
	set_student_data(&st[student_num],10,"$BNkLZ(B",70,40,50);
	set_student_data(&st[student_num],21,"$BEDCf(B",60,50,40);
	set_student_data(&st[student_num],15,"$B5HED(B",60,70,80);
	
	// ID21$B$N>pJs$rI=<($9$k(B
	print_student_average(st,21);
	// $B%/%i%9A4BN$NJ?6QE@$rI=<($9$k(B
	print_class_average(&cls,st);
	// $B?75,$G@8EL>pJs$rDI2C$9$k(B
	set_student_data(&st[student_num],34,"$B66K\(B",50,40,90);
	// ID10$B$N>pJs$rI=<($9$k(B
	print_student_average(st,10);
	// $BDI2C8e$N%/%i%9A4BN$NJ?6QE@$rI=<($9$k(B
	print_class_average(&cls,st);

	return 0;
}
student.h
#define _CRT_SECURE_NO_DEPRECATE // sprintf()$B$N%(%i!<2sHr(B
#include <stdio.h>

typedef struct _student{
	int id;        // $B@8EL$N(BID$BHV9f(B
	char name[20]; // $B@8EL$NL>A0(B
	int kokugo;    // $B9q8l$NE@?t(B
	int suugaku;   // $B?t3X$NE@?t(B
	int eigo;      // $B1Q8l$NE@?t(B
}student;

// $B8=:_$NEPO?@8EL?t(B
int student_num;
// $B?75,$N@8EL$N%G!<%?$rEPO?$9$k(B
void set_student_data(student* st,int id,char* name,int kokugo,int suugaku,int eigo);
// id$BHV9f$+$iEPO?$5$l$F$$$k@8EL$NJ?6QE@$rI=<($9$k(B
void print_student_average(student st[],int id);
student.c
#include "student.h"

void
set_student_data(student* st,int id,char* name,int kokugo,int suugaku,int eigo){
	st->id = id;
	sprintf(st->name,"%s",name);
	st->kokugo = kokugo;
	st->suugaku = suugaku;
	st->eigo    = eigo;
	student_num++;
}
void
print_student_average(student st[],int id){
	int i;
	for(i=0;i<student_num;i++) {
		if(id == st[i].id) {
			printf("ID %d $B$N(B %s $B$5$s$NJ?6QE@$O(B %f $BE@$G$9(B\n",id,st[i].name,average(st[i]));
			return;
		}
	}
	printf("ID %d $B$OB8:_$7$^$;$s(B\n",id);
	return;
}
double
average(const student st){
	return ((st.kokugo+st.suugaku+st.eigo)/3.0);
}
classroom.h
#ifndef CLASSROOM_H
#define CLASSROOM_H

#include <stdio.h>
#include "student.h"

typedef struct _classroom{
	double kokugo;   // $B9q8l$N%/%i%9J?6QE@(B
	double suugaku;  // $B?t3X$N%/%i%9J?6QE@(B
	double eigo;     // $B1Q8l$N%/%i%9J?6QE@(B
}classroom;

// $B8=:_$NEPO?@8EL?t(B
int student_num;
//$B!!%/%i%9A4BN$NJ?6QE@$rI=<($9$k(B
void print_class_average(classroom* cls, const student st[]);

#endif
classroom.c
void
print_class_average(classroom* cls,const student st[]){
	average(cls,st);
	printf("$B%/%i%9$NJ?6QE@(B\n");
	printf("$B9q8l(B: %f $BE@(B\n",cls->kokugo);
    printf("$B?t3X(B: %f $BE@(B\n",cls->suugaku);
	printf("$B1Q8l(B: %f $BE@(B\n",cls->eigo);
}
void
average(classroom* cls, const student st[]){
	int i;
	cls->kokugo = cls->suugaku = cls->eigo = 0;
	for(i=0;i<student_num;i++){
		cls->kokugo  += st[i].kokugo;
		cls->suugaku += st[i].suugaku;
		cls->eigo    += st[i].eigo;
	}
	cls->kokugo  /= student_num;
	cls->suugaku /= student_num;
	cls->eigo    /= student_num;
}

$B%l%]!<%HDs=P$K4X$7$F(B