c 언어 오류 소스 좀 찾아주세요.ㅠ

c 언어 오류 소스 좀 찾아주세요.ㅠ

작성일 2017.04.05댓글 1건
    게시물 수정 , 삭제는 로그인 필요

#include <stdio.h>
#define SIZE 10   // 매크로 상수 SIZE를 10으로 정의한다.
// bubble함수의 원형을 선언한다.
void bubble(int *, const int, int (*)(int,int));
// ascending함수의 원형을 선언한다.
int ascending(const int, const int);
// descending함수의 원형을 선언한다.
int descending(const int, const int);

  void main()
  {
     //매크로 상수  SIZE가 10이므로 a[10] 배열을 만든후 초기화한다.
     int a[SIZE] ={2,6,4,8,10,12,89,68,45,37};
    
     //counter, order 변수를 선언한다.
     int counter, order;
    
     printf("Enter 1 -> 오름차순정렬 :\n");
     printf("Enter 2 -> 내림차순정렬 :\n");

     //사용자로 하여금 오름차순정렬을 할 것인지 내림차순정렬을 할것인지 입력받아 order변수에 넣는다.
     scanf("%d", &order);

     printf("\n 원래데이터 \n");

     // a배열에 있는 요소값 10개를 출력한다.
     for (counter=0; counter<=SIZE-1; counter++)
     {
     printf("%4d",a[counter]);

     }


     // 오름차순을 선택하였을경우
     if (order==1)
     {
         // bubble함수에 a[0]주소값과, 10, ascending(오름차순)함수의 포인터를 매개변수로 하여 호출한다.
         bubble(a,SIZE,ascending);
      printf("\n 오름차순으로 정렬된 데이터 \n");
     }
     else  // 내림차순을 선택하였을경우
     {
         // bubble함수에 a[0]의주소값과, 10, descending(내림차순)함수의 포인터를 매개변수로 하여 호출한다.
      bubble(a,SIZE,descending);
         printf("\n 내림차순으로 정렬된 데이터 \n");

     }

     // 오름차순 또는 내림차순으로 정렬된 a배열값의 요소를 다시 출력한다.
     for(counter=0;counter<=SIZE-1; counter++)
     {
      printf("%4d",a[counter]);

     }
     printf("\n");

}
// bubble함수  work포인터변수는 &a[0]주소값을 받는다.
// size변수는 10을 받는다.
// 오름차순일경우 compare는 ascending함수의 포인터를 받는다.
// 내림차순일경우 compare는 descending함수의 포인터를 받는다.

void bubble(int *work, const int size, int(*compare)(int,int))
{
    int pass, count;  // pass, count의 변수를 선언한다.
    void swap(int *, int *);  // swap함수의 원형을 선언한다.

    // a배열의 값을 하나씩 읽어 비교하여
    for (pass=1;pass<=size-1;pass++)
    {
       for(count=0;count<=size-2; count++)
       {
          // 오름차순일경우는 a[0], a[1]의 값을 ascending함수를 통해 비교하여
          // a[1]이 더 작으면 a[0],a[1]의 값을 변경한다.
          // 내림차순일경우는 a[0], a[1]의 값을 descending함수를 통해 비교하여
          // a[0]이 더 작으면 a[0],a[1]의 값을 변경한다.
          // 반복해서 a[0], a[2], a[0],a[3].......... 정렬한다.
       if ((*compare)(work[count], work[count+1]))
            swap(&work[count], &work[count+1]);
       }
    }
}

// 호출할때 받은 매개변수의 주소값을 가지고 첫번째 값과 두번째 값을 바꾸는 함수이다.
void swap(int *element1ptr, int *element2ptr)
{
  int temp;  // temp 변수를 선언후
  temp=*element1ptr;   // 첫번째 매개변수의 주소값에 있는 변수값을 읽어  temp 변수로 옮겨놓는다.
  *element1ptr = *element2ptr;   // 두번째 매개변수의 주소값에 있는 변수 값을 읽어 첫번째 매개변수의 주소값의 변수에 값을 옮긴다.
  *element2ptr = temp;  // temp변수에 있는 값을 두번째매개변수의 주소값에 있는 변수에 값을 옮긴다.

}

