본문 바로가기
C/쉽게 풀어쓴 C언어 Express

[쉽게 풀어쓴 C언어 Express] 12장 programming

by 2_minggu 2022. 8. 21.

문제 01) 사용자로부터 문자를 입력받아서 그 문자의 아스키 코드값을 출력하는 프로그램을 작성하라.

 

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main() {
    char n;
    printf("문자를 입력하시오: ");
    scanf(" %c"&n);
    printf("아스키 코드값=%d", n);      
    return 0;
}
 
cs

 


문제 02) 문자열을 입력으로 받아서 문자열에 포함된 모든 공백 문자를 삭제하는 함수를 작성하고 테스트하라.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
void str(char* str);
 
int main() {
    char n[100];
    printf("공백 문자가 있는 문자열을 입력하시오: ");
    gets_s(n, 100);
    str(n);
    
    return 0;
}
void str(char* str) {
    int i = 0;
    for (i; str[i] != NULL;i++) {
        if (str[i] != ' ') {
            printf("%c", str[i]);
        }
    }return;
}
 
cs

 


문제 03) 문자열 안에 포함된 문자의 개수를 세는 함수 int str_chr(char *s, int c)를 작성하라. s는 문자열이고 c는 개수를 셀 문자이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
 
int str_chr(char* s, int c);
 
int main() {
    char str[100], n;
    printf("문자열을 입력하시오: ");
    gets_s(str, 100);
    printf("개수를 셀 문자를 입력하시오: ");
    n = getchar();
 
    printf("%c의 개수: %d", n, str_chr(str, (int)n));
    
    return 0;
}
 
int str_chr(char* s, int c) {
    int count = 0;
    for (int i = 0; s[i] != NULL; i++) {
        if (s[i] == c) {
            count++;
        }
    }
    return count;
}
 
cs

 


문제 04) 사용자로부터 받은 문자열에서 각각의 문자가 나타나는 빈도를 계산하여 출력하는 프로그램을 작성하라.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main() {
    char str[100];
    int aph[26= { 0 };
 
    printf("문자열을 입력하시오: ");
    gets_s(str, 100); 
 
   
    for (int i = 0; str[i] != NULL; i++) {
        aph[str[i] - 97]++;
    }
    for (int i = 0; i < 26; i++) {
        printf("%c: %d\n"97 + i, aph[i]);
    }
        return 0
}
 
cs

 


문제 05) 문자열을 사용자로부터 받아서 영어의 대문자는 소문자로, 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하여 보자. getchar()를 이용하여 키보드로부터 문자를 하나 입력받는다. 입력받은 문자가 소문자이면 대문자로, 대문자이면 소문자로 변환하여 putchar()를 이용하여 출력한다. 만약 영어 알파벳의 범위를 벗어나는 문자가 들어오면 경고 메시지를 출력한다. 이 작업을 사용자가 ','를 입력할 때까지 되풀이 하는 프로그램을 작성한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include<ctype.h>
 
int main() {
    char ch=0;
    while (ch != '.') {
        ch = getchar();
 
        if (islower(ch) != 0
            ch = toupper(ch);
        else if (isupper(ch) != 0)
            ch = tolower(ch);
 
        putchar(ch);
    }
        return 0
}
 
cs

 


문제 06) 문자열을 받아서 문자열에 포함된 문자를 대문자로 변환하는 함수 str_upper(char *s)를 작성하고 테스트하라.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include<ctype.h>
 
void str_upper(char* s);
 
int main() {
    char str[100];
    gets_s(str, 100);
 
    str_upper(str);
    puts(str);
        return 0
}
 
void str_upper(char* s) {
    for (int i = 0; s[i] != NULL; i++) {
        s[i] = toupper(s[i]);
    }
    return;
}
 
cs

 


문제 07) 사용자에세 질문을 제시하고 답변을 받아서 긍정이면 1을 반환하고 부정이면 0을 반환하는 함수 get_response(char *prompt)를 작성하고 테스트하라. 여기서 매개 변수 prompt는 사용자에게 제시하는 질문이다. 긍정을 의미하는 문자열은 "yes", "ok"로 가정하라. 부정을 의미하는 문자열은 "no"로 가정하라. 대소문자는 구별하지 않도록 하라.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include<string.h>
#include<ctype.h>
 
