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

10장 Exercise


1. 배열이 10개의 원소를 가진다면 첫 번째 원소의 배열 번호는?     ②0


2. 배열 char[5][6]은 총 몊개의 원소를 가지는가?        ③30


3. 다음 중 잘못 선언된 배열을 모두 선택하라.    ③, ④ (변수, 실수는 배열의 크기가 될 수 없다.)


4. int a[100]={10}; 으로 선언된 배열에서 a[99]의 초기값은 무엇인가?    ①0


5. int a[2][2] = {1, 2, 3, 4}에서 a[1][1]의 초기값은?        ①1


6. 프로그램의 오류를 전부 수정하라.

#define MAX_SIZE 3

int main(void)
{

int a[MAX_SIZE]={0, 1, 2, 3};
int b[3.0];

for(i=0; i<=MAX_SIZE; i++)
        b[i]=a[i];

return 0;

}

 #define MAX_SIZE 3

int main(void)
{

int a[MAX_SIZE]={0, 1, 2};
int b[3];

for(i=0; i<=MAX_SIZE; i++)
        b[i]=a[i];

return 0;

}


7. 

  (a) 배열로 수정

float grade[3];

 (b) 입력 대신 배열 초기값 설정

float grade[3]={10.0, 20.0, 30.0}

 (c) 평균함수 이용


#include <stdio.h>


float get_average(float a[], int n);


int main()

{

float grade[3] = {10.0, 20.0, 30.0};

printf("학생들의 평균: %f", get_average(grade, 3));

return 0;

}

float get_average(float a[], int n)

{

int i;

float sum=0;

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

        sum += a[i];

return sum/n;

}

 (d) 분포표 출력

#include <stdio.h>

int main()

{

int i, people[10] = {0};

float grade[3] = {10.0, 20.0, 30.0};


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

if (grade[i]>=91 && grade[i]<=100) people[9]++;

else if(grade[i]>=81) people[8]++;

else if(grade[i]>=71) people[7]++;

else if(grade[i]>=61) people[6]++;

else if(grade[i]>=51) people[5]++;

else if(grade[i]>=41) people[4]++;

else if(grade[i]>=31) people[3]++;

else if(grade[i]>=21) people[2]++;

else if(grade[i]>=11) people[1]++;

else if(grade[i]>=0) people[0]++; }

printf("점수대 인원수\n");

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

   printf("%d-%d   %d\n", i*10+1, i*10+10, people[i]); 

return 0;

}



8. 잘못된 부분 수정

(a)

int main(void)

{

int grade[10][60];

compute_avg(grade);

}

int compute_avg(int array[][]){...}

 

 int main(void)

{

int grade[10][60];

compute_avg(grade);

}

int compute_avg(int array[][60]){...}


cf. 다차원 배열의 경우 1차원 배열과 비슷하나 다만 첫 번째 인덱스를 제외한 나머지 인덱스의 범위를 적어주어야한다

 (b)

float test[10];

scanf("%f", test[0]);

 float test[10];

scanf("%f", &test[0]);

 (c)

int main(void)

{

int x, y;

int test[10][5];

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

for(y=0; y<10; y++)

test[x][y]=0;

return 0;

}

 int main(void)

{

int x, y;

int test[5][10];

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

for(y=0; y<10; y++)

test[x][y]=0;

return 0;

}



블로그 이미지

얼음꿀차

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

,

LAB WEEK#7 Function

프로그래밍 2018. 10. 31. 16:18


LAB.W07(Function)_1029.ppt


1.

#include <stdio.h>


int power(int b, int n)

{

int i, p=1;

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

p = p*b;

return p;

}


int main(void) 

{

int b, n, result;

printf("Please enter two numbers: ");

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


result = power(b, n);


printf("RESULT: %d\n", result);

return 0;

}



2.

#include <stdio.h>

float f(float n)

{

float i, a=1;

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

a = a*i;

return a;

}


float f2(float n, float r)

{

float i, a=1;

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

a = a*i;

return a;

}


float C(float n, float r)

{

float c;

c = f(n)/f2(n, r)/f(r);

return c;

}


int main(void) 

{

float n, r, result;

printf("Please enter two numbers: ");

scanf("%f %f", &n, &r);


result = C(n, r);


printf("RESULT: %f\n", result);

return 0;

}



3.

#include <stdio.h> // 반복함수 이용 


int dec2bin(int n)

