C言語勉強
This commit is contained in:
commit
8e8747a3cc
239
main.c
Normal file
239
main.c
Normal file
@ -0,0 +1,239 @@
|
||||
/***********************************************
|
||||
5人の生徒の平均点、最大点、最低点を
|
||||
構造体を使い標準出力する。
|
||||
|
||||
Compile
|
||||
GCC 9.4.0
|
||||
***********************************************/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
typedef struct subject {
|
||||
int subject_id;
|
||||
int score;
|
||||
} Subject;
|
||||
|
||||
typedef struct student {
|
||||
int student_id;
|
||||
Subject subjects[5];
|
||||
} Student;
|
||||
|
||||
/***********************************************
|
||||
Function
|
||||
配列から最大を取得する
|
||||
Caution
|
||||
Return 最大値
|
||||
***********************************************/
|
||||
int
|
||||
get_max(
|
||||
int *array, /* (i) : 配列 */
|
||||
int array_size /* (i) : 配列の大きさ */
|
||||
)
|
||||
{
|
||||
int i ;
|
||||
int max_value = array[0];
|
||||
|
||||
for ( i = 1 ; i < array_size ; i++ ) {
|
||||
if (array[i] > max_value) {
|
||||
max_value = array[i];
|
||||
}
|
||||
}
|
||||
|
||||
return max_value;
|
||||
}
|
||||
|
||||
/***********************************************
|
||||
Function
|
||||
配列から最低を取得する
|
||||
Caution
|
||||
Return 最低値
|
||||
***********************************************/
|
||||
int
|
||||
get_min(
|
||||
int *array, /* (i) : 配列 */
|
||||
int array_size /* (i) : 配列 */
|
||||
)
|
||||
{
|
||||
int i ;
|
||||
int min_value = array[0];
|
||||
|
||||
for ( i = 1 ; i < array_size ; i++ ) {
|
||||
if (array[i] < min_value) {
|
||||
min_value = array[i];
|
||||
}
|
||||
}
|
||||
|
||||
return min_value;
|
||||
}
|
||||
/***********************************************
|
||||
Function
|
||||
配列から平均を取得する
|
||||
Caution
|
||||
Return 平均値
|
||||
***********************************************/
|
||||
int
|
||||
get_average(
|
||||
int *array, /* (i) : 配列 */
|
||||
int array_size /* (i) : 配列のサイズ */
|
||||
)
|
||||
{
|
||||
int i ;
|
||||
int average ;
|
||||
int total = 0;
|
||||
|
||||
for ( i = 0 ; i < array_size ; i++ ) {
|
||||
total += array[i];
|
||||
}
|
||||
|
||||
average = total / array_size;
|
||||
|
||||
return average;
|
||||
}
|
||||
|
||||
/********************************************
|
||||
Function
|
||||
生徒配列を初期化する
|
||||
Caution
|
||||
Return 正常時は0を返す
|
||||
********************************************/
|
||||
int
|
||||
init_students(
|
||||
Student* students, /* (i) : 生徒配列 */
|
||||
int student_count /* (i) : 生徒数 */
|
||||
)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
|
||||
for ( i = 0 ; i < student_count ; i++ ) {
|
||||
students[i].student_id = i;
|
||||
|
||||
for ( j = 0 ; j < 5; j++ ) {
|
||||
students[i].subjects[j].subject_id = j;
|
||||
students[i].subjects[j].score = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***********************************************
|
||||
Function
|
||||
生徒の点数をランダム生成する
|
||||
Caution
|
||||
Return 正常時は0を返す
|
||||
***********************************************/
|
||||
int
|
||||
rand_score_students(
|
||||
Student* students, /* (i) : 生徒配列 */
|
||||
int student_count /* (i) : 生徒数 */
|
||||
)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
|
||||
srand((int)time(NULL));
|
||||
|
||||
for ( i = 0 ; i < student_count ; i++ ) {
|
||||
//printf("生徒番号:%d\r\n", i);
|
||||
|
||||
for ( j = 0 ; j < 5 ; j++ ) {
|
||||
students[i].subjects[j].score = rand() % 100 + 1;
|
||||
|
||||
//printf("教科番号:%d\t点数:%d\r\n", j, students[i].subjects[j].score);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***********************************************
|
||||
Function
|
||||
生徒配列から特定の教科番号から配列を返す
|
||||
Caution
|
||||
Return 正常時は0を返す
|
||||
***********************************************/
|
||||
int
|
||||
get_subject_score_array(
|
||||
int *array,
|
||||
Student* students,
|
||||
int student_count,
|
||||
int subject_id
|
||||
)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
|
||||
for ( i = 0 ; i < student_count ; i++ ) {
|
||||
for ( j = 0 ; j < 5 ; j++ ) {
|
||||
if (students[i].subjects[j].subject_id != subject_id) {
|
||||
continue;
|
||||
}
|
||||
|
||||
array[i] = students[i].subjects[j].score;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***********************************************
|
||||
Function
|
||||
生徒配列から平均点、最大点、最低点を出力する
|
||||
Caution
|
||||
Return 正常時は0を返す
|
||||
***********************************************/
|
||||
int
|
||||
print_students(
|
||||
Student* students,
|
||||
int student_count
|
||||
)
|
||||
{
|
||||
int j;
|
||||
|
||||
int arr[student_count];
|
||||
int val_avg;
|
||||
int val_max;
|
||||
int val_min;
|
||||
char subject_name[6];
|
||||
|
||||
for ( j = 0 ; j < 5 ; j++ ) {
|
||||
get_subject_score_array(arr, students, student_count, j);
|
||||
val_avg = get_average(arr, student_count);
|
||||
val_max = get_max(arr, student_count);
|
||||
val_min = get_min(arr, student_count);
|
||||
|
||||
printf("教科番号:%d\r\n", j);
|
||||
printf("平均点:%d\t", val_avg);
|
||||
printf("最大点:%d\t", val_max);
|
||||
printf("最低点:%d\r\n", val_min);
|
||||
|
||||
printf("\r\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***********************************************
|
||||
Function
|
||||
メイン関数
|
||||
|
||||
5人の生徒の平均点、最大点、最低点を
|
||||
構造体を使い標準出力する。
|
||||
Caution
|
||||
Return 正常時は0を返す
|
||||
***********************************************/
|
||||
int
|
||||
main()
|
||||
{
|
||||
int student_count = 5;
|
||||
Student students[student_count];
|
||||
|
||||
init_students(students, student_count);
|
||||
rand_score_students(students, student_count);
|
||||
|
||||
print_students(students, student_count);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user