220823 C언어#5, 앱인벤터#6

김혜진·2022년 8월 23일
0

C언어

목록 보기
5/13

C언어 #5

while문

● 2의 배수를 화면에 출력하기 (100까지)

#include<stdio.h>

void main() {

	int i = 1;

	while (i < 51) {
		printf("%d\n", 2 * i);
		i++;
	}
	return;
}

● 1부터 10까지의 합 출력하기

#include<stdio.h>

void main() {

	int i = 1;
	int sum = 0;

	while (i < 11) {
		sum += i;
		i++;
	}

	printf("%d\n", sum);

	return;
}

출력결과 55

● 1부터 사용자가 입력한 정수까지의 합 출력하기

#include<stdio.h>

void main() {

	int i = 1;
	int num = 0;
	int sum = 0;

	printf("정수를 입력하세요: ");
	scanf_s("%d", &num);

	while (i <= num) {
		sum += i;
		i++;
	}

	printf("%d\n", sum);

	return;
}

출력결과(2 입력 시) 3


do~while문

  • do~while문의 사용형태
do {
	반복 내용
} while(반복 조건)

반복검사를 뒤에서 한다.
while문은 조건 만족이 안되면 한 번도 실행되지 않지만, do~while문은 조건과 상관없이 반드시 한 번은 반복문 실행

#include<stdio.h>

void main() {

	int i = 0;

	do {
		printf("Programming\n");
		i++;
	} while (i < 5);
	return;

}
  • 굳이 do~while문을 사용할 필요가 있을까?
    때로는 while문보다 do~while문을 사용해야 자연스러운 경우가 있다.
    사용자의 입력에 따라 프로그램 수행 진행 여부를 결정해야 하는 경우가 그렇다.
#include<stdio.h>

void main() {

	int sum = 0;
	int input = 0;

	do {
		printf("정수를 입력하시오 : \n");
		scanf_s("%d", &input);
		sum += input;
	} while (input != 0);
	
	printf("총 합은 :  %d입니다.\n", sum);

	return;
}

출력결과
정수를 입력하시오 : 2
정수를 입력하시오 : 3
정수를 입력하시오 : 4
정수를 입력하시오 : 5
정수를 입력하시오 : 0
총 합은 : 14입니다.

input != 0을 판별하려면 먼저 input변수에 값이 저장되어야 하는데 그렇게 되기 위해서는 scanf를 통해 사용자로부터 값을 입력받아야 함.

이 경우 while루프의 조건식이 나오기 전에 먼저 사용자로부터 정수값을 받아야한다.

do~while문을 사용하면 사용자로부터 정수를 입력받고 난 다음에 계속 진행 여부를 알 수 있다.


for문

  • for문의 기본 원리
    for문은 while문과 다르게 변수의 초기화 연산과 증감 연산이 추가된다.
for(초기문; 조건문; 증감문) {
	반복하고자 하는 내용
}
#include<stdio.h>

void main() {

	int i;
	
	for (i = 0; i < 10; i++) {
		printf("Hello World\n");
	}

	return;
}

출력결과
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World

● 별표 10개 출력하기

#include<stdio.h>

void main() {

	int i;

	for (i = 0; i < 10; i++) {
		printf("*");
	}
	return;
}

출력결과 **********

● 1월부터 12월까지 출력하기

#include<stdio.h>

void main() {

	int i;

	for (i = 1; i < 13; i++) {
		printf("%d월\n", i);
	}
	return;
}

출력결과
1월
2월
3월
4월
5월
6월
7월
8월
9월
10월
11월
12월

● 1부터 10까지의 합 출력하기

#include<stdio.h>

void main() {

	int i;
	int sum = 0;

	for (i = 1; i < 11; i++) {
		sum += i;
	}

	printf("%d\n", sum);

	return;
}

출력결과 55

● 사용자가 입력한 정수까지의 합 출력하기

#include<stdio.h>

void main() {

	int i;
	int sum = 0;
	int num = 0;

	printf("정수를 입력하세요: ");
	scanf_s("%d", &num);

	for (i = 1; i <= num; i++) {
		sum += i;
	}

	printf("%d\n", sum);

	return;
}

