profile image

L o a d i n g . . .

45.7 심사문제 : 문자열 자르기

문제 : 표준 입력으로 길이 60 이하의 인터넷 도메인이 입력됩니다. 점을 기준으로 문자열을 분리하여 각 줄마다 출력하세요.

정답 :

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

int main(void)
{
	char s[61];

	scanf("%s", s);

	char *ptr = strtok(s, ".");

	while (ptr != NULL)
	{
		printf("%s\n", ptr);
		ptr = strtok(NULL, ".");
	}

	return 0;
}

 

 

 

45.8 심사문제 : 특정 단어 개수 세기

문제 : 표준 입력으로 길이 1,000 이하의 문자열이 입력됩니다. 입력된 문자열에서 "the"의 개수를 출력하는 프로그램을 만드세요. 단, 모든 문자가 소문자인 "the"만 찾으면 되며 "them", "there", "their" 등은 포함하지 않아야 합니다.

정답 :

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

int main(void)
{
	char s[1001];
	int count = 0;

	scanf("%[^\n]s", s);

	char* ptr = strtok(s, " .,");

	while (ptr != NULL)
	{
		if (ptr != NULL && strcmp(ptr,"the") == 0)
			count += 1;

		ptr = strtok(NULL, " .,");
	}

	printf("%d", count);

	return 0;
}

char *ptr = strtok(s1, " .,");와 같이 " .,"를 지정하여 공백, 점, 콤마를 기준으로 문자열을 자른다(공백만 지정해서 잘라도 되지만 the. the,와 같이 점이나 콤마로 끝나는 경우를 대비해 점과 콤마도 잘라줌). 그리고 strcmp 함수를 사용하여 잘린 문자열의 포인터 ptr "the"를 비교하여 같으면 count를 1 증가시킨다.

이렇게 하면 문자열을 자를 때마다 "the"인지 비교한 뒤 맞으면 count가 1씩 증가하게 되므로 "the"의 개수를 구할 수 있다.

 

※ 주의 : strtok 함수에서 반환된 잘린 문자열의 포인터 ptr NULL일 수도 있으므로 ptr NULL이 아닐 때만 strcmp 함수로 비교해야 한다. 만약 strcmp 함수에 NULL이 들어가면 에러가 발생한다.

 

 

 

46.12 심사문제 : 문자열을 정수와 실수로 변환하기

문제 : 다음 소스 코드를 완성하여 16진 정수, 10진 정수, 실수로 된 문자열이 숫자로 출력되게 만드세요.

정답 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char s1[31];
    int num1;
    int num2;
    float num3;
    char* end;

    scanf("%[^\n]", s1);

    num1 = strtol(s1, &end, 16);
    num2 = strtol(end, &end, 10);
    num3 = strtof(end, NULL);

    printf("0x%x\n", num1);
    printf("%d\n", num2);
    printf("%f\n", num3);

    return 0;
}

 

 

 

46.13 심사문제 : 정수와 실수를 문자열로 변환하기

문제 : 표준 입력으로 10진 정수와 실수가 입력됩니다. 다음 소스 코드를 완성하여 입력된 정수와 실수가 문자열로 출력되게 만드세요.

정답 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    char s1[10];
    char s2[20];
    int num1;
    float num2;

    scanf("%d %f", &num1, &num2);

    sprintf(s1, "%d", num1);
    sprintf(s2, "%f", num2);

    printf("%s\n", s1);
    printf("%s\n", s2);

    return 0;
}

 

 

 

47.6 심사문제 : N-gram 만들기

문제 : 표준 입력으로 정수와 길이 10 이하의 문자열이 입력됩니다. 입력된 문자열을 정수만큼 문자 단위로 N-gram을 출력하는 프로그램을 만드세요.

정답 :

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

int main()
{
    char text[11];
    int length;
    int n;

    scanf("%d %s", &n, text);

    length = strlen(text);
    if (length < n)
    {
        printf("wrong\n");
    }
    else
    {
        for (int i = 0; i<length-(n-1); i++)
        {
            for (int j = 0; j < n; j++)
                printf("%c", text[i + j]);

            printf("\n");
        }
    }

    return 0;
}

 

 

 

48.8 심사문제 : 자동차 계기판 구조체 선언하기

