본문으로 바로가기

[C] 변수, printf, scanf, 자료형

category 개발자과정준비/C 2020. 9. 23. 16:24
반응형

C언어도 베낀 언어인데 다른 언어들보다 정리를 잘해놔서 널리 쓰이고 있다.

 

반환값 이름(인자)

{

    일할것들;

    명령어;

}

 

 일할것들, 명령어들을 중괄호{ } 로 모아둔 것들을 단위 작업이라고 한다. C에서는 Function(함수)이라고하고 C#에서는 메서드라고 한다. 단위 작업을 모아둔 것들을 실행파일 혹은 프로그램이라고 부른다.

 

 C언어는 옛날 언어이기 때문에 보안 기능이 없다. -> 접근 속성이 없다. -> public, private, protected 등이 없다.

 

 주석(Comment)은 //와 /**/  로 작성할 수 있다. 이는 C#과 동일하다.

 

변수를 선언할때는 

자료형 변수명;   으로 선언한다.

int a;

 

변수의 이름을 정할때 반드시 아래와 같은 규칙을 지켜줘야한다.(C#도 동일하다)

1. 변수의 이름은 알파벳, 숫자, 언더바(_)로 구성된다.

2. C언어는 대소문자를 구분한다. 따라서 변수 Val과 변수 val은 서로 다른 변수이다.

3. 변수의 이름은 숫자로 시작할 수 없고, 키워드(if, Switch 등)를 사용하는 것도 불가능하다.(키워드는 예약어라고도한다)

4. 공백이 포함될 수 없다.

 

 

printf() 함수

printf()함수는 형식지정자와 함께 사용한다. 많이 사용되는 형식지정자는 다음과 같다.

 

#include<stdio.h>

int main(void) {
	int a, b;
	float f;

	a = 123;
	b = -12;
	f = 123.4567;

	printf("*1234567890*\n");
	printf("%5d*\n", a+b);
	printf("*%7d*\n", b);
	printf("*%8.2f*\n", f);
}

 

printf("%5d*\n", a+b);

printf() 함수는 문자열("") 이나 변수 뿐만아니라 상수나 수식도 출력시킬 수 있다.

%5d : 5칸을 확보하고 십진수를 넣어라.

 

printf("*%7d*\n", b);

정수형 변수 b를 출력할 때 10진수의 정수를 일곱 자리로 출력하라는 표시이다.

%7d : 7칸을 확보하고 십진수를 넣어라

 

printf("*&8.2f*\n", f);

8칸을 확보하고 뒤에서 2칸은 소숫점 자리이다. 

f는 123.4567인데

+ 1 2 3 4 5 6 7 

      1 2 3 .  4 6       

 이 출력 된 것을 볼 수 있는데, 이는 123.45 인데 두번째자리까지만 뜨고 뒤에서 반올림을해서 123.46이 출력되었다.

 

 

 

 

scanf() 함수

키보드를 통한 사용자의 입력은 표준입력 함수인 scanf()를 이용한다. scanf() 함수의 사용은 printf()함수의 경우와 마찬가지로 형식지정자를 이용한다.

 scanf() 함수가 키보드로부터 입력값을 받을 때는 사용자가 <엔터 키>를 누르기 전까지는 입력값을 읽지 않는다. 이것은 프로그램과 키보드 사이에 일시적으로 입력값을 저장하는 버퍼라고 부르는 임시 기억공간이 있기 때문이다. scanf() 함수가 여러 개의 입력값을 동시에 읽을 경우에는 입력값 사이에 단락 문자를 넣어서 분리한다. 단락문자로는 위에서 사용된 공백, 개행, 탭 문자 등을 사용할 수 있다.

 

 

 

1byte char 정수 / 문자형

2byte short

4byte int

byte형은 C언어에는 없다.

 

3개의 변수 값을 입력받아 출력하는 프로그램 예제

#pragma warning(disable: 4996) 
#include <stdio.h>

int main(void) {
	int num;
	char ch;
	float fnum;

	printf("세 개의 값을 입력하시오 : [정수][문자][실수]\n");

	scanf("%d %c %f",&num, &ch, &fnum );

	printf("입력에 대한 출력 : [정수 = %d] [문자 = %5c] [실수 = %f]\n",
									num, ch, fnum);
	return 0;
}

 

 

 

 

1. 3개의 정수(각각 0이상 6미만 이내)를 입력받아 그들의 총합과 평균을 구하는 예제

(평균은 소수점 둘째자리에서 반올림하여 출력하시오)

예시) 

세 개의 정수를 입력 : 2 3 5

총합 >> 10

평균 >> 3.3