출력결과 (10 입력 시) 55

● 구구단 2단 출력하기

#include<stdio.h>

void main() {

	int i;

	for (i = 1; i <= 9; i++) {
		printf("2 * %d = %d\n", i, 2 * i);
	}

	return;
}

출력결과
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

단 수를 변수에 담아서 출력하는 방법도 있다.

● 입력받은 단 출력하기

#include<stdio.h>

void main() {

	int i;
	int dan = 0;

	printf("단을 입력하세요: ");
	scanf_s("%d", &dan);

	for (i = 1; i <= 9; i++) {
		printf("%d * %d = %d\n", dan, i, dan * i);
	}

	return;
}

● 1부터 100까지를 출력하고 100이 넘으면 "충전이 완료되었습니다."라고 출력하기

#include<stdio.h>
#include<Windows.h>

void main() {

	int i;

	for (i = 1; i <= 100; i++) {
		printf("충전: %d\n",  i);
        Sleep(100);
	}

	printf("충전이 완료되었습니다.");

	return;
}

출력결과
충전: 1
충전: 2
...
충전: 100
충전이 완료되었습니다.

Sleep()
CPU를 () 시간만큼 일시중지하는 것 = 제어권을 뺏음
100 = 0.1초
#include<Windows.h> 필요


이중 while문

  • 이중 for문
#include<stdio.h>

void main() {

	int dan = 0;
	int i = 2;

	for (dan = 2; dan <= 9; dan++) {
		for (i = 1; i <= 9; i++) {
			printf("%d ", dan * i);
		}
		printf("\n");
	}
	return;
}

출력결과
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81


무한 루프

  • 무한 루프란 반복 수행이 무한히 일어난다는 것
  • 반복의 조건이 어느 시점에 무너질 수 있도록 설계
#include<stdio.h>

int main() {
	int i = 0;
    while (1) {
    	printf("Programming\n");
        i++
    }
    return 0;
}
  • 무한루프를 돌더라도 어느 시점에 반복조건으로 인해서 break나 return으로 빠져나올 수 있어야 함.

사실 무한루프는 우리가 컴퓨터를 사용하면서 자동으로 접하고 있는 개념인데, 프로그램은 입력장치의 신호를 대기하며 계속해서 무한루프를 하고있다.
윈도우 프로그램의 종료버튼을 누르게 되면 WM_QUIT라는 메세지를 보내게 되면서 무한루프가 종료된다.


break문과 continue문

  • break문의 기본 원리
while(1) {
	...
    if (a > 100)
    break;
    ...
}
printf("a는 100보다 크다.");

반복문 while 내부에서 특정 조건이 되면 break문을 만나게 되는데, 이 때 break문은 수행중인 반복문 while문을 빠져나가게 한다.

void main() {

	int a = 0;

	while (1) { //true
		if (a > 100) {
			break;
		}
		printf("a의 값은 %d이다.\n", a);
		a++;
	}
	printf("a는 100보다 크다.\n");
}

출력결과
a의 값은 1이다.
a의 값은 2이다.
...
a의 값은 100이다.
a는 100보다 크다.

  • continue문의 기본원리
while(a < 100) {
	...
    if( a > 80 && a > 90) 
    continue;
    ...
}
printf("a는 100보다 크다.");

반복문 while문 내부에서 특정 조건이 되면 continue문을 만나게 되는데, 이 때 continue문 이하의 수행은 무시하고, 다시 반복의 시작점으로 간다.

void main() {

	int a = 0;

	while (a < 100) {
		
		a++;
		if (a > 80 && a < 90) {
			continue;
		}
	}
	printf("a의 값은 %d이다.\n", a);
}

출력결과
a의 값은 1이다.
...
80보다 크고 90보다 작은 값 출력 생략
...
a의 값은 100이다.

구구단 continue를 사용해 짝수 단만 출력하기

void main() {

	int dan = 0;
	int i = 2;

	for (dan = 2; dan <= 9; dan++) {

		if (dan % 2 == 1) continue;

		for (i = 1; i <= 9; i++) {
			printf("%d ", dan * i);
		}
		printf("\n");
	}
	return;
}

