검색결과 리스트
☆C언어에 해당되는 글 38건
- 2017.06.14 달력 문제
- 2014.10.14 c언어 꿀팁
- 2013.10.09 조건부 컴파일 #if #elif #else #endif
- 2013.06.27 3n+1
- 2013.06.27 3n+1 재귀함수
- 2013.06.23 최소의 동전수 (재귀)
- 2012.10.10 c언어 숫자 변수에 문자입력시 출력
- 2012.09.18 2차원 배열 포인터
- 2012.09.12 사다리
- 2012.09.12 이차원배열 동적할당
글
달력 문제
#include<stdio.h>
int month[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};
int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *weekname[7]={"일","월","화","수","목","금","토"};
int main(void)
{
int y=0,m=0;//년월일
int L_y=0;//작년
int total_day;//일수계산
int week=0;//요일
FILE *out; //출력파일
out=fopen("out.txt","w");
//입력
printf("Input Year : ");
scanf("%d",&y);
printf("Input month : ");
scanf("%d",&m);
//윤년계산
if((y%4==0)&& ((y%100!=0)||(y%400)))
day[2]=29;
else
day[2]=28;
//요일 계산
L_y=y-1;
total_day=(L_y+(L_y/4)-(L_y/100)+(L_y/400)+1);
for(int i=1;i<m;i++)
total_day+=day[i];
week=total_day%7;
/////////출력///////////
//년,월 출력
printf("<%d_%02d>\n",y,m);
//요일 출력
for(int i=0;i<7;i++)
printf("%7s", weekname[i]);
printf("\n");
//공백 출력
for(int i=0;i<week;i++)
{
printf("%7c"," ");
}
for(int i=1;i<=day[m];++i)
{
if(week%7==0)
printf("\n");
printf("%7d",i);
week++;
}
fclose(out);
}
'☆C언어 > 소스' 카테고리의 다른 글
괄호 검사 (0) | 2017.06.17 |
---|---|
바이너리 파일 핸들링 (0) | 2017.06.15 |
3n+1 (0) | 2013.06.27 |
3n+1 재귀함수 (0) | 2013.06.27 |
최소의 동전수 (재귀) (0) | 2013.06.23 |
설정
트랙백
댓글
글
c언어 꿀팁
동적할당 디버깅할때 저렇게하면 쉽게 볼 수 있음
'☆C언어' 카테고리의 다른 글
fflush 함수 (0) | 2017.06.19 |
---|---|
달력 1~12월 다 찍어내기 (0) | 2017.06.17 |
조건부 컴파일 #if #elif #else #endif (0) | 2013.10.09 |
2차원 배열 포인터 (0) | 2012.09.18 |
이차원배열 동적할당 (0) | 2012.09.12 |
설정
트랙백
댓글
글
조건부 컴파일 #if #elif #else #endif
출처 : http://tmdgus.tistory.com/34
전처리 지시사 #if #elif #else #endif 는 컴파일러 (정확히 이야기하면 전처리기)에게 조건을 제시하는 경우에 사용된다.
사용되는 형식
--------------------------
#if CONDITION1
---------------------------
위 형식은 다음과 같은 내용을 컴파일러에게 요구하는 것이다.
"CONDIONT1이 만족되면 expression1을 , CONDITION2가 만족되면 expression2를 이도 저도 아니면 expression3를
컴파일해라"
if ~ else if 문장과 상당히 유사한 형태를 지니고 있음을 알 수 있다.
다만 위의 문장은 전처리기에 의해 처리되기 때문에 컴파일 해야 할 대상을 지정할 때 사용하게 된다.
* 흔히 저지르는 실수 중 하나가 #endif 문장을 빼먹는 것이다. if ~ else if 문장과 달리 "여기까지입니다." 라고 정의를 해줘야
* 한다. 따라서 반드시 #endif가 포함되어야 한다.
참고* 일반적으로 함수의 정의를 헤더 파일에 포함시키지는 않는다 (선언만 헤더 파일에 포함한다.)!
0o 헤더 파일의 포함 관계에서 발생하는 문제 때문에 조건부 컴파일로 문제를 해결..한다.o0
-하나의 헤더 파일을 두 번 이상 포함
-이는 중보갷서 함수가 정의되거나, 변수가 선언되는 문제점
-조건부 컴파일로 문제 해결
#ifdef, #endif
if not define
ex)
#ifdef _COUNT_H_ ->> _COUNT_H 가 를 정의하지 않았다면
int count=0 ->>> _COUNT_H를 정의하고 int 형 변수 count도 선언하고
_COUNT_H_ 는 헤더 파일 이름을 이용하여 만든것이다 조건부 컴파일을 위한 매크로를 정의하는 경우 어떠한 이름을 주건 상관없지만 이름이 중복되어서는 안될것이다. 파일의 이름은 중복될일이 없으므로 이를 이용하는것은 좋은 방법이고 또 가장 보편화되어 있다.
'☆C언어' 카테고리의 다른 글
달력 1~12월 다 찍어내기 (0) | 2017.06.17 |
---|---|
c언어 꿀팁 (0) | 2014.10.14 |
2차원 배열 포인터 (0) | 2012.09.18 |
이차원배열 동적할당 (0) | 2012.09.12 |
exe의 작동이 중지되었습니다. (0) | 2012.05.12 |
설정
트랙백
댓글
글
3n+1
//어떤 정수 n에서 시작해, n이 짝수면 2로 나누고, 홀수면 3을 곱한 다음 1을 더한다.
//이렇게 해서 새로 만들어진 숫자를 n으로 놓고, n=1 이 될때까지 같은 작업을 계속 반복한다.
//예를 들어, n=22이면 다음과 같은 수열이 만들어진다.
//
//22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
//
//n이라는 값이 입력되었을때 1이 나올때까지 만들어진 수의 개수(1을 포함)를 n의 사이클 길이라고 한다.
//위에 있는 수열을 예로 들면 22의 사이클 길이는 16이다. i와 j라는 두개의 수가 주어졌을때,
//i와 j사이의 모든 수(i, j포함)에 대해 최대 사이클 길이를 구하라.
#include<stdio.h>
int main()
{
// FILE *in=fopen("input.txt","r");
// FILE *out=fopen("output.txt","w");
int i=0,j=0,
su1=0,su2=0; //숫자 범위
int count=0; //숫자 개수 함수 호출수
int arr[1000][2]={0,}; //배열
int min=0,max=0; //계산한 사이클, 최대 사이클
int cc=0; //숫자범위가 앞에가 클때 ex)100 1
// while(EOF!=fscanf(in,"%d %d",&su1,&su2))
while(EOF!=scanf("%d%d",&su1,&su2))
{
// printf("%d %d " ,su1,su2);
// arr[count][0]=su1;
// arr[count++][1]=su2;
// }
// printf("\n카운트 : %d\n ",count);
// for(i=0;i<count;++i)
// {
// func(arr[i][0],arr[i][1]);
cc=0;
if(su1>su2)
{
int temp=su2;
su2=su1;
su1=temp;
cc=1;
}
max=0; //초기화
for(j=su1;j<=su2;++j)
{
int num=j;
int cycle=1;
while(num!=1)
{
if(num%2)
{
//홀수
num=num*3+1;
}
else
{
//짝수
num=num/2;
}
++cycle;
}
if(max<cycle)
max=cycle;
}
//출력
if(cc==1)
printf("%d %d %d\n",su2,su1,max);
else
printf("%d %d %d\n",su1,su2,max);
}
// fclose(in);
// fclose(out);
return 0;
}
'☆C언어 > 소스' 카테고리의 다른 글
바이너리 파일 핸들링 (0) | 2017.06.15 |
---|---|
달력 문제 (0) | 2017.06.14 |
3n+1 재귀함수 (0) | 2013.06.27 |
최소의 동전수 (재귀) (0) | 2013.06.23 |
c언어 숫자 변수에 문자입력시 출력 (0) | 2012.10.10 |
설정
트랙백
댓글
글
3n+1 재귀함수
//어떤 정수 n에서 시작해, n이 짝수면 2로 나누고, 홀수면 3을 곱한 다음 1을 더한다.
//이렇게 해서 새로 만들어진 숫자를 n으로 놓고, n=1 이 될때까지 같은 작업을 계속 반복한다.
//예를 들어, n=22이면 다음과 같은 수열이 만들어진다.
//
//22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
//
//n이라는 값이 입력되었을때 1이 나올때까지 만들어진 수의 개수(1을 포함)를 n의 사이클 길이라고 한다.
//위에 있는 수열을 예로 들면 22의 사이클 길이는 16이다. i와 j라는 두개의 수가 주어졌을때,
//i와 j사이의 모든 수(i, j포함)에 대해 최대 사이클 길이를 구하라.
#include<stdio.h>
int func(int num,int cycle)
{
// printf("함수 ( %d ) ", num);
if(num==1)
return cycle;
if(num%2)
{
//홀수
return func(num*3+1,++cycle);
}
else
{
//짝수
return func(num/2,++cycle);
}
return 0;
}
int main()
{
// FILE *in=fopen("input.txt","r");
// FILE *out=fopen("output.txt","w");
int i=0,j=0,
su1=0,su2=0; //숫자 범위
int count=0; //숫자 개수 함수 호출수
int arr[1000][2]={0,}; //배열
int min=0,max=0; //계산한 사이클, 최대 사이클
// while(EOF!=fscanf(in,"%d %d",&su1,&su2))
while(EOF!=scanf("%d%d",&su1,&su2))
{
// printf("%d %d " ,su1,su2);
arr[count][0]=su1;
arr[count++][1]=su2;
// printf("\n카운트 : %d\n ",count);
for(i=0;i<count;++i)
{
// func(arr[i][0],arr[i][1]);
max=0; //초기화
if(arr[i][0]>arr[i][1])
{
su1=arr[i][1];
su2=arr[i][0];
}
else
{
su1=arr[i][0];
su2=arr[i][1];
}
for(j=su1;j<=su2;++j)
{
min=func(j,1);
if(max<min)
max=min;
}
//출력
printf("%d %d %d \n",arr[i][0],arr[i][1],max);
}
}
// fclose(in);
// fclose(out);
return 0;
}
'☆C언어 > 소스' 카테고리의 다른 글
달력 문제 (0) | 2017.06.14 |
---|---|
3n+1 (0) | 2013.06.27 |
최소의 동전수 (재귀) (0) | 2013.06.23 |
c언어 숫자 변수에 문자입력시 출력 (0) | 2012.10.10 |
사다리 (0) | 2012.09.12 |
설정
트랙백
댓글
글
최소의 동전수 (재귀)
일단 완벽하지 않지만 답은 빠르게 찾게 만들었는데 더이상 소스 줄이는 방법은 모르겟다 +_+...
#include<stdio.h>
int func(int coin[][4],int money,int num)
{
if(money==0)
{
printf("100원 : %d개\n 50원 : %d개\n 25원 : %d개\n 1원 : %d개\n",coin[1][0],coin[1][1],coin[1][2],coin[1][3]);
return 0;
}
if(money>=coin[0][num])
{
coin[1][num]++;
func(coin,money-coin[0][num],num);
}
else
{
func(coin,money,++num);
}
}
int main()
{
int coin[2][4]={{100,50,25,1},{0,0,0,0}}; //코인 종류 , 사용 코인 갯수
int num=0;
int money;
scanf("%d",&money);
func(coin,money,num);
return 0;
}
'☆C언어 > 소스' 카테고리의 다른 글
3n+1 (0) | 2013.06.27 |
---|---|
3n+1 재귀함수 (0) | 2013.06.27 |
c언어 숫자 변수에 문자입력시 출력 (0) | 2012.10.10 |
사다리 (0) | 2012.09.12 |
달력 프로그램 설명 (0) | 2011.10.14 |
설정
트랙백
댓글
글
c언어 숫자 변수에 문자입력시 출력
double a;
int count;
count = scanf("%lf",&a); //scanf가 재대로 입력 받으면 1을 리턴해준다.
if( count == 1) //1 대신 true 가능
숫자입니다 출력
else
문자입니다 출력
'☆C언어 > 소스' 카테고리의 다른 글
3n+1 (0) | 2013.06.27 |
---|---|
3n+1 재귀함수 (0) | 2013.06.27 |
최소의 동전수 (재귀) (0) | 2013.06.23 |
사다리 (0) | 2012.09.12 |
달력 프로그램 설명 (0) | 2011.10.14 |
설정
트랙백
댓글
글
2차원 배열 포인터
#include<stdio.h>
#include<stdlib.h>
int ba(char (*in)[101]){
in[3][3]='A';
// printf("%c",in[1][1]);
return 0;
}
int main(){
FILE *in=fopen("go.inp","r");
FILE *out=fopen("go.out","w");
int j=0,i=0;
int n=0;
int num=0;
char input[101][101]; //케릭터값
char e;//엔터값
fscanf(in,"%d",&n); //줄 수 스켄
num=n;;
n=n+2;
//테두리 벽 크기 잡기
for(i=0;i<n;++i){
//arr[i][j]=7;
for(j=0;j<n-1;++j){
if(j==0||i==0 || i==n-1)
input[i][j]='a';
}
input[i][j]='a';
}
//입력
for(i=0;i<num;++i){
fscanf(in,"%c",&e); //엔터처리
for(j=0;j<num;++j){
fscanf(in,"%c",&input[i+1][j+1]);
}
}
//char배열 출력확인
for(i=0;i<10;++i){
for(j=0;j<10;++j){
printf("%c ",input[i][j]);
}
printf("\n");
}
ba(input);
//char배열 출력확인
for(i=0;i<10;++i){
for(j=0;j<10;++j){
printf("%c ",input[i][j]);
}
printf("\n");
}
fclose(in);
fclose(out);
}
'☆C언어' 카테고리의 다른 글
c언어 꿀팁 (0) | 2014.10.14 |
---|---|
조건부 컴파일 #if #elif #else #endif (0) | 2013.10.09 |
이차원배열 동적할당 (0) | 2012.09.12 |
exe의 작동이 중지되었습니다. (0) | 2012.05.12 |
Visual Studio 디버깅 단축키들 (2) | 2012.03.25 |
설정
트랙백
댓글
글
사다리
#include<stdio.h>
#include<stdlib.h>
struct line{
int jull;
int kan;
};
int main(){
//막대기 50
//칸 10,000
short int af[50][10000]; //이 말도 안되는게 됨 -ㅅ-;;
FILE *in=fopen("ladder.inp","r");
FILE *out=fopen("ladder.out","w");
int i=0;
int height=10000,width=50;
int **a;
//////////////////
line *b;
////////////////////////
int x1=0,y1=0,x2=0,y2=0;
fscanf(in,"%d",&width); //줄 수 스켄
////////////////////////////////////////
b = (line **) malloc ( sizeof(int *) * height);
b[0]=(line *)malloc ( sizeof (line)*width*height );
//////////////////////////////////////////
a = (int **) malloc ( sizeof(int *) * height);
a[0] = (int *) malloc ( sizeof(int) * width*height );
for( i=1; i<height; i++)
{
a[i] = a[ i-1 ] + width;
}
for(i=0;i<500000;++i){
fscanf(in,"%d %d %d %d",&x1,&y1,&x2,&y2);
if(x1==0 && y1==0 && x2==0 && y2);
// a[x1]
}
printf("%d %d %d \n",a[0][0],a[0][1],a[49][9999]);
free(a[0]);
free(a);
///
free(b[0]);
free(b);
///
fclose(in);
fclose(out);
}
'☆C언어 > 소스' 카테고리의 다른 글
3n+1 (0) | 2013.06.27 |
---|---|
3n+1 재귀함수 (0) | 2013.06.27 |
최소의 동전수 (재귀) (0) | 2013.06.23 |
c언어 숫자 변수에 문자입력시 출력 (0) | 2012.10.10 |
달력 프로그램 설명 (0) | 2011.10.14 |
설정
트랙백
댓글
글
이차원배열 동적할당
int arr[ height ][ width ]; // 이런식으로 배열을 만들수 없다.
1차원 배열을 동적으로 할당 받는 방법은 다음과 같다.
int *arr;
arr = (int *) malloc ( sizeof(int) * width );
arr[0], arr[1], ... arr[7]
2차원 배열을 할당받는 방법은, malloc()를 여러번 호출하는 것이다.
int **arr;
arr = (int**) malloc ( sizeof(int*) * height );
for(int i=0; i<height; i++){
arr[i] = (int*) malloc ( sizeof(int) * width );
}
할당받은 2차원배열을 다 사용하고 나서, 해제해줘야 한다.
for문을 이용해서 여러번 malloc()로 메모리 공간을 할당 받았기 때문에, 해제할때도, for을 이용해서 여러번 해제해야 한다.
위 그림에서 세로의 크기만큼 malloc()를 호출하고, 또 그전에 한번 malloc()를 호출했다. 따라서, (height + 1)번 해제해야 한다.
free(arr[i]);
}
free(arr);
2차원 배열 할당과 해제가 번거롭다. 조금 방법을 달리 하면, 한번에 해제할 수 있는 구조로 2차원 배열을 만들 수 있다.
int **arr;
arr = (int **) malloc ( sizeof(int *) * height);
arr[0] = (int *) malloc ( sizeof(int) * width*height );
for( int i=1; i<height; i++){
arr[i] = arr[ i-1 ] + width;
}
그리고 이후에 for문을 통해 연결만 해주었다.
해제하는 방법도 간단하다.
free(arr);
'☆C언어' 카테고리의 다른 글
c언어 꿀팁 (0) | 2014.10.14 |
---|---|
조건부 컴파일 #if #elif #else #endif (0) | 2013.10.09 |
2차원 배열 포인터 (0) | 2012.09.18 |
exe의 작동이 중지되었습니다. (0) | 2012.05.12 |
Visual Studio 디버깅 단축키들 (2) | 2012.03.25 |