c 언어 오류 소스 좀 찾아주세요.ㅠ
-
게시물 수정 , 삭제는 로그인 필요
#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;
}
오류좀요 ㅠ
#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 언어 자료형