구조체 2009 년 5 월 19 일 김경중
강의계획수정 일자계획 Quiz 실습보강 5 월 19 일 ( 화 ) 구조체 Quiz ( 함수 ) 5 월 21 일 ( 목 ) 구조체저녁 6 시 5 월 26 일 ( 화 ) 포인터 5 월 28 일 ( 목 ) 특강 (12:00-1:30) 6 월 2 일 ( 화 ) 포인터 Quiz ( 구조체 ) 저녁 6 시 6 월 4 일 ( 목 ) 포인터저녁 6 시 6 월 9 일 ( 화 ) 특강 (12:00-1:30) 6 월 11 일 ( 목 ) 프로젝트발표 Quiz ( 포인터 ) 저녁 6 시 6 월 18 일 ( 화 ) 기말고사
프로젝트중간제출 기한 : 2009 년 5 월 25 일월요일오후 2 시까지 점수 : 50 점 채점 : 제출하면 50 점, 아니면 0 점 제출방법 : 이메일 (kimkj@sejong.ac.kr) 자유소프트웨어 : 제안서와현재진행중인소스코드를보낸다. 제안서는필수이고소스코드는현재작업이진행된사람만보낸다. 제안서의분량에는제한이없으며, 무엇을만들려고하는지를적는다. 문제풀기 : 50 문제중 10 문제를풀어서낸다. 자동차경주 : 현재까지작업한자기자신만의운전프로그램을제출한다.
디버깅
디버깅 #include <stdio.h> void main(void){ int i; for(i=0;i<10;i++){ printf("%d",i);
F10 을누르세요.
F10 을누르세요.
F10 을누르세요.
디버깅종료
간단한디버깅방법 #include <stdio.h> void main(void){ int i; for(i=0;i<10;i++){ printf("%d",i); getchar();
구조체
실생활과자료형 실생활자료형나이이름키학번주소신상정보
구조체정의 struct sinsang { int age; char name[20]; float height; int studentid; char address[100]; ;
구조체정의 ( 변수선언포함 ) struct sinsang { int age; char name[20]; float height; int studentid; char address[100]; kim, lee, park, han, yoon;
값입력 kim.age = 33; strcpy(kim.name, 김경중 ); kim.height = 180.0; kim.studentid = 0; strcpy(kim.address, 광개토관 619호 );
출력 printf( %d \n, kim.age); printf( %s \n, kim.name); printf( %f \n, kim.height); printf( %d \n, kim.studentid); printf( %s \n,kim.address);
실제코드 #include <stdio.h> #include <string.h> void main(void){ // 구조체정의 ( 변수선언포함 ) 여기에넣으세요. // 값넣기 // 출력하기
실제코드 #include <stdio.h> #include <string.h> void main(void){ struct sinsang { int age; char name[20]; float height; int studentid; char address[100]; kim, lee, park, han, yoon; kim.age = 33; strcpy(kim.name, 김경중 ); kim.height = 180.0; kim.studentid = 0; strcpy(kim.address, 광개토관 619 호 ); printf( %d \n, kim.age); printf( %s \n, kim.name); printf( %f \n, kim.height); printf( %d \n, kim.studentid); printf( %s \n,kim.address);
결과
실습 본인의신상정보를이용하여값을넣고출력해보아라.
정답 #include <stdio.h> #include <string.h> void main(void){ struct sinsang { int age; char name[20]; float height; int studentid; char address[100]; kim, lee, park, han, yoon; kim.age = 33; strcpy(kim.name, 김경중 ); kim.height = 180.0; kim.studentid = 0; strcpy(kim.address, 광개토관 619 호 ); printf( %d \n, kim.age); printf( %s \n, kim.name); printf( %f \n, kim.height); printf( %d \n, kim.studentid); printf( %s \n,kim.address);
100 명이라면? struct sinsang { int age; char name[20]; float height; int studentid; char address[100]; kim, lee, park, han, yoon;
구조체배열 struct sinsang { int age; char name[20]; float height; int studentid; char address[100]; saram[100];
값입력 saram[0].age = 33; strcpy(saram[0].name, 김경중 ); saram[0].height = 180.0; saram[0].studentid = 0; Strcpy(saram[0].address, 광개토관 619호 );
출력 printf( %d \n, saram[0].age); printf( %s \n, saram[0].name); printf( %f \n, saram[0].height); printf( %d \n, saram[0].studentid); printf( %s \n, saram[0].address);
실제코드 #include <stdio.h> #include <string.h> void main(void){ // 구조체정의 ( 변수선언포함 ) 여기에넣으세요. // 값넣기 // 출력하기
실제코드 #include <stdio.h> #include <string.h> void main(void){ struct sinsang { int age; char name[20]; float height; int studentid; char address[100]; saram[100]; saram[0].age = 33; strcpy(saram[0].name, " 김경중 "); saram[0].height = 180.0; saram[0].studentid = 0; strcpy(saram[0].address, " 광개토관 619호 "); printf("%d \n", saram[0].age); printf("%s \n", saram[0].name); printf("%f \n", saram[0].height); printf("%d \n", saram[0].studentid); printf("%s \n",saram[0].address);
실습 자신의신상정보와친구의신상정보를각각 saram[0] 과 saram[1] 에저장하고출력하여라.
정답 #include <stdio.h> #include <string.h> void main(void){ struct sinsang { int age; char name[20]; float height; int studentid; char address[100]; saram[100]; saram[0].age = 33; strcpy(saram[0].name, " 김경중 "); saram[0].height = 180.0; saram[0].studentid = 0; strcpy(saram[0].address, " 광개토관 619호 "); printf("%d \n", saram[0].age); printf("%s \n", saram[0].name); printf("%f \n", saram[0].height); printf("%d \n", saram[0].studentid); printf("%s \n",saram[0].address);
구조체를어디에사용할까? 주소록 이름, 연락처, 주소, 이메일 게임 현재위치, 현재모양, 보유한아이템, 에너지상태 제품관리 상품명, 제조사, 용량, 입고일, 매입가, 판매가, 할인율 도서관리 저자, 출판사, 출판년도, 총페이지수, 가격, 도서번호
다음시간에는 간단한신상정보관리프로그램을작성해보겠습니다. -신상정보의입력 -신상정보의추가 -신상정보의검색 -신상정보의삭제 -등등
참고자료 ( 시험에안나오지만알아두면유용한 )
unsigned 음수를표현할필요가없는경우 unsigned 를사용하면더큰수를표현 #include <stdio.h> void main(void){ char a=255; // 표현범위가 -128에서 127까지 unsigned b=255; // 표현범위가 0에서 255까지 printf( %d %d\n,a,b);
강제형변환 #include <stdio.h> void main(void){ int a=3; int b=2; printf( 3/2=%d\n,a/b); printf( 3/2=%f\n,(float)(a)/(float)(b));
축약연산자 축약표현 a++; a--; a+=3; a-=3; a*=3; a/=3; a%=3; 원래표현 a=a+1; a=a-1; a=a+3; a=a-3; a=a*3; a=a/3; a=a%3;
% 연산자 % 연산자는나머지를계산하기위한연산자이다. A%B 를계산하면 A 를 B 로나눌때나머지이다. A 와 B 는반드시정수이어야한다. 10%2=0 10%3=1 10%4=2 3%4=3
3 항연산자 조건? 결과 1 : 결과 2 만약조건이참이면결과 1 만약조건이거짓이면결과 2 #include <stdio.h> void main(void){ int a=2; printf( a가 3보다작다는것은 %s,a<3? 참입니다 : 거짓입니다 );
비트단위연산자 비트수준에서연산을수행함 & : 비트단위 AND : 비트단위 OR ^ : 비트단위 XOR ~ : 비트단위 NOT << : 왼쪽으로이동 >> : 오른쪽으로이동
비트단위연산 (2) #include <stdio.h> void main(void){ int a=15; // 00000000 00000000 00000000 00001111 int b=20; // 00000000 00000000 00000000 00010100 printf( AND 연산결과 : %d\n, a&b); // 출력결과 4 printf( OR 연산결과 : %d\n, a b); // 출력결과 31 printf( XOR 연산결과 : %d\n,a^b); // 출력결과 27 printf( <<2 연산결과 : %d\n, a<<2); // 출력결과 60
goto 구문 그냥알고만있고사용할필요는없다. #include <stdio.h> void main(void){ printf( A\n ); printf( B\n ); goto kim; printf( C\n ); kim: printf( D\n );
sizeof 함수 각자료형이몇바이트의메모리공간을차지하는지확인하는용도 #include <stdio.h> void main(void){ printf( char 형은 %byte입니다\n,sizeof(char)); printf( int 형은 %byte입니다\n,sizeof(int)); printf( float 형은 %byte입니다\n,sizeof(float)); printf( double 형은 %byte입니다\n,sizeof(double));
system 함수 도스명령어를 C 프로그램에서실행할수있다. #include <stdlib.h> void main(void){ system( dir );
난수 #include <stdio.h> #include <time.h> void main(void){ srand(time(null)); // 현재시간을이용하여난수발생초기화 while(1){ printf( %d\n,rand()); getchar();
일차원배열을인자로사용하기 #include <stdio.h> void print_array(int a[]){ int i; for(i=0;i<5;i++) printf( %d,a[i]); void main(void){ int a[5]={1,2,3,4,5; print_array(a);
이차원배열을인자로사용하기 #include <stdio.h> void print_array(int a[][5]){ int i,j; for(i=0;i<2;i++) for(j=0;j<5;j++) printf( %d,a[i][j]); void main(void){ int a[2][5]={{1,2,3,4,5,{6,7,8,9,10; print_array(a);
재귀함수 자기자신을호출하는함수 // factorial 계산 #include <stdio.h> int f(int n) { if(n==0) return 1; else return n*f(n-1); void main(void){ printf( 5! = %d\n,f(5));
ASCII 코드
ASCII 코드 (2) #include <stdio.h> void main(void){ printf( %c\n,65); printf( %c\n,66);
Quiz