연재 완료/C Lang 예제코드 모음

C언어 연습문제 풀이 CH8 (18 ~ 22)

라이피 (Lypi) 2018. 5. 26. 17:08
반응형

18. 다음 프로그램의 결과를 분석하라.

#include <stdio.h>

int main()
{
	int i[3] = { 100, 200, 300 };
	int *iptr1, *iptr2;

	printf(" 1) i[0] =  %5d; &i1 = %5u \n", i[0], &i[0]);
	printf(" 2) i[1] =  %5d; &i2 = %5u \n", i[1], &i[1]);
	printf(" 3) i[2] =  %5d; &i3 = %5u \n\n", i[2], &i[2]);

	iptr1 = &i[1];
	printf(" 4) iptr1 =  %5u; *iptr1 = %5u \n\n", iptr1, *iptr1);

	iptr1 += 1;
	printf("Adding 1 to POINTER varibale \n");
	printf(" 5) iptr1 =  %5u; *iptr1 = %5d \n\n", iptr1, *iptr1);

	*iptr1 += 1;
	printf("Adding 1 to TARGET varibale \n");
	printf(" 6) iptr1 =  %5u; *iptr1 = %5d \n\n", iptr1, *iptr1);

	iptr2 = iptr1;
	iptr2 -= 1;

	printf("Subtracting 1 from POINTER variable \n");
	printf(" 7) iptr2 =  %5u; *iptr2 = %5d \n\n", iptr2, *iptr2);

	*iptr2 -= 1;
	printf("Subtracting 1 from TARGET variable \n");
	printf(" 8) iptr2 =  %5u; *iptr2 = %5d \n\n", iptr2, *iptr2);

	printf("The final values \n");
	printf(" 9) iptr1 =  %5u; *iptr1 = %5d \n", iptr1, *iptr1);
	printf("10) iptr2 =  %5u; *iptr2 = %5d \n\n", iptr2, *iptr2);

	return 0;
}


19. 포인터와 반복문을 사용하여 다음과 같은 결과가 되도록 프로그램을 작성하라.

#include <stdio.h>

int main()
{
	char str[10] = "Program";
	char* pt1 = str;
	
	int i = 0;

	for (; *pt1 != '\0'; pt1++) {
		printf(" %s \n", pt1);
		i++;
	}

	pt1--;
	for (; i > 2; i--) {
		--pt1;
		printf(" %s \n", pt1);
	}
}


20. 포인터와 반복문을 사용하여 전광판의 문장이 움직이는 것과 같이 문자열이 왼쪽, 오른쪽으로 반복하여 이동하는 프로그램을 작성하라.

#include <stdio.h> #include <stdlib.h> // system("cls"); #include <windows.h> // Sleep(100); int main() { char str[15] = " Programing"; char* pt1 = &str[14]; while (1) { for (int i = 0; i < 14; i++) { printf("%s", pt1); Sleep(100); system("cls"); pt1--; } for (int i = 0; i < 14; i++) { printf("%s", pt1); Sleep(100); system("cls"); pt1++; } } }


21. 2진수를 받아들여 10진수로 변환하는 프로그램을 작성하라.
#include <stdio.h>
#include <math.h>

int strfBtD(char* Binary);

int main()
{
	char input[100] = "10000";

	int ok = 0;
	do {
		printf("첫번째 2진수를 입력하세요 :"); scanf_s("%s", input, 100);
		while (getchar() != '\n') {}

		for (int i = 0; input[i] != '\0'; i++) {
			if (!(input[i] == '0' || input[i] == '1')) {
				printf("잘못입력하셨습니다. \n");
				ok = 1;
				break;
			}
			else {
				ok = 0;
			}
		}
	} while (ok);

	printf("%d \n", strfBtD(input));
}

int strfBtD(char* Bin)
{
	char* Binary = Bin;
	int Decimal = 0;
	int positional = 0;

	while (*Binary) { //포인터 Binary를 문자열 끝 Null문자로 보냄
		Binary++;
		positional++;
	}
	Binary--; //널문자 직전에 위치시킴

	for (int i = 0; i < positional; i++) {
		if (*Binary == '1') {
			Decimal += (int)pow(2, i);
		}

		Binary--;
	}

	return Decimal;
}


22. 문장을 문자열로 입력받고 하나의 문자를 키로 받아서 받은 문자로 문자열의 모든 문자를 XOR한 후 결과를 출력하는 프로그램을 작성하라.

#include <stdio.h>
#include <string.h>

char* xorString(char* string, char key);

int main()
{
	char string[100];
	char key;

	printf("Input string : "); scanf_s("%[^\n]s", string, 100);
	while (getchar() != '\n') {}

	printf("Input key :"); scanf_s("%c", &key, sizeof(char));

	printf("%s \n", xorString(string, key));
}

char* xorString(char* string, char key) {
	char* p1 = string;
	static char result[100];
	int len = strlen(string);

	for (int i = 0; i < 100; i++) {
		result[i] = ' ';
	}
	
	for(int i = 0; i < len; i++, p1++) {
		result[i] = *p1 ^ key;
	}
	result[len] = '\0';

	printf("%s \n", result);

	return result;
}

//Is this what you want? 문제가 원한게 이런게 맞나...?

반응형