출력결과
2 4 6 8 10 12 14 16 18
4 8 12 16 20 24 28 32 36
6 12 18 24 30 36 42 48 54
8 16 24 32 40 48 56 64 72


함수

함수의 정의

일반적인 수학에서의 함수의 개념
y = f(x)
y = 2x

  • 함수는 나누어서 처리하기 위한 목적
    코드의 가독성이 좋아진다.
    코드의 유지 보수 및 확장이 용이해진다.

  • C언어에서의 함수 동작 개념
    C언어는 함수의 덩어리라고 할 정도로 함수의 집합체이다.
    함수들이 서로 연동하여 유기적으로 동작하는 것

함수의 종류

  • 표준함수
    가장 대표적인 함수가 printf 함수이다.
    C언어에서 제공해주는 기본 함수들을 표준함수라고 한다.
    함수를 라이브러리화 시켜서 편리하게 사용할 수 있게 함.

  • 사용자 정의 함수
    표준함수의 기능에는 한계가 있다.
    사용자가 자신이 원하는 기능을 직접 만들 수 있는데, 바로 사용자 정의 함수이다.
    정형화된 장난감과 레고와 같은 가변적인 장난감의 차이

함수의 구성요소

  • 함수의 기본 형태
자료형 함수이름(인수목록) {
	함수의 내용
}
  • 자료형
    함수가 리턴하는 값의 자료형이다.
  • 함수 이름
    함수 기능과 밀접한 이름으로 만드는 것이 좋다.
  • 인수 목록
    함수에 필요한 값을 전달할 때 사용한다.
    개수 제한은 없지만 가급적이면 덜 쓰는 게 좋다.
  • 함수의 내용
    중괄호 {} 사이의 영역 안에서 작성한다.

간단한 함수 작성

  • 더하기 Add 기능 함수 작성
int Plus(int a, int b) {
	return a + b;
}

void main() {
	
	int i = 0;
	int j = 0;
	int hap = 0;
	
	printf("두 개의 정수를 입력하세요 : ");
	scanf_s("%d%d", &i, &j);
	hap = Plus(i, j);

	printf("두 정수의 합은 %d입니다.\n", hap);
}

리턴타입 int 이름이 Plus인 함수
i와 a는 다른 메모리. 값만 복사가 되는 것이다.
"Call by Value 값에 의한 복사"

main 함수 다음 라인으로 Plus 함수를 작성했을 때 main 함수 전에 int Plus(int a, int b); (프로토타입, 함수원형)을 지정해주면 오류를 내지 않고 작동함.
프로토타입을 모아서 헤더파일을 만듦.

void형 함수

  • 결과값을 리턴하지 않는 함수
    = 리턴 할 결과 값이 없음
#include<stdio.h>

int Plus(int a, int b); // 함수의 원형
void print_Start();
void print_Hap(int result);

void main() {
	
	int i = 0;
	int j = 0;
	int hap = 0;
	
	print_Start();
	scanf_s("%d%d", &i, &j);
	hap = Plus(i, j); // 함수의 호출
	print_Hap(hap);
}

int Plus(int a, int b) { // 함수의 정의
	return a + b;
}
// i와  a는 다른 메모리. 값만 복사가 되는 것이다!

void print_Start() {
	printf("====Programming====\n");
	printf("두 개의 정수를 입력하세요 : ");
}

void print_Hap(int result) {
	printf("두 정수의 합은 %d입니다.\n", result);
	printf("====Programming End====");
}

출력결과
====Programming====
두 개의 정수를 입력하세요 : 2 5
두 정수의 합은 7입니다.
====Programming End====

● 정수형 변수 1개를 전달인자로 받는 함수를 만들고 전달받은 변수에 2를 곱하여 리턴하고 main에서 호출, 출력하기

int Test(int a);

void main() {

	int a = 5;
	int result = 0;

	result = Test(a);

	printf("결과값 : %d", result);
}

int Test(int a) {
	return 2 * a;
}

출력결과 결과값 : 10


앱인벤터 #6

만보기 만들기

  • 디자인
profile
알고 쓰자!

0개의 댓글