| 태그 'C클리닉'에 해당되는 글 1건 |
| C클리닉 특강용 소스 |
Tech 07/02/27 00:55 ( Translate this page  )
글 주소 : https://ohyung.net/356
본 소스는 2007년 2월 21일부터 이루어지는 손채봉 교수님의 C클리닉 유인물을 약간 풀어본것입니다.

전부 주석처리 되어있으며 각 소스의 상단주석의 마지막에서 */ 를 추가하면 그 소스가 실행됩니다 ;;;

소스 코드 타입 : C
/////////////////////////////////////////
//  2007년 02월 26일 고급프로그래밍  //
// Coded By 오형탁 Ohyung (2002711158) //
// ohyung@ohyung.com http://ohyung.com //
/////////////////////////////////////////

/* 유용하게 쓰이는 한파일에 여러소스 입력하기용 주석 */

/* 포인터 테스트 개인적인 소스 -.-;
#include < stdio.h>
void main()
{
    int a=150;
    int *p;

    p=&a;
    printf("a의 주소 = %u , %u \n", &a,p);
    printf("a의 데이터 = %d , %d \n", a,*p);
    printf("a의 내부 주소 = %p , %p \n", &a,p);
}
/**/

/* 포인터! - val에 5를 넣고 pval로 val의 주소를 치환 그뒤 pval의 주소가 향하는곳에 2를 대입. 
곧 val이 2로 치환! 오야르! 
#include < stdio.h>
void main()
{
    int *pval,val;
    val=5;
    pval=&val;
    *pval=2;
    printf("%d",val);
}
/**/


/* 즐거운 포인터의 이해! 
#include < stdio.h>
void main()
{
    int a=90,b=20,c=30,d=40,e=50,f=60,*pa;
    pa=&a;
    printf ("%c \t %p \t %4d \t %p \n",'a',&a,*pa,pa);
    pa-=3;
    printf ("%c \t %p \t %4d \t %p \n",'b',&b,*pa,pa);
    pa-=3;
    printf ("%c \t %p \t %4d \t %p \n",'c',&c,*pa,pa);
    pa-=3;
    printf ("%c \t %p \t %4d \t %p \n",'d',&d,*pa,pa);
    pa-=3;
    printf ("%c \t %p \t %4d \t %p \n",'e',&e,*pa,pa);
    pa-=3;
    printf ("%c \t %p \t %4d \t %p \n",'f',&f,*pa,pa);
}
/**/

/* 입력하기 귀찮아!
#include < stdio.h>
void main()
{
}
/**/

/* 1. 출력값? - 14
#include < stdio.h>
void main()
{
    int a;
    a=7;
    printf("%d",a+a);
}
/**/


/* 출력값? - 8,9,10,11,12,13,14,15 - 15가 출력되는 이유는 14<15가 된상태에서 다시 do 간뒤 15가 찍혔기때문 
#include < stdio.h>
void main()
{
    int han=8;
    do {
        han++;
        printf("%d",han);
    }
    while(han<15);
}
/**/


/* 출력값? - 4,3,2,1 - 만약 han--라면 4,3,2,1,0 
우선순위 bracket 이나 brace 단항연산자 이항연산자 조건 대입 등 뒤의 -- 나 ++는 변태라서 열외
#include < stdio.h>
void main()
{
    int han=5;
    while(han-->0)
        printf("%d\n",han);
}
/**/

/* 출력값? - 에러 // 안으로 들어간다고 해도 +는 의미없는 연산자 워닝발생 결과값 무
#include < stdio.h>
void main()
int m=7,n=8,k=9,y;
{
    y=1;
    y+m*n%k;
}
/**/

/* while 횟수 - 4번 그러나 While 등의 대문자로 쓰면 X
#include < stdio.h>
void main()
{
    int sum,i;
    sum=0;
    i=1;
    while(sum<10) {
        sum=sum+i;
        i=i+1;
        //printf("1");
    }
}
/**/

/* 출력값 - 1,0 a+b = 50 > 10 논리 값으로 1 , 30>20 = 1 > 10 의 논리 값으로 0
#include < stdio.h>
void main()
{
    int a=30, b=20, c=10, d;
    d=a+b>c;
    printf("%d",d);
    d=a>b>c;
    printf("%d",d);
}
/**/

/* 출력값 - 110 , 440에서 2(진수)^2(b의값)으로 나눈값 110이 출력 2진 shift
#include < stdio.h>
void main()
{
    int a=440,b=2;
    printf("%d",a>>b);
}
/**/

/* 출력값 - !abcd=0 , 0x 16진수 0는 8진수
#include < stdio.h>
void main()
{
    int x=0xabcd;
    printf("!%x=%x\n",x,!x);
}
/**/

