1. 프로그램 작성 순서


(1) 변수 선언    프로그램에서 사용할 변수를 선언한다.


(2) 자료 입력    프로그램에 필요한 값을 입력한다.


(3) 자료 처리    알고리즘에 따라 C구문에 맞게 명령문을 작성한다.


(4) 자료 출력    실행 결과를 형식에 맞추어 출력장치에 표시한다.


(5) 합수 결과값 반환    main 함수의 결과값을 main 함수를 호출했던 곳으로 되돌려준다.




2. 변수 선언 형식


자료형     변수이름


3. 기본 자료형


 

 문자 자료형

크기

표현범위 

 문자

 char

1byte

-128~127 

 정수

 int

 4byte 


-2,147,483,648() ~ 2,147,483,647()

 

 실수

 double

 8byte

최솟값 :

최댓값 :



4. 출력 함수

1. printf ()


printf 괄호 속의 ,를 중심으로 전반부엔 변환명세를 후반부엔 출력할 값 및 수식을 넣을 수 


있다.


(a) 형식 printf("%d", 출력할 값,수식) / ex) printf("나이가 %d살 입니다.\n", 21); 의 결과물은

 변환명세                                              나이가 21살 입니다. 라고 나온다.


(b) 변환명세의 종류 


정수 : %d 자료형은 int이며 정수를 10진정수 형태로 출력


실수 : %lf 자료형은 double형이며 실수를 소수점 아래 6자리까지 출력


문자 : %c 자료형은 char형이며 문자 한개를 출력


문자열 : %s 자료형은 문자열이며 문자열을 출력한다.


%d, %lf, %c는 정수형, 실수형, 문자형 중 기본 자료형의 변환명세이다.


예제 프로그램(소스, 결과, 주석)


#include <stdio.h>

#include <stdlib.h>


int main() 

{

//1. 변수선언

int age=20;

double height=175.5;

char grade='A';

//2. 처리

//3. 출력 

printf("나이 %d 세 \n", age); //age의 값이 20이라는 정수이기 때문에 %d를 사용하였음. 


printf("키 %lf cm \n", height); //height의 값이 175.5라는 실수이기 때문에 %lf를 사용하였음. 

printf("표준체중 %lf kg \n", (height-100)*0.9); //수식의 결과값이 실수범위 이기 때문에 %lf를 사용하였음. 

printf("학점 %c \n)", grade); // grade의 결과값이 문자 하나라서 %c를 사용하였음 

printf("국적 : %s", "대한민국"); // 대한민국이라는 문자열 자료형을 출력하기위해 %s를 사용 

pirntf("10진수 = %d, 8진수= %o, 16진수= %x\n", age, age, age); /* 10진수의 변환명세는 %d, 8진수의 변환명세는 %o 

  16진수의 변환명세는 %x임 */ 

return 0;

}




(c) 변환명세의 필드폭 예제


(1) %d의 필드폭 예제소스 ,주석 ,실행결과


#include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

int n=+123;

printf("1234567890\n");

printf("----------------------\n");

printf("%d\n", n);   //오른쪽에서 첫번째부터 출력한다 

printf("%5d\n", n);  //오른쪽에서 다섯번째부터 출력한다 

printf("%+5d\n", n); //+기호를 붙이면 정수값의 부호를 출력한다 

printf("%-5d\n", n); //필드폭 앞의 마이너스 부호는 왼쪽정렬 기능

printf("%-+5d\n", n);//왼쪽정렬후 정수값의 부호를 출력한다 

return 0;

}



(2) %f의 필드폭 예제소스, 주석, 실행결과


#include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

double avg = 83.768;

printf("12345678901234567890\n");

printf("%lf\n", avg); // 실수형은 기본 소수점 여섯자리 이하까지 출력 

printf("%7.3lf\n", avg); /* 전체 7자리중 소수점 3자리 이하까지 출력

(.의 전반부 소수자리 포함 전체 자리수 .의 후반부 소수 이하 n자리) */

printf("%6.2lf\n", avg); // 문제 : 전체 6자리중 소수 이하 2자리 출력 

