[C Question] 복습용 반복문-2

Date:     Updated:

카테고리:

태그:

백견이 불여일타
벽타가 불여일작 !!

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);

정답
  1. 63-39 = 24 a

  2. 39-24 = 15 b

  3. 24-15 = 9 a

  4. 15-9 = 6 b

  5. 9-6 = 3 a

  6. 6-3 = 3 b

     a = 3
    
  7. 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");
}

c-question-lv1 카테고리 내 다른 글 보러가기

댓글 남기기