C언어 로또번호 생성하기 (당첨확률높이기)

_C언어 로또번호 생성하기 핵심요소조건문, 반복문, 함수, 배열, 포인터, 구조체 사용정렬, 짝수&홀수 판별라이브러리 함수 이번 포스팅에서 로또 번호를 출력을 해보려 합니다.일반적인 1~45 사이의 숫자 6개를 랜덤하게 뽑아내는 것이 아니라 조건을 넣어 출력을 해봅시다.해당 조건을 넣음으로써 다양하게 프로그래밍을 연습 할 수 있습니다.(극악의 번호들이 나올 경우를 줄여 당첨 확률을 높일 수 있습니다.) 조건1) 원하는 만큼 출력 할 수 있어야 한다.조건2) 같은 줄에 중복된 숫자가 없어야 한다.조건3) 같은 줄에 숫자가 모두 홀수가 아니어야 한다.조건4) 같은 줄에 숫자가 모두 짝수가 아니어야 한다.조건5) "1-2-3-4-5-6" 과 같은 수열이 아니어야 한다. - 헤더 파일, 함수를 우선 선언 하여 ..

C언어 문자열을 정수와 실수로 변환하자

프로그래밍을 하다보면 입력받은 문자열로 표현된 숫자의 값을 해당 정수나 실수의 데이터로 변환해야하는 경우가 생긴다. 설명할 세가지 함수들은 헤더파일 에 선언된 함수이며, 이 함수들은 문자열"123"을 정수 123으로 또는 문자열 "12.34"를 실수 12.34로 바꿀때 쓰인다. int atoi(문자열 또는 변수); - 문자열의 내용을 int형으로 변환long atol(문자열 또는 변수); - 문자열의 내용을 long형으로 변환double atof(문자열 또는 변수); - 문자열의 내용을 double형으로 변환 아래의 코드를 작성하여 테스트 하여보자. #include#include#pragma warning(disable:4996) // scanf 보안 경고 제거용 int main(void) {char s..

c언어 배열의 숫자를 반대로 출력하기 (비트연산자 이용)

배열에 저장된 값을 반대로 바꾸어 출력하기단순히 출력을 반대로하는것이 아니라 값을 바꾸어 출력을 하여 보자. #include void print_reverse(int *pa, int n);int main(void){int a[] = { 10, 20, 30, 40, 50 };printf("변경전 %d %d %d %d %d\n\n", a[0], a[1], a[2], a[3], a[4]);print_reverse(a, 5);return 0;}void print_reverse(int *pa, int n){for (int i = 0; i < n / 2; i++) {n--; // 배열의 길이[0~4] n을 5로 받음pa[i] = pa[i] ^ pa[n];pa[n] = pa[i] ^ pa[n];pa[i] = pa[i..

c언어 rand 함수 이용하여 가장 많이 생성된수 찾기

rand 함수 이용하여 0~9까지의 수들을 100번 입력받아 그 중에 가장 많이 생성된 수 찾기 > rand 함수는 라이브러리 함수로 임의의 숫자를 생성 하는 역할을 한다. #include#include #include #define SIZE 10int main(void){int num[SIZE] = { 0 };int x = 0, y, t;srand((unsigned)time(NULL)); //rand의 seed값 설정// 현재 시간에 대한 정보를 담은 time.h 헤더파일을 이용하여 매시간마다 다른값을 받도록 하엿음.for (y = 0; y < 100; y++) {num[rand() % SIZE]++; // 난수를 발생시켜 해당 배열에 카운트 함}for (t = 0; tnum[x]) { // 순차적 크..

c언어 2의n승의 결과 출력하기