문제 : 자동차에서 속도, 연료, 주행거리, 엔진 온도, 회전수를 표현하는 계기판 구조체가 정의되어 있습니다. 다음 소스 코드를 완성하여 계기판 정보가 출력되게 만드세요.

정답 :

#include <stdio.h>

struct Dashboard {
    int speed;
    char fuel;
    float mileage;
    int engineTemp;
    int rpm;
};

int main()
{
    struct Dashboard d1;

    d1.speed = 80;
    d1.fuel = 'F';
    d1.mileage = 5821.442871;
    d1.engineTemp = 200;
    d1.rpm = 1830;

    printf("Speed: %dkm/h\n", d1.speed);
    printf("Fuel: %c\n", d1.fuel);
    printf("Mileage: %fkm\n", d1.mileage);
    printf("Engine temp: %d℃\n", d1.engineTemp);
    printf("RPM: %d\n", d1.rpm);

    return 0;
}

 

 

 

48.8 심사문제 : 자동차 계기판 구조체 정의하기

문제 : 다음 소스 코드에서 자동차의 속도, 연료, 주행거리, 엔진 온도, 회전수를 표현하는 계기판 구조체를 정의하고, 계기판 정보가 출력되게 만드세요.

정답 :

#include <stdio.h>

typedef struct{
    int speed;
    char fuel;
    float mileage;
    int engineTemp;
    int rpm;
}Dashboard;

int main()
{
    Dashboard d1;

    d1.speed = 80;
    d1.fuel = 'F';
    d1.mileage = 5821.442871;
    d1.engineTemp = 200;
    d1.rpm = 1830;

    printf("Speed: %dkm/h\n", d1.speed);
    printf("Fuel: %c\n", d1.fuel);
    printf("Mileage: %fkm\n", d1.mileage);
    printf("Engine temp: %d℃\n", d1.engineTemp);
    printf("RPM: %d\n", d1.rpm);

    return 0;
}

 

 

 

49.8 심사문제 : 사람과 자동차 구조체 포인터에 메모리 할당하기

문제 : 사람과 자동차 구조체가 정의되어 있습니다. 다음 소스 코드를 완성하여 사람과 자동차 정보가 출력되게 만드세요.

정답 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Person {
    char name[20];
    int age;
    char address[100];
};

typedef struct {
    char name[20];
    int number;
    int displacement;
} Car;

int main()
{
    struct Person* p1 = malloc(sizeof(struct Person));
    Car* c1 = malloc(sizeof(Car));

    strcpy(p1->name, "고길동");
    p1->age = 40;
    strcpy(p1->address, "서울시 서초구 반포동");

    strcpy(c1->name, "스텔라");
    c1->number = 3421;
    c1->displacement = 2000;

    printf("이름: %s\n", p1->name);
    printf("나이: %d\n", p1->age);
    printf("주소: %s\n", p1->address);

    printf("자동차 이름: %s\n", c1->name);
    printf("자동차 번호: %d\n", c1->number);
    printf("배기량: %dcc\n", c1->displacement);

    free(p1);
    free(c1);

    return 0;
}

 

 

 

49.9 심사문제 : 구조체 포인터에 구조체 변수의 주소 할당하기

문제 : 3차원 좌표 구조체 Point3D가 정의되어 있습니다. 다음 소스 코드를 완성하여 좌표 정보가 출력되게 만드세요.

정답 :

#include <stdio.h>

struct Point3D {
    float x;
    float y;
    float z;
};

int main()
{
    struct Point3D p1 = { 10.0f, 20.0f, 30.0f };
    struct Point3D* ptr;

    ptr = &p1;

    printf("%f %f %f\n", ptr->x, ptr->y, ptr->z);

    return 0;
}

 

 

 

50.3 심사문제 : 두 점 사이의 거리 구하기

문제 : 표준 입력으로 정수 4개가 입력되어 Point2D 구조체에 저장됩니다. 다음 소스 코드를 완성하여 두 점 사이의 거리가 출력되게 만드세요.

정답 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

struct Point2D {
    int x;
    int y;
};

int main()
{
    struct Point2D p1;
    struct Point2D p2;
    double distance;

    scanf("%d %d %d %d", &p1.x, &p1.y, &p2.x, &p2.y);

    int a = p2.x - p1.x;
    int b = p2.y - p1.y;
    distance = sqrt(a * a + b * b);

    printf("%f\n", distance);

    return 0;
}
복사했습니다!