{

int a=0, i, sum=0;

for(i=1; n>0; )

{

a = n%2;

n = n/2;

sum = sum + a*i;

i = i*10;

}

return sum;

}


int main(void) 

{

int  n;

printf("Please enter a decimal number: ");

scanf("%d", &n);


printf("RESULT: %d \n", dec2bin(n));

return 0;

}

=====================================================

#include <stdio.h> // 재귀함수 이용 & void, printf포함 


void dec2bin(int n)

{

int bin;

if (n>0)

{

bin = n%2;

dec2bin(n/2);

printf("%d", bin);

}

return;

}


int main(void) 

{

int  n;

printf("Please enter a decimal number: ");

scanf("%d", &n);


printf("RESULT: \n");

dec2bin(n);

return 0;

}

==================================================

#include <stdio.h> // 재귀함수 이용 & int형, printf미포함 


int dec2bin(int n, int i)

{

if(n<2)

return i;

else

return n%2*i + dec2bin(n/2, i*10);

}


int main(void) 

{

int n, i=1;

printf("Please enter a decimal number: ");

scanf("%d", &n);


printf("RESULT: %d \n", dec2bin(n, i));

return 0;

}



4.

#include <stdio.h> // 반복함수 이용 

float sequence(int n)

{

float i, o, sum=0;

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

{

o = 1/i;

sum = sum + o;

}

return sum;

}



int main(void) 

{

int  n;

printf("Please enter a number: ");

scanf("%d", &n);


printf("RESULT: %f\n", sequence(n));

return 0;

}

===========================================

#include <stdio.h> // 재귀함수 이용 

float sequence(int n)
{
if (n==1)
return 1.0;
else  
return 1.0/n + sequence(n-1);
}

int main(void) 
{
int n;
printf("Please enter a number: ");
scanf("%d", &n);
printf("RESULT: %f\n", sequence(n));
return 0;
}


★★★★★★ float의 자료형을 감안하여 return 뒤의 정수는 모두 소숫점을 붙여줘야한다.

5.

#include <stdio.h> //반복함수 이용 


int get_tri_number(int n)

{

int i, sum=0;

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

sum = sum + i;

return sum;

}


int main(void) 

{

int  n;

printf("Please enter a number: ");

scanf("%d", &n);


printf("RESULT: %d\n", get_tri_number(n));

return 0;

}

==============================================

#include <stdio.h> // 재귀함수 이용 


int get_tri_number(int n)

{

if (n==1)

return 1;

else

return n + get_tri_number(n-1); 

}


int main(void) 

{

int  n;

printf("Please enter a number: ");

scanf("%d", &n);


printf("RESULT: %d\n", get_tri_number(n));

return 0;

}


6.

#include <stdio.h>


int get_carry_op(int a, int b)

{

int count=0, i=10, sum=0;

while(a>1)

{

sum = a%i + b%i;

if(sum>9)

{

count++;

a = a/i + 1;

b = b/i;

}

else 

{

a = a/i;

b = b/i;

}

  }

return count;

}


int main(void) 

{

int  a, b;

printf("Please enter two 3-digit numbers: ");

scanf("%d %d", &a, &b);


printf("%d carry operation(s)\n", get_carry_op(a, b));

return 0;

}



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

Assignment #51 ~ #60  (0) 2018.12.19
LAB WEEK#8 Array  (0) 2018.11.05
블로그 이미지

얼음꿀차

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

,

10장 Summary


배열 원소에 붙여져 있는 번호를 인덱스(index) 또는 첨자(subscript)라고 한다.

배열 a의 i번째 원소는 a[i]와 같이 참조한다.

int a[10];과 같이 선언된 배열에서 사용할 수 있는 인덱스의 값은 0에서 9까지이다.

정수형 배열 a[6]을 선언하고 1, 2, 3, 4, 5, 6으로 초기화하는 문장은 int a[6] = {1, 2, 3, 4, 5, 6};과 같다.

배열의 크기를 주지 않고 초기값(1, 2, 3, 4, 5, 6)의 개수로 배열의 크기를 결정하려면 int a[] = {1, 2, 3, 4, 5, 6}와 같이 선언한다.
// #define SIZE 3 이고 int a[SIZE] = {1, 2, 3} 이면 컴파일 오류다!

배열 a의 크기를 자동적으로 계산하려면 수식 sizeof(배열)/sizeof(배열원소);을 사용한다.

초기값의 개수가 배열 원소의 개수보다 적은 경우에는 나머지 원소들은 0값으로 초기화 된다.