2의n승의 결과 출력하기 사용자로부터 2의 몇승 까지의 값을 구할지 입력 받는다. #include#pragma warning(disable:4996)int result(int n, int num); //함수의 원형 선언 int main(void){int n;int num = 2; //2의 n승의 값을 저장할 변수printf("2의 몇승을 구할까요? ");scanf("%d", &n);if (n == 0) //0이 입력 된다면 결과가 1이기에 1을 출력한다.printf("2의 %d승은 1입니다.\n", n);else //0이 아닐경우에만 실행 된다.printf("2의 %d승은 %d입니다.\n", n, result(n, num)); //함수호출return 0;}int result(int n, int num) ..

c언어 재귀함수를 이용하여 유클리드호제법으로 두수의 최대공약수 구하기

유클리드 호제 법이란.(위키백과의 말을 가지고왔다.) 유클리드 호제법(- 互除法, Euclidean algorithm)은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘을 나타낸다. 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다. 재귀함수란? #include#pragma warning(disable:4996)..

c언어 사용자가 원하는 단부터 원하는 단까지 구구단 출력하기

사용자가 원하는 단부터 원하는 단까지 구구단 출력하기 #include#pragma warning(disable:4996) void result(int n1, int n2); int main(void){int num1, num2;printf("몇단부터 출력? ");scanf("%d", &num1);printf("몇단까지 출력? ");scanf("%d", &num2);if (num1 > num2) // num1이 num2보다 크다면 값을 바꾸어 작은 단부터 출력한다result(num2, num1);elseresult(num1, num2);return 0;}void result(int n1, int n2){int n;while (n1

c언어 재귀함수(순환함수) 이용하여 입력받은 숫자 차례로 출력하기

재귀함수란 자신의 함수 내에서 자기자신을 재 호출을 하는 것입니다.함수가 완전히 종료 되지 않았지만 함수호출이 가능 하다.하지만 다들 이해하기 힘들것이라 생각한다. 아래 그림을 보자.그림 처럼 함수를 재호출하게 되면 원본 함수에 대해 복사를 하여 새로운 해당이름의 함수가 생성 된다고 생각하면 될것 같다. #include#pragma warning(disable:4996)int again(int num); //함수원형의 선언int main(void){int num;//입력받을 변수printf("정수를 입력하세요.\n");scanf_s("%d", &num); // 변수값 입력again(num); // 함수호출return 0;}int again(int num)// 함수정의{if (num

c언어 static 변수

static 변수는 지역변수와 전역변수 둘의 성질을 같이 가지고 있다고 보면 된다. static 변수는 지역변수처럼 선언된 함수내에서만 사용이 가능하며,단 한번만 초기화를 할뿐 전역 변수처럼 프로그램이 종료될때까지 메모리공간에 존재하게된다. 다른점은 지역변수와는 달리 해당 함수가 반환을 하더라도 소멸되지 않는다. 이처럼 다른 함수에서는 쓸수없지만 해당함수 내에서는 static 변수는 프로그램이 종료를 하기전까진 소멸되지 않는다. 아래와 같은 예제를 살펴보자결과를 보면알겠지만 num1은 static이라 한번 초기화될 뿐 값이 사라지지 않고 계속 유지 되지만.num2는 simpleFunc 함수를 실행 할때마다 초기화되어 값이 그대로이다.#includevoid simpleFunc(void); int main(..

c언어 함수와 전역변수를 사용하여 저축, 인출 하기

전역변수는 모든 곳에서 쓰일수있는 변수를 말한다.어떻게 보면 좋을수도 있지만 과도하게 전역변수를 사용하면 코드가 꼬여 버릴수가있다.우리는 이를 마치 스파게티 처럼 코드가 꼬여있다고 하여 스파케티 코드라 한다 저축, 인출 프로그램을 만들어보자.현재잔액을 전액변수로 사용하여 프로그램을 짜보도록 하자. #include #pragma warning(disable:4996) void draw(int amount); //인출 함수원형 정의void save(int amount); //저축 함수원형 정의int money = 5000; // 현재 잔액-전역변수 int main(void){int amount; //입력받을 돈 변수int n = 1; //반복제어 변수 while (n != 0) {//n의 값이 0과 같지않으..