源码:
#include <stdio.h>
#include <stdlib.h>
#define N 30
#define _CRT_SECURE_NO_WARNINGS
typedef struct data {
int year;
int month;
int day;
} DATA;
typedef struct student {
long stuID;
char stuName[ 10 ] ;
char stuSex;
DATA stuBirthday;
double score[ 4 ] ;
double aver;
} STUDENT;
void inputScore ( STUDENT stu[ ] , int n, int m) ;
void averSorce ( STUDENT stu[ ] , int n, int m) ;
void writeToFile ( STUDENT stu[ ] , int n, int m) ;
void main ( ) {
STUDENT stu[ N] ;
int n;
printf ( "How many students?" ) ;
scanf ( "%d" , & n) ;
inputScore ( stu, n, 4 ) ;
averSorce ( stu, n, 4 ) ;
writeToFile ( stu, n, 4 ) ;
}
void inputScore ( STUDENT stu[ ] , int n, int m) {
int i, j;
for ( int i = 0 ; i < n; i++ )
{
printf ( "Input record %d:\n" , i + 1 ) ;
scanf ( "%ld" , & stu[ i] . stuID) ;
scanf ( "%s" , stu[ i] . stuName) ;
scanf ( " %c" , & stu[ i] . stuSex) ;
scanf ( "%d" , & stu[ i] . stuBirthday. year) ;
scanf ( "%d" , & stu[ i] . stuBirthday. month) ;
scanf ( "%d" , & stu[ i] . stuBirthday. day) ;
for ( j = 0 ; j < m; j++ )
{
scanf ( "%lf" , & stu[ i] . score[ j] ) ;
}
}
}
void averSorce ( STUDENT stu[ ] , int n, int m) {
int i, j;
double sum;
for ( i = 0 ; i < n; i++ )
{
sum = 0 ;
for ( j= 0 ; j < m; j++ )
{
sum = sum + stu[ i] . score[ j] ;
}
stu[ i] . aver = ( double ) sum / m;
}
}
void writeToFile ( STUDENT stu[ ] , int n, int m) {
FILE* fp;
int i, j;
if ( ( fp = fopen ( "D:\\student.txt" , "w" ) ) == NULL ) {
printf ( "Fail to open student.txt !\n" ) ;
exit ( 0 ) ;
}
fprintf ( fp, "%d\t%d\t\n" , n, m) ;
for ( i = 0 ; i < n; i++ )
{
fprintf ( fp, "%10ld%10s%3c%6d/%02d/%02d" , stu[ i] . stuID,
stu[ i] . stuName,
stu[ i] . stuSex,
stu[ i] . stuBirthday. year,
stu[ i] . stuBirthday. month,
stu[ i] . stuBirthday. day) ;
for ( j = 0 ; j < m; j++ )
{
fprintf ( fp, "%6.1f" , stu[ i] . score[ j] ) ;
}
fprintf ( fp, "%6.1f\n" , stu[ i] . aver) ;
}
fclose ( fp) ;
}
运行结果: