" async="async"> ', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); 책 알려주는 남자 :: 책 알려주는 남자



PA51(소수).pdf

#include <stdio.h>

#define HOWMANY 50000 


void processSieve(int[]);

int getLower();

int getUpper(int);

void showPrimes(int[], int, int);


int main()

{

int sieve[HOWMANY+1]; // The array of true/false

int lower = 1, upper = HOWMANY; 

 

  processSieve(sieve);

  lower = getLower();

  upper = getUpper(lower);

  showPrimes(sieve, lower, upper);

}


void processSieve(int sieve[HOWMANY+1]) // 1. 1~50000까지의 소수들을 구분 

{

int i, n;

for (n=2; n<HOWMANY; n++)

{

for(i=2; i<=n; i++)

{

if (n==i)

{

sieve[n]=1;

break;

}

else if (n%i == 0)

{

sieve[n]=0; 

break;

}

}

}

}


int getLower(void) // 2. 시작값 설정 

{

int lower;


do {

printf("Please enter the lower boundary (between 1 and 50000) ");

scanf("%d", &lower);

} while(lower<1 || lower>50000);

printf("\n");

return lower;

}


int getUpper(int lower) // 3. 끝값 설정 

{

int upper;

do {

printf("Please enter the upper boundary (between %d and 50000) ", lower);

scanf("%d", &upper);

} while(upper<=lower || upper>50000);

printf("\n");

return upper;

}


void showPrimes(int sieve[HOWMANY+1], int lower, int upper) // 4. 시작값과 끝값 사이에서 차이가 6인 것을 카운트 후 프린트 

{

int i, count=0;

printf("Here are all of the sexy prime pairs in the range %d to %d, one pair per line:\n", lower, upper);

for (i=lower; i<=upper-6; i++)

{

if(sieve[i]==1 && sieve[i+6]==1)

{

printf("%d and %d\n", i, i+6);

count++;

}

}

printf("There were %d sexy prime pairs displayed.", count);

}




PA52(회문).pdf

#include <stdio.h>


int reverse(int n);

void palindrome(int n); 


int main()

{

int n;

printf("Please enter a number: ");

scanf("%d", &n);

reverse(n);

palindrome(n);

return 0;

}


int reverse(int n)

{

int rn=0, i, o=0;

for(i=n; i>0; i/=10)

{

o = i%10;

rn = rn*10 + o;

}

return rn;

}


void palindrome(int n)

{

int count=0, i=0, rn=reverse(n);

for(i=n; i!=rn;  )

{

i += rn;

rn = reverse(i);

count++;

}

if (1000<count || i>2000000000)

printf("%d is not a panlindrome ");

else

printf("%d  %d", count, i);

}



PA53(지뢰).pdf


#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define ROW 100

#define COL 100


int n, m, i, j;

int count=0;

int a[ROW][COL]={0,};


void dis1mine (int n, int m, int a[][COL]);

void dis2mine (int n, int m, int a[][COL]);


void main()

{

srand((unsigned)time(NULL));

printf("지뢰밭의 행과 열의 크기를 입력하시오: \n");

scanf("%d %d", &n, &m);

printf("\n");

dis1mine(n, m, a);

dis2mine(n, m, a);

}


void dis1mine(int n, int m, int a[][COL])

{

for(i=1; i<n+1; i++)

{

for(j=1; j<m+1; j++)

{

a[i][j]=rand()%5;

if(a[i][j]==1)

printf("* ");

else

printf("·");

}

printf("\n");

}

printf("\n");

}


void dis2mine (int n, int m, int a[][COL])

{

for(i=1; i<n+1; i++)

{

for(j=1; j<m+1; j++)

{

count=0;

if(a[i][j]==1)

{

printf("* ");


}

else if(a[i][j]!=1)

{

if(a[i-1][j-1]==1) count++;

if(a[i-1][j]==1) count++;

if(a[i-1][j+1]==1) count++;

if(a[i][j+1]==1) count++;

if(a[i+1][j+1]==1) count++;

if(a[i+1][j]==1) count++;

if(a[i+1][j-1]==1) count++;

if(a[i][j-1]==1) count++;

printf("%d ", count);

}

}

printf("\n");

}

}


PA54(여행).pdf


#include <stdio.h>

#define STUDENT 1000


void main()

{

int i, n;

float sum=0, mean; 

float a[STUDENT]={0, };

printf("학생 수를 입력하시오: ");

scanf("%d", &n);

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

{

printf("쓴 금액 입력: ");

scanf("%f", &a[i]);

sum+=a[i]; 

}

mean = sum/n;

sum=0;

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

if(a[i]<mean)

sum+=mean-a[i];

printf("전달해야할 금액: %f", sum);

}


PA55(암호).pdf

#include <stdio.h>

#include <string.h>

#define ENTRY 1000

#define LENGTH 16

#define TEXT 80


void main(){

int n, i, j, count=0;

char dict[ENTRY][LENGTH];

char text[TEXT];

char *word1[ENTRY];

char *token;

char seps[]=" ";

char word2[ENTRY][LENGTH];

scanf("%d", &n);

fflush(stdin);

for(i=0; i<n; i++){

fgets(dict[i], sizeof(dict[i]), stdin);

dict[i][strlen(dict[i])-1]=NULL;

}

printf("\n");

fgets(text, sizeof(text), stdin);

text[strlen(text)-1]=NULL;

token=strtok(text, seps);

for(i=0; token!=NULL; i++){

word1[i]=token;

token=strtok(NULL, seps);

count++;

}

printf("\n");

for(i=0; i<count; i++){

for(j=0; j<n; j++){

if(strlen(word1[i])==3 && strlen(dict[j])==3)

strcpy(word2[i], dict[j]);

else if(strlen(word1[i])==6 && strlen(dict[j])==6)

strcpy(word2[i], dict[j]);

else{

if(word1[i][2]==word1[i][3] && dict[j][2]==dict[j][3])

strcpy(word2[i], dict[j]);

else if(word1[i][3]== dict[j][3] && word1[i][1]=='q' && dict[j][1]=='p')

strcpy(word2[i], dict[j]);

else if(word1[i][3]== dict[j][2])

strcpy(word2[i], dict[j]);

else if(word1[i][0]=='b' && dict[j][0]=='d')

strcpy(word2[i], dict[j]);

}

}

}

for(i=0; i<count; i++){

printf("%s ", word2[i]);

}

}


PA56(투표).pdf

#include <stdio.h>

#include <string.h>

#define VOTER 1000

#define NAME 80

#define ENTRY 20


void main(){

int i, j, n, result=1;

int max=0, min=0;

int vote[VOTER][ENTRY];

char cdd[ENTRY][NAME];

scanf("%d", &n);

fflush(stdin);

for(i=0; i<n; i++){

fgets(cdd[i], sizeof(cdd[i]), stdin);

cdd[i][strlen(cdd[i])-1]=NULL;

}

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

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

scanf("%d", &vote[i][j]);

do{

int sum[ENTRY]={0};

for(i=0; i<5; i++){

if(vote[i][0]>0)

sum[vote[i][0]-1]++;

else

sum[vote[i][1]-1]++;

}

for(j=0; j<n; j++){

if(sum[max]<sum[j])

max=j;

if(sum[min]>sum[j])

min=j;

}

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

if(vote[i][0]==min+1)

vote[i][0]=-1;

if(sum[max]> 5.0/2.0)

result=0;

}while(result!=0);

printf("\n");

printf("%s", cdd[max]);

}


PA57(은행).pdf

#include <stdio.h>

#define SIZE 8

void in(int queue);

void out(int queue);


int queue[SIZE]={1, 2, 3, 4, 5, 6, 7, 8, 9};

int front=-1, rear=-1;


int main(){


int n, result=1;

do{

printf("input number: ");

scanf("%d", &n);

if(n==-1)

result=0;

else if(n!=0)

in(queue);

else if(n==0)

out(queue);

}while(result!=0);

return 0;

}


void in(int queue){

front++;

if(front>=8)

printf("queue full!\n");

}


void out(int queue){

rear++;

if(front==rear || rear>=8)

printf("queue empty!\n");

else

printf("[%d]\n", rear+1);

}


PA58(도둑).pdf

#include <stdio.h>

#define ROW 10

#define COL 20


void main(){

int i, j, col, weight;

float temp0, temp1, temp2, temp3;

int temp=0, result=0;

int sum_value=0, sum_weight=0;

int sum_v1, sum_v2, sum_w1;

int stolen[COL]={0};

float bag[ROW][COL];

scanf("%d %d", &col, &weight);

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

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

scanf("%f", &bag[i][j]);


for(i=0; i<col; i++){

bag[2][i]=bag[0][i]/bag[1][i];

bag[3][i]=i;

}

for(i=0; i<col; i++){

for(j=0; j<col-1; j++){

if(bag[2][j]<bag[2][j+1])

{

temp2=bag[2][j];

bag[2][j]=bag[2][j+1];

bag[2][j+1]=temp2;

temp3=bag[3][j];

bag[3][j]=bag[3][j+1];

bag[3][j+1]=temp3;

temp0=bag[0][j];

bag[0][j]=bag[0][j+1];

bag[0][j+1]=temp0;

temp1=bag[1][j];

bag[1][j]=bag[1][j+1];

bag[1][j+1]=temp1;

}

}

}

do{

for(i=0; i<col; i++){

if(sum_weight+bag[1][i]>weight){

sum_v1=sum_value-bag[0][i-1]+bag[0][i];

sum_w1=sum_weight-bag[1][i-1]+bag[1][i];

if(sum_v1>sum_value && sum_w1<=weight){

sum_value=sum_v1;

sum_weight=sum_w1;

stolen[i-1]=0;

stolen[i]=bag[3][i];

result=1;

}

else 

result=1;

}

else if (sum_weight==weight)

result=1;

else{

sum_value+=bag[0][i];

sum_weight+=bag[1][i];

stolen[i]=bag[3][i];

}

}

}while(result==0);

printf("\n");

printf("Max value: %d\n", sum_value);

for(i=0; i<col; i++){

for(j=0; j<col-1; j++){

if(stolen[j]>stolen[j+1]){

temp=stolen[j];

stolen[j]=stolen[j+1];

stolen[j+1]=temp;

}

}

}

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

if(stolen[i]!=0)

printf("%d ",stolen[i]);

}


PA59(문자열).pdf


#include <stdio.h>

#include <string.h>

#include <stdlib.h>


char str1[100];

char str2[100];

float num2;

int i, num1;


void reverseString (char *str);

void getString (char *str);

int compareString (char *strl, char *str2);

int strToInteger (char *str);

float strToFloat (char *str);


int main(){

getString(str1);

getString(str2);

reverseString(str1);

reverseString(str2);

printf("\n");

if(compareString(str1, str2)==1)

printf("Two strings are same\n");

else if(compareString(str1, str2)==0)

printf("Two strings are not same\n");

printf("\n");

compareString(str1, str2);

num1=strToInteger(str1);

printf("The integer string is: %d\n", num1);

printf("\n");

num2=strToFloat(str2);

printf("The float string is: %0.2f\n", num2);

printf("Number [%d] + Number[%0.2f] is %0.2f\n", num1, num2, (float) num1+num2);

}


void reverseString (char *str){

int length=0;

char temp;

for(i=0; str[i]!=NULL; i++)

length++;

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

temp=str[i];

str[i]=str[length-1-i];

str[length-1-i]=temp;

}

printf("The reverse order of the first string is: %s\n", str);

}


void getString (char *str){

printf("Please enter your string: ");

gets(str);

printf("The string you first entered is: %s\n", str);

printf("\n");

}


int compareString (char *strl, char *str2){

int count=0;

int result;

for(i=0; str1[i]!=NULL; i++)

if(str1[i]!=str2[i])

count++;

if(count==0) result=1;

else result=0;

return result;

}


int strToInteger (char *str){

int result=0, negative=1;

printf("Please enter your integer string: ");

gets(str);

if(*str=='-'){

negative=-1;

str++;

}

while(*str){

result = result*10 + *str - '0';

str++;

}

return result*negative;

}