printf("%.2lf\n", avg); // 소수 2자리 이하까지 출력 

printf("%10lf\n", avg); /* 전체 출력칸 10자리에서 소수점 아래 자리를 모두 출력 

나머지 왼쪽 칸에 소수점 위의 값과 소수점을 출력 */

printf("%5.lf\n", avg); /* 필드폭 5만큼 칸을 확보해 출력하되 소수점 아래 첫자리에서 

반올림하여 소수점 위의 값만 출력 */

return 0;

}




(3) %c의 필드폭 예제소스, 주석, 실행결과


#include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

char grade = 'a';

printf("I've got an %c.\n", grade); // 자료를 문자형으로 출력 

printf("I've got an %3c.\n", grade); // 3칸을 사용하며 문자를 오른쪽칸에 맞추어 출력 

printf("I've got an %-3c.\n", grade); // 문자를 맨 왼쪽 칸에 맞추어 3칸을 사용하여 출력 

return 0;

}




(4) %s 의 필드폭 예제소스, 주석, 실행결과


#include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

printf("%s!\n", "Hello"); // 문자열 출력 

 

printf("My name is %4s.\n", "Tom"); // 문자열을 오른쪽에서 부터 4번째 칸을 사용하여 출력 

printf("%-20s %-5s\n", "Nice to meet you.", "Bye!"); // 왼쪽 정렬하여 20칸을 사용하여 출력, 5칸을 사용하여 출력 

return 0;

}



(2) putchar()


(a) 특징 : 단일문자 출력, 개행 문자를 입력하지 않으면 옆으로 이어서 출력.


(b) 형식 : putchar(문자형 변수 또는 '문자');


(c) 예제

#include <stdio.h>

#include <stdlib.h>


int main(int argc, char *argv[]) 

{


char grade ='A';


//putchar() : 단일문자 출력

putchar(grade);

putchar('+');

putchar('\n'); //putchar 함수는 개행문자를 사용하지 않으면 옆으로 이어서 출력됨.

putchar('B');


return 0;


}




(3) puts ()


(a) 특징 : 문자열을 출력 개행을 자동으로 함.


(b) 형식 : puts(문자열 변수 or "문자열");


(c) 예제

#include <stdio.h>

#include <stdlib.h>


int main(int argc, char *argv[]) {


//puts() : 문자열 전용 출력함수

puts("hello"); // 문자열 출력 후 무조건 개행 문자가 출력됨. 

puts("My name is Hong GilDong"); //줄이 바뀜 


return 0;

}





5. 입력함수


(1) scanf()


(a) 형식 : scanf("변환명세", &변수);


(b) 특징 : scanf에서는 입력된 값을 저장할 메모리의 주소를 명시해야 하므로 변수명 앞에 &(주소연산자)를 반드시 붙인다


(c) 사용순서


순서 1. 입력받을 메시지를 출력 printf("국어점수,영어점수를 순서대로 입력하세요. ");


순서 2. 형식에 맞추어 사용

scanf("%d%d", &kor, &eng); //입력구분방법에서 공백이나 탭키를 사용하면 뛰워짐.

scanf("%d,%d", &kor, &eng); //입력구분방법을 ,로 하고싶으면 변환명세사이에 ,를 넣으면 됨 


순서 3. scanf()에서 사용한 변수선언 int kor, eng;


(d) 입력방법 3가지

1. 10 20        스페이스를 사용하여 구분입력 가능

2. 10    20     TAB키를 사용하여 구분입력 가능

3. 10            엔터키를 사용하여 구분입력 가능

20

특수기호(,)로 입력하는 경우 변환명세에 제시한다.


(e) 예제 1 - 1개 값 입력한 경우


#include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

//1. scanf() 함수 

//scanf("변환명세", &변수명)

/*scanf에서는 입력된 값을 저장할 메모리의 주소를 명시해야 하므로

변수명 앞에 &(주소연산자)를 반드시 붙인다.*/

int age; // 3. 입력값을 저장할 변수를 선언한다. 