int response(char* prompt);
 
int main() {
    char ch[100];
    printf("게임을 하시겠습니까");
    if (response(ch) == 1) {
        printf("긍정적인 답변");
    }
    else printf("부정적인 답변");
    return 0;
}
 
int response(char* prompt) {
    char* y[2= { "yes","ok" };
    gets_s(prompt, 100);
    toupper(prompt);
    for (int i = 0; i < 2; i++) {
        if (!strcmp(prompt, y[i])) return 1;
        return 0;
    }
}
 
cs

 


문제 08) 영문 문자열 안에 포함된 영단어의 개수를 계산하여 화면에 출력하는 프로그램을 작성하여 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include<string.h>
 
int main() {
    char* tok, str[100];
    int count = 0;
    gets_s(str, 100);
 
    tok = strtok(str, " ");
    while (tok != NULL) {
        tok = strtok(NULL" ");
        count++;
    }
    printf("단어의 수는 %d입니다.", count);
    return 0;
}
 
cs

 


문제 09) 간단한 철자 교정 프로그램을 작성하여 보자. 문자열을 입력으로 받아서 문자열 안에 마침표가 있으면 문자열의 첫번째 문자가 대문자인지를 검사한다. 만약 대문자가 아니면 대문자로 변환한다. 또한 문장의 끝에 마침표가 존재하는지를 검사한다. 역시 마침표가 없으면 넣어준다. 즉 입력된 문자열이 "pointer is easy"라면 "Pointer is easy"로 반환하여 화면에 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include<string.h>
#include<ctype.h>
 
