☆ 배열과 난수를 사용한 예제

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main()
{
int rnd,su,cnt;
char ans;

srand((unsigned)time(NULL));
while(1)
{
cnt=0;
rnd=rand()%100+1; // 1~100 사이에서 난수 발생
while(1)
{
cnt++;
printf("%d회 : ",cnt);
scanf("%d",&su);

if(su>rnd)
printf("\t%d보다 작습니다\n",su);
else if(su<rnd)
printf("\t%d보다 큽니다\n",su);
else
{
printf("\t맞았습니다. 정답은 %d입니다\n",rnd);
printf("계속하시겠습니까? (Y/N):");
fflush(stdin); //바로 입력되어버리지 않게끔 키보드 버퍼의 엔터 입력을 무시
ans=getchar();
if(ans=='y' || ans=='Y')
break;
else
return;
}
if(cnt==10)
{
printf("\t횟수 초과! 맞추지 못했습니다\n");
printf("계속하시겠습니까? (Y/N):");
fflush(stdin);
ans=getchar();
if(ans=='y' || ans=='Y')
break;
else
return;
}
}
}
}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main()
{
int money;
int lotto[6];
srand((unsigned)time(NULL));
printf("로또를 구입할 금액을 입력하세요 : ");
scanf("%d",&money);
for(int n=0;n<money/1000;n++) // 로또는 1회에 천원이므로 1000으로 나누어 몇 회를 뽑을 것인지 계산한다.
{
printf(" %2d 회 : ",n+1);

//로또 1~45 숫자 구하기
for(int i=0;i<6;i++)
{
lotto[i]=rand()%45+1;
//중복체크
for(int j=0;j<i;j++)
{
if(lotto[i]==lotto[j])
{
i--;
break;
}
}
}

//셀렉션 소트로 정렬
int temp=0;
for(i=0;i<5;i++)
{
for(int j=i+1;j<6;j++)
{
if(lotto[i]>lotto[j])
{
temp=lotto[i];
lotto[i]=lotto[j];
lotto[j]=temp;
}

}
}

//출력
for(int a=0;a<6;a++)
{
printf("%4d",lotto[a]);
}
printf("\n");
}
}

☆ 전역변수와 지역변수
#include <stdio.h>

void write()
{
int a=10;
static int b=10;
printf("auto a=%d,static b=%d\n",a,b);
a+=2;
b+=2;
}

void main()
{
for(int i=0;i<5;i++)
write();
}

  - a는 write() 함수 내에서만 사용되는 지역변수이므로 함수 종료시에 함께 소멸된다. 함수 내에 2씩 누적시키는 처리가 있지만 매번 소멸되어 버리기 때문에 값이 누적되지 않는다.
  - b는 프로그램 시작시에 생성되어 프로그램 종료시에 소멸되는 전역변수이다. 따라서 값이 계속 누적된다.

☆ 포인터와 콜바이 어드레스
#include <stdio.h>

void set(int a)
{
printf("set a의 주소 : %d\n",&a);
printf("함수 a의 값 : %d\n",a);
a=20;
}

// call by address의 예

void set2(int *bp)
{
printf("set2 bp의 주소 : %d\n",&bp);
printf("set2에서 *bp의 값 : %d\n",*bp);
*bp=40;
}

void main()
{
int a=10;
printf("main a의 주소 : %d\n",&a);
set(a);
printf("a=%d\n",a);
puts("======================================");
int b=20;
printf("main b의 주소 : %d\n",&b);
set2(&b);
printf("b=%d\n",b);
printf("main에서 b:%d\n",b);
}

#include <stdio.h>

void getsum(int a,int b,int c,int *s) // ※1
{
*s=a+b+c;
}

void main()
{
int sum,kor,eng,mat;  // ※2
kor=25;
eng=100;
mat=70;
getsum(kor,eng,mat,&sum);
printf("세 과목의 합 : %d\n",sum);
}

  - ※1 부분은 함수의 파라미터이므로 ※2 부분의 변수 선언과는 다르다. 변수 선언은 한번에 모두 자료형을 선언할 수 있지만 함수 선언에서는 일일이 자료형을 붙여 줘야 한다.

+ Recent posts