[C Question] 복습용 반복문-2
카테고리: c-question-lv1
백견이 불여일타
벽타가 불여일작 !!
1. C언어 초기문제풀이
1-1. 기초 반복문 별찍기
조건
for문 금지, if문 금지, 변수는 2개, 5줄
정답
int cnt = 0, i = 0;
while (cnt++ < 5)
{
while (i++ < cnt) printf("* ");
printf("\n");
i = 0;
}
1-2. 기초 반복문 별찍기 응용버전
조건
for문 금지, if문 금지, 변수는 2개, 5줄
정답
정석 정답
int cnt = 0, i = 0;
while (cnt++ < 5)
{
while (i++ < cnt-1) printf("O ");
printf("* \n"); // 여기가 어떤 방식으로 되는지 생각했었어야했다 !
i = 0;
}
특이한 정답..ㅋㅋ
int col = 0, raw = 0;
while (col++ < 5)
{
// col가 0일 때 맨 처음 별만 찍혀야하니까
while (raw < col -1)
{
printf("ㅇ");
raw++;
}
raw = 0;
while (raw < col)
{
printf("*");
raw = col; // ㅋㅋ 이렇게 써도 되나
}
printf("\n");
raw = 0;
}
1-3. 두 정수를 입력받고 두 정수를 포함하여 두 정수들의 사이에 존재하는 정수들의 합
조건
변수3개, 나머지는 제한 없음, 6줄
피드백: 1. i 없이 -> 쓸 필요가 없었네
정답
int v1 = 0, v2 = 0, sum = 0;
printf("input num: ");
scanf_s("%d %d", &v1, &v2);
// = 쓰지말고
// sum = v1;
if (v1 > v2) return 0;
for (; v1 < v2+1; v1++)
{
// printf("%d", i); // 5 6 7 8 9
sum += v1;
// printf("sum: %d \n", sum);
}
printf("%d", sum);
int v1 = 0, v2 = 0, sum = 0;
printf("input num: ");
scanf_s("%d %d", &v1, &v2);
if (v1 > v2) return 0;
for (; v1 < v2 + 1; v1++) sum += v1;
printf("sum: %d", sum);
1-4. 사용자로부터 n에 해당하는 정수를 입력받아서 n의 계승 n!를 계산 ( 팩토리얼 )
조건
n! = 1x2x3x...xn
6줄에 변수 2개
피드백: 변수를 3개가 아니라 2개로
정답
//int v1 = 0, sum = 1 ;
//printf("input: ");
//scanf_s("%d", &v1);
//printf("%d!: ", v1);
//for ( ; v1 > 0; v1--) sum *= v1;
//printf("%d", sum);
// 실패했던 것
int v1 = 0, i = 0, sum = 0;
printf("input: ");
scanf_s("%d", &v1);
for (sum = 1; i < v1; i++) sum *= (i + 1);
printf("%d! : %d", v1, sum);
1-5. 별 모양 삼각형을 별이 아닌 1씩 늘어나는 수를 구해보기 !
조건 없음
피드백: 1. 왼쪽 정렬
자체 피드백: 1. cnt를 printf 안에서 증감시키고 초기화를 1로 하면 더 짧아짐
정답
// 일단 팩토리얼부터
//for ( ; v1 > 0 ; v1--)
//{
// printf("%d \n", v1);
//}
int row, v1 = 0, col = 0, cnt = 1;
printf("input: ");
scanf_s("%d", &v1);
for (row = 0; row < v1; row++)
{
for (col = 0; col < row + 1; col++) printf("%-5d ", cnt++);
printf("\n");
}
// while ㄱㄱㄱ
int row = 0, col = 0, cnt = 1, v2 = 0;
printf("input: ");
scanf_s("%d", &v2);
while (row++ < v2)
{
while (col++ < row)
{
printf("%-5d ", cnt++);
}
col = 0;
printf("\n");
}
1-6. 사용자로부터 값을 받고 절대값 출력
조건
삼항연산자 사용! (조건 ? T : F)
- 부호가 아닌 2의 보수를 사용할 것 ! ( 1의 보수 ~ )
정답
int v1 = 0;
printf("input: ");
scanf_s("%d", &v1);
printf("abs value: %d", (v1 > 0) ? v1 : (~v1 + 1));
// (v1 > 0) ? v1 : -v1; 이런식으로 하지말고 2의 보수를 사용하라 !
// (v1 > 0) ? v1 : v1-(v1*2);
1-7. 생각으로 풀어보시오 !
int a = 63, b = 39; int x = a * b; int y;
while(a>0 && b>0) { if(a>b) a= a-b; else b= b-a; }
y=a+b; printf(“d\n”, x/y);
정답
-
63-39 = 24 a
-
39-24 = 15 b
-
24-15 = 9 a
-
15-9 = 6 b
-
9-6 = 3 a
-
6-3 = 3 b
a = 3
-
3-3 = 0 b
y = 3
2457/3
819
2. C언어 복습과제
2-1. n단 별 역삼각
조건
while만 사용, if 금지
현재: 변수 3개, 5줄
정답
int col = 0, row = 0, n = 10;
while (row++ < n+1)
{
col = n;
while (col-- > row - 1) printf("* ");
printf("\n");
}
2-2. n단 별 트리
조건
while만 사용, if 금지
정답
int col = 0, row = 0, n = 5;
while (row++ < n)
{
while (col++ < n - row) printf(" ");
while (col++ < row + n) printf("*");
col = 0;
printf("\n");
}
댓글 남기기