int main() {
    char input[100];
    int d = 0;
    printf("텍스트를 입력하시오: ");
    gets_s(input, 100);
 
    if (input[strlen(input) - 1== '.') d++;
 
    if (d == 1) {
        if (islower(input[0]))
            input[0= toupper(input[0]);
        puts(input);
    }
    else printf("마침표가 없음");
  
    return 0;
}
 
cs

 


문제 10) 회문(palindrome)이란 바로 읽거나 거꾸로 읽어도 같은 글이 되는 문구이다. 예를 들면 "Able was l ere l saw Elba"와 같은 문자열이 회문이다. 사용자로부터 문자열을 받아서 회문 여부를 판별하여 그 결과를 화면에 출력하는 프로그램을 작성하여 보라. strlen()와 같은 라이브러리 함수는 상용해도 좋다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include<string.h>
#include<ctype.h>
 
int main() {
    char input[100= { 0 };
    printf("문자열을 입력하시오: ");
    scanf("%s", input);
    int n = strlen(input);
 
    for (int i = 0; i < n; i++) {
        input[i]=tolower(input[i]);
 }
        
    int count = 0;
    for (int i = 0; i < n; i++) {
        if (input[i] == input[n - i])
            count++;
    }
    if (count > 0printf("회문입니다.");
    else printf("회문이 아닙니다.");
    return 0;
}
 
cs

 


문제 11) 앤터기가 눌려질 때까지 사용자로부터 문자열을 입력받아서 문자열에 포함된 단어들을 역순으로 배열하여 출력하는 프로그램을 작성하라.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include<string.h>
 
int main() {
    char input[100];
    char *copy[10];
    char* p;
    int count = 1;
 
    printf("문자열을 입력하시오: ");
    gets_s(input, 100);
 
    p = strtok(input, " ");
    copy[count - 1= p;
 
    while (p != NULL) {
        p = strtok(NULL" ");
        count++;
        copy[count - 1= p;
   }
 
    for (int i = count-1; i > 0; i--) {
        printf("%s ", copy[i-1]);
    }
    return 0;
}
 
cs

 


문제 12) 사용자에세 영어 이름을 성과 이름으로 나누어서 대문자로 입력하도록 하여서 성과 이름의 위치를 바꾸고 소문자로 변환하여 출력하는 프로그램을 작성하라.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include<string.h>
#include<ctype.h>
 
int main() {
    char input[100];
    char* p, * copy[100];
    int count = 1;
 
    printf("성과 이름을 대문자로 입력하시오: ");
    gets_s(input, 100);
    for (int i = 0; input[i]!=NULL; i++) {
        input[i] = tolower(input[i]);
    }
 
    p = strtok(input, " ");
    copy[count - 1= p;
 
    while (p != NULL) {
        p = strtok(NULL" ");
        count++;
        copy[count - 1= p;
    }
    
    for (int i = count-1; i > 0; i--) {
        printf("%s, ", copy[i - 1]);
    }
    return 0;
}
 
cs

 


 

문제 13) 사용자로부터 문자열을 받아서 문자열에 포함된 구두점의 개수를 세는 프로그램을 작성하라. 여기서 구두점에는 마침표와 쉼표만이 포함된다고 가정하자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include<string.h>
 
int main() {
    char input[100];
    char check[] = ".,"* p;
    int count = 0;
 
    printf("문자열을 입력하시오: ");
    gets_s(input, 100);
    
    p = strtok(input, check);
 
    while (p != NULL) {
        p = strtok(NULL, check);
        count++;
    }
    printf("구두점의 개수는 %d입니다.", count);
 
    return 0;
}
 
cs

 

 


문제 14) 간단한 "찾아 바꾸기" 기능을 구현하여 보자. 첫 번째로 사용자에게 최대 80 문자의 문자열을 입력하도록 한다. 두 번째로 찾을 문자열을 입력받는다. 세 번째로 바꿀 문자열을 입력받는다. 문자열을 찾아서 바꾼 후에 결과 문자열을 화면에 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include<string.h>
 
int main() {
    char input[100], find[50], turn[50];
    char* p, * result[10];
    int n = 0;
 
    printf("문자열을 입력하시요: ");
    gets_s(input, 100);
    printf("찾을 문자열: ");
    gets_s(find, 50);
    printf("바꿀 문자열: ");
    gets_s(turn, 50);
 
    p = strtok(input, " ");
    result[n] = p;
 
    while (p != NULL) {
        n++;
        p = strtok(NULL" ");
        result[n] = p;
    }
    for (int i = 0; i < n; i++) {
        if (strcmp(find, result[i]) == 0)
            result[i] = turn;
    }
 
    printf("수정된 문자열: ");
    for (int i = 0; i < n; i++) {
        printf("%s ", result[i]);
    }
 
    return 0;
}
 
cs

 

 


문제 15) 다음과 같이 연산의 이름을 문자열로 받아서 해당 연산을 실행하는 프로그램을 작성하라. 연산을 나타내는 문자열은 "add", "sub", "mul", "div"으로 하라.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include<string.h>
 
int main() {
    char input[10];
    int a, b;
    printf("연산을 입력하시오: ");
    scanf("%s %d %d",input, &a, &b);
 
    if (strcmp(input, "add"== 0)
        printf("연산의 결과: %d", a + b);
    else if (strcmp(input, "sub"== 0)
        printf("연산의 결과: %d", a - b);
    else if (strcmp(input, "mul"== 0)
        printf("연산의 결과: %d", a * b);
    else if (strcmp(input, "div"== 0)
        printf("연산의 결과: %d", a / b);
 
    return 0;
}
cs

 

 


문제 16) 요즘 길거리에서는 글자들이 흘러가는 LED 전광판을 볼 수 있다. 이 것을 프로그램으로 구현하여 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main() {
    char input[100];
    char* p;
    printf("광고하고 싶은 텍스트를 입력하시오: ");
    gets_s(input, 100);
 
    p = input;
    puts(input);
    puts(input + 1);
    puts(input + 2);
 
    return 0;
}
cs

(전광판에 숫자를 끝까지 이동해 보이고 싶다면 반복문을 이용해 위와 같은 방식으로 출력하면 됩니다.)

 

:)

 

댓글