연산자 연산자의 기능
= 연산자 오른쪽의 값을 왼쪽에 있는 변수에 대입한다.
num = 20;
+ 두 피연산자의 값을 더한다.
num = 4+3;
- 왼쪽의 피연산자 값에서 오른쪽의 피연산자 값을 뺀다.
num = 20 - 10;
* 두 피연산자의 값을 곱한다.
num = 4 * 2;
/ 왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눈다.
num = 8 / 4;
% 왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눴을 때 얻게되는 나머지 값을 반환한다.
num = 5 % 2

 

복합 대입 연산자

다른 연산자와 합쳐진 형태의 대입연산자를 복합 대입 연산자라 한다.

#include <stdio.h>

int main(void){
  int num1 = 2, num2 = 4, num3 = 6;
  num1 += 3;  // num1 = num1 + 3;
  num2 *= 4;  // num2 = num2 * 4;
  num3 %= 5;  // num3 = num3 % 5;
  printf("Result : %d, %d, %d \n",num1, num2, num3);
  return 0;
}
// output : Result : 5, 16, 1 

위 코드처럼 num1의 연산 결과를 다시 num1에 저장하는 연산식 같은 경우는 복합 대입 연산자를 이용하면 더 간략하게 표현할 수 있다.

 

+연산자와 -연산자는 정수 표현에서 음의 정수와 양의 정수를 표현하기 위해 사용되기도 한다.

 

증가, 감소 연산자

변수명이 num이라 할 때 num++는 후위증가, ++num은 전위증가 라고 한다.

#include <stdio.h>

int main(void){
  int num1 = 12, num2 = 12;

  printf("num1 : %d \n", num1);
  printf("num1++ : %d \n", num1++);	// 후위증가
  printf("num1 : %d \n", num1);

  printf("num2 : %d \n", num2);
  printf("++num2 : %d \n", ++num2);	// 전위증가
  printf("num2 : %d \n", num2);
  return 0;
}
/*
output:
num1 : 12
num1++ : 12
num1 : 13
num2 : 12
++num2 : 13
num2 : 13
*/

후위증가의 경우에는 printf()함수가 먼저 실행되고 연산이 진행된다. 또한 전위증가의 경우에는 연산이 먼저 진행되고, printf() 함수가 실행된다.  이와 같은 방식은 -- 연산자로도 사용이 가능하다.

#include <stdio.h>

int main(void){
  int num1 = 10;
  int num2 = (num1--)+2;

  printf("num1 : %d, num2 : %d\n", num1, num2);
  return 0;
}
// output : num1 : 9, num2 : 12

위 코드의 num2 변수에서도 num1--는 후위감소이기 때문에 먼저 num1 + 2 의 연산을 진행하고 후에 num1이 1 감소되었다. 후위 증가 및 후위 감소의 연산에서는 소괄호의 영향을 받지 않고, 다음 문장으로 넘어가야 값의 증가 및  감소가 이루어진다.

 

관계연산자

관계연산자는 값의 대소나 동등의 관계를 따지는 연산자이다. 관계 연산자는 비교 연산자 라고도 한다.

연산자 연산자의 기능
< a < b
a가 b 보다 작은가?
a > b
a가 b보다 큰가?
== a == b
a와 b가 같은가?
!= a != b
a와 b가 다른가?
<= a <= b
a가 b보다 작거나 같은가?
>= a >= b
a가 b보다 크거나 같은가?

관계연산자들은 조건을 만족하면 1을, 만족하지 않으면 0을 반환한다. 1은 참(true)을 의미하고, 0은 거짓(false)을 의미한다. 

#include <stdio.h>

int main(void){
  int num1 = 10, num2 = 12;
  int res1, res2, res3;

  res1 = (num1 == num2);
  res2 = (num1 <= num2);
  res3 = (num1 > num2);

  printf("res1 : %d\n", res1);
  printf("res2 : %d\n", res2);
  printf("res3 : %d\n", res3);

  return 0;
}
/*
output :
res1 : 0
res2 : 1
res3 : 0
*/

 

논리연산자

AND(논리곱), OR(논리합), NOT(논리부정)을 표현하는 연산자이다.

연산자 연산자의 기능
&& A && B
A와 B가 모두 참이면 참을 반환한다.(논리 AND)
|| A || B
A와 B 둘 중 하나라도 참이면 참을 반환한다.(논리 OR)
! !A
A가 참이면 거짓, 거짓이면 참을 반환한다.(논리 NOT)

논리 연산자 보다 관계 연산자가 먼저 수행된다. result = (1 < 10) && (2 == 2)의 경우에는 두 식이 모두 참이기 때문에 result 값은 1이된다. 또한 C는 0이 아닌 값은 모두 참으로 간주하기 때문에 result = !10 과 같은 경우 참(10)을 부정했기 때문에 result 값은 0이된다.