/* b의 수행후 결과값은? - 3 ?는 조건이다. 참이면 앞 거짓이면 뒤를 가진다.  
3 > 2가 참(1,true)이므로 3을 취하게 된다.
#include < stdio.h>
void main()
{
    int b;
    b=(3>2)?3:2;
    printf("%d",b);
}
/**/

/* 출력값은 - 0, 1, -1 , &&는 AND , ||는 or , ~는 not 그러나 bitwised이다.
논리적으로 a는 true b는 false이라고 보고, 1 AND 0 은 0 , 1 OR 0 은 1 ,
그리고 b은 1바이트로 0000 0000 를 취한다. 
이것을 bitwised 하게되면 1111 1111 이 되고 이것의 값은 -1 이된다.
-1이 되는 것은 2의 보수를 취하면 알수 있다. 
0000 0000 +1 이므로 0000 0001 이 되고 마이너스값이 붙는다.
#include < stdio.h>
void main()
{
    char a=3,b=0;
    printf("%d %d %d\n",a&&b, a||b, ~b);
}
/**/

/* 출력값 - c가 정의되지 않으면 에러 정의가 된다면 7 정수형으로 계산된다. 
만약에 a라고 한다면 재정의 에러가 발생
#include < stdio.h>
void main()
{
    int c;
    float a=3.5;
    float b=4.6;
    c=(int)a+(int)b;
    printf("%d",c);
}
/**/

/* 맞는것은? 맞다. c에 ' '이 들어가고 b_c에 1이들어간다. 
교수님의 말씀으로는 c==' '를 원하셨다.
#include < stdio.h>
void main()
{
    int c,blank_cnt=0;
    if(c=' ')
        ++blank_cnt;
    printf("%d",blank_cnt);
}
/**/

/* 맞는것은? 맞다. b에 a값이 들어간다. - 교수님의 말씀으로는 b==a를 원하셨다. -.-;
#include < stdio.h>
void main()
{
    int a=1,b=1;
    if(b=a)
        printf("%d",b);

}
/**/

/* 맞는것은? - A=65 , a=97 차이는 32이다.또한 c의 값의 a(97)~z(122) 사이에
있을경우c+가 실행된다. 
소문자 to 대문자
#include < stdio.h>
void main()
{
    int c='z';
    printf("%d\n",c);
    if(c!=EOF&&'a'<=c&&c<='z')
        c+='A'-'a';
        printf("%c",c);
}
/**/

/* 맞는것은? 틀림! - i,j값이 동일지 않으면 내부실행 아니면 else 실행후 i값 출력 ; 
원문에는 ;가 추가되어있었다 -.-; 
#include < stdio.h>
void main()
{
    int i=4,j=5;
    if(i!=j) {
        i=1;
        j=2;
        printf("%d %d\n",i,j);
    }
    else i+=j;
    printf("%d",i);
}
/**/

/* 출력값? 656667 이유인즉, A로 싸인된뒤 break가 없으며, 
A부터 아래로 진행 65='A' 부터 67='C' 까지 출력
#include < stdio.h>
void main()
{
    char ch='A';
    switch(ch) {
        case 'A': printf("%d\n",'A');
        case 'B': printf("%d\n",'B');
        case 'C': printf("%d\n",'C');
    }
}
/**/

/* 14번문제 연산결과 - 6,16,1,0 
#include < stdio.h>
void main()
{
    int a=4,b=2;
    a+=2;
    printf("%d,",a);
    a=4,b=2;
    printf("%d,",a*=b+2);
    a=4,b=2;
    printf("%d,",a/=b+2);
    a=4,b=2;
    printf("%d",a%=2);
}
/**/


/* 17번 올바른 변수 - 아래소스가 에러나는지 안나는지만 확인해보면됨. - 
경고는 무시해도됨;; 
#include < stdio.h>
void main()
{
    int _total,KBS,Int;
}
/**/

/* 20번 출력값 - 11 20 앞에서 말했듯이 뒤에 붙는 -- 나 ++ 는 변태임 
#include < stdio.h>
void main()
{
    int i=10,j=20;
    printf("%d %d\n",++i,j--);

}
/**/

/* 21번 6,8 우선 첫번째 printf문에서 2*=3 이므로 6 출력 그위 6*=3 이므로 18출력 
역시 뒤에뭍는 ++는 변태
#include < stdio.h>
void main()
{
    int x=2,y=2;
    printf("%d\n",y*=++x);
    printf("%d\n",y*=x++);
}
/**/

