C - 기초 중간 정리 (데이터형~배열)

  1. 다음 기억공간의 이름으로서 가능한 것은?
    Char No2 _abcd intfloat %int

풀이)
Char No2, _abcd intfloat

변수 이름 짓는 규칙:
영문자, 숫자, _ 조합으로 만든다.
예약어는 사용할 수 없다.(-> char, int, short, float, double)
[프로그램 개발 지식 공유]

  1. 다음 데이터형에 대해 정수형인지 실수형인지와 기억 공간의 크기를 적으시오
기본형 정수or실수형 크기(bytes)
int    
     
     
     
     

풀이)

기본형 정수or실수형 크기(bytes)
char 정수 1byte
int 정수 4byte
long 정수 4byte
float 실수 4byte
double 실수 8byte
  1. C언어에서 함수 호출 시, 매개변수 전달방식은?

풀이)
call by value
C언어에서는 값에 의한 호출 방식을 사용한다.
포인터를 이용하면 call by reference 방식을 사용할 수 있다.
참고하면 좋은 글!

  1. 다음을 C코딩으로 표현
    1) 2진수 1101을 정수형변수 k에 보관

2) 16진수 B34를 정수형변수 hex에 보관

3) val이라는 기억공간의 값을 문자로 출력한다.

풀이)

정수 리터럴
0b0101 : 2진수 정수 0101의 리터럴 표현
0741 : 8진수 정수 741의 리터럴 표현
0xAB3 : 16진수 정수 AB3의 리터럴 표현

정수 출력 서식 지정자
%d : char, short, int 를 정수로 출력
%o : 부호 없는 8진 정수
%x : 부호 없는 16진 정수(소문자)
%X : 부호 없는 16진 정수(대문자)
%ld : long 을 정수로 출력
%lld : long long 을 정수로 출력

문자 리터럴
‘h’ : 문자 h 리터럴 표현
“hello world” : 문자열 hello world 리터럴 표현

문자 출력 서식 지정자
%c : 문자
%s : 문자열(문자 배열)

  1. 다음 출력문으로 나타나는 내용을 적으시오
printf("Hi%3d \n \ \n&",34);
printf("\ \ \n%8.3f",3.2);

풀이)
%3d 라는 것은 출력할 공간 3칸을 확보하고, 인자로 받는 34를
그 자리에 오른쪽으로 붙여서 출력한다는 의미.
&는 그대로 출력한다.
\\ : 역슬래쉬 두개는 출력 시 역슬래쉬 하나를 그대로 출력한다는 의미이다.
\n : 커서를 다음 줄 맨 앞쪽(왼쪽)으로 붙인다.
%8.3f : 8칸의 출력한 공간을 확보하고, 소수점은 3자리까지
반올림하여 출력하겠다는 뜻이다. 만약 소수점이 첫번째까지
있는 숫자라면, 오른쪽 나머지는 0으로 채운다.

Hi 34
\n&\
   3.200

(자릿수 맞추어서 출력하기, 소수점 반올림 출력)참고하면 좋은 글!

  1. 정수형 변수 i를 활용하여 다음과 같이 출력하고자 한다.
    1~4에 들어갈 내용은?

-4 0 4 8 12 16 20 …. 124

for(1;2;3) {
    printf("4  ",i);
}

풀이)
1 : i = -4
2 : i <= 124
3 : i += 4
4 : %d

  1. 정수형 변수 k를 활용하여 다음과 같이 출력하고자 한다.
    완전한 프로그램을 작성하시오.(다음 숫자가 계산된 값들 나열)

$4/(32)$ , $5/(43)$ , … , $100/(99 * 98)$

풀이)

#include<stdio.h>
main() {
    int i;
    float result;
    for(i=2;i<=98;i++) {
        result=(float)(i+2)/((i+1)*i);
        printf("%7.6f\n",result);
    }
}
  1. sum과 x라는 2개의 변수만을 이용하여 아래의 내용을 계산하는 완전한 프로그램을 작성하시오(for문 이용)
    1 + 4 + 7 + 10 + 13 + 16 + 19 + 22

풀이)