float strToFloat (char *str){

float result1=0.0, result2=0.0, j=1;

int negative=1;

printf("Please enter your float string: ");

gets(str);

if(*str=='-'){

negative=-1;

str++;

}

while(*str!='.' ){

result1 = result1*10 + *str-'0';

str++;

}

if(*str=='.'){

str++;

while(*str){

result2 = result2*10 + *str-'0';

str++;

j*=0.1;

}

}

return (result1+result2*j)*negative;

}


PA60(월도르프).pdf



'프로그래밍' 카테고리의 다른 글

LAB WEEK#8 Array  (0) 2018.11.05
LAB WEEK#7 Function  (0) 2018.10.31
블로그 이미지

얼음꿀차

책을 한 번 읽긴 읽어야겠는데 막상 읽자니 뭘 읽을지 고민되는 당신을 위해 읽을만한 책들을 알려드립니다!

,

13장 Programming


1.

#include <stdio.h>


struct point{

int x, y;

};


int equal (struct point p1, struct point p2){

if(p1.x==p2.x && p1.y==p2.y)

return 1;

return 0;

}


int quadrant(struct point p){

if(p.x>0 && p.y>0)

return 1;

else if(p.x<0 && p.y>0)

return 2;

else if(p.x<0 && p.y<0)

return 3;

else if(p.x>0 && p.y<0)

return 4;

}



int main(){

struct point p1, p2;

printf("점의 좌표를 입력하시오: ");

scanf("%d,%d", &p1.x, &p1.y);

printf("점의 좌표를 입력하시오: ");

scanf("%d,%d", &p2.x, &p2.y);

if(equal(p1, p2)==1) 

printf("두 점은 일치합니다\n");

else 

printf("두 점은 일치하지 않습니다\n");

printf("첫번째 점은 %d사분면에 있습니다\n", quadrant(p1)); 

printf("두번째 점은 %d사분면에 있습니다\n", quadrant(p2));


return 0;

}


2.

#include <stdio.h>


struct point{

int x, y;

};


int equal (struct point *p1, struct point *p2){

if(p1->x==p2->x && p1->y==p2->y)

return 1;

return 0;

}


int quadrant(struct point *p){

if(p->x>0 && p->y>0)

return 1;

else if(p->x<0 && p->y>0)

return 2;

else if(p->x<0 && p->y<0)

return 3;

else if(p->x>0 && p->y<0)

return 4;

}



int main(){

struct point p1, p2;

printf("점의 좌표를 입력하시오: ");

scanf("%d,%d", &p1.x, &p1.y);

printf("점의 좌표를 입력하시오: ");

scanf("%d,%d", &p2.x, &p2.y);

if(equal(&p1, &p2)==1) 

printf("두 점은 일치합니다\n");

else 

printf("두 점은 일치하지 않습니다\n");

printf("첫번째 점은 %d사분면에 있습니다\n", quadrant(&p1)); 

printf("두번째 점은 %d사분면에 있습니다\n", quadrant(&p2));


return 0;

}


3.

#include <stdio.h>


typedef struct {

int x, y;

} Point;


typedef struct {

Point a, b

} Rectangle;


int area(Rectangle r);

int perimeter(Rectangle r);

int is_square(Rectangle r);


void main(){

Rectangle r;

printf("오른쪽 상단 점의 좌표: ");

scanf("%d,%d", &r.a.x, &r.a.y);

printf("왼쪽 하단 점의 좌표: ");

scanf("%d,%d", &r.b.x, &r.b.y);

printf("사각형의 넓이: %d\n", area(r));

printf("사각형의 둘레: %d\n", perimeter(r));

if(is_square(r)==1)

printf("정사각형입니다\n");

else

printf("정사각형이 아닙니다\n"); 

}


int area(Rectangle r){

return (r.a.x-r.b.x)*(r.a.y-r.b.y); 

}


int perimeter(Rectangle r){

return ((r.a.x-r.b.x)+(r.a.y-r.b.y))*2;

}


int is_square(Rectangle r){

if((r.a.x-r.b.x)==(r.a.y-r.b.y))

return 1;

return 0;

}


4.

#include <stdio.h>


typedef struct {

double real;

double imag;

} Complex;


void add_complex(Complex x, Complex y);