int a[3][5][2]와 같이 정의된 배열에서 원소의 총개수는30(3*5*2)이다.

배열을 함수의 인수로 보내면 원본이 전달된다.
("값의 호출에 의한" 매개변수 복사가 아님, 배열 원소를 인수로 하여 함수호출하면 복사본이 전달된다.) 

배열을 함수의 인수로 전달할 때 원본 배열의 변경을 금지하고 싶으면 const 지정자을 매개 변수 앞에 붙인다.

하나의 배열을 다른 배열로 통째로 대입하거나 비교할 수 있는가? 즉 배열a[]와 배열b[]가 있을 때 다음과 같은 문장이 가능한가?



틀린 예시 (대입, 비교)

 바른예시 (대입, 비교)

int a[10], b[10];

a=b;

if(a==b) 
      printf("같음");

 int i, a[10], b[10];

 for(i=0; i<10; i++)
 {
      if (a[i] == b[i])
            printf("같음");
 }

 int a[SIZE] = {1, 2, 3, 4, 5};
 int b[SIZE] = {1, 2, 3, 4, 5};

 if (a==b)
      printf("같습니다");
 else
      printf("다릅니다");

 int a[SIZE] = {1, 2, 3, 4, 5};
 int b[SIZE] = {1, 2, 3, 4, 5};

 for(i=0; i<SIZE; i++)
 {
      if(a[i] != b[i])
       {   
           printf("다릅니다");
           break;
       }
 }



