int score; // 입력한 점수를 저장할 변수 선언
char grade; // 점수에 해당하는 학점을 저장할 변수 선언
/* grade.c by J-H Ahn 2019 */
#include <stdio.h>
void main() {
int score;
제3장 조건문, 제어구조, 함수의 사용법 이해
3.1 학점 출력
(0) 문제 정의
학생의 성적을 입력 받아 학점을 출력하라.
점수 90 ~ 100 80 ~ 89 70~79 60~69 0~59
학점 A B C D F
(1) 요구사항 분석
입력 출력
점수를 입력하세요 : 70 학점은 B입니다.
점수를 입력하세요 : -1 입력을 잘못하셨습니다.
(2) 자료구조 설계
(3) 알고리즘 설계
1. 학생의 점수(score)를 입력 받는다.
2. 만일 점수가 0 ~ 100사이에 있으면 3. 만약 (score/10)의 몫이
4. 10또는 9이면 A학점 5. 8이면, B학점
6. 7이면 C학점 7. 6이면 D학점 8. 5이하 이면 F학점 9. 결과값(grade)을 출력한다.
10. 그렇지 않으면
11. 부적절한 점수임을 출력한다.
(4) 프로그램 구현
scanf_s("%d", &score);
if ((score>=0) && (score <=100)) { switch (score/10) {
case 10: case 9: grade = 'A'; break;
case 8: grade = 'B'; break;
case 7: grade = 'C'; break;
case 6: grade = 'D'; break;
default: grade = 'F'; break;
}
printf("학점은 %c 입니다.\n", grade);
} else
printf("입력을 잘못하셨습니다.\n");
} }
(5) 실행 화면
int number; // 입력한 정수를 저장할 변수 선언
int n; // 2부터 number-1까지 따라갈 루프 변수 선언
int remains; // number를 n으로 나눈 나머지를 저장할 변수 선언
/* divisor.c by J-H Ahn 2019 */
#include <stdio.h>
void print_divisor(int value); // 프로그램 헤더 부분에 함수를 선언한다.
3.2 약수
(0) 문제 정의
양의 정수를 입력 받고, 이 수의 모든 약수를 구하는 프로그램을 작성하라. 단, 입력 값이 2보 다 작은 정수이면, 프로그램을 종료한다.
(1) 요구사항 분석
입력 출력
약수를 구할 정수를 입력하세요 (1 이하이면 종료) : 24 24의 약수: 2, 3, 4, 6, 8, 12, 14 약수를 구할 정수를 입력하세요 (1 이하이면 종료) : 1 1에 대한 약수를 구할 수 없습니다.
프로그램을 종료합니다.
(2) 자료구조 설계
(3) 알고리즘 설계
- 프로그램의 흐름
1. 아래를 무한히 반복한다.
2. 약수를 구할 정수를 입력한다. (변수 number) 3. 만약 number의 값이 2보다 크면
4. number에 대한 약수를 구하여 출력하는 함수를 호출한다.
5. 아니면 (1보다 같거나 작으면)
6. 무한 반복 루프를 벗어나서 프로그램을 종료한다.
- 약수를 모두 출력하는 알고리즘
1. 안내문(“number의 약수: “)을 출력한다.
2. n=2부터 n<=number까지 1씩 증가시키면서 3. number를 n으로 나누어 나머지가 0이면 4. n을 약수로 출력한다.
(4) 프로그램 구현
int number;
while (1) { // 무한 반복
printf("약수를 구할 정수를 입력하세요 (1 이하이면 종료) : ");
scanf_s("%d", &number);
if (number >= 2) { // 약수를 구할 수 있다면 print_divisor(number);
} else { // 약수를 구할 수 없다면
printf("%d에 대한 약수를 구할 수 없습니다.\n", number);
printf("프로그램을 종료합니다.\n");
break;
}
printf("\n");
}
return 0;
}
void print_divisor(int value) // main() 함수 이후에 구현 {
int n, remains; // 지역변수 선언
printf("%d의 약수: ", value);
for (n=2; n<=value; n++) { // n=2부터 n<=value까지 n을 증가시키면서 remains = value % n; // 나머지를 구한다.
if (remains == 0) printf("%d ", n);// 나머지가 0 이면 n을 약수로 출력한다.
}
printf("\n");
}
(5) 실행 화면
int number; // 1~1000범위 자연수를 저장할 루프 변수 선언 int divisor; // 약수를 저장할 변수
int sum; // 약수의 합을 저장할 변수
3.3 완전수
(0) 문제 정의
1000보다 작은 자연수 중 약수의 합이 자기 자신과 같아지는 수(완전수)를 모두 찾아서 출력하는 프로그램을 작성하라.
(1) 요구사항 분석 - 완전수 판별 예시
6의 약수 : 1, 2, 3, 6 -> 1+2+3 = 6 (∴ 완전수)
12의 약수 : 1, 2, 3, 4, 6, 12 -> 1+2+3+4+6 = 16 (∴ 완전수 아님) 28의 약수 : 1, 2, 4, 7, 14, 28 -> 1+2+4+7+14 = 28 (∴ 완전수)
입력 출력
24의 약수: 2, 3, 4, 6, 8, 12, 14
(2) 자료구조 설계
(3) 알고리즘 설계
- 프로그램의 흐름
1. number를 1~1000까지 반복한다.
2. number가 완전수인지 아닌지를 판별한다.
3. number가 완전수 이면 number를 출력한다.
- number가 완전수인지를 판별하는 함수 1. i=1부터 i<number 까지 1씩 증가시키면서 2. number를 i으로 나누어 나머지가 0이면 3. sum = sum + i;
4. 만약 sum == number( 완전수 조건 충족) 5. TRUE 리턴
6. 아니면
7. FALSE 리턴
(4) 프로그램 구현
/* perfect.c by J-H Ahn 2019 */
#include <stdio.h>
int is_perfect(int number); // 완전수 여부를 판별하는 함수 선언 void main()
{
int number;
printf("1000 이하의 완전수: \n");
for (number=1 ; number<=1000; number++) {
if (is_perfect(number)) { // number가 완전수이면 printf(" %d \n",number); // number를 출력한다.
} } }
int is_perfect(int number) {
int sum=0; // sum=약수의 합을 저장할 변수 (초기값=0)
for (int i=1; i<number; i++) { // i를 1부터 number-1까지 1씩 증가시키면서 if (number%i == 0) // 만약 i가 number의 약수이면
sum = sum + i; // i을 sum에 더한다.
}
if (sum == number) return 1; // 완전수 조건을 만족하면, 1(참)을 리턴 else return 0; // 그렇지 않으면, 0(거짓)을 리턴
}
(5) 실행 화면