void main(){

Complex x, y;

printf("첫 번째 복소수의 실수부: "); scanf("%lf", &x.real);

printf("첫 번째 복소수의 허수부: "); scanf("%lf", &x.imag);

printf("두 번째 복소수의 실수부: "); scanf("%lf", &y.real);

printf("두 번째 복소수의 허수부: "); scanf("%lf", &y.imag);

add_complex(x, y); 

}


void add_complex(Complex x, Complex y){

printf("합의 실수부: %lf\n", x.real+y.real);

printf("합의 허수부: %lf\n", x.imag+y.imag);

}


5.

#include <stdio.h>


typedef struct{

double x, y;

} Vector;


void add_vector(Vector v1, Vector v2);


void main(){

Vector v1, v2;

printf("벡터 a의 좌표: ");

scanf("%lf,%lf", &v1.x, &v1.y);

printf("벡터 b의 좌표: ");

scanf("%lf,%lf", &v2.x, &v2.y);

add_vector(v1, v2);

}


void add_vector(Vector v1, Vector v2){

printf("벡터 a+b = (%0.2lf,%0.2lf)", v1.x+v2.x, v1.y+v2.y);

}


6.

#include <stdio.h>


typedef struct {

char title[30];

char toname[20];

char byname[20];

char text[100];

char date[20];

int primary;

} Email;


void main(){

Email x;

printf("제목: ");

gets(x.title);

printf("수신자: ");

gets(x.toname);

printf("발신자: ");

gets(x.byname);

printf("본문: ");

gets(x.text);

printf("보낸날짜(yymmdd): ");

gets(x.date);

printf("우선순위: ");

scanf("%d", &x.primary); 

}


7.

#include <stdio.h>


typedef struct{

char name[100];

int calories;

} Food;


void add_calories(Food info[], int count);


void main(){

Food info[10];

int i=0, count=0;

char an;

while(1){

printf("음식정보를 저장하시겠습니까?(y/n)");

scanf("%c", &an);

fflush(stdin);

if(an=='n')

break; 

printf("음식이름: ");

gets(info[i].name);

printf("칼로리: ");

scanf("%d", &info[i].calories);

fflush(stdin);

i++;

count++;

}

add_calories(info, count);

}


void add_calories(Food info[], int count){

int i, sum=0;

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

sum+=info[i].calories;

printf("총 칼로리는 %d입니다", sum);

}


8.

#include <stdio.h>


typedef struct{

int id_number;

char name[20];

int ph_number;

int age;

} Employee;


