게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C에서는 함수 오버로딩이 안 되나요??
게시물ID : programmer_3904짧은주소 복사하기
작성자 : Luce
추천 : 0
조회수 : 515회
댓글수 : 6개
등록시간 : 2014/06/10 21:20:22
옵션
  • 베스트금지
  • 본인삭제금지
아래 코드는 9개의 정수를 입력받고 3*3 행렬과 그 역행렬을 출력시키는 코드입니다.

친구놈이 하도 찡찡대서 제가 한 번 해봤는데, 전 C++만 배웠고 친구는 C 수업이긴 한데
어차피 제가 객체 지향 프로그래밍 이런 거 할 수준도 아니니까  (기초 과목으로 3학점 들은 게 답니다.) 근본적으로 비슷할 거라 생각해서 C++로 짜고, cout 이런 거만 printf로 바꾸는 등 수정을 했습니다. 물론 제가 C++ 스타일로 짜고 실행해봤을 땐 문제 없었습니다.

 
그리고나서 C로 바꿔서 출력시킬 때, 분명 정수인데 2.00000 이런 식으로 출력시키는데, iomanip 헤더를 쓰면 안 되는지라 그냥 출력하는 함수를 float와 int 두 개로 만들어서 해결하려 했습니다.

그런데 에러가 나고.. 보아하니 함수 오버로딩이 안 되는 모양이더군요....
C에서는 안 되는 게 맞나요? 아님 제가 코딩을 잘못한 건가요?? 

#include <stdio.h>
void inv(int a[][3], float b[][3]);
void output(float a[][3]);
void output(int a[][3]);
int main(){
int a[3][3];
float b[3][3];
for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
         a[i][j] = 0;
         b[i][j] = 0;
     } 

printf("Input 9 numbers, for 3x3 matrix : ");
for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
         scanf("%d",&a[i][j]);
     }
 } 
printf("The matrix : \n");
output(a);
printf("\n");
inv(a, b);
return 0;
}
void inv(int a[][3], float b[][3]){
     float det = 0;
     det = a[0][0]*(a[1][1]*a[2][2]-a[1][2]*a[2][1]) + a[0][2]*(a[1][0]*a[2][1]-a[1][1]*a[2][0]) - a[0][1]*(a[1][0]*a[2][2]-a[1][2]*a[2][0]);
     if(det==0){
        printf("Inverse matrix :\n""Determinant is 0. Inverse matrix doesn't exist.\n");
     return;
     }
     else{
         b[0][0] = (a[1][1]*a[2][2]-a[1][2]*a[2][1])/det, b[0][1] = (a[0][2]*a[2][1]-a[0][1]*a[2][2])/det, b[0][2] = (a[0][1]*a[1][2]-a[0][2]*a[1][1])/det;
         b[1][0] = (a[1][2]*a[2][0]-a[1][0]*a[2][2])/det, b[1][1] = (a[0][0]*a[2][2]-a[0][2]*a[2][0])/det, b[1][2] = (a[0][2]*a[1][0]-a[0][0]*a[1][2])/det;
         b[2][0] = (a[1][0]*a[2][1]-a[1][1]*a[2][0])/det, b[2][1] = (a[0][1]*a[2][0]-a[0][0]*a[2][1])/det, b[2][2] = (a[0][0]*a[1][1]-a[0][1]*a[1][0])/det;    printf("Inverse matrix :\n");
     output(b);
     return;
     } 
}
void output(float a[][3]){
 for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
         printf("%lf",a[i][j]);
     }
     printf("\n"); 


void output(int a[][3]){
for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
         printf("%d",a[i][j]);
     }     printf("\n");
 } 
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호