'Language > C, C++' 카테고리의 다른 글

[C] 키워드  (0) 2020.11.21
[C] scanf()  (0) 2020.11.21
[C] 변수  (0) 2020.11.18
[C] printf()  (0) 2020.11.18
[C] 주석  (0) 2020.11.17

C에서 변수가 의미하는 것은 값을 저장할 수 있는 메모리 공간에 붙은 이름, 혹은 메모리 공간 자체를 가리키는 것이다.

그래서 변수를 하나 선언하면 변수의 이름을 통해 값의 저장과 참조가 가능하다.

int main(void){
	int num;	// num이라는 이름의 변수 선언
    num = 20;	// 변수 num에 20저장
    printf("%d", num)	// 변수 num의 값 참조
}

위 코드에서 int는 정수 저장이 가능한 메모리를 할당한다는 의미이고, num은 그 메모리 공간의 이름을 num이라고 하겠다는 것이다. C에서 = 기호는 대입 연산자로 값의 대입을 의미한다. 대입연산자가 사용되면 연산자 오른쪽의 값을 왼쪽의 변수에 대입한다. printf()함수에서는 num에 저장된 값  20이 출력된다. 선언된 변수에 처음 값을 대입하는 것을 초기화 라고 한다. 초기화 후 저장된 값은 변경 가능하다.

 

C에서는 다음과 같이 변수를 선언과 동시에 초기화 하는것, 둘 이상의 변수를 동시에 선언하는 것, 둘 이상의 변수를 동시에 선언 및 초기화 하는 것도 가능하다.

int num1 = 12;	// 선언과 동시에 초기화
int num2, num3;	// 두개의 변수 선언
int num4 = 5, num5 = 20;	// 두개의 변수를 선언 및 초기화

 

#include <stdio.h>

int main(void){
  int num1, num2;
  int num3=30, num4=40;

  printf("num1: %d, num2: %d \n", num1, num2);
  num1 = 10;
  num2 = 20;

  printf("num1: %d, num2: %d \n", num1, num2);
  printf("num3: %d, num4: %d \n", num3, num4);
  return 0;
}
/*
output:
num1: 0, num2: 4200864 
num1: 10, num2: 20 
num3: 30, num4: 40
*/

첫 번째 출력값을 보면 변수를 선언만하고 초기화를 하지 않았을 경우 쓰레기값이 저장될 수 도 있다. 따라서 변수를 선언과 동시에 0으로 초기화 한 후 나중에 필요한 값을 저장하는 방법을 많이 사용하기도 한다.

 

변수 선언 규칙

1. 변수의 이름에는 알파벳, 숫자, 언더바(_)만 사용할 수 있다.(언더바를 제외한 다른 특수문자는 사용할 수 없다.)

2. C는 대소문자를 구분한다. (변수 num 과 변수 NUM은 다른 변수 이다.)

3. 변수의 이름은 숫자로 시작할 수 없다.

4. 키워드는 변수로 사용할 수 없다(키워드 예 : printf, return 등)

5. 변수 이름 사이에는 공백이 사용될 수 없다.

'Language > C, C++' 카테고리의 다른 글

[C] scanf()  (0) 2020.11.21
[C] 연산자  (0) 2020.11.19
[C] printf()  (0) 2020.11.18
[C] 주석  (0) 2020.11.17
[C]Hello World.c  (0) 2020.11.17
#include <stdio.h>

int main(void){
  printf("Hello everybody\n");
  printf("%d\n", 1234);
  printf("%d %d\n", 10, 20);
  return 0;

  /*
  output :
  Hello everybody
  1234
  10 20
  */
}

printf() 함수는 문자열 뿐 아니라 정수 데이터도 출력이 가능하다.

printf() 함수는 첫 번째 인자로 전달된 문자열을 출력한다.

 

위 코드 두번째, 세번째 printf() 함수를 보면 %d 라는 문자가 보이는데 이러한 문자를 서식문자 라고 한다. 서식문자는 출력의 형태를 지정하는 용도로 쓰인다. %d는 10진수 정수 형태의 출력을 의미한다. \n 은 개행을 의미한다. 세번째 printf() 함수에서는 서식문자 %d가 두 개 존재하는데, 두 개의 출력 대상이 두번째, 세번째 인자에서 전달되고 있다.

서식 문자의 사용 위치는 제한이 없어서 다양하게 문자열을 조합하여 출력하는것이 가능하다.

'Language > C, C++' 카테고리의 다른 글