// 오름차순정렬함수이므로 a변수의 값과 b변수의 값을 비교후
// b<a이면 True, 아니면 false값을 return한다.
int ascending(const int a, const int b)
{
  return b<a;  
}

// 내림차순정렬함수이므로 a변수의 값과 b변수의 값을 비교후
// b>a이면 True, 아니면 false값을 return한다.
int descending(const int a, const int b)
{

  return b>a;
}


오류좀요 ㅠ


#c 언어 #c 언어 연산자 #c 언어 컴파일러 #c 언어 기초 #c 언어 포인터 #c 언어 scanf #c 언어 배열 #c 언어 함수 #c 언어 구조체 #c 언어 자료형

profile_image 익명 작성일 -

설마 처음 배우는 부분에 대해서 이렇게 깔끔하게 잘 짜시는 건가요? 잘 짜시네요.

오류라기보다 비교 횟수 면에서 낭비되는 부분이 있어서 수정해봤습니다.

#include <stdio.h>
#define SIZE 10   // 매크로 상수 SIZE를 10으로 정의한다.
int g_nCompareCount = 0;
// bubble함수의 원형을 선언한다.
void bubble(int *const intint(*)(intint));
void bubble2(int *const intint(*)(intint));
// ascending함수의 원형을 선언한다.
int ascending(const intconst int);
// descending함수의 원형을 선언한다.
int descending(const intconst int);
 
void main()
{
    //매크로 상수  SIZE가 10이므로 a[10] 배열을 만든후 초기화한다.
    int a[SIZE] = { 2,6,4,8,10,12,89,68,45,37 };
 
    //counter, order 변수를 선언한다.
    int counter, order;
 
    printf("Enter 1 -> 오름차순정렬 :\n");
    printf("Enter 2 -> 내림차순정렬 :\n");
 
    //사용자로 하여금 오름차순정렬을 할 것인지 내림차순정렬을 할것인지 입력받아 order변수에 넣는다.
    scanf("%d"&order);
 
    printf("\n 원래데이터 \n");
 
    // a배열에 있는 요소값 10개를 출력한다.
    for (counter = 0; counter <= SIZE - 1; counter++)
    {
        printf("%4d", a[counter]);
 
    }
 
 
    // 오름차순을 선택하였을경우
    if (order == 1)
    {
        // bubble함수에 a[0]주소값과, 10, ascending(오름차순)함수의 포인터를 매개변수로 하여 호출한다.
        bubble(a, SIZE, ascending);
        printf("\nbubble 비교횟수 : %d\n", g_nCompareCount);
        bubble2(a, SIZE, ascending);
        printf("\nbubble2 비교횟수 : %d\n", g_nCompareCount);
        printf("\n 오름차순으로 정렬된 데이터 \n");
    }
    else  // 내림차순을 선택하였을경우
    {
        // bubble함수에 a[0]의주소값과, 10, descending(내림차순)함수의 포인터를 매개변수로 하여 호출한다.
        bubble(a, SIZE, descending);
        printf("\nbubble 비교횟수 : %d\n", g_nCompareCount);
        bubble2(a, SIZE, ascending);
        printf("\nbubble2 비교횟수 : %d\n", g_nCompareCount);
        printf("\n 내림차순으로 정렬된 데이터 \n");
 
    }
 
    // 오름차순 또는 내림차순으로 정렬된 a배열값의 요소를 다시 출력한다.
    for (counter = 0; counter <= SIZE - 1; counter++)
    {
        printf("%4d", a[counter]);
 
    }
    printf("\n");
 
}
 