printf("당신의 나이를 입력하세요 : "); //1. 입력내용 메시지 

//값을 하나만 입력받을 경우 

scanf("%d", &age);//2. 형식에 맞추어 사용. &변수명 


return 0;

}





(f) 예제 2 - 2개 이상 값을 입력한 경우


#include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

//순서 3. scanf()에서 사용한 변수선언 

int kor, eng;

//scanf()로 2개 이상의 값을 입력받는 경우

//순서 1. 입력받을 메시지를 출력 

printf("국어점수,영어점수를 순서대로 입력하세요. ");

//순서 2. 형식에 맞추어 사용

scanf("%d%d", &kor, &eng); //입력구분방법에서 공백이나 탭키를 사용하면 뛰워짐.

scanf("%d,%d", &kor, &eng); //입력구분방법을 ,로 하고싶으면 변환명세사이에 ,를 넣으면 됨 

printf("입력한 점수는 %d,%d입니다.\n", kor, eng); 

return 0;

}





(2) getchar()


(a) 특징 : 변환명세가 필요없이 단일문자를 입력한다.


(b) 형식 : 변수 = getchar();


(c) 예제


#include <stdio.h>

#include <stdlib.h>


int main(int argc, char *argv[]) {


char grade;

printf("학점입력 : ");

grade = getchar(); // 변환명세가 필요없이 단일문자를 입력 

printf("입력한 학점은 %c", grade);


return 0;

}




(3) gets() 

    

(a) 특징 : 문자열을 입력받는 함수, 문자열을 처리할때는 배열사용, 문자열을 입력할때 scanf를 사용하지 않는 이유는 문자열을 입력받을때 공백을 처리할수 없기때문에 gets를 사용

    

(b) 형식 : gets(문자열을 저장할 변수)

    

(c) 예제 


#include <stdio.h>

#include <stdlib.h>


int main(int argc, char *argv[]) {


char address[30]; //문자열을 처리할때는 배열사용

printf("주소 입력 : ");

/*scanf("%s", address);  문자열을 입력받을때 공백을 처리할수없기때문에 gets를 사용 */

gets(address); // 문자열을 입력받는 함수 

//배열의 이름만 적는이유 배열이름은 시작주소에서 null값이 있는곳까지 읽어오는 기능이 있기때문 

printf("입력한 주소는 %s\n", address);


return 0;

}




6. 숫자, 문자 입력시 문제점, 해결방법


숫자를 입력받고 그후 문자를 입력받기전 공백문자를 사용하게 되는데 이 공백문자를 문자로 인식하여 결과출력이 제대로 되지 않는 문제점이 생긴다.

그렇기에 이를 해결하기 위해 버퍼를 비워주는 함수 fflush(stdin)을 사용하여 버퍼를 비워준뒤 문자를 입력하면 올바르게 값이 나오는것을 확인할수있다.


#include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

int age;

char gender;

double height;

printf("나이 : ");

scanf("%d", &age);

printf("키 : ");

scanf("%lf", &height);

printf("성별(남자 M, 여자 F) : ");

/*원인 엔터키도 문자하나로 저장한다. 

문자 자료를 입력 받을 때는 공백문자(빈칸,탭키,엔터키)도 

입력 문자로 사용됨으로 문제가 발생할수있다. */

fflush(stdin); // 버퍼를 비워주는 함수 

gender = getchar();

//scanf("%c", &gender);

//해결방법 버퍼를 비워주는 함수를 사용한다. fflush(stdin) 

//결과출력 

printf("\n=======================\n");

printf(" 나이 : %d \n", age);

printf(" 키 : %.1lf \n", height);

printf(" 성별 : %c \n", gender);

return 0;

}






'basic > C' 카테고리의 다른 글

6. 함수  (0) 2016.10.31
5. 배열  (0) 2016.10.13
4. 제어문(조건문과 반복문)  (0) 2016.10.06
3. 연산자  (0) 2016.09.22
1. C프로그래밍의 기초  (0) 2016.09.05

+ Recent posts