목록All (98)
개인노트
문제 ) 주사위를 두개 던졌을 때 예측 불가능한 결과를 출력하는 프로그램을 작성해보자. 도전 3-4.c #include #include #include int main(void) { int i; srand((int)time(NULL)); for (i = 0; i < 2; i++) {printf("주사위 %d의 결과 : %d\n", i + 1, rand() % ((6 - 1) + 1) + 1); // ((최댓값-최솟값)+1)+최솟값} system("pause");}
rand함수를 이용하여 난수를 출력 하게되면, 그 값은 고정이 되어 난수가 아닌 의사 난수가 된다. 이러한 문제를 해결할 수 있도록 ANSI 표준에 srand라는 함수를 정의해놓았다. srand 함수는 rand 함수와 마찬가지로 stdlib.h를 선언 해주어야 한다. #include "stdlib.h" //srand함수 사용을 위한 선언void srand(unsigned int seed); //인자 값으로 시드를 받는다. #include #include "stdlib.h" int main(void) {int seed, i; printf("시드 값 입력 : ");scanf_s("%d", &seed); srand(seed); for (i = 0; i < 5; i++) {printf("난수 : %d\n", r..
문제 ) 난수(Random Number)를 출력해주는 rand함수를 이용하여 0이상 99이하의 난수를 5개 출력해보자.* rand 함수는 컴파일을 하게되면 난수가 고정 값이기 때문에 의사 난수 (pseudo-random number)라고 한다. 도전 3-3.c #include #include "stdlib.h" int main(void) {printf("0부터 %d까지의 랜덤한 수 출력\n\n", RAND_MAX); // RAND_MAX = rand 함수의 최대 값 int i=0; while (i != 5) {printf("%d\n", (rand()%(99-0)+1)+1); // (원하는 최댓값 + 원하는 최솟값)+최솟값)+최솟값)i++;} getchar();}
문제 ) 숫자 n을 입력 받아서 n x n 크기의 배열을 선언한 후 달팽이 배열로 값을 입력 해보자. 도전 3-2.c #include #include "stdlib.h"#define A 100int main(void) {int arr[A][A], size, n = 1;// 배열선언, 입력받을 배열의 크기, 배열의 요소 값 printf("배열의 크기를 입력하세요 : ");scanf_s("%d", &size); int i, l = size; // i = 배열 값 입력 횟수int x = 0, y = -1; // 배열 위치int turn = 1; // 배열 위치 조정을 위한 수 while (l != 0) {for (i = 0; i < l; i++) {y += turn;arr[x][y] = n..
문제 ) 길이가 4 x 4인 int형 2차원 배열을 밑의 그림에서 첫번째 표와 같이 선언한 후 오른쪽 방향으로 90도씩 회전하는 결과를 출력해보자. (회전을 했을 때 각 첫번째 열을 첫번째 표에서 찾으면 규칙을 알 수 있다.) 도전 3-1.c #include #include "stdlib.h" int main(void) {int arr[4][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10,11,12},{13,14,15,16}};int i, o; // 반복문에서 배열의 크기 for (i = 0; i < 4; i++) { // 0회전for (o = 0; o < 4; o++) {printf("%2d ", arr[i][o]);}printf("\n");} printf("\n ▼ \n\n");..
우리가 자주사용하는 main함수의 매개변수 값은 보통 void로 사용 하였다. 하지만 main함수도 다른 함수들과 같이인자 값을 받을 수 있다. #include #include "stdlib.h" int main(int argc, char * argv[]) {int i = 0;printf("전달된 문자열의 수 : %d \n", argc); for (i = 0; i < argc; i++) {printf("%d번째 문자열 : %s \n", i+1, argv[i]);}return 0;} 위의 소스 코드를 그대로 디버깅하여 exe 파일을 만든 후 cmd창을 열어 해당 위치로 간다. cmd창에서 [파일 이름] 문자열 을 입력해주면 위와 같은 그림이 나온다.
모든 함수는 프로그램 실행 시 메인메모리에 저장이 된다. 배열의 이름이 배열의 시작 주소를 의미하듯 함수의 이름은 함수가 저장된 메모리 공간의 주소값을 나타낸다.이러한 함수의 주소값 저장을 위한 포인터를 함수 포인터 변수라고 한다. 1. 함수 포인터 선언 int function(int a, int b); // function 함수int (*ptr)(int, int) = function; // 함수 포인터 void smiple(int * ptra);void (*ptr)(int *) = simple; 2. 매개변수를 함수 포인터 변수로 선언하여 함수 호출 #include #include "stdlib.h" int WhoisFirst(int age1, int age2, int(*cm)(int n1, int n..
1차원 배열에서 arr[i] = *(arr+1) 라는 문장이 성립하고 2차원 배열도 마찬가지이다. arr[3][4]=5;→ (*(arr+3))[4]=5;→ *(arr[3]+4)=5;→ *(*(arr+3)+4)=5;
1차원 배열을 함수의 인자로 전달하는 방법은 다음과 같았다. int * arr; or int arr[]; 2차원 배열을 함수의 인자로 전달하는 방법은 다음과 같다. int (*arr)[3]; or int arr[][3]; 2차원 배열을 함수의 인자로 전달하기 예제.c#include #include "stdlib.h" void ShowArr2DStyle(int(*arr)[4], int column) {int i, j;for (i = 0; i < column; i++) {for (j = 0; j < 4; j++) {printf("%d", arr[i][j]);}printf("\n");}}int Sum2DArr(int arr[][4], int column) {int i, j, sum = 0;for (i = 0;..
int main(void) {int num1 = 10, num2 = 20, num3 = 30, num4 = 40, num5 = 50;int arr[2][4] = { 1,2,3,4,5 }; int *ptr1[5] = { &num1,&num2,&num3,&num4,&num5 }; // 포인터 배열int (*ptr2)[4] = arr; //배열 포인터 system("pause");} 포인터 배열과 배열 포인터의 차이점을 알고 넘어가자. 포인터 배열은 포인터의 기능인 주소값을 저장하지만 그 대상이 여러개일 때 유용하며, 배열의 형식으로 저장된다. 배열 포인터는 다차원 배열의 포인터이다.