// bubble함수  work포인터변수는 &a[0]주소값을 받는다.
// size변수는 10을 받는다.
// 오름차순일경우 compare는 ascending함수의 포인터를 받는다.
// 내림차순일경우 compare는 descending함수의 포인터를 받는다.
// 기존 정렬 함수
void bubble(int *work, const int sizeint(*compare)(intint))
{
    g_nCompareCount = 0;
    int pass, count;  // pass, count의 변수를 선언한다.
    void swap(int *int *);  // swap함수의 원형을 선언한다.
 
// a배열의 값을 하나씩 읽어 비교하여
    for (pass = 1; pass <= size - 1; pass++)
    {
        for (count = 0; count <= size - 2; count++)
        {
            // 오름차순일경우는 a[0], a[1]의 값을 ascending함수를 통해 비교하여
            // a[1]이 더 작으면 a[0],a[1]의 값을 변경한다.
            // 내림차순일경우는 a[0], a[1]의 값을 descending함수를 통해 비교하여
            // a[0]이 더 작으면 a[0],a[1]의 값을 변경한다.
            // 반복해서 a[0], a[2], a[0],a[3].......... 정렬한다.
            ++g_nCompareCount;
            if ((*compare)(work[count], work[count + 1]))
                swap(&work[count], &work[count + 1]);
        }
    }
}
 
 
// bubble함수  work포인터변수는 &a[0]주소값을 받는다.
// size변수는 10을 받는다.
// 오름차순일경우 compare는 ascending함수의 포인터를 받는다.
// 내림차순일경우 compare는 descending함수의 포인터를 받는다.
// 수정한 정렬 함수
void bubble2(int *work, const int sizeint(*compare)(intint))
{
    g_nCompareCount = 0;
    int pass, count;  // pass, count의 변수를 선언한다.
    void swap(int *int *);  // swap함수의 원형을 선언한다.
 
// a배열의 값을 하나씩 읽어 비교하여
    for (pass = size - 2; pass >= 0; pass--// 끝 부분의 인덱스를 결정
    {
        for (count = 0; count <= pass; count++)
        {
            // 오름차순일경우는 a[0], a[1]의 값을 ascending함수를 통해 비교하여
            // a[1]이 더 작으면 a[0],a[1]의 값을 변경한다.
            // 내림차순일경우는 a[0], a[1]의 값을 descending함수를 통해 비교하여
            // a[0]이 더 작으면 a[0],a[1]의 값을 변경한다.
            // 반복해서 a[0], a[2], a[0],a[3].......... 정렬한다.
            ++g_nCompareCount;
            if ((*compare)(work[count], work[count + 1]))
                swap(&work[count], &work[count + 1]);
        }
    }
}
 
// 호출할때 받은 매개변수의 주소값을 가지고 첫번째 값과 두번째 값을 바꾸는 함수이다.
void swap(int *element1ptr, int *element2ptr)
{
    int temp;  // temp 변수를 선언후
    temp = *element1ptr;   // 첫번째 매개변수의 주소값에 있는 변수값을 읽어  temp 변수로 옮겨놓는다.
    *element1ptr = *element2ptr;   // 두번째 매개변수의 주소값에 있는 변수 값을 읽어 첫번째 매개변수의 주소값의 변수에 값을 옮긴다.
    *element2ptr = temp;  // temp변수에 있는 값을 두번째매개변수의 주소값에 있는 변수에 값을 옮긴다.
 
}
 
// 오름차순정렬함수이므로 a변수의 값과 b변수의 값을 비교후
// b<a이면 True, 아니면 false값을 return한다.
int ascending(const int a, const int b)
{
    return b < a;
}
 
// 내림차순정렬함수이므로 a변수의 값과 b변수의 값을 비교후
// b>a이면 True, 아니면 false값을 return한다.
int descending(const int a, const int b)
{
    return b > a;
}
cs

.

c언어 오류좀 찾아주세요

... 오류가 나는데 못찾겠어요 ㅠㅠ Function should return a value in... 함수형도 일치시켜주세요. #include<stdio.h> #include<conio.h> #include...

C언어 오류좀 찾아주세요.

... 평균보다 큰수의 평균을 구하는 문제이고, 제가 짠 소스의 일부분 입니다. 출력은 되나 X값이 이상하게 나옵니다. 오류좀 찾아주세요....

c언어 오류좀 찾아주세요

... return 0; } 이게 소스코드이고. 값이 26, 22, 52로 딱 나와야 되는데... 오류좀 찾아주세요... float c[3]; for (j = 1; j <= (year / 5); j++) { c[0] = a[0]...

c언어 오류좀 찾아주세요

요새 제가 컴퓨터 프로그래밍 공부좀 하고잇는데요 #include <stdio.h> int main() { int num1; int num2; int sum; sum=num1+num2; printf("두 정수값을 입력하세요 :\n"); scanf...