3x3 행렬을 입력받은후, 각 행의 합과 열의 합을 구하는 프로그램
#include <stdio.h>
#include <string.h>
#define N 3
void readNxN(int a[ N][ N]);
void sumNxN(const int a[ N][ N], int rSum[ N], int cSum[ N]);
void printNxN(const int a[ N][ N], const int rSum[ N],
const int cSum[ N]);
int main ()
{
int x[ N][ N];
int rSum[ N] = { 0}, cSum[ N] = { 0};
readNxN(x);
sumNxN(x, rSum, cSum);
printNxN(x, rSum, cSum);
return 0;
}
void readNxN(int a[ N][ N])
{
int i, j;
printf(\"%d x %d 정수 행렬을 입력하시요:\\n\", N, N);
for (i = 0; i < N; ++i)
for(j = 0; j < N; ++i)
scanf(\"%d\", & a[ i][ j]);
}
void sumNxN(const int a[ N][ N], int rSum[ N], int cSum[ N])
{
int i, j;
for (i = 0; i < N; ++i) {
for (j = 0; j < N; ++j) {
rSum[ i] += a[ i][ j];
cSum[ j] += a[ i][ j];
}
}
}
void printNxN(const int a[ N][ N], const int rSum[ N], const int cSum[ N])
{
int i, j;
const char *lseg = \"_______\";
const int width = strlen(lseg) - 1;
for (i = 0; i < N; ++i){
for (j = 0; j < N; ++j)
printf(\"%*d\", width, a[ i][ j]);
printf(\"| %*d\\n\", width, rSum[ i]);
}
for (i = 0; i < N; ++i)
printf(\"%s\", lseg);
printf(\"+\\n\");
for (i = 0; i < N; ++i)
printf(\"%*d\", width, cSum[ i]);
printf(\"\\n\");
}
위에게 예제여서 똑같이 치고 컴파일하니 에러 하나도 안떳는데
프로그램 실행하고 숫자 치고 엔터치면 오류가 나버리네여...
대체 뭐가 잘못된건가여 흑
아 ~ 길다아 ~ 메모리 잘못 사용했겠지
매크로 상수 N 저놈이 저렇게 보기 싫은 코드는 첨이네
메모리 사용여???
컴파일러 뭐쓰냐?
함수에 배열 전달하는건 최신 표준인 C99만 가능하다.
죄송해여 C언어 처음 배우는 거라... 비쥬얼 C++ 6.0 쓰는데 -_ -;;; 아 쪽팔려
괜찮음 -_- 나도 비졀 C 씀 - -ㅋ
C99 이전이면 배열 주소를 함수에 전달해서 포인터로 깨작대면 되니 잘해보시길. 아마 좀 많이 골때릴거다 ㅋㅋㅋ
나도 비쥬얼6.0쓰는데..ㅋㅋ
c89/90이든 c99든 함수 인자로 []를 쓰는건 문제없다. 컴파일러가 다 알아서 포인터로 알아먹는다
1 but 2차원 배열은 보통 잘 안됨
2차원배열도 int arr[][LEN]요렇게 받던 ,int (*arr)[LEN]요렇게 받던 다 똑같이 알아먹는다
ㅇㅇ 뒤에것 크기 알려주면 됨...
낚시냐? readNxN함수 두번째 for문 에서 ++i 하니 무한루프지. 디버거좀 쓰자...
열받아! 님 감사... 근데 ++ 지워주니.. 프로그램이 원하는데로 안나오네요 T.T
for (i=0; i< N; i++) { for (j =0; j<N; j++ /*햏은i++했음*/) { //나머지 코드들...
알아서 디버깅좀 하라는..