CMD명령어로 실행 결과를 메모장에서 확인하기

c언어 코딩 -> Dev C++ 이용해서 실행파일(exe) 생성 -> 입력용 txt파일, 출력용 txt파일 지정 ->
실행파일<입력용 txt파일>출력용 txt파일 명령어 실행!
파일 비교 명령어: fc 비교할 파일1 비교할 파일2
C++ 입/출력 최적화
int main(void)
{
// 입/출력 최적화
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// <코드 시작>
}
시간복잡도에 문제가 없는데 Time Out이 발생하는 경우, 입/출력 최적화 코드를 사용하면 됨
C4996 오류 무시
#pragma warning(disable:4996) #define _CRT_SECURE_NO_WARNINGS
scanf, fopen 함수 등 권장하지 않는 함수를 사용할 때 필요함
자료형과 형식지정자
long형은 32비트 운영체제에서 4바이트, 64비트 운영체제에서 8바이트
단, 윈도우 64비트에서는 4바이트
%d int %u unsigned int %ld long int %lu unsigned long int %lld long long int %llu unsigned long long int
프로그램 소요 시간 측정
#include<time.h>
double start, finish,duration;
start = clock();
// <실행 시간 측정할 소스>
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC; // 1클락 = 0.001초
printf("%.3lf초입니다.\n\n", duration);
* 1초가 걸리는 입력의 크기
– O(logN)- O(N) : 1억
– O(nlogn): 5백만
– O(n^2) : 1만
– O(n^3) : 500
– O(2^n) : 20
– O(n!): 10
RAND_MAX 이상의 랜덤 수 여러 개 출력
#include <stdio.h>
#define RAND_MAX 0x7fff
int main(void) {
for (int i = 0; i < 100; i++) {
// 10만 이하의 랜덤 수 출력
int r=(int)(((double)((rand() << 15) | rand())) / (((RAND_MAX << 15) | RAND_MAX) + 1) * (100000));
printf("%d\n", r);
}
}
중복없는 랜덤 수 여러 개 출력
#include <stdio.h>
#define True 1
#define size 100 // 100개 출력
#define max_num 1000 // 최대 랜덤 값
int main(void) {
int rc[max_num] = { 0 }; // check list
int r[size] = { 0 }; // list for printing
for (int i = 0; i < size; i++) {
// 1~1000 랜덤 수를 중복없이 출력
int ri = rand() % max_num + 1;
while (rc[ri]) { // check리스트를 이용해서 중복 확인
ri = rand() % max_num + 1;
}
rc[ri] = True;
r[i] = ri; // 저장
}
for (int i = 0; i < size; i++) {
printf("%d ", r[i]);
}
}
fprintf 이용해서 txt파일로 출력하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
FILE *file;
file = fopen("e:/helloworld.txt", "w");
fprintf(file,"hello %d",123);
}
동적 배열 세트
#include <stdio.h>
#include <stdlib.h>
int main() {
// 쓰레기값이 채워진 동적 배열
int* array1 = (int*)malloc(sizeof(int) * 10);
for (int i = 0; i < 10; i++)
printf("%d ", array1[i]);
printf("\n");
// 0이 채워진 동적 배열
int* array2 = (int*)calloc(10, sizeof(int));
for (int i = 0; i < 10; i++)
printf("%d ", array2[i]);
printf("\n");
// 동적 배열 확장 (확장된 요소는 쓰레기값 들어감)
// size: 10 -> 11
array2 = (int*)realloc(array2, sizeof(int) * 11);
for (int i = 0; i < 11; i++)
printf("%d ", array2[i]);
printf("\n");
// 동적 메모리 해제
free(array1);
free(array2);
return 0;
}
C style
#include <iostream>
using namespace std;
int main() {
// 크기가 size인 동적 배열 생성 (초기화:0)
int size = 100;
int* memory = new int[size]{};
// 출력 (동적 배열은 범위 기반 for문이 불가)
for (int i = 0; i < size; i++)
cout << memory[i] << " ";
cout << endl;
// 동적 메모리 해제
delete[] memory;
return 0;
}
C++ style
퀵 정렬
#include <stdio.h>
#include <stdlib.h>
//오름차순 비교 함수
int compare(int* first, int* second) {
if (*first > *second) return 1;
else if (*first < *second) return -1;
else return 0;
}
int size=100;
int* array = (int*)malloc(sizeof(int)*size);
qsort(array, size, sizeof(int), compare);
직접 구현한 퀵 정렬 소스보다 최적화 되어 있음, c++은 ‘algorithm’ 헤더 파일의 sort함수 사용을 권장!!
최적화 되지 않은 퀵 정렬 소스는 아래 예제를 1초 안에 해결하기 힘듦
#include <stdio.h>
#include <stdlib.h>
//오름차순 비교 함수
int compare1(int* first, int* second) {
if (*first > *second) return 1;
else if (*first < *second) return -1;
else return 0;
}
// 내림차순 비교 함수
int compare2(int* first, int* second) {
if (*first > *second) return -1;
else if (*first < *second) return 1;
else return 0;
}
int main() {
// 동적 배열 생성 및 랜덤 값 저장
int size = 100;
int* array = (int*)malloc(sizeof(int)*size);
for (int i = 0; i < size; i++)
array[i] = rand() % 100;
// 오름차순 정렬
qsort(array, size, sizeof(int), compare1);
for (int i = 0; i < size; i++)
printf("%d ", array[i]);
printf("\n");
// 내림차순 정렬
qsort(array, size, sizeof(int), compare2);
for (int i = 0; i < size; i++)
printf("%d ", array[i]);
return 0;
}
< 이용 예시 >
ASCII Table

컴파일 에러 주의
main함수의 반환형을 void로 작성하면 컴파일 에러가 발생할 수 있다.
반드시 int로 작성하고 ‘return 0;’으로 마무리하는 것을 권장한다.
벡터 사용 주의
벡터를 인자로 넘겨줄 때 call by reference를 사용해야 효율적인 프로그램이 된다.
벡터는 배열과 달리 값을 복사해서 넘겨주므로(call by value) 시간 소요가 엄청나다.
즉 & 연산자를 반드시 기억하자!