void main(){

Employee people[10];

int i, count=0;

for(i=0; i<10; i++){

printf("%d번째 직원정보\n", i+1);

printf("사원번호: "); scanf("%d", &people[i].id_number);

fflush(stdin);

printf("이름: "); gets(people[i].name);

printf("전화번호: "); scanf("%d", &people[i].ph_number);

printf("나이: "); scanf("%d", &people[i].age);

}

printf("\n");

printf("나이가 20이상 30이하인 직원\n");

for(i=0; i<10; i++){

if(people[i].age>=20 && people[i].age<=30){

puts(people[i].name);

count++;

}

printf("해당 총인원: %d명\n", count);

}


9.

#include <stdio.h>

#include <string.h>

 

typedef struct {

    char name[20];

    char homeNum[20];

    char phoneNum[20];

} Book;


void main() {

    Book number[5];

    char search[20];

    int i;

    char an;

 

    for(i=0; i<5; i++) {

        printf("%d번째 전화번호부\n", i+1);

        printf("이    름 : ");        gets(number[i].name);

        printf("자택번호 : ");        gets(number[i].homeNum);

        printf("휴대전화 : ");        gets(number[i].phoneNum);

    }

    printf("\n");

 

    do {

        printf("이름을 검색하시오 : ");

        gets(search);

        for(i=0; i<5; i++) {

            if(strcmp(search, number[i].name) == 0) {

                printf("자택번호 : %s \n", number[i].homeNum);

                printf("휴대전화 : %s \n", number[i].phoneNum);

                printf("\n");

            }

        }

        printf("계속 찾으시겠습니까?(y/n) : ");

        scanf("%c", &an);

        fflush(stdin);

    } while(an != 'n');

}



10.

#include <stdio.h>

#include <stdlib.h>

#include <time.h> 

#define SIZE 52


typedef struct {

int value;

char suit;

} Card;


void init_card(Card pack[], char shape[]);

void print_card(Card pack[], int size);

void shuf_card(Card pack[], int size);


void main(){

Card pack[SIZE];

char shape[]={'c', 'd', 'h', 's'};

init_card(pack, shape);

printf("카드가 초기화 되었습니다.\n");

print_card(pack, SIZE); 

printf("\n");

shuf_card(pack, SIZE);

printf("카드를 섞었습니다.\n");

print_card(pack, SIZE);

printf("\n");

}


void init_card(Card pack[], char shape[]){

int i, j, count=0;

for(i=0; i<4; i++){

for(j=0; j<13; j++){

pack[count].value=j+1;

pack[count].suit=shape[i];

count++;

}

}

}


void print_card(Card pack[], int size){

int i, j;

for(i=0; i<size; i++){

printf("%3d%c", pack[i].value, pack[i].suit);

if((i+1)%13==0)

printf("\n");

}

}


void shuf_card(Card pack[], int size){

int i, j;

srand((unsigned)time(NULL));

Card temp;

for(i=0; i<size-1; i++){

j=rand()%(size-i)+i;

temp = pack[i];

pack[i] = pack[j];

pack[j] = temp;

}

}


11.

#include <stdio.h>

#define PI 3.14

#define SIZE 10


typedef struct {

int type;

union {

struct { double base, height; } tri;

struct { double width, height; } rect;

struct { double radius; } circ;

} shape;

} Figure;


void main(){

Figure data[SIZE];

int i=0;

char an;

do{

printf("저장하려는 도형의 종류를 입력하시오(0=삼각형, 1=사각형, 2=원): ");

scanf("%d", &data[i].type);

fflush(stdin);

switch(data[i].type){

case 0 : 

printf("삼각형의 밑변: "); scanf("%lf", &data[i].shape.tri.base);

printf("삼각형의 높이: "); scanf("%lf", &data[i].shape.tri.height);

i++;

break;

case 1 : 

printf("사각형의 밑변: "); scanf("%lf", &data[i].shape.rect.width);

printf("사각형의 높이: "); scanf("%lf", &data[i].shape.rect.height);

i++;

break;

case 2 : 

printf("원의 반지름: "); scanf("%lf", &data[i].shape.circ.radius);

i++;

break;

default:

printf("숫자를 0~2사이 값을 입력하시오\n");

fflush(stdin);

printf("더 저장하시겠습니까?(y/n)\n");

scanf("%c", &an);

} while(an!='n');

}



12.

#include <stdio.h>

#include <string.h>

#define SIZE 20


typedef struct {

char title[20];

char singer[20];

int class;

} Music;


int i;

int num[SIZE]={0};


void add_music (Music* list);

void print_music (Music* list);

void search_music (Music* list, int size);

void delete_music (Music* list);


void main(){

Music list[SIZE];

int n, result=1;

printf("======================\n");

printf(" 1. 추가(ADD)\n");

printf(" 2. 출력(PRINT)\n");

printf(" 3. 검색(SEARCH)\n");

printf(" 4. 삭제(DELETE)\n");

printf(" 5. 종료(EXIT)\n");

printf("======================\n");

while(result==1){

printf("메뉴를 선택하시오: ");

scanf("%d", &n);

fflush(stdin);

switch(n) { 

case 1: 

add_music(list);

break;

case 2:

print_music(list);

break;

case 3: 

search_music(list, SIZE);

break;

case 4:

delete_music(list);

break;

case 5:

result=0;

}

}


void add_music(Music* list){

do{

printf("1번부터 %d번까지 트랙이 있습니다. 몇 번 트랙에 저장하시겠습니까?", SIZE);

scanf("%d", &i);

fflush(stdin);

if(num[i-1]==1)

printf("이미 저장되어있는 트랙입니다. 다른 트랙번호를 입력하시오\n");

} while(num[i-1]==1);

printf("제목: "); gets(list[i-1].title);

printf("가수: "); gets(list[i-1].singer);

printf("종류(팝=0, 재즈=1, 클래식=2, 락=3): "); scanf("%d",&list[i-1].class);

fflush(stdin);

num[i-1]=1;

printf("\n");

}


void print_music(Music* list){

do{

printf("몇 번 트랙의 음악정보를 출력하시겠습니까? ");

scanf("%d", &i);

if(num[i-1]==0)

printf("해당 트랙엔 저장된 음악정보가 없습니다. 다른 트랙번호를 입력하시오\n");

} while(num[i-1]==0);

printf("제목: %s\n", list[i-1].title);

printf("가수: %s\n", list[i-1].singer);

switch(list[i-1].class){

case 0: printf("종류: 팝\n"); break;

case 1: printf("종류: 재즈\n"); break;

case 2: printf("종류: 클래식\n"); break;

case 3: printf("종류: 락\n"); break;

}

printf("\n"); 

}


void search_music(Music* list, int size){

char searchName[20];

printf("검색하고자 하는 노래 제목을 입력하시오: ");

gets(searchName); 

for(i=0; i<size; i++){

if(strcmp(searchName, list[i].title)==0){

printf("제목: %s\n", list[i].title);

printf("가수: %s\n", list[i].singer);

switch(list[i].class){

case 0: printf("종류: 팝\n"); break;

case 1: printf("종류: 재즈\n"); break;

case 2: printf("종류: 클래식\n"); break;

case 3: printf("종류: 락\n"); break;

}

}

else {

printf("찾으시는 노래가 없습니다\n");

break; 

}

}

printf("\n");

}


void delete_music(Music* list){

do{

printf("몇 번 트랙의 음악정보를 삭제하시겠습니까? ");

scanf("%d", &i);

if(num[i-1]==0)

printf("해당 트랙엔 저장된 음악정보가 없습니다. 다른 트랙번호를 입력하시오\n");

} while(num[i-1]==0);

num[i-1]=0;

printf("%d번 트랙의 음악정보가 삭제되었습니다\n", i-1);

printf("\n");

}

블로그 이미지

얼음꿀차

책을 한 번 읽긴 읽어야겠는데 막상 읽자니 뭘 읽을지 고민되는 당신을 위해 읽을만한 책들을 알려드립니다!

,

13장 Summary


구조체와 배열의 차이점은 묶는 료형들의 일치여부이다.

구조체는 키워드 struct으로 선언하고 공용체는 union, 열거형은 enum으로 선언한다.

구조체의 선언만으로 변수가 만들어지는가? 아니다. 따로 변수의 선언이 필요하다

구조체를 가리키는 포인터 p를 통하여 구조체 안의 변수 x를 참조하는 수식은
(*p).x 또는 p->x
이다.

원본 구조체를 포인터로 함수에 전달하는 경우, 원본 구조체를 훼손하지 않게 하려면 어떻게 하면 되는가? const 키워드가 포인터 앞에 있으면 이 포인터가 가리키는 구조체의 값을 변경하려고 하면 오류메시지가 뜬다. 즉 원본수정이 불가능하게 되어 원본이 훼손되지 않는다


 union data{

   double d;
   int i;

  };

union 은 다른 타입의 변수들이 동일한 기억 공간을 공유할 수 있도록 만든 것이다. 때문에 동시에 모든 멤버 변수들의 값을 저장할 수 없으며 어떤 순간에는 하나의 멤버만 존재할 수 있다


  enum color { red, green, blue};

  enum color favorite = red; 

enum 은 정수형 상수값들을 나열해 놓은 자료형이다.

#define 대신에 열거형을 사용하는 장점은 무엇인가? 특정한 숫자 대신 기호를 사용함으로써 프로그램의 이해도를 향상 시킬 수 있고, 변수가 열거된 값 이외의 값을 취하는 것을 막아서 오류를 줄여준다


   typedef long int BIGINT;

   BIGINT i; 

새로운 자료형을 정의하기 위하여 사용되는 키워드는 typedef이다.

블로그 이미지

얼음꿀차

책을 한 번 읽긴 읽어야겠는데 막상 읽자니 뭘 읽을지 고민되는 당신을 위해 읽을만한 책들을 알려드립니다!

,

13장 Exercise


1. 구조체를 정의하고 c1이라는 이름의 구조체 변수를 정의하시오.

struct customer {

char name;

int post_num;

long mileage;

};

struct customer c1;


2. T/F

(a) 구조체를 선언하면 자동으로 변수가 생성된다. F
(b) typedef은 변수를 선언하는 키워드이다. F, 변수가 아니라 자료형이다
(c) 구조체는 ==연산자를 사용하여 비교할 수 있다. T
(d) 구조체를 함수로 전달하면 원본이 전달된다.   F, 복사본이 전달된다
(e) 구조체 변수는 =연산자를 이용하여 대입될 수 있다. T

비고) 대입의 경우 p1=p2나 p1.x=p2.x, p1.y=p2.y 모두 가능하다. 하지만 비교의 경우 p1==p2는 불가능하고 p1.x==p2.x && p1.y==p2.y 가 가능하다


3. Employee 구조체로 정의된 변수 e에는 salary라는 필드가 있다. 이 필드를 올바르게 참조한 것은?

②e.salary


4. 포인터 p는 Employee 구조체로 정의된 변수 e를 가리킨다. 올바르게 참조한것은?

① p->salary ③ (*p).salary


5. 다음 열거형의 정의를 보고 각 식별자의 정수값을 예측하여 보라.

enum colors {white, red=3, blue, green, black=9 };

 식별자 

 white 

 red 

 blue 

 green 

 black 

 값

 0

 3 

 4 

 5 

 9 

비고) 0부터 혹은 지정된 값으로부터 자동적으로 1씩 증가한다.


6. 다음과 같은 구조체 정의가 있는 경우에 올바른 문장을 모두 골라라

   struct STU{

        char name[30];
        int id;

    } s; 

 ①②③⑤⑦⑧⑥


7. 잠시 컴파일러가 되어보자. 다음 코드에서 오류가 있는 것은?

   union id{

        char name[4];

        long number;

   } var={"Tom", 1}; 

초기화 할 시 한 번에 하나의 멤버만 사용이 되기 때문에  첫 번째 멤버만 초기화된다. 따라서 var={"Tom"}; 으로 바꾸어야 한다.


8. 다음의 설명에 부합하는 구조체를 정의하여 보라.

(a) char title[30]과 int pub_date, pages, price를 포함하는 구조체 book

struct book{

      char title[30];
      int pub_date;
      int pages;
      int price;

};

(b) char name[30], int age, double height를 포함하는 구조체 friend

struct friend{

      char name[30];
      int age;
      double height;

};

(c) 이름, 수량, 가격으로 부품 재고를 표현하는 구조체 part 정의

struct part{

      char name[20];
      int ea;
      int price;

};


9. 다음의 설명에 부합하는 열거형을 정의하여 보라

(a) 빛의 3원색을 표현하는 열거형 primary_color

enum primary_color { RED, GREEN, BLUE };

(b) 12달을 표현하는 열거형 months 정의

enum months { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};

  


10. 다음 코드가 오류를 가지고 있는지를 먼저 분석하고 오류가 있다면 어떤 오류인지 설명하라.

 (a) 

 struct book{

    char title[50];
    int pages;

 };

 book.pages = 512;


 struct book{ 

    char title[50];
    int pages;

 }; book;

 book.pages = 512;


 (b) 

 struct book{

     char title[50]="Data Structures";
     int pages = 577;

 } abook;

 struct book{

      char title[50];
      int pages;

 }; abook = {"Data Structures", 577};

 (c)

 typedef enum { red, green, blue } color;

 color.red = 1;

 typedef enum color { red=1, green, blue };

 (d)

 struct fraction {

     int num;
     int den;

  } *p;

  *p->num = 3;
  *p->den = 5;

 struct fration {

      int num;
      int den;

 } s = {3, 5};

 struct fration p;

 p=&s;



블로그 이미지

얼음꿀차

책을 한 번 읽긴 읽어야겠는데 막상 읽자니 뭘 읽을지 고민되는 당신을 위해 읽을만한 책들을 알려드립니다!

,