C 프로그래밍에서는 rand() 함수를 사용하여 난수를 생성할 수 있습니다. 이 글에서는 0부터 100 사이의 난수 100개를 생성한 뒤 그 합을 계산하고, 결과를 텍스트 파일에 저장하는 방법을 단계별로 살펴보겠습니다.
난수는 매번 무작위로 생성되기 때문에 프로그램을 실행할 때마다 합계 결과가 달라집니다. 즉, 동일한 코드를 여러 번 실행해도 매번 다른 결과값을 얻게 됩니다.
핵심 로직
0부터 100 사이의 난수 합을 계산하는 핵심 로직은 다음과 같습니다.
for(i = 0; i <= 99; i++){
// 배열에 난수를 저장합니다.
num[i] = rand() % 100 + 1;
// 난수들의 합을 계산합니다.
sum += num[i];
}
rand() % 100 + 1은 1부터 100 사이의 정수를 생성합니다. 반복문을 통해 생성된 각 난수를 배열에 저장하고, 동시에 sum 변수에 누적하여 전체 합계를 구합니다.
파일에 합계 저장하기
먼저 난수들의 합을 계산한 뒤, 그 값을 파일에 저장합니다. 이를 위해 fopen 함수로 파일을 쓰기 모드("w")로 열고, fprintf 함수를 사용하여 합계를 파일에 기록합니다.
fprintf(fptr, "Total sum of the array is %d\n", sum); // 계산된 합을 파일에 기록합니다.
전체 예제 코드
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define max 100
int main(void){
srand(time(0)); // 현재 시간을 시드로 설정하여 매번 다른 난수 생성
int i;
int sum = 0, num[max];
FILE *fptr;
// 100개의 난수를 생성하는 반복문
for(i = 0; i <= 99; i++){
// 배열에 난수를 저장합니다.
num[i] = rand() % 100 + 1;
// 난수들의 합을 계산합니다.
sum += num[i];
}
// 파일을 쓰기 모드로 엽니다.
fptr = fopen("numbers.txt", "w");
// 파일 포인터가 NULL인지 확인하고, 실패 시 프로그램 종료
if(fptr == NULL){
printf("Error!");
exit(1);
}
// 계산된 합을 파일에 기록합니다.
fprintf(fptr, "Total sum of the array is %d\n", sum);
fclose(fptr); // 파일 포인터를 닫습니다.
}
코드 설명
- srand(time(0)): 현재 시간을 시드(seed) 값으로 설정하여 프로그램을 실행할 때마다 서로 다른 난수가 생성되도록 합니다.
- rand() % 100 + 1: 나머지 연산자(%)를 활용해 1~100 범위의 정수를 만듭니다.
- fopen("numbers.txt", "w"): numbers.txt 파일을 쓰기 모드로 열며, 해당 파일이 없으면 새로 생성됩니다.
- fptr == NULL 검사: 파일 열기에 실패한 경우 오류 메시지를 출력하고 프로그램을 종료합니다.
- fclose(fptr): 파일 작업이 끝나면 반드시 파일을 닫아 시스템 리소스를 해제합니다.
실행 결과
실행 1: 배열의 총합은 5224 실행 2: 배열의 총합은 5555
참고: 프로그램을 실행하면 소스 코드와 같은 폴더에 numbers.txt라는 텍스트 파일이 자동으로 생성됩니다. 이 파일을 열어 보면 생성된 난수들의 합을 직접 확인할 수 있습니다.