/* 22번 if else문 바꾸기 - 바꾸는 이유는 뽀대! 보다는 속도;
#include < stdio.h>
void main()
{
    int a=2,b=3,c=4;
    if (a>b) c=a;
    else c=b;
    printf ("%d\n",c);

    a=2,b=3,c=4;    // 재정의
    c=(a>b)?a:b;
    printf ("%d\n",c);
}
/**/

/* while의 반복횟수 - 그 유명하신 무한루프님! while은 항상 참이므로 미친듯 돈다
#include < stdio.h>
void main()
{
    int a=20,i=1,y=0;
    while(1) {
        if(i < a) i++;
        y+=i;
    }

}
/**/

/* 25 y의 값 - 30 - 우선 y에 10 들어가고 그뒤 if에서 20들어간뒤 조건에 의해 
30들어감 y=20에서 참이므로 else 실행 X 그리고 프린트
#include < stdio.h>
void main()
{
    int y=10;
    if (y=20)
        y=30;
    else
        y=40;
    printf("%d",y);
}
/**/

/* 26 결과값 - 4 Long형의 크기
#include < stdio.h>
void main()
{
    printf("%d",sizeof 123L);
}
/**/


/* 문자 타입(포멧)별 크기
#include < stdio.h>
void main()
{
    printf("\nchar   %%s%%c  %d",sizeof(char));
    printf("\nshort  %%d    %d",sizeof(short));
    printf("\nint    %%d    %d",sizeof(int));
    printf("\nlong   %%ld   %d",sizeof(long));
    printf("\nfloat  %%f    %d",sizeof(float));
    printf("\ndouble  %%f    %d",sizeof(double));
    printf("\n\nunsigned");
    printf("\nchar       %d",sizeof(unsigned char));
    printf("\nshort  %%u    %d",sizeof(unsigned short));
    printf("\nint   %%u    %d\n",sizeof(unsigned int));
}
/**/
/* 27 출력값 (char)1*3*4 = 12 입니다 ㄳ
#include < stdio.h>
void main()
{
    char a[3][4];
    printf("%d",sizeof a);
}
/**/

/* 28 수행후의 x,y,z - 6,5,3 
z의경우 변동 없음. 왼쪽으로 가서 y= 2+3 = 5가됨 또한 x의 경우 1+5 = 6이 됨
i = 30 - i의 경우 8+2 한뒤 3*10이 됨 30 correct!
a = 4 - a의 경우 10%3=1 후에 1*4 = 4 가됨. 
#include < stdio.h>
void main()
{
    int x=1,y=2,z=3;
    int i=3,j=8;
    int a=10,b=3,c=4;

    x+=y+=z;
    printf("%d %d %d\n",x,y,z);

    i*=j+2;
    printf("%d\n",i);

    a=a%b*c;
    printf("%d",a);
}
/**/

/* 31 출력값은? 123.5, 123.5 ,00123 , 123 
소수 첫번째자리까지 표현 나머지는 반올림.
전체 5자리 소수점 1자리까지 표현
05 앞부분에 0으로 체움
-5 앞에서 부터 출력 123뒤에 2개의 공백이 있다.
이것은 대충 값을 변경하면서 해봐야지 확실히 알수 있다. 
#include < stdio.h>
void main()
{
    printf("%3.1f",123.45);
    printf("%5.1f",123.45);
    printf("%05d",123);
    printf("%-5d",123);
}
/**/

/* 출력값은? - 4,4,6,1  - 우선 
a의 경우 a++에서 ++가 변태라고 했으므로 대입연산자 보다 느리다. 
그러므로 3+3 이 c의 값이 된후에 a++이 되는것이다.
d의 경우 1 b가 4/4이 므로 값이 1이된다. 
#include < stdio.h>
void main()
{
    int a=3,b=3,c,d;
    c=a+++3;
    d=b/++b;
    printf("%d %d %d %d \n",a,b,c,d);
}
/**/

/* 33. 출력값 x,a,z - putchar는 한개의 문자를 출력 마지막기중 
#include < stdio.h>
void main()
{
    char c='z';
    putchar('x');
    putchar('z+a');
    putchar(c);
}
/**/

/* 34 출력값 2 출력 - 비교한후 거짓이었으므로 y 선택 , 둘중 큰값 출력 
#include < stdio.h>
void main()
{
    int x=1,y=2;
    printf("%d\n",(x>y)?x:y);
}
/**/

/* 입력하기 귀찮아!
#include < stdio.h>
void main()
{

}
/**/
| 이 포스트에 대한 이용규약 |
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 라이센스 에 따라 이용하실 수 있습니다.
This work is licensed under a Creative Commons Attribution 2.0 Korea LicenseLink in a new window.

| 트랙백 |
트랙백 주소 :: https://ohyung.net/rserver.php?mode=tb&sl=356