데이터 구조 와 알고리즘 0 부터 시리즈: C 언어 기초
머리말
곧 대학 4 학년 이 되 는 저 는 학교 에서 모집 하 는 저 에 게 스트레스 를 받 았 습 니 다. 그리고 올 해 는 안 드 로 이 드 의 병목 기 라 서 밖 에 능력 에 대한 요구 가 매우 높 습 니 다. 그러나 저 는 많은 면 경 을 본 후에 많은 대기업 들 이 데이터 구조 와 알고리즘 을 중시 하 는 것 을 발 견 했 습 니 다. 그래서 우 리 는 두 가지 준 비 를 하고 데이터 구조 와 알고리즘 을 복습 하기 시 작 했 습 니 다.
물론 알고리즘 과 데이터 구 조 를 배 워 야 한다 면 C 언어 는 반드시 먼저 배 워 야 한다. 대부분의 알고리즘 과 데이터 구 조 는 C 언어 를 사용 하 는 언어 이기 때문에 이 글 은 안 드 로 이 드 프로그래머 를 대상 으로 하 는 것 이다. 자바 의 기초 가 있 기 때문에 일부 문법 은 전면적으로 소개 되 지 않 았 다.
상수 와 변수
① 상수: C 언어 상수 의 성명 은 두 가지 방식 이 있다.
#include<stdio.h>
#define YOU_AGE 23
const int HIS_AGE = 25;
int main(){
return 0;
}
② 변수
C 언어의 기본 데이터 유형 은 short, int, long, char, float, double 이다.
int a = 10;
char b = 'A';
float c = 25.5;
double d = 25.5;
이것 은 문자 포인터 입 니 다. 자바 의 String 형식 으로 사용 할 수 있 습 니 다.
③ 사용자 정의 변수 형식 이름
type: def 키 워드 를 사용 하면 데이터 형식의 이름 을 정의 할 수 있 습 니 다.
typedef int my_int;
int main(){
// int b = 10
my_int b = 10;
return 0;
}
2. 절차 제어 와 순환
① if, if - else 문
int a = 10;
int b = 5;
if(a>b){
}else{
}
② 스위치 문
switch( ){
case 1: 1;
case 2: 2;
…
case n: n;
default: n+1;
}
③ goto 문장
goto 문 구 는 점프 문 으로 실행 순 서 를 지정 한 탭 으로 옮 길 수 있 습 니 다.
// 1+2+3...+100
int i = 1;
loop: if(i<=100){
sum=sum+i;
i++;
goto loop;
}
④ for 문장
int i,sum;
for( i=1; i<=100; i++ ){
sum=sum+i;
}
⑤ while, do - while 문
int i=1,sum;
while(i<=100){
sum=sum+i;
i++;
}
do{
sum=sum+i;
i++;
}while(i<100);
연산 자
① 산술 연산 자
<、<=、>、>=、==、!=、할당 연산 자 (=)
② 논리 연산 자
& & (와), | | (또는),!(아니)
③ 비트 연산 자
& (비트 와), | (비트 또는), ~ (비트 반대), ^ (이상 또는), > (오른쪽 이동), < (왼쪽 이동)
④ 세 가지 연산 자
조건 부 표현 식?결과 1: 결과 2
⑤ 연산 자의 크기
변수, 상수, 데이터 형식 이 저장 공간 을 차지 하 는 바이트 수 를 계산 합 니 다.
⑥ 자동 감소 연산 자
++a,a++,–a,a–
4. 출력 과 입력
① 출력
//
char ch = 'a';
putchar(ch);
//
puts("hello word");
printf("hello c");
② 포맷 출력
% + 데이터 형식 을 통 해 포맷 출력, 일반적인 출력 형식
//
printf("number is %d",23);
//
printf("%X",0xFF00FF);
//
printf("%o",8);
//
printf("%f",3.14);
//
printf("%c",'A');
//
printf("%s","Hello C");
③ 입력
//
char answer = getchar();
printf("%c",answer);
④ 포맷 입력
//
int a;
scanf("%d",&a);
//
char c;
scanf("%c",&c);
//
char buf[100];
scanf("%s",buf);
여기 서 주의해 야 할 것 은 scanf () 함수 의 두 번 째 매개 변 수 는 데이터 의 메모리 주 소 를 필요 로 합 니 다. & 기호 로 메모리 주 소 를 가리 킬 수 있 습 니 다. char [] 형식 은 그 자체 가 주소 이기 때문에 & 기 호 를 추가 하지 않 아 도 됩 니 다.
다섯, 수조
① 1 차원 배열
//
int arr[10];
//
int arr[] = {5,6,8,9};
② 2 차원 배열
int arr[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
③ 문자 배열
char str[10] = {'H','e','l','l','o','/0'};
문자 배열 이 '/ 0' 이 나타 나 면 이 문자 배열 이 끝 났 음 을 판단 하고 기본 끝 은 자동 으로 채 워 집 니 다.
함수
① 반환 값 없 는 함수
void printfStr(){
printf("Hello World");
}
② 반환 값 이 있 는 함수
int add(int a,int b){
return a+b;
}
③ 가 변 매개 변수 함수
int sum(int n,...){
int i;
int all = 0;
va_list args;
va_start(args,n);
for(i=0;i<n;i++){
all+=va_arg(args,int);
}
va_end(args);
return all;
}
전체 코드 는 다음 과 같다.
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
//
int add(int a,int b);
void printfStr();
int sum(int n,...);
int main(){
int c = add(2,3);
int d = sum(1,2,3);
printfStr();
return 0;
}
//
int add(int a,int b){
return a+b;
}
//
void printfStr(){
printf("Hello World");
}
//
int sum(int n,...){
int i;
int all = 0;
va_list args;
va_start(args,n);
for(i=0;i<n;i++){
all+=va_arg(args,int);
}
va_end(args);
return all;
}
지침
① 변수 포인터
포인터 는 자바 의 배열 로 이해 할 수 있 습 니 다. 데이터 에 저 장 된 메모리 주 소 를 가리 키 며 기본 지침 은 배열 의 첫 번 째 데 이 터 를 가리 키 는 것 입 니 다.
int a = 10;
// , a
int *pa = &a;
// , 10
printf("%d",*pa);
printf("%d",pa[0]);
② 유형 포인터 변수 없 음
형식 포인터 없 이 모든 종류의 변 수 를 가리 킬 수 있 습 니 다.
void *str = "hello world";
void *a = 5;
printf("%s",str);
printf("%d",a);
③ 함수 포인터
포인터 가 가리 키 는 것 은 메모리 주소 입 니 다. 변수 메모리 주소 뿐만 아니 라 함수 메모리 주소 도 가능 합 니 다.
#include<stdio.h>
#include<stdlib.h>
void say(int a,int b){
printf("Hello");
}
int main(){
void(*method)(int,int) = &say;
method(0,0);
}
④ 사용자 정의 함수 명
type: def 키워드 사용자 정의 함수 이름 사용 하기
#include<stdio.h>
#include<stdlib.h>
void say(int a,int b){
printf("Hello");
}
typedef void(*Func)(int ,int);
int main(){
Func method = &say;
method(0,0);
}
8. 구조 체 와 공동체
① 구조 체
구조 체 는 자바 의 Bean 대상 에 해당 하 며, (struct + 구조 체 명) 을 실체 대상 으로 하여 대상 의 성명 을 진행 할 수 있다.
struct File{
char *name;
int size;
};
int main(){
//
struct File file;
file.name = "abc.txt";
file.size = 10;
//
struct File file = {"abc.txt",10};
}
물론 type: def 키 워드 를 사용 하여 구조 체 를 별명 으로 만들어 자바 의 실체 대상 처럼 만 들 수도 있 습 니 다.
struct _File{
char *name;
int size;
};
typedef struct _File File;
int main(){
File file;
file.name = "abc.txt";
file.size = 10;
}
또 다른 간단 한 쓰기 도 있 는데, 효 과 는 같 아서 코드 를 더욱 예 쁘 게 하기 위해 서 이다.
typedef struct _File{
char *name;
int size;
}File;
int main(){
File file;
file.name = "abc.txt";
file.size = 10;
}
② 포인터 구조 체
#include<stdio.h>
#include<stdlib.h>
//
typedef struct{
char *name;
int size;
}File;
//
File * createFile(char *name,int size){
File *f = malloc(sizeof(File));
f->name = name;
f->size = size;
return f;
}
//
void deleteFile(File *file){
free(file);
}
int main(){
File *f = createFile("abc.txt",10);
printf("%s,%d",f->name,f->size);
deleteFile(f);
}
③ 공동체
공동 체 는 말 그대로 공동 메모리 주 소 를 사용 하 는 구 조 를 이해 할 수 있다. 즉, 공동체 안의 속성 이 저장 하 는 값 은 모두 같다. 왜냐하면 그들의 메모리 주 소 는 한 곳 을 가리 키 기 때문이다. (공동체 메모리 주소 의 최대 길이 = 모든 속성 중에서 메모리 주소 의 길이 가 가장 큰 속성)
typedef union _Fmaily{
char a;
int b;
}Fmaily;
int main(){
Fmaily f;
f.b = 97;
// 97 ASCLL , a
printf("%c",f.a);
// 97
printf("%d",f.b);
return 0;
}
9. 파일 작업
① 파일 쓰기
// , : , : (w ,r )
FILE * f = fopen("abc.txt","w");
if(f != NULL){
//
fputc('A',f);
//
fputs("Hello",f);
//
fclose(f);
}
② 파일 읽 기
int i;
//
FILE * f = fopen("abc.txt","r");
if(f != NULL){
char buf[100];
// buf
memset(buf,0,100);
for(i=0;i<100;i++){
//
char ch = fgetc(f);
// ch End of FIle
if(ch!=EOF){
buf[i]=ch;
}else{
break;
}
}
printf("%s",buf);
fclose(f);
}
return 0;
물론 다른 상용 파일 API 도 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.