[문제 3/9]
100 장의 카드에 숫자가 입력될 때 양수의 개수와 음수의 개수를 구하고 양수 중에서 홀수와 짝수의 개수도 구하시오.
1. System chart
main 함수에서 *100 이라고 표시되어있는, 자기 자신을 가리키는 화살표는, 숫자만큼 반복한다는 뜻입니다.
입력 수 |
1 |
2 |
3 |
-1 |
-2 |
-3 |
… |
양수 |
1 |
2 |
3 |
× |
× |
× |
… |
홀수 |
1 |
× |
2 |
× |
× |
× |
… |
짝수 |
× |
1 |
× |
× |
× |
× |
… |
음수 |
× |
× |
× |
1 |
2 |
3 |
… |
1. 100번 반복한다.
1.1 숫자를 입력받는다.
1.2 0인지 판단한다.
1.2.1 양수, 음수를 판단한다.
1.2.1.1 양수, 음수를 세린다.
1.2.1.2 짝수, 홀수를 판단한다.
1.2.1.2.1 짝수, 홀수를 세린다.
2. 양수, 음수, 홀수, 짝수의 개수를 출력한다.
3. 끝낸다.
4. 자료명세서
number |
입력받을 숫자 |
정수형 |
plus |
양수 count |
정수형 |
odd |
음수 count |
정수형 |
even |
짝수 count |
정수형 |
minus |
홀수 count |
정수형 |
remainder |
나머지 |
정수형 |
i |
반복제어변수 |
정수형 |
홀수와 짝수를 구분하는 기준은, 2로 나누었을때 나머지가 1이냐, 아니냐 라는 것은 누구나 알고있을 것입니다. 2/9번 문제에서 설명하였듯이, NS-Chart 에서는 %연산자가 없습니다. 그래서 반복문을 사용하여, 2로 계속 빼는 것입니다.
6. NS-Chart 검토표
|
초기값 |
|
|
|
|
|
number |
? |
0 |
1 |
-1 |
2 |
… |
plus |
0 |
0 |
1 |
0 |
2 |
… |
odd |
0 |
0 |
1 |
0 |
0 |
… |
i |
? |
1 |
2 |
3 |
4 |
… |
even |
0 |
0 |
0 |
0 |
1 |
… |
minus |
0 |
0 |
0 |
1 |
1 |
… |
reaminder |
? |
? |
1 |
1 |
0 |
… |
7. 소스화
#include <stdio.h> #define MAX_INPUT_NUMBER 100 typedef signed long int SLong; typedef unsigned short int UShort; SLong InputNumber (void); void Grouping (SLong number, UShort *plus, UShort *minus, UShort *odd, UShort *even); void Display (UShort plus, UShort minus, UShort odd, UShort even); int main (int argc, char *argv[]) { SLong number; UShort plus = 0; UShort minus = 0; UShort odd = 0; UShort even = 0; UShort i; for (i=1 ; i<=MAX_INPUT_NUMBER ; i++) { number = InputNumber ( ); Grouping (number, &plus, &minus, &odd, &even); } Display (plus, minus, odd, even); return 0; } SLong InputNumber (void) { SLong number; scanf("%d", &number); return number; } void Grouping (SLong number, UShort *plus, UShort *minus, UShort *odd, UShort *even) { UShort remainder; if(number != 0) { if(number > 0) { (*plus)++; remainder = number%2; if(remainder==1) { (*odd)++; } else { (*even)++; } } else { (*minus)++; } } } void Display (UShort plus, UShort minus, UShort odd, UShort even) { printf("양수 : %d개\n", plus); printf("홀수 : %d개\n", odd); printf("짝수 : %d개\n", even); printf("음수 : %d개\n", minus); }
8. 결과
이번 문제는, 사용자로부터 숫자를 입력받는 형식이라, 결과 화면을 따로 표시하지 않겠습니다.
언제 숫자 100개를 다 입력하냐고 불평 하시는 분들은, 소스코드에서
#define MAX_INPUT_NUMBER 100
부분에서 숫자를, 테스트하기 적당한 숫자로 바꿔주시면 될것입니다.
'About Programing > 02. 준비운동' 카테고리의 다른 글
C언어의 간단한 예제를 설계부터 코드화까지 (4/9) (3) | 2009.12.28 |
---|---|
C언어의 간단한 예제를 설계부터 코드화까지 (2/9) (12) | 2009.08.20 |
C언어의 간단한 예제를 설계부터 코드화까지 (1/9) (2) | 2009.07.15 |