[C] scanf()  (0) 2020.11.21
[C] 연산자  (0) 2020.11.19
[C] 변수  (0) 2020.11.18
[C] 주석  (0) 2020.11.17
[C]Hello World.c  (0) 2020.11.17

주석은 프로그램 내에 삽입된 메모이다. 컴파일 대상에서 제외되어 주석은 프로그램의 실행 결과에 영향을 미치지 않는다. 주석은 자신이 작성한 코드이던, 남이 작성한 코드이던 더 빠르고 쉽게 코드를 이해할 수 있도록 도와주기 때문에 프로그래밍의 필수 요소이다. 

 

C에서 주석 작성 방식

여러줄 주석

/*
	주석처리 된 문장 1
    주석처리 된 문장 2
    주석처리 된 문장 3
*/

 

한줄주석

// 주석처리 된 문장1
// 주석처리 된 문장2
// 주석처리 된 문장3

 

'Language > C, C++' 카테고리의 다른 글

[C] scanf()  (0) 2020.11.21
[C] 연산자  (0) 2020.11.19
[C] 변수  (0) 2020.11.18
[C] printf()  (0) 2020.11.18
[C]Hello World.c  (0) 2020.11.17
#include <stdio.h>

int main(void){
  printf("hello world\n");
  return 0;
}

C언어를 처음 배우게되면 가장 먼저 작성하게되는 프로그램이다. 콘솔창에 hello world 를 출력하는 간단한 프로그램이다. 

C언어 프로그래밍은 C언어로 입력과 그에 따른 출력이 존재하는 함수(function)를 만들고 함수의 실행 순서를 결정하는 일이다. 

 

C로 구현된 프로그램은 항상 main 이라는 함수를 제일 먼저 호출하기 때문에 main 함수는 항상 정의되어 있어야 한다.

위 코드를 보면 int main(void) 에서 int는 출력 형태이고, main은 함수이름, void는 입력 형태이다. 중괄호 내부는 함수의 기능을 정의하고 있고, 중괄호 내에 있는 문장들은 순차적으로 실행된다.

C는 문장의 끝을 표현하기 위해 세미클론(;) 을 사용한다.

 

중괄호 내부의 printf() 함수는 따로 정의하지 않아도 호출이 가능한 표준 함수이다. C에는 많은 수의 표준 함수들이 있고, 표준 함수들을 모아둔 것을 표준 라이브러리 라고 한다.

 

printf()와 같은 표준 함수의 호출을 위해서는 printf()함수와 관련이 있는 헤더파일을 선언해야한다. 위 코드에서 헤더파일 선언은 #include <stdio.h> 이다. 이 선언은 확장자가 .h 로 끝나는 stdio.h 라는 헤더파일을 포함하라는 의미이다. printf()와같은 함수를 사용하기 위해서는 stdio.h라는 헤더파일을 선언해야 한다. 헤더파일의 선언은 소스코드의 맨 앞부분, main함수 정의 전에 선언되어야 한다.

 

return 0; 부분은 return문 이라고 한다. return문은 함수를 호출한 영역으로 값을 전달하고, 현재 실행중인 함수를 종료시키는 역활을 한다. 위 코드에서는 main 함수를 호출한 영역으로 0을 전달하고, main 함수를 종료한다. main 함수의 종료는 프로그램의 종료로 이어지기 때문에 프로그램도 종료된다. 

'Language > C, C++' 카테고리의 다른 글

[C] scanf()  (0) 2020.11.21
[C] 연산자  (0) 2020.11.19
[C] 변수  (0) 2020.11.18
[C] printf()  (0) 2020.11.18
[C] 주석  (0) 2020.11.17
  1. import requests
  2. from bs4 import BeautifulSoup
  3.  
  4.  
  5.  
  6.  
  7. = open("crawl_data.txt", 'w', -1, "utf-8")        # utf-8 속성이 있어야 파일 쓸 때 인코딩 에러 x
  8. header = {'User-Agent''Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'}    # 멜론 사이트는 헤더 값이 있어야 함
  9.  
  10. code = requests.get(url, headers = header).text     # 크롤링할 페이지의 모든 태그를 가져옴
  11. soup = BeautifulSoup(code,'html.parser')            # html 파일을 가져옴
  12. title = soup.find_all("div", {"class":"ellipsis rank01"})       # 노래 제목의 정보는 div 태그의 ellipsis rank01클래스 안에 있음
  13.                                                                 # find_all함수는 해당 조건에 맞는 모든 태그를 가져옴
  14. singer = soup.find_all("div", {"class":"ellipsis rank02"})      # 가수의 정보는 div 태그의 ellipsis rank02클래스 안에 있음
  15.  
  16. real_title = []
  17. real_singer = []
  18.  
  19. for i in title:
  20.     real_title.append(i.find('a').text)         # html 태그에서 노래 제목만(a 태그의 텍스트 값)
  21.                                                 # find함수는 해당 조건에 맞는 하나의 태그만 가져옴. 중복이면 가장 첫 번째 태그
  22.  
  23. for j in singer:
  24.     real_singer.append(j.find('a').text)        # html 태그에서 가수만(a 태그의 텍스트 값)
  25.  
  26. for k in range(1,51):   # 차트 순위가 1위~50위
  27.     f.write("{}.{} -{}\n".format(k,real_title[k],real_singer[k]))   # '1(순위).노래제목 -가수'의 형태로 데이터를 저장
  28.  
  29. f.close()

 

