c언어 이진탐색으로 원하는 값의 위치 찾기

조회수 607회
#define _CRT_SECURE_NO_WARNINGS
#define len 5
#include<stdio.h>

int binarySearch(int c[], int leng, int key);

int main()
{

int num[len], i, j;

int temp;



int ans;

FILE* fp1;

FILE* fp2;

    for (i = 0; i < len; i++) {

        printf("숫자를 입력하세요 : ");
        scanf_s("%d", &num[i]);
     }
    for (j = 0; j < len; j++) {
        for (i = 0; i < len - 1; i++)
        {
            if (num[i] < num[i + 1])
            {
                temp = num[i];
                num[i] = num[i + 1];
                num[i + 1] = temp;
            }
        }
    }

    fp1 = fopen("data1.txt", "w");
    for (i = 0; i < len; i++)
    {
        fprintf(fp1, "%d\n", num[i]);
    }

    while (1)
    {

        printf("\n찾으려는 숫자를 입력하세요:");
        scanf_s("%d", &ans);
           if (ans == 'q')
        {
            printf("종료합니다");
            break;
        }
        for (i = 0; i < len; i++)
        {
            if (ans == num[i])
            {
                printf("%d번째 줄에 있습니다", binarySearch(num,len,ans));
            }
        }

    } 


    return 0;
       }
             int binarySearch(int c[],int leng,int key)

      {
        int low = 0;
        int high = leng - 1;
        int mid;

    while (low <= high)
    {
        mid = low + (high - low) / 2;

        if (key == c[mid])
            return mid;

        else if (c[mid] < key)
        {
            low = mid + 1;
        }
        else
            high = mid - 1;

    }

     return -1;
    }

편집기로 20개의 숫자를 한줄에 하나씩 써서 data.txt 파일을 생성하라.

단, 크기 순서로 저장하라

  • 키보드로 임의의 숫자를 입력 받아, 이진 검색을 이용하여 그 숫자가 위 화일에서 몇 번쨰 줄에 있는지를 화면에 출력하는 프로그램(버블 소트)을 작성하라. 없으면 없음을 출력하라. 'q'를 입력 할 떄 까지 위 과정을 되풀이 하라.

이 코드로 실행해보면 줄의 값도 제대로 안나오고 q 입력했을 때 사진처럼 문장이 반복되어 나오네요. 혹시 어느 부분이 잘못됐는지 알 수 있을까요?

이미지

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)