#include<stdio.h>
main() {
    int i,sum = 0;
    for(i = 1;i<=22;i+=3) {
        sum += i;
    }
}
  1. 다음에 주어진 배열로부터 각 문항을 코딩하시오(for문 이용, 주요 부분 코딩)
int m[12] = {10,17,22,14,19,4,25,12,35,9,11,8};

1) 순서대로 출력
2) 역순 출력
3) 배열 내에 저장된 값이 짝수인 경우에 한해 모두 출력
4) 평균을 출력
5) 30 이하인 값의 합계
6) 최소값 출력

풀이)

#include<stdio.h>
main() {
    int m[12] = {10,17,22,14,19,4,25,12,35,9,11,8};
    int i, sum=0,min = m[0];
    float avr;
    int mSize = sizeof (m) / sizeof (int);
    for(i=0;i<mSize;i++) {
    // 주요 부분 
    }
}

1) 순서대로 출력

printf("%d ",m[i]);
// m[0], m[1], ... , m[11]

2) 역순 출력

printf("%d ",m[(mSize-1) - i]);
// m[11], m[10], ... , m[0]

3) 배열 내에 저장된 값이 짝수인 경우에 한해 모두 출력

if(m[i] % 2 == 0) {
    printf("%d ", m[i]);
}

4) 평균을 출력

#include<stdio.h>
main() {
    int m[12] = {10,17,22,14,19,4,25,12,35,9,11,8};
    int i, sum=0;
    float avr;
    int mSize = sizeof (m) / sizeof (int);
    for(i=0;i<mSize;i++) {
        sum += m[i];
    }
    avr = sum/mSize;
    printf("%d ", avr);
}

5) 30 이하인 값의 합계

if(m[i] <= 30) {
    printf("%d \n", m[i]);
}

6) 최소값 출력

#include<stdio.h>
main() {
    int m[12] = {10,17,22,14,19,4,25,12,35,9,11,8};
    int i, min = m[0];
    float avr;
    int mSize = sizeof (m) / sizeof (int);
    for(i=0;i<mSize;i++) {        
        if(m[i]<min) {
            min = m[i];
        }
    }
    printf("%d ", min);
}
  1. “We are the Champion, we will keep on fighting till the end”
    1) 위 문자열에 대한 선언
    2) 문자 갯수는?
    3) 모두 대문자로 바꾸어라
    4) 문자 e의 갯수는?
    5) THE 의 개수는?
    6) 공백문자, 특수문자의 갯수는?

풀이
1) 위 문자열에 대한 선언

char str[] = "We are the Champion, we will keep on fighting till the end";

2) 문자 갯수는?

int i,count = 0;
for(i=0;str[i] != '\0';i++) {
    count++;
}

3) 모두 대문자로 바꾸어라
아스키코드표 참고:
image

‘A’ = 65
‘a’ = 97
space = 32
‘0’ = 48
null = 0

int i;
int delta = 'a'-'A';
for(i=0;str[i] != '\0';i++) {
    if(str[i] >= 'a' && str[i] <= 'z') { // 소문자라면
        str[i] -= delta; // 대문자로 바꾸기
    }
}
printf("%s",str);

4) 문자 e의 갯수는?

#include<stdio.h>
main() {
	int i,count = 0;
	char str[] = "We are the Champion, we will keep on fighting till the end";
	int delta = 'a'-'A';

	for(i=0;str[i] != '\0';i++) {
	    if(str[i] == 'e') {
			count++;
	    }
	}
	printf("%d",count);
}

5) THE 의 개수는?

#include<stdio.h>
main() {
	int i,count = 0;
	char str[] = "We are the Champion, we will keep on fighting till the end";
	int delta = 'a'-'A';

	for(i=0;str[i] != '\0';i++) {
	    if(str[i] >= 'a' && str[i] <= 'z') { // 소문자라면
			str[i] -= delta;
	    }
	}
	for(i=2;str[i] != '\0';i++) {
		if(str[i-2] == 'T' && str[i-1] == 'H' && str[i] == 'E') {
			count++;
		}
	}
	printf("count = %d", count);
}    

6) 공백문자, 특수문자의 갯수는?

태그:

업데이트:

댓글남기기