[대체] 4. 난수

2011. 2. 16. 01:07 from PROGRAMMING/C

4. 난수 : 컴퓨터가 임의로 발생 시키는 수

rand()

1) a<=난수<=b를 구하려면?

rand()%(상-하+1)+하;

rand()%(b-a+1)+a;

 

문) 난수를 5개 발생

#include<stdio.h>
#include<stdlib.h>//rand()
#include<time.h>//time()
int main()
{
    int r,i;
    //srand(unsigned int)time(NULL));
    srand(time(NULL));
    for(i=1;i<=5;i++)//i발생회수
    {
        r=rand();
        printf("%d\n",r);
    }
    return 0;
}

 

문) 주사위를 100번던져 그의 눈을 출력

 

/*9주사위.c
문)주사위를 100번던져 그의 눈을 출력
4 5 2 2 ...
......
1의 눈의 개수 : xx개
2의 눈의 개수 : xx개
...
6의 눈의 개수 : xx개
    1<=주사위<=6
    0+1<=rand()%6+1<=5+1
    1<=rand()%6+1<=6
*/

#include<stdio.h>
#include<stdlib.h>//rand()
#include<time.h>//time()
int main()
{
    int r,i,c1,c2,c3,c4,c5,c6;
    //srand(unsigned int)time(NULL));
    //c1=0;c2=0;
    c1=c2=c3=c4=c5=c6=0;//할당순서 우 ---> 좌
    //srand(unsigned int)time(NULL));
    srand(time(NULL));
    for(i=1;i<=100;i++)//i발생회수
    {
        r=rand()%(6-1+1)+1;//r=rnad()%6+1;
        printf("%d ",r);
        if(i%10==0) printf("\n");
        switch(r)
        {
            case 1:c1++;break;
            case 2:c2++;break;
            case 3:c3++;break;
            case 4:c4++;break;
            case 5:c5++;break;
            case 6:c6++;break;
        }
    }
    printf("-----------------------\n");
    printf("1의 눈의 개수 : %d개\n",c1);
    printf("2의 눈의 개수 : %d개\n",c2);
    printf("3의 눈의 개수 : %d개\n",c3);
    printf("4의 눈의 개수 : %d개\n",c4);
    printf("5의 눈의 개수 : %d개\n",c5);
    printf("6의 눈의 개수 : %d개\n",c6);
    printf("%d\n",c1+c2+c3+c4+c5+c6);

    return 0;
}

 

문) 덧셈

 

/* 10.덧셈.c 문)2자리수 난수, 1자리수난수를 발생시켜 4개의 덧셈문제를 풉니다.
1)87 + 7 = ? 94 (사용자 답 입력)
    정답
2)55 + 2 = > 60
    오답!
...
------------------------------------
정답수 : x개 xx점 (1문제당 20점)
*/

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
int main()
{
    int a,b,sdap,i,jdap,cn;
    char pan[6];
    srand((unsigned int)time(NULL));
    cn=0;
    for(i=1;i<=5;i++)
    {
        a=rand()%(99-10+1)+10;//10<=2자리수 난수 <=99
        b=rand()%(9-0+1)+0;//0<=1자리수난수<=9
        jdap=a+b;//정답지
        printf("%d) %d + %d =?",i,a,b);//문제 제시
        scanf("%d",&sdap);//학생답 입력
        if(sdap==jdap)
        {strcpy(pan,"정답!");}
        else
        strcpy(pan,"오답!");
        printf(" %s\n",pan);
    }
    printf("--------------------\n");
    printf("정답수 : %d개 %d점\\n",cn,cn*20);
     return 0;
}

 

문) 사칙연산

 

/* 11.사칙연산.c 문)2자리수 난수, 1자리수난수를 발생시켜 5개의 덧셈문제를 풉니다.
10ㅡ=2자리수 난수<=99, 0<=1자리수난수<=9

*/

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
int main()
{
    int a,b,sdap,i,op,opr,jdap,cn;
    char pan[6];
    srand((unsigned int)time(NULL));
    cn=0;
    for(i=1;i<=5;i++)
    {
        a=rand()%(99-10+1)+10;//10<=2자리수 난수 <=99
        b=rand()%(9-0+1)+0;//0<=1자리수난수<=9
        op=rand()%(4-1+1)+1;//1<=연산자로 이용할 난수<=4
        //printf("op : %d\n",op);
        switch(op)
        {
            case 1: opr='+';jdap=a+b;break;
            case 2: opr='-';jdap=a-b;break;
            case 3: opr='*';jdap=a*b;break;
            case 4: opr='/';jdap=a/b;break;

                    if(b==0) b=rand()%(9-1+1)+1; // 1<=b<=9 주의
                    jdap=a/b;break;
        }

        printf("%d)  %d %c %d=?",i,a,opr,b);//문제 제시
        scanf("%d",&sdap);//학생답 입력
        if(sdap==jdap)
        {strcpy(pan,"정답!");cn++;}
        else
        strcpy(pan,"오답!");
        printf(" %s\n",pan);
    }
    printf("--------------------\n");
    printf("정답수 : %d개 %d점\\n",cn,cn*20);
     return 0;
}

Posted by 마마필로 :