square.c

간단한 규칙을 찾아낼 수 있는 능력이 필요하다.

생각보다 꽤 오래 걸렸다.

등비, 등차 공식을 다시 한번 유도해 보는 연습을 해보자.


------------------------------------------


#include<stdio.h>

#include<stdlib.h>



int main(void)

{

FILE* fp=fopen("input.txt", "rt");

FILE* fo=fopen("output.txt", "wt");

int i,j,k;

int length, num, count, even;

int temp, temp2, temp3;

if(fp==NULL)

{

printf("파일이 없어요\n");

return 1;

}


fscanf(fp, "%d", &length);

fscanf(fp, "%d", &num);


if(length%2 == 0)

even = 1;

else 

even = 0;


if(num ==1)

{

count = 1;

temp = count;

for(j=0;j<length/2;j++)

{

for(i=0;i<temp;i++)

{

fprintf(fo, "%d ", count);

count++;

}

fprintf(fo, "\n");

count+=temp;


temp++;

for(i=0;i<temp;i++)

{

fprintf(fo, "%d ", count);

count--;

}

fprintf(fo, "\n");


temp++;

count+=temp;

}

if(even == 0) // 홀수

{

for(i=0;i<temp;i++)

{

fprintf(fo, "%d ", count);

count++;

}

}

}

else if(num == 2)

{

count = 0;

temp = 1+ (length-1)*2; // 가로로 적을 횟수 정하는 것이요

temp2 = 0; // 1번이 빈칸이고   ++한다..

for(i=0;i<length;i++)

{

for(j=0;j<temp2;j++)

fprintf(fo,"  ");

for(j=0;j< (temp-(temp2*2));j++)

fprintf(fo,"%d ", count);

fprintf(fo,"\n");

temp2++;

count++;

}

}


else if(num == 3)

{


temp = (length/2)+1; //가로 개수

temp2 = length/2; //공백 개수

temp3 = -1;//공백조정하기


for(i=0;i<length;i++)

{

count = 1;

for(j=0;j<temp-temp2;j++)

{

fprintf(fo,"%d ", count);

count++;

}

fprintf(fo,"\n");

if(temp2 == 0)

temp3*=-1;

temp2 += temp3;

}

}


fclose(fp);

return 0;

}


square.c

사각형그리기 1번이랑 똑같구만요

------------

#include<stdio.h>


int main(void)

{

FILE* fp=fopen("input.txt", "rt");

FILE* fo=fopen("output.txt", "wt");

int i,j,k;

int length, num, count, even;

int temp;

if(fp==NULL)

{

printf("파일이 없어요\n");

return 1;

}

count = 1;


fscanf(fp, "%d", &length);

fscanf(fp, "%d", &num);


if(length%2 == 0)

even = 1;

else 

even = 0;


if(num ==1)

{

for(i=0;i<length;i++)

{

for(j=0;j<length;j++)

fprintf(fo, "%d ",count);

fprintf(fo, "\n");

count++;

}

}

else if(num == 2)

{


for(i=0;i<length/2;i++)

{

for(j=0;j<length;j++)

{

fprintf(fo, "%d ",count);

count++;

}

fprintf(fo, "\n");

count--;

for(j=0;j<length;j++)

{

fprintf(fo, "%d ",count);

count--;

}

count++;

fprintf(fo, "\n");

}

if(even == 0)

{

for(j=0;j<length;j++)

{

fprintf(fo, "%d ",count);

count++;

}

}

}

else if(num == 3)

{

for(i=0;i<length;i++)

{

temp = count;

for(j=0;j<length;j++)

{

fprintf(fo, "%d ",temp);

temp+=count;

}

fprintf(fo, "\n");

count++;

}

}


fclose(fp);

return 0;

}


cal.c

파일 입출력이 포인터형식이라는 것을 까먹어 애를 먹었다. 파일의 위치를 기억하고 있는 포인터!!

생각보다 소스가 복잡하네.?!?!

----------------------------------

#include<stdio.h>

int main(void)

{

int i, j, count, even=0;

int height, wide, repeat;

FILE* fp=fopen("input.txt", "rt");

FILE* fo=fopen("output.txt", "wt");


if(fp == NULL)

{

printf(" 파일이 없습니다");

return 1;

}

fscanf(fp, "%d %d", &height, &wide);


if( height%2 == 0)

even = 1;

count =1;

repeat = height/2;


for(i=0; i<repeat; i++)

{

for(j=0;j<wide; j++)

{

fprintf(fo, "%d",count);

if(j == wide-1)

fprintf(fo, "\n");

else

fprintf(fo, " ");

count++;

}


count += wide-1;


for(j=0;j<wide; j++)

{

fprintf(fo, "%d",count);

if(j == wide-1)

fprintf(fo, "\n");

else

fprintf(fo, " ");

count--;

}


count += wide+1;

}

if(even == 0)//홀수이면

{

for(j=0;j<wide; j++)

{

fprintf(fo, "%d",count);

if(j == wide-1)

fprintf(fo, "\n");

else

fprintf(fo, " ");

count++;

}

}


fclose(fp);


return 0;

}




C언어의 메모리 공간은 크게 스택, 힙 그리고 데이터 영역으로 나뉜다.

[아마 JAVA의 메모리 공간 구성도 비슷하다 (메시힙)]


-데이터 영역

전역 변수, static 변수가 할당되는 영역이다. 프로그램의 시작과 동시에 할당되고 프로그램이 종료되어야만 소멸된다.

-스택 영역

지역 변수, 매개 변수가 저장되는 영역이다.

-힙 영역

프로그래머가 관리하는 메모리 영역이다.  

 

Q) 배열은 왜 상수로 선언해야 할까??

.

.

.

.

.

.

.

.

.

.

.

.

A) 스택과 데이터 영역에 할당될 메모리의 크기는 컴파일시 결정되기로 정해 놓았어요

 

1.포인터와 배열의 관계

포인터는 주소를 저장한다.

포인터는 변수이다.

배열의 이름은 주소를 저장한다.

배열의 이름은 상수이다. 바꿀 수 없다.

배열의 이름은 포인터라는 중요한 결론! arr[i] = * ( arr + i );

2.문자열 표현 방식의 이해

char str1[5] = "abcd" ;    //변수로 표현

char *str2 = "ABCD";       //상수로 표현   - 이 경우 수정할 수 없다.

 

 

 

 

 

 

 

+ Recent posts