728x90

문제1) 프로그램 사용자로부터 하나의 영단어를 입력받아서 입력받은 영단어의 길이를 계산항여 출력하는 프로그램을 작성해보자. 예를 들어서 Array라는 단어가 입력되며 5가 출력되어야한다.

#include <stdio.h>
int main(void){
    char word[10];
    int num=0;
    scanf("%s",word);
    while(word[num]!='\0'){
        num++;
    }
    printf("%d", num);
}

이 문제 솔직히 sizeof로 풀려고 생각을 했다. 하지만 이 단원에서는 뒤에 널 문자 활용법을 배웠으므로 이를 활용하기로 했다. 배열 없이 출력은 불가해서 임의로 10 정도 넣었고 문자열이므로 %s로 입력을 받았다. while문을 돌리는데 널문자 나오기 전까지 num 즉, 갯수 출력을 올려주다가 탈출하면 num이 출력되도록 하였다.


문제2) 프로그램 사용자로부터 영단어를 입력받아서 char형 배열에 저장한다. 그 다음 배열에 저장된 영단어를 역순으로 뒤집는다. 물론 이때에 널문자의 위치를 변경해서는  안된다. 뒤집고 나서는 제대로 뒤집혀졌는지 확인하기 위해서 출력해보자

#include <stdio.h>
int main(void){
    char word[100];
    int i;
    int num=0, temp;
    scanf("%s", word);
    while(word[num]!='\0'){
        num++;
    }
    for(i=0;i<num/2;i++){
        temp=word[i];
        word[i]=word[(num-i)-1];
        word[(num-i)-1]=temp;
    }
    printf("%s", word);
}

나 혼자 짜볼려고 한참을 끙끙거리다가 하지를 못했다. 여기서는 널문자 건드리면 안되므로 그것까지 더해준다. 그리고 for문에서는 num에서 2를 나누어주는데 그이유는 반으로 나누어서 바꾸어줘야하기 때문이다. 만약 /2를 해주지 않으면 2번 바꿔주어 제자리로 돌아오게 된다. temp는 저장 원리를 알면 쉽게 풀리는데 갯수는 1부터 배열은 0부터이므로 1을 빼주어서 비교를 해주는 것이 필요하다. 그리고 한줄로 출력하므로 이렇게 그대로 %s를 이용해 출력하면 된다.

 

 


문제3) 프로그램 사용자로부터 영단어를 입력받는다. 그리고 나서 입력받은 영단어를 구성하는 문자 중에서 아스키 코드의 값이 가장 큰 문자를 찾아서 출력하는 프로그램을 작성해보자. 예를 들어서 입력된 단어가 'LOVE'라면 이 중에서 아스키 코드 값이 가장 큰 문자는 V이므로 V가 출력되어야 한다.

#include <stdio.h>
int main(void){
    char word[10];
    int big=0;
    int num=0;
    scanf("%s",word);
    while(word[num]!='\0'){
        num++;
    }
    for(int i=0;i<num;i++){
        if(big<=word[i]){
            big=word[i];
        }
    }
    printf("%c", big);
}

나는 처음에 %s로 입력받아서 %d로 내보내거나 %d로 문자열을 받아서 %s 나 %c로 내보내야 한다고 생각했다.  그럴 필요가 없었다. 어짜피 컴퓨터는 인식을 알아서 하기 때문에 상관이 없다. 또 주의해야 하는게 num의 설정이다. 처음에는 10공간이니 끝까지 해줘야 겠다고 생각했는데 그것이 아니라 문자열 받은 만큼을 세서 해주어야 한다는 것이다. big에 설정해주는 것은 앞에서 많이 했으므로 넘어가고....

%c는 문자를 출력하는 것이므로 이렇게 해도 된다.

728x90

+ Recent posts