본문 바로가기
형설지공/학교시험

[경북대]C프로그래밍 최준용 교수님 기말고사

경북대학교 2005년 1학기 C 프로그래밍과 실습 기말고사

1. 스트링의 길이를 반환하는 재귀함수를 작성하시오(함수 이름은 length() ). 이를 이용하여 명령행 인자(command line argument)로 하나의 스트링을 입력하였을 때, 입력 스트링과 스트링의 길이를 출력하시오.
(실행 결과)C:WORKDebug>exam1 korea
Input String : korea
String Length : 5

#include <stdio.h>
int length(char *p);
void main(int argc, char *argv[]) // 명령행 인자를 받기 위한 argument
{
printf("Input String : %s nString Length : %d n", argv[1], length(argv[1]));
}

int length(char *p)
{
if(*p == NULL) return 0;
return 1+length(p+1);
}

2. 내용이 아래와 같이 되도록 "data.txt" 파일을 생성하도록 프로그램하오. 단, 아래와 같은 조건을 만족하여야 한다.
(조건) 이름 : stuA, stuB, stuC, ... stuZ 총 26 명
키 : 160 ~ 190 범위의 임의 정수
몸무게 : 50 ~ 120 범위의 임의 정수
("data.txt" 파일 내용) 이름 키 몸무게
stuA 190 68
stuB 165 109
stuC 188 101
......
stuZ 164 83

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define NUM 26

void main()
{
FILE *out;
int i;
char title[5]="stu";
srand(time(NULL));
out = fopen("data.txt", "w");
fprintf(out, "이름 키 몸무게 n");
for(i=0; i<NUM; i++)
{
title[3] = 'A'+i; // A~Z 까지 출력된다.
fprintf(out, "%5s %3d %3d n", title, rand()%31+160, rand()%71+50);
}
fclose(out);
}

3. 앞 문제 2에서 생성한 파일에 대하여 다음 순서로 프로그램하시오.
1) "data.txt" 파일을 읽어서 사람(person) 구조체에 저장하시오. 사람 구조체는 이름(name), 키(height), 몸무게(weight)를 원소로 가진다.
2) 키와 몸무게를 인자로 전달하면, 비만 여부를 판단하는 함수(함수이름은 fat_decision())를 작성하시오. 이 함수는 비만일 경우 ‘Y' 아니면 ’N'을 결과로 반환한다. 비만 여부에 대한 판단은 아래 식과 같다.
정상몸무게 <= (키 - 100) * 0.9

3) 모든 사람의 이름, 키, 몸무게, 비만여부를 판단하여. “result.txt” 파일에 출력하시오.
(“result.txt” 파일 내용) 이름 키 몸무게 비만여부
stuA 190 68 N
stuB 165 109 Y
stuC 188 101 Y
......
stuZ 164 83 Y

#include <stdio.h>
#define NUM 26
char fat_decision(int , int);
void main()
{
struct person { char name[5]; int height; int weight; };
struct person p[NUM];
FILE *in, *out;
int i;
char str[100]; // 첫 번째 line을 읽기 위한 저장소
in = fopen("data.txt", "r");
out = fopen("result.txt", "w");
fgets(str, sizeof(str), in); // 첫 번째 line을 읽는다.
fprintf(out, "이름 키 몸무게 비만여부n");
for(i=0; i<NUM; i++)
{
fscanf(in, "%s%d%d", p[i].name, &p[i].height, &p[i].weight);
fprintf(out, "%5s %3d %3d %cn", p[i].name, p[i].height, p[i].weight,
fat_decision(p[i].height, p[i].weight) );
}
fclose(out); fclose(in);
}

char fat_decision(int h, int w)
{
if(w <= (h-100) * 0.9) return 'N';
else return 'Y';
}