728x90

프로그래밍 209

C언어 함수 실습문제 풀이 CH7 (5,6)

Call by Refelence 형식을 사용한 함수. #include void ball(double r, double* c_area, double* s_area, double* volume); int main() { double radius, c_area, s_area, volume; printf("반지름을 입력해주세요 : "); scanf_s("%lf", &radius); ball(radius, &c_area, &s_area, &volume); printf("원의 면적 = %.2lf \n", c_area); printf("구의 면적 = %.6lf \n", s_area); printf("구의 부피 = %.6lf \n", volume); } void ball(double r, double* c_area, ..

VS2017의 C++환경에서는 문자열을 문자형 포인터로 받을 수 없다. (해결방법 추가)

//제목처럼 말해도 되는지 정확히는 모르겠다. #include void strdsp1(char* pt); void strdsp2(char str[]); int main() { char s1[] = "배열 형태의 문자열"; char* s2 = "abcd"; strdsp1(s1); strdsp2(s2); } void strdsp1(char* pt) { printf("%s \n", pt); } void strdsp2(char str[]) { printf("%s \n", str); }//C환경에서는 가능하지만 C++환경에서는 안되는 예제. 이런식으로 문자열 처리하는건 그냥 넘어가도록 하자. // 문자열은 const char이므로 const char*로 받으면 된다.

에러 모음 2018.05.18

C언어 함수 실습문제 풀이 CH7 (3,4) (구의 부피와 겉넓이, 헤론의 공식)

구의 부피와 겉넓이를 구하는 함수 (구의 부피는, 구의 겉넓이는 ) #include #include #define PI 3.14 double ball_volume(float r); double ball_surface(float r); double ball_volume_to_surface(double r); int main() { float r; printf("구의 반지름을 입력하세요 : "); scanf_s("%f", &r); printf("반지름이 %.2f일 때 구의 부피는 %.2f 입니다.\n", r, ball_volume(r)); printf("반지름이 %.2f일 때 구의 겉넓이는 %.2f 입니다. \n", r, ball_surface(r)); printf("부피가 %.2f일 때, 겉넓이는 %.2f..

C언어 이론 7. 함수 (재귀함수와 main함수)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. 재귀함수 (recurcive function) ① 함수 내에서 자기 자신을 호출하는 함수. ② 재귀 함수는 함수 내에서 사용하는 변수가 지역변수여야 하고, 값에 의한 전달 방식을 사용해야한다. ③ 재귀 호출은 지역 변수를 사용하므로 저장영역으로 스택을 사용하고 호출되어진 횟수만큼 기억장소가 배정되므로 스택 오버플로우를 주의해야한다. ④ 재귀 호출은 다른 방식에 비해 처리속도가 느리고, 기억장소를 많이 사용하기 때문에 자주 쓸 기법은 아니다. ⑤ 정렬 트리나 리스트 등의 자료구조를 다룰 때 주로 사용한다. Ⅱ. main() 함수의 원형 ① 메인함수의 가장 완전한 원형은 void(또는 int) ..

C언어 이론 7. 함수 (함수간의 데이터 전달)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. 값을 주고받는 방식 (call by value) ① 실인수와 가인수가 별도의 기억 장소를 갖고 함수가 호출되면 실인수의 값을 가인수에 복사해서 사용하는 방식 ② 데이터 전달이 끝나면 실인수와 가인수간의 상호작용은 없으며 서로 독립적인 값을 갖는다. ③ 값을 주고 받는 방식으로는 실인수의 값을 직접 건드릴 수 없으므로 함수에서 가인수의 값을 리턴해줘야만 한다. Ⅱ. 주소를 주고받는 방식 (call by reference) ① 가인수가 실인수가 기억된 주소를 전달받아 함수 내에서 실제 실인수를 조작하는 방식. ② 함수의 실인수는 주소로 넘겨줘야 하고, 가인수는 포인터로 받아야한다. ③ 함수내에서..

c언어 함수 주요예제 3. (유클리드 호제법)

유클리드 호제법을 이용하여 최대공약수를 구하는 함수. #include int gcd(int a, int b); int main(void) { int i, k; printf("최대 공약수를 구할 수를 입력받습니다. \n"); printf("첫번째 수를 입력하세요 : "); scanf_s("%d", &i); printf("두번째 수를 입력하세요 : "); scanf_s("%d", &k); printf("%d와 %d의 최대공약수는 %d입니다.", i, k, gcd(i, k)); } //유클리드 호제법을 이용해서 최대공약수를 계산하는 함수 int gcd(int a, int b) { int abs_a = (a > 0) ? a : -a; int abs_b = (b > 0) ? b : -b; //gcd(0,0) = ..

C언어 이론 7. 함수 (변수의 범위)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) 기억 부류 (Storage Class)명칭 기억지정자 선언위치 해제시기 기억장소 통용범위 자동 초기화 지역 변수(또는 자동 변수) 없음(또는 auto) 블럭 내부 블럭 종료시 스택 선언된 블럭 내 되지 않음 전역 변수 없음 모든 블럭 외부 프로그램 종료시 정적 영역 프로그램 전체 0으로 초기화 정적 변수 static 함수 내부 프로그램 종료시 정적 영역 함수 내부 0으로 초기화 함수 외부 선언된 모듈 내에서만 사용가능한 전역변수화. 외부 모듈에서 extern 지정자로 참조할 수 없다. 외부 변수extern 모든 블럭 외부 모듈 외부에서 선언된 전역변수를 참조하고자 할 때 extern 지정자를 사용..

C언어 함수 주요예제 2

전달된 수들 중 가장 큰 수를 반환하는 함수. #include int max(int arr[], int n); int main() { const int N = 10; int num_arr[N]; printf("배열에 수를 저장합니다. \n"); for (int i = 0; i < N; i++) { printf("%d번째 수를 입력하세요 : ", i + 1); scanf_s("%d", &num_arr[i]); } printf("입력하신 값중 가장 큰 값은 %d 입니다. ", max(num_arr, N)); } int max(int arr[], int n) { int mx = arr[0]; for (int i = 1; i < n; i++) { if (mx < arr[i]) { mx = arr[i]; } } ..

C언어 실습문제 풀이 CH7 (1,2)

1. 난수 발생함수를 이용하여 만든 주사위 눈을 알아맞히는 게임을 작성하라. #include #include #include int main(void) { srand((unsigned)time(NULL)); int dice_value, dot; int input; int ch; while (1) { dice_value = rand(); printf("\n"); printf("1. 시작 \n"); printf("2. 종료 \n"); scanf_s("%d", &ch); switch (ch) { case 1: printf("\n"); printf("주사위 눈수를 입력해주세요 : "); scanf_s("%d", &dot); do { printf("\n"); printf("주사위 눈 수를 맞춰보세요. 포기하시려면..

C언어 함수 주요예제 1

표준함수 time(), srand(), rand()를 사용하여 난수를 만드는 프로그램. #include #include // time()함수 사용 #include //rand(), srand()함수 사용 int main(void) { //난수 생성기를 초기화한다. //인수로 time(NULL)값을 주면 매 실행마다 다른 난수가 나온다. //srand는 unsigned int형을 인자로 받고, time() 함수는 time_t 값을 리턴하므로 경고를 피하기 위해서 형변환을 해줬다. //안해줘도 잘 작동하지만 사소한 경고가 뜬다. srand((unsigned)time(NULL)); for (int i = 0; i < 5; i++) { printf("난수 발생 결과 %d : %d \n", i + 1, rand(..

반응형