본문 바로가기
IT/프로그래밍

쉽게 풀어 쓴 C언어 Express 11장 프로그래밍 문제 해설

by nutrient 2020. 12. 10.
728x90
728x170

쉽게 풀어 쓴 C언어 Express 11장 프로그래밍 문제 해설

쉽게 풀어 쓴 C언어 Express 11장 프로그래밍 문제 해설

 

1.

#include <stdio.h> 

int main(void) { 

int x = 0x12345678; 

unsigned char *xp = (char *)&x; 

printf("바이트순서: %x %x %x %x\n", xp[0], xp[1], xp[2], xp[3]); 

return 0; 

} 

바이트순서: 78 56 34 12 

계속하려면 아무 키나 누르십시오 . . . 인텔 CPU는 리클 엔디안임을 알 수 있다. 

2.

#include <stdio.h> 

void get_sum_diff(int x, int y, int *p_sum, int *p_diff); 

int main(void) { 

int sum=0, diff=0; 

get_sum_diff(100, 200, &sum, &diff); 

printf("원소들의 합=%d\n", sum); 

printf("원소들의 차=%d\n", diff); 

return 0; 

} 

void get_sum_diff(int x, int y, int *p_sum, int *p_diff) { 

*p_sum = x+y; 

*p_diff = x-y; 

} 


3.

#include <stdio.h> 

#include <stdlib.h> 

void array_fill(int *A, int size); 

void array_print(int *A, int size); 

int main(void) { 

int data[10]; 

array_fill(data, 10); 

array_print(data, 10); 

return 0; 

} 

void array_fill(int *A, int size) { 

int i; 

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

A[i] = rand(); 

} 

} 

void array_print(int *A, int size) { 

int i; 

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

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

} 

printf("\n"); 

} 



4.

#include <stdio.h> 

void array_print(int *A, int n); 

int main(void) { 

int list[10]= { 

1, 2, 3, 4 

} 

; 

array_print(list, 10); 

return 0; 

} 

void array_print(int *A, int n) { 

int i; 

printf("A[]={ "); 

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

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

} 

printf(" }\n"); 

} 



5.

#include <stdio.h> 

void convert(double *grades, double *scores, int size); 

void print(double *a, int size) { 

int i; 

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

printf("%f ", a[i]); 

} 

printf("\n"); 

} 

int main(void) { 

double grades[10] = { 

1, 2, 3, 4, 3, 2,1, 2,3, 4 

} 

; 

double scores[10] = { 

0 

} 

; 

convert(grades, scores, 10); 

print(scores, 10); 

return 0; 

} 

void convert(double *grades, double *scores, int size) { 

int i; 

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

scores[i] = 100.0*(grades[i]/4.3); 

} 

} 


6.

#include <stdio.h> 

#define N_DATA 10 

void array_copy(int *a, int *b, int size); 

void array_print(int *a, int size); 

int main(void) { 

int A[N_DATA] = { 

1, 2, 3 

} 

; 

int B[N_DATA] = { 

0 

} 

; 

array_copy(A, B, N_DATA); 

array_print(B, N_DATA); 

return 0; 

} 

void array_copy(int *a, int *b, int size) { 

int i; 

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

b[i] = a[i]; 

} 

} 

void array_print(int *a, int size) { 

int i; 

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

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

} 

printf("\n"); 

} 


7.

#include <stdio.h> 

#define N_DATA 10 

void array_add(int a[], int b[], int c[], int size); 

int main(void) { 

int A[N_DATA] = { 

1, 2, 3 

} 

; 

int B[N_DATA] = { 

0 

} 

; 

int C[N_DATA] = { 

0 

} 

; 

array_add(A,B,C, N_DATA); 

return 0; 

} 

void array_add(int a[], int b[], int c[], int size) { 

int i; 

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

c[i]=a[i]+b[i]; 

} 

} 



8.

#include <stdio.h> 

#define N_DATA 10 

int array_sum(int a[], int size); 

int main(void) { 

int A[N_DATA] = { 

1, 2, 3 

} 

; 

int sum ; 

sum = array_sum(A, N_DATA); 

printf(“%d \n”, sum); 

return 0; 

} 

int array_sum(int a[], int size) { 

int i; 

int sum=0; 

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

sum += a[i]; 

} 

return sum; 

} 


9.

#include <stdio.h> 

int search(int *A, int size, int x); 

int main(void) { 

int data[10] = { 

1, 2, 3, 4, 5, 6, 7, 8, 9, 10 

} 

; 

int index = search(data, 10, 9); 

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

return 0; 

} 

int search(int *A, int size, int x) { 

int i; 

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

if( A[i] == x ) return i; 

} 

return -1; 

} 



10.

#include <stdio.h> 

void get_gcd_lcm(int x, int y, int *gcd, int *lcm); 

int main(void) { 

int x, y, g, l; 

printf("두개의 정수를 입력하시오: "); 

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

get_gcd_lcm(x, y, &g, &l); 

printf("최소공배수는 %d입니다.\n",l); 

printf("최대공약수는 %d입니다.\n",g); 

return 0; 

} 

void get_gcd_lcm(int org_x, int org_y, int *gcd, int *lcm) { 

int x = org_x; 

int y = org_y; 

int tmp; 

while(y != 0) { 

tmp = y; 

y = x % y; 

x = tmp; 

} 

*gcd = x; 

*lcm = org_x * org_y / *gcd; 

} 



11.

/* i는 정렬된 왼쪽리스트에 대한 인덱스 

 j는 정렬된 오른쪽리스트에 대한 인덱스 

 k는 정렬될 리스트에 대한 인덱스 */ 

void merge(int left, int mid, int right) { 

int i, j, k, l; 

i=left; 

j=mid+1; 

k=left; 

/* 분할 정렬된 list의 합병 */ 

while(i<=mid && j<=right) { 

if(list[i]<=list[j]) 

 sorted[k++] = list[i++]; else 

 sorted[k++] = list[j++]; 

} 

if(i>mid)  

/* 오른쪽리스트에 남아 있는 레코드의 일괄 복사 */ 

for (l=j; l<=right; l++) 

 sorted[k++] = list[l]; else  

/* 왼쪽리스트에 남아 있는 레코드의 일괄 복사 */ 

for (l=i; l<=mid; l++) 

 sorted[k++] = list[l]; 

/* 배열 sorted[]의 리스트를 배열 list[]로 재복사 */ 

for (l=left; l<=right; l++) 

 list[l] = sorted[l]; 

}
728x90
그리드형

댓글