#pragma warning(disable: 4996) 
#include <stdio.h>

int main(void) {
	int num1 = 0;
	int num2 = 0;
	int num3 = 0;
	printf("3개의 정수를 입력하시오(0이상 6미만이내) : ");
	scanf_s("%d %d %d", &num1, &num2, &num3);
	printf("총합 : %d \n", num1 + num2 + num3);
	printf("평균 : %.1f \n", (float)(num1 + num2 + num3)/3);
}

 

 

 

2. 태어난 연도와 희망 연도를 입력받아서 희망 연도의 나이를 출력하시오.

(단, 태어난 년의 나이를 1살로 간주한다.) 

예시)

태어난 연도? 1980

희망 연도? 2001

당신이 2001년에 나이는 22살입니다.

#pragma warning(disable: 4996) 
#include <stdio.h>

int main(void) {
	int BirthYear = 0;
	int TargetYear = 0;

	printf("태어난 연도는? : ");
	scanf("%d", &BirthYear);

	printf("희망 연도는? : ");
	scanf("%d", &TargetYear);

	printf("당신이 %d년일때 나이는 %d살 입니다.",BirthYear,(TargetYear - BirthYear));
}

 

 

 

3. 하나의 정수를 입력받아서 제곱 연산을 한 다음 얻어지는 결과를 출력하는 프로그램을 작성.

예시) 4를 입력하면 16이 출력

#pragma warning(disable: 4996) 
#include <stdio.h>

int main(void) {
	int iNum = 0;
	printf("제곱할 정수를 입력하세요 : ");
	scanf("%d", &iNum);
	printf("%d 를 제곱한 정수는 %d 입니다.\n", iNum, iNum * iNum);
}

 

 

 

4. 입력받은 3개의 정수를 가지고 (a-b)*(b+c)*(c%a) 연산 결과를 출력하는 프로그램을 작성하시오

#pragma warning(disable: 4996) 
#include <stdio.h>

int main(void) {
	int iNum1 = 0;
	int iNum2 = 0;
	int iNum3 = 0;
	printf("3개의 정수를 입력하세요 : ");
	scanf("%d %d %d", &iNum1, &iNum2, &iNum3);
	
	printf("(a-b)*(b+c)*(c%%a)한 결과 : %d \n", (iNum1-iNum2)*(iNum2+iNum3)*(iNum3%iNum1));
}

 

 

 

 

자료형

메모리 구성과 변수

Ram을 주메모리

다른 저장매체들은 보조메모리

 

(C언어는 이건희 정신으로해야한다. 속도와 용량을 쥐어짜내야한다)

 지금은 주메모리의 구성과 데이터 저장방법을 설명한다. 메모리의 크기를 나타내는 단위에는 비트(bit : binary digit), 바이트(byte), 워드(word : 컴퓨터가 한번에 처리하는 양) 등이 있다. 워드의 크기는 가변이다. 메모리의 최소 단위는 비트로 0이나 1의 값을 가질 수 있으며, 바이트는 정보저장의 기본 단위가 된다. 1바이트는 8비트로 구성되어 있어서 2^8 = 256가지의 값을 가질 수 있다. 하나의 바이트를 양의 정수로 해석한다면 0에서 255까지 표현할 수 있다. 

 

1bit * 8 => 1byte

1bit * 4 => 1nibble

1byte * 1024 => 1Kbyte

1KB * 1024 => 1Mbyte

1MB * 1024 => 1Gbyte

1GB * 1024 => 1Tbyte

 

4GB = 4 * 1024 * 1024 * 1024 = 약 4,000,000,000

(여담으로 1Hz * 1000 => 1KHz 이다)

 아래 그림에서, 바이트가 가진 값을 2진수로 1111 (2진수) 로 표시되고 10진수로 해석한다면 15가 된다.

 

10진수와 2진수의 관계

 

2진수와 10진수의 관계

0101 1001   

nibble단위(4개씩) 짤라서 구별해준다.

한칸마다 한 숫자씩 1 2 4 8로 계산해서

0101 1001

  5      9

가 된다. 이는 16진수로 나타내어 지는건데, 실제 계산기에 쳐보면 10진수는 89가 된다.

 

 

 

1011 1110  (2진수)  가 있을때 16진수로 바꿔보자.

11(B)  14(E)     11과 14는 한 자릿수를 넘었으므로 16진수로 했을때는 알파벳 B, E로 표현된다.

10진수로 나타낼때는 처음부터 끝까지 2^0부터 2^8까지 전부 더해주면 된다. 계산기에 쳤을때는 190이 된다.

 

 

오늘은 여기까지!

반응형