배열의 크기가 음수, 실수, 변수이거나 비어있으면 컴파일 오류다. (단, #define을 통한 기호 상수는 가능하다)

배열을 초기화할 때 일부만 주면 나머지 원소들은 0으로 초기화된다.

블로그 이미지

얼음꿀차

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

,

9장 Programming


1.

(a) 정적 지역 변수 사용

#include <stdio.h>


int add(int x, int y);

int sub(int x, int y);

int mul(int x, int y);

int dvd(int x, int y);


int main()

{

int x, y;

char op;

while(1) 

{

printf("연산을 입력하시오: ");

scanf("%d %c %d", &x, &op, &y);

switch(op)

{

case '+' : printf("연산 결과: %d\n", add(x, y)); break;

case '-' : printf("연산 결과: %d\n", sub(x, y)); break; 

case '*' : printf("연산 결과: %d\n", mul(x, y)); break; 

case '/' : printf("연산 결과: %d\n", dvd(x, y)); break; 

}

}

}


int add(int x, int y)

{

static int count=0;

count++;

printf("덧셈은 총 %d번 실행되었습니다\n", count);

return x+y;

}


int sub(int x, int y)

{

static int count=0;

count++;

printf("뺄셈은 총 %d번 실행되었습니다\n", count);

return x-y;

}


int mul(int x, int y)

{

static int count=0;

count++;

printf("곱셈은 총 %d번 실행되었습니다\n", count);

return x*y;

}


int dvd(int x, int y)

{

static int count=0;

count++;

printf("나눗셈셈은 총 %d번 실행되었습니다\n", count);

return x/y;

}


(b) 전역 변수 사용

#include <stdio.h>


static int count_add=0;

static int count_sub=0;

static int count_mul=0;

static int count_dvd=0;

int add(int x, int y);

int sub(int x, int y);

int mul(int x, int y);

int dvd(int x, int y);


int main()

{

int x, y;

char op;

while(1) 

{

printf("연산을 입력하시오: ");

scanf("%d %c %d", &x, &op, &y);

switch(op)

{

case '+' : printf("연산 결과: %d\n", add(x, y)); break;

case '-' : printf("연산 결과: %d\n", sub(x, y)); break; 

case '*' : printf("연산 결과: %d\n", mul(x, y)); break; 

case '/' : printf("연산 결과: %d\n", dvd(x, y)); break; 

}

}

}


int add(int x, int y)

{

count_add++;

printf("덧셈은 총 %d번 실행되었습니다\n", count_add);

return x+y;

}


int sub(int x, int y)

{

count_sub++;

printf("뺄셈은 총 %d번 실행되었습니다\n", count_sub);

return x-y;

}


int mul(int x, int y)

{

count_mul++;

printf("곱셈은 총 %d번 실행되었습니다\n", count_mul);

return x*y;

}


int dvd(int x, int y)

{

count_dvd++;

printf("나눗셈셈은 총 %d번 실행되었습니다\n", count_dvd);

return x/y;

}




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

int get_dice_face(int x);

void main()
{
int x;
srand((unsigned)time(NULL));
get_dice_face(x);
}

int get_dice_face(int x)
{
int i;
static int count1=0;
static int count2=0;
static int count3=0;
static int count4=0;
static int count5=0;
static int count6=0;
for(i=1; i<=1000; i++)
{
x=rand()%6+1;
if(x==1) count1++;
if(x==2) count2++;
if(x==3) count3++;
if(x==4) count4++;
if(x==5) count5++;
if(x==6) count6++;
if(i%100==0)
printf("%d %d %d %d %d %d\n", count1, count2, count3, count4, count5, count6);
}
return x;
}


3.

#include <stdio.h>

#include <stdlib.h>

#include <time.h>


int get_random(void);


void main()

{

printf("%d\n", get_random());

printf("%d\n", get_random());

printf("%d\n", get_random());

}


int get_random()

{

static int inited=0;

if(inited==0)

{

printf("초기화\n");

srand((unsigned)time(NULL));

inited=1;

}

}



4.

#include <stdio.h>


double recursive(double n);


int main()

{

double n;

printf("정수 N을 입력하시오: ");

scanf("%lf", &n);

printf("recursive(%.0lf)의 결과: %.4lf", n, recursive(n));

 

}


double recursive(double n)

{

if (n==1)

return 1.0;

else

return 1.0/n + recursive(n-1);

}



5.

#include <stdio.h>


void save (int amount);

void draw (int amount);

int money=0;


void main()

{

int n, amount;

do 

{

printf("메뉴를 선택하세요: 저축(1), 인출(2), 종료(3): ");

scanf("%d", &n);

if(n==1)

{

printf("저축할 금액: ");

scanf("%d", &amount);

save(amount);

}

else if(n==2)

{

printf("인출할 금액: ");

scanf("%d", &amount);

draw(amount);

}

else if (n==3)

break;

else

printf("잘못 입력하셨습니다.\n");

} while(1);

}


void save(int amount)

{

money += amount;

printf("현재 잔액은 %d입니다.\n", money);

}


void draw(int amount)

{

if (money>=amount)

{

money -= amount;

printf("현재 잔액은 %d입니다.\n", money);

}

else

{

printf("잔액이 부족합니다.\n");

money=money;

printf("현재 잔액은 %d입니다.\n", money); 

}

}



6.

#include <stdio.h>


int get_tri_number(int n);


void main()

{

int n;

printf("입력하시오: ");

scanf("%d", &n);

printf("해당 삼각수의 값은 %d이다.", get_tri_number(n));

}


int get_tri_number(int n)

{

if(n==1)

return 1;

else

return n + get_tri_number(n-1);

}



7.

#include <stdio.h> //  순환함수 사용한 경우 


int recursive (int n, int k);


void main()

{

int n, k;

printf("nCk 중 n과 k의 값을 차례대로 입력하시오: ");

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

printf("이항계수의 값은 %d이다.", recursive(n, k));

}


int recursive (int n, int k)

{

if ( k==0 || k==n)

return 1;

else 

return recursive(n-1, k-1) + recursive (n-1, k);

}




#include <stdio.h> //  반복함수 사용한 경우 


int F_1(int x);

int F_2 (int x, int y);


void main()

{

int n, k, result;

printf("nCk 중 n과 k의 값을 차례대로 입력하시오: ");

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

if ( k==0 || k==n)

result = 1;

else  // nCk를 n!/(n-k)!/k! 로 식 전환

result = F_1(n-1)/F_1(k-1)/F_2(n, k) + F_1(n-1)/F_1(k)/F_2(n-1, k);

printf("이항계수의 값은 %d이다.", result);

}


int F_1(int x) // n!과 k!로 쓰임

{

int i, f=1;

if (x==1)

return 1;

else

{

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

f = f*i;

return f; 

}

}


int F_2(int x, int y) // (n-k)! 로 쓰임

{

int i, f=1;

if ( x-y ==1 || x-y <1)

return 1;

else

{

for(i=1; i<=x-y; i++)

f = f*i;

return f; 

}

}



8.

#include <stdio.h>


void show_digit(int n);


void main()

{

int n;

printf("입력하시오: ");

scanf("%d", &n);

show_digit(n);

}


void show_digit(int n)

{

if (n<10)

printf("%d ", n);

else

{

show_digit(n/10);

printf("%d ", n%10);

}

}


블로그 이미지

얼음꿀차

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

,