입력 출력 정보를 입력하시오.
학과: 소프트웨어학과 학년: 1
입학년도: 13 이름: 고길동
나는 소프트웨어학과 1학년 13학번 고길동입니다.
(2) 자료구조 설계
(3) 알고리즘 설계
(4) 프로그램 구현
char dept[20]; // 학과를 저장할 문자열 변수 int grade; // 학년을 저장할 정수형 변수 int year; // 입학년도를 저장할 정수형 변수 char name[20]; // 이름을 저장할 문자열 변수
1. “정보를 입력하세요.” 안내문을 출력한다.
2. 학과, 학년, 학번, 이름을 입력 받는다.
3. 자기 소개 글을 출력한다.
#include <stdio.h> // 헤더 파일 포함 void main()
{
char dept[20], name[20]; // 지역변수 선언
int grade, year; // 지역변수 선언
printf("정보를 입력하세요.\n\n"); // 안내문 출력 printf("학과: "); scanf_s("%s", dept, 20); // 학과 입력 printf("학년: "); scanf_s("%d", &grade); // 학년 입력 printf("입학년도: "); scanf_s("%d", &year); // 입학년도 입력 printf("이름: “); scanf_s("%s", name, 20); // 이름 입력
printf("\n나는 %s %d학년 %d학번 %s입니다.\n", dept, grade, year, name);// 자기소개 출력 }
(5) 실행 화면
2.2 세 수의 최대 차이 구하기
(0) 문제 정의
세 개의 실수를 입력 받고, 그 중에서 가장 큰 값과 가장 작은 값의 차이를 구하여 출력하라.
(1) 요구사항 분석
입력 출력
세 개의 실수를 입력하세요.
첫 번째 수: 47.6 두 번째 수: -20.6 세 번째 수: 100.1
가장 큰 수와 가장 작은 수의 차이 = 120.5
(2) 자료구조 설계
(3) 알고리즘 설계
- 프로그램의 흐름
1. 세 실수를 입력받는다.
2. 세 실수의 최대값과 최소값을 구한다.
3. 최대값과 최소값의 차이를 계산한다.
4. 결과값을 화면에 출력한다.
- 세 수(a,b,c)의 최대값을 구하는 알고리즘 1. a, b를 비교한다.
2. a, c를 비교한다.
float num1, num2, num3; // 사용자가 입력하는 세 개의 수를 저장할 변수
float max; // 가장 큰 수를 저장할 변수
float min; // 가장 작은 수를 저장할 변수
float diff; // 가장 큰 수와 가장 작은 수의 차이를 저장할 변수
float find_max(float num1, float num2, float num3); // 프로토타입 함수를 정의한다.
float find_min(float num1, float num2, float num3); // 프로토타입 함수를 정의한다.
void main() {
float num1, num2, num3; // 입력한 세 수를 저장할 변수 float max, min, diff; // 지역변수 선언
printf("세 실수를 입력하세요.\n"); // 안내문을 출력한다.
printf("첫 번째 수: "); scanf("%f", &num1); // 첫 번째 수를 입력한다.
printf("두 번째 수: "); scanf("%f", &num2); // 첫 번째 수를 입력한다.
printf("세 번째 수: "); scanf("%f", &num3); // 첫 번째 수를 입력한다.
max = find_max(num1, num2, num3); // 가장 큰 수를 알아낸다.
min = find_min(num1, num2, num3); // 가장 작은 수를 알아낸다.
diff = max – min; // 차이를 계산한다.
printf("\n세 수의 가장 큰 수와 가장 작은 수의 차이 = %f\n", diff);// 결과값을 출력한다.
}
float find_max(float a, float b, float c) // 함수 구현 {
float max; // 지역 변수 선언
if (a > b)
if (a > c) max = a; // a>b, c 인 경우 else max = c; // c>a>b 인 경우 else
max = (b > c) ? b : c; // b>a,c 또는 c>b>a인 경우
return max; // 최대값 리턴
}
float find_min(float a, float b, float c) // 함수 구현 {
float min = a; // 지역변수 선언과 초기화
if (min > b) min = b; // min보다 b가 작으면 b를 min으로 설정 if (min > c) min = c; // min보다 c가 작으면 c를 min으로 설정
return min; // 최소값 리턴
}
(5) 실행 화면
2.3 평균과 표준편차
(0) 문제 정의
최대 10개의 0보다 큰 실수를 사용자로부터 입력 받고, 평균과 표준편차를 구하여 출력하는 프로그램을 작성하라. 단, 평균과 표준편차를 소수점 이하 두 자리까지 출력하라.
(1) 요구사항 분석
문제의 요구사항에 의하여 최대 10개의 실수를 입력 받아야 한다. 따라서, 실수를 입력 받는 도중에 입력을 중단할 수 있는 방법이 있어야 한다. 여기에서는 다음과 같은 방법을 사용하기로 한다.
l 사용자가 최대 10개의 데이터를 입력하도록 제어한다.
l 사용자가 0보다 작은 수를 입력하면 입력을 중단한다.
l 사용자가 입력한 수의 숫자를 세어서 데이터의 수를 결정한다.
l 입력한 데이터에 대한 평균과 표준편차를 구하여 출력한다.
입력 출력
최대 10개의 실수를 입력하세요.
입력을 종료하려면 0 이하의 수를 입력하세요.
숫자 1: 68.9 숫자 2: 96.7 숫자 3: 80.5 숫자 4: 75.4 숫자 5: -1
평균 = 80.38 표준편차 = 10.28
(2) 자료구조 설계
float num[10]; // 입력한 실수를 저장할 변수 선언
int n; // 사용자가 입력한 데이터의 수
float avg; // 평균값을 저장할 변수 선언 float stdev; // 표준편차를 저장할 변수 선언
2. 데이터의 수 n을 0으로 초기화 한다.
3. 만일 (n < 10)이면 다음을 반복한다.
4. 사용자에게 n 번째 데이터를 입력하라고 안내문을 출력한다.
5. 사용자가 입력한 데이터를 배열 num[n]에 저장한다.
6. 만일 사용자가 입력한 값이 0보다 크면 7. n을 증가시킨다.
8. 그렇지 않고 입력 값이 0보다 작다면 9. 반복문을 중단한다.
- 평균을 구하는 알고리즘
⋯
1. sum = 0 // 임시 변수 sum을 0으로 초기화 한다.
2. k=0부터 k<n까지 k를 증가시키면서
3. sum += num[k] // 합에 배열의 원소를 더한다.
4. avg = sum / n; // 평균을 구한다.
- 표준편차를 구하는 알고리즘
⋯
1. sqsum = 0 // 임시 변수 ssum을 0으로 초기화 한다.
2. k=0부터 k<n까지 k를 증가시키면서
3. diff = num[k] – mean; // 배열의 원소와 평균의 차이를 구한다.
4. sqsum = sqsum + diff*diff; // ssum에 차이의 제곱을 더한다.
5. variance = sqsum / n; // 분산을 구한다.
6. stdev = sqrt(variance); // 표준편차를 구한다.
(4) 프로그램 구현
/* stdev.c by J-H Ahn 2019 */
#include <stdio.h>
#define NUMMAX 10 // 데이터의 최대 갯수
void get_data(); // 프로토타입 함수 선언
float calc_average(); // 프로토타입 함수 선언 float calc_stdev(float mean); // 프로토타입 함수 선언
float num[NUMMAX]; // 전역변수 선언
int n; // 전역변수 선언
void main() {
float avg, stdev; // 지역변수 선언
get_data(); // 데이터를 입력받고
avg = calc_average(); // 평균을 구하고 stdev = calc_stdev(avg); // 표준편차를 구한다.
printf("\n평균 = %6.2f\n", avg); // 결과를 출력한다.
printf("표준편차 = %6.2f\n\n", stdev);
}
void get_data() // 데이터 입력 함수의 구현
{
printf("최대 10개의 실수를 입력하세요.\n"); // 안내문 출력 printf("입력을 종료하려면, 0 이하의 수를 입력하세요.\n");
n = 0; // 데이터의 수를 0으로 초기화한다.
while (n < 10) // n<10이면 블록을 계속 반복한다.
{
printf("숫자 %d: ", n+1); // 안내문 출력
scanf_s("%f", &num[n]); // 입력 데이터를 변수에 저장한다.
if (num[n] > 0.0) n += 1; // 데이터가 0보다 크다면 데이터의 수를 증가시킨다.
else break; // 아니면 반복문을 벗어난다.
} // while 블록의 끝
}
float calc_average() // 평균을 계산하는 함수의 구현 {
float sum, avg; // 합, 평균을 저장할 지역 변수 선언
int k; // 반복문 제어 변수 (루프 변수)
sum = 0.0; // 합 초기화
for (k=0; k<n; k++) // k=0부터 k<n까지 k를 증가시키면서 sum += num[k]; // 임시 변수 sum에 배열의 원소를 더한다.
avg = sum / (float)n; // 평균을 구한다.
return avg; // 평균을 리턴한다.
}
#include <math.h> // sqrt() 함수의 프로토타입 함수가 들어있다.
float calc_stdev(float mean) // 표준편차를 계산하는 함수의 구현 {
float sqsum, diff, variance, stdev; // 제곱 합, 차이, 분산, 표준편차를 저장할 변수 선언
(5) 실행 화면