결과 값 : 

'Language > Python' 카테고리의 다른 글

2차원 리스트 행렬 변환  (0) 2021.07.02
반복문(for)  (0) 2019.03.07
반복문(while)  (0) 2019.02.09
조건문(if)  (0) 2019.02.08
입력 함수(input)  (0) 2019.02.08

리스트, 튜플, 문자열 등 요소가 나열된 자료형의 첫 요소부터 마지막 요소까지 변수에 대입

요소 개수만큼 반복


[기본 구조]

for 변수 in 리스트 :

수행문 (이때 변수에는 리스트의 요소 값이 대입된 상태)


for문에서 사용되는 변수는 선언과 동시에 생성 되는 개념이기 때문에 미리 만들어 놓지 않아도 된다.

1
2
3
for i in [123456789]:
    print(i*2)
# 출력값 : 246, 912, 1578
cs


range() : 지정한 범위 만큼 숫자들을 반환하는 함수

1
2
print(list(range(1,10)))
# 출력값 : [1, 2, 3, 4, 5, 6, 7, 8, 9]

cs

시작 숫자를 지정하고 끝 숫자는 포함하지 않는다.


for문에서 range()함수 사용

1
2
3
4
5
add = 0
for i in range(1,11):
    add += i # i의 값을 add에 누적
print("1~10까지 합 :", add)
출력값 : 1~10까지 합 : 55
cs



'Language > Python' 카테고리의 다른 글

2차원 리스트 행렬 변환  (0) 2021.07.02
멜론차트 1~50위 크롤링  (0) 2019.09.02
반복문(while)  (0) 2019.02.09
조건문(if)  (0) 2019.02.08
입력 함수(input)  (0) 2019.02.08

조건식이 참이면 수행 후 다시 조건식 비교


[기본 구조]

while 조건식:

수행문


조건식에 들어가는 변수는 조건 비교를 위해 사용되는 변수로 미리 만들어 놓지 않으면 오류가 난다.


@ 반복 횟수 지정

1
2
3
4
5
count = int( input("반복 횟수 입력") )
 
while count > 0 :
    print("count = {}".format(count))
    count -= 1
cs

count의 값이 0보다 크면 수행된다.

print 의 내용을 출력하고 count의 값을 1씩 감소한다.

count의 값이 0이 되면 반복문이 수행되지 않는다.


@ 특정 조건 반복

1
2
3
num = 0
while num != 9 : 
    num = int( input("9를 입력하면 종료 : ") )
cs

num이 0이 아니면 반복한다.



'Language > Python' 카테고리의 다른 글

멜론차트 1~50위 크롤링  (0) 2019.09.02
반복문(for)  (0) 2019.03.07
조건문(if)  (0) 2019.02.08
입력 함수(input)  (0) 2019.02.08
bool 자료형  (0) 2019.02.07

[if문의 구조]

if 조건식:

수행문

elif 조건식:

수행문

elif 조건식:

수행문

else:

수행문


1. 조건식

참이나 거짓의 결과가 나오는 식이 있어야 한다.

끝에는 클론(:)을 붙인다. 클론 뒤버터 수행문으로 간주된다.


2. 수행문 

조건식이 만족할 때 수행하고 싶은 코드들

수행문이 되려면 들여쓰기를 해줘야 한다.


3. elif 조건식:

위 조건식이 만족하지 않을 때 검사하는 조건문

if문에 종속되어 혼자 사용 불가능하며 원하는 만큼 여러개가 사용 가능하다.


4. else:

위 조건식들이 모두 만족하지 않으면 수행

if문에 종속되며 하나만 사용 가능하다.

'Language > Python' 카테고리의 다른 글

반복문(for)  (0) 2019.03.07
반복문(while)  (0) 2019.02.09
입력 함수(input)  (0) 2019.02.08
bool 자료형  (0) 2019.02.07
집합(Set)  (0) 2019.02.03

+ Recent posts