1. 파일 통계 분석 (task4)
이 프로그램은 특정 텍스트 파일을 읽어 줄 수와 공백이 아닌 문자 수를 계산합니다. fgetc() 함수로 파일의 문자를 하나씩 읽어 처리합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
void count_file_stats(const char* filename) {
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("파일을 열 수 없습니다: %s\n", filename);
return;
}
int line_count = 0;
int char_count = 0;
int c;
while ((c = fgetc(file)) != EOF) {
if (c == '\n')
line_count++;
if (!isspace(c))
char_count++;
}
// 마지막 줄이 개행 문자로 끝나지 않은 경우 처리
if (char_count > 0)
line_count++;
fclose(file);
printf("%s 통계 결과:\n", filename);
printf("줄 수: %d\n", line_count);
printf("문자 수 (공백 제외): %d\n", char_count);
}
int main() {
count_file_stats("data4.txt");
return 0;
}
2. 성적 처리 시스템 (task5)
이 프로그램은 응시자 파일을 읽어 각 학생의 총점을 계산하고 합격 여부를 판단한 후 결과를 파일로 출력합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define N 10
typedef struct {
long id;
char name[20];
float objective;
float subjective;
float sum;
char result[10];
} STU;
void read_data(STU st[], int n);
void save_results(STU st[], int n);
void display_all(STU st[], int n);
int evaluate_scores(STU st[], int n, STU passed[]);
int main() {
STU students[N], passed_students[N];
int pass_count;
double pass_rate;
printf("파일에서 %d명의 응시자 정보를 읽는 중...\n", N);
read_data(students, N);
printf("\n성적을 처리하는 중...\n");
pass_count = evaluate_scores(students, N, passed_students);
printf("\n합격자 목록:\n");
display_all(students, N);
save_results(students, N);
pass_rate = 1.0 * pass_count / N;
printf("\n이번 시험 합격률: %.2f%%\n", pass_rate * 100);
return 0;
}
void display_all(STU st[], int n) {
int i;
printf("수험번호\t이름\t객관식\t\t실기\t\t총점\t\t결과\n");
for (i = 0; i < n; i++)
printf("%ld\t\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%s\n",
st[i].id, st[i].name, st[i].objective, st[i].subjective, st[i].sum, st[i].result);
}
void read_data(STU st[], int n) {
int i;
FILE *fin = fopen("examinee.txt", "r");
if (!fin) {
printf("파일 열기 실패\n");
return;
}
for (i = 0; i < n && !feof(fin); i++)
fscanf(fin, "%ld %s %f %f", &st[i].id, st[i].name, &st[i].objective, &st[i].subjective);
fclose(fin);
}
void save_results(STU s[], int n) {
FILE* fp = fopen("list_pass.txt", "w");
if (!fp) {
printf("파일 열기 실패\n");
return;
}
for (int i = 0; i < n; ++i) {
if (strcmp(s[i].result, "pass") == 0) {
fprintf(fp, "%010ld %-20s %.2f %.2f %.2f %s\n",
s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].result);
}
}
fclose(fp);
}
int evaluate_scores(STU st[], int n, STU passed[]) {
for (int i = 0; i < n; ++i) {
st[i].sum = st[i].objective + st[i].subjective;
strcpy(st[i].result, (st[i].sum > 60) ? "pass" : "fail");
}
int j = 0;
for (int i = 0; i < n; i++) {
if (strcmp(st[i].result, "pass") == 0) {
passed[j] = st[i];
j++;
}
}
return j;
}
3. 무작위 추첨 시스템 (task6)
이 프로그램은 전체 학생 목록에서 지정된 수만큼 무작위로 학생을 선발하여 추첨 결과를 화면과 파일로 출력합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define SELECT_COUNT 5
#define TOTAL_STUDENTS 80
#define MAX_STUDENTS 100
typedef struct {
long student_id;
char name[20];
char class_name[40];
} STUDENT;
void select_random(STUDENT pool[], STUDENT result[], int select_n, int total_n);
void load_data(FILE* fp, STUDENT students[], int n);
void print_list(STUDENT arr[], int n);
void save_to_file(STUDENT arr[], int n, char filename[]);
int main() {
STUDENT selected[SELECT_COUNT], all_students[TOTAL_STUDENTS];
FILE* fp = fopen("list.txt", "r");
if (!fp) {
printf("파일 열기 실패\n");
return 1;
}
load_data(fp, all_students, TOTAL_STUDENTS);
fclose(fp);
select_random(all_students, selected, SELECT_COUNT, TOTAL_STUDENTS);
print_list(selected, SELECT_COUNT);
printf("\n파일로 저장 중...\n");
char filename[20];
printf("저장할 파일명 입력: ");
scanf("%s", filename);
save_to_file(selected, SELECT_COUNT, filename);
fp = fopen(filename, "r");
if (fp) {
printf("저장 성공!\n");
fclose(fp);
} else {
printf("저장 실패!\n");
}
return 0;
}
void select_random(STUDENT pool[], STUDENT result[], int select_n, int total_n) {
int used[MAX_STUDENTS] = {0};
srand((unsigned)time(NULL));
for (int i = 0; i < select_n; ) {
int idx = rand() % total_n;
if (!used[idx]) {
result[i] = pool[idx];
used[idx] = 1;
i++;
}
}
}
void load_data(FILE* fp, STUDENT students[], int n) {
for (int i = 0; i < n && !feof(fp); ++i)
fscanf(fp, "%ld %s %s", &students[i].student_id, students[i].name, students[i].class_name);
}
void print_list(STUDENT arr[], int n) {
printf("추첨 결과\n");
for (int i = 0; i < n; ++i)
printf("%-20ld %-10s %s\n", arr[i].student_id, arr[i].name, arr[i].class_name);
}
void save_to_file(STUDENT arr[], int n, char filename[]) {
FILE* fp = fopen(filename, "w");
for (int i = 0; i < n; ++i)
fprintf(fp, "%-20ld %-15s %s\n", arr[i].student_id, arr[i].name, arr[i].class_name);
fclose(fp);
}