[JW0004-4] 중간고사 답

Post Reply
sungbum
Posts: 12
Joined: Sun Jan 04, 2015 10:06 pm

[JW0004-4] 중간고사 답

Post by sungbum »

문제 1: 별 출력프로그램

Code: Select all

#include<stdio.h>

void start_print(int *ps, int size);

int main(void)
{
    int score[100];
    int size=0;

    printf("숫자를 입력하세요 :");
    while((scanf("%d",&score[size]))!= -1) // EOF를 입력받기 전까지 입력받음
    {
        size++; //배열에 순차적으로 저장하기 위함
        printf("숫자를 입력하세요 :");
    }
    start_print(score,size); // 별 출력하는 함수 호출

    return 0;
}

void start_print(int *ps, int size)
{
    int i,j,share;
    for(i=0;i<size;i++)
    {
        printf("(%3d) ", ps[i]); // 배열에 입력된 수 출력
        share = ps[i] / 5;// 배열의 각 인덱스에 저장된 값을 5로 나누어 출력할 별의 개수를 share변수에 저장
        for(j=0;j<share;j++)//share 크기만큼 별을 출력하는 반복문
        {
            printf("*");
        }
            printf("\n");
        }
}


문제 2: 숫자 정렬 및 최대 최소 평균 나머지 값 출력 프로그램

Code: Select all

#include<stdio.h>

void swap(int* x, int* y);
int float_mod(int x, int y);

int main(void)
{
    int i=0;
    int sum=0;
    int ave=0;
    int mod=0;
    int a,b,c;
    int arr[100];

    while((scanf("%d",&arr[i]))!= -1)// EOF를 입력받기 전까지 입력받음
    {
        i++;

    }


    //내림차순 정렬
    for(a=0;a<i;a++)//배열의 크기만큼 반복
    {
        for(b=0;b<i;b++)// 첫 번째 배열의 요소를 기준으로 각 각의 배열 요소값들과 >비교
        {
            if(arr[a] > arr[b])//swap함수의 조건
            {
                swap(&arr[a], &arr[b]);//swap함수 호출
            }
            else
                continue;
        }
    }
    
    printf("result: ");
    for(c=0;c<i;c++)//정렬된 배열 출력 및 총 합을 구함
    {
        sum = sum+arr[c];//변수sum에 배열의 요소를 더함
        printf("%d ", arr[c]);
    }
    printf("\n");
    ave = sum/(i);//평균 구하기
    mod = float_mod(arr[0], ave);//float함수 호출, 내림차순정렬이기 때문에 배열의 >처음값과 평균을 인자로 전달
    printf("max: %d\n", arr[0]);//최대값 출력, 배열의 첫번째 요소
    printf("min: %d\n", arr[i-1]);//최소값 출력, 배열의 마지막 요소
    printf("ave: %d\n", ave);//평균출력
    printf("mod: %d\n", mod);//최대값을 평균으로 나눈 나머지 출력

    return 0;
}

void swap(int* x, int* y)//swap함수, 메인함수의 변수를 바꾸기 위해서는 포인터 변수>가 필요하기 때문에 인자로 포인터 변수 전달
{
    int temp;

    temp=*x;
    *x=*y;
    *y=temp;
}

int float_mod(int x, int y)//float_mod함수, 인자로 최대값과 평균을 받음
{
    int z=0;
    z = x%y;
    return z;
}
         
문제 3: 문자열 검색 프로그램

Code: Select all

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

void search(char *word, char *sentence);

int main(void) {
    char line[100]; //최초 문장 입력
    char temp[30];  //검색할 단어(토큰) 입력

    printf("문장 입력: ");
    gets(line);

    while(1) {
        printf("검색할 문자열 입력(종료는 end): ");
        if(0 == gets(temp)) break;                  //EOF 입력 받으면 반복문 탈출
        if(0 == strcmp(temp,"end")) break;          //end를 입력 받으면 반복문 탈출
        search(temp, line);                         //검색 함수 호출
    }

    /*
       논의 사항
       더 효율적인 계산 방법은?
       strstr() 함수를 각자 구현할 수 있는가?
     */
}
void search(char *word, char *sentence) {
    char *t[100];
    int cnt = 1;
    int i;

    //0번지는 원문 저장, 1번지부터 검색된 문자의 포인터를 저장
    t[0]=t[cnt]=sentence;

    while(1) {
        t[cnt] = strstr(t[cnt-1], word);    //이전 검색된 위치 다음부터 찾아야함, >무한 루프 방지
        if(t[cnt] == NULL) break;           //검색되지 않은경우 반복문 탈풀
        cnt++;                              //검색된 개수를 카운트
        t[cnt-1]++;                         //검색된 포인터를 1 더해줌, 무한루프 방
지
    }
    printf("%d개", cnt-1);
    for(i=1; i<cnt; i++) {
        printf(", %d번째", t[i]-sentence);  //포인터 위치의 차를 이용해서 몇번재에 위치하는지 계산
    }
    printf("\n");
}




Post Reply