C/연습장

0309 <while반복문>

joo_coding 2025. 3. 9. 13:17

<while>

while문은 조건식이 참(True)인지 판단하여,

참이면 아래 반복문을 실행한다.

 

조건식이 거짓(False)가 되면 반복문을 종료하고, 다음 코드를 진행한다.

 

*무한루프

while 문 내부에 조건식의 결과를 변경하는 명령문이 존재하지 않을 때는 프로그램이 영원히 반복

 

<while 반복문 p.155 문제 07-1>

 

문제 2. 사용자에게 정수 하나를 입력 받아, 그 수 만큼 3의 배수를 출력하는 프로그램 작성

#include <stdio.h>

int main(){

int num=0;
int i=1;
printf("3의 배수 몇번 반복?");
scanf("%d", &num); // 반복횟수 입력받아서 num에 저장

while (i <= num) // i가 반복횟수가 될때까지 반복
{
printf("%d \n", 3*i); //3에 1부터 num까지
i += 1; // 1씩 늘려서 곱하기 > x1, x2, x3 ...
}
 
return 0;
}

 

문제 3.

#include <stdio.h>

int main()
{

int num=1; // 입력하는 정수
int total=0; // 합

while (num!=0) // 0이 아닐때까지 반복 = 0이 되면 종료
{
printf("정수를 입력하세요.:");
scanf("%d", &num); // 입력받으면 num에 저장

total += num; // num 입력 받을때마다 더해주기
 
}
 
printf("%d", total); // 합 출력
return 0;
}

하 while 문장에 세미콜론 썼다가

계속 실행 안돼서, 왜안되지?? 하고 고민했는데

세미콜론 때문이었음.. ㅡㅡ

 

문제 4.

int num;
printf("몇 단?:");
scanf("%d",&num);
int i = 9; // 역순이니까 9부터 시작

while (i>=1) // 세미콜론 붙이지마라
{
printf("%d x %d = %d \n", num, i, num*i);
i -= 1; // 곱하는 숫자가 1씩 작아져야함
 
}
return 0;
}

 

문제 5.


// 문제5
// 몇개의 정수를 입력받을것인지 묻는다
// 입력받은 정수의 평균을 출력
// 소수점 이하까지 계산

int loop; // 입력할 정수의 수
printf("몇번 입력?: ");
scanf("%d", &loop); // sacnf 는 항상 &을 붙여라

int total = 0 ; // 정수 총합
int num; // 입력받은 정수

int i = 1 ; // 반복횟수
while (i <= loop) // loop 만큼 반복
{
i += 1 ; // 반복횟수 추가
printf("정수를 입력하세요.: ");
scanf("%d", &num);
total += num ;
}
 
printf("총 합은 %d 입니다. \n", total);
printf("평균은 %f 입니다.", (double)total/loop ); // 총합 나누기 갯수
// %f는 실수 서식지정자 니까, double화 시켜줘야함
return 0;

 

<중첩 while문>

ex) 전체 구구단

// 중첩 while문
// 전체 구구단

int dan=2; // 2단부터 시작
//int i=1; // 곱하기 1부터 시작

while (dan<10) //2단~9단 까지 반복
{
int i = 1 ; // 곱하기 1부터 시작 and 단이 끝나면 다음단에서 다시 1부터 시작해야되니까 1로 초기화
while (i<10) // 1~9까지 곱하기
{
printf("%d x %d = %d \n", dan, i, dan*i);
i ++; // 곱하기 1 > 다음에 곱하기 2
}
 
dan ++; // 2단 끝나면 +1 해서 3단 출력

}
 
return 0;
}


 

<p,157 문재 07-2>

1번

// <p.157 while문 중첩 문제>
// 문제 1

// 사용자에게 5개의 정수를 입력받아, 총 합을 출력하는 프로그램
// 1 미만의 수를 입력하면 재입력 요구

int loop = 1 ; // 입력횟수
int total = 0 ; // 총합
int num = 0; // 입력받은 수

while (loop < 6) // 5번 입력
{
printf("정수 입력: ");
scanf("%d", &num);

while (num < 1)
{
printf("1 이상의 정수를 입력하세요.\n");
printf("정수 입력: ");
scanf("%d", &num); // 유효한 숫자가 들어올 때까지 반복
}

// 유효한 숫자가 입력되면 loop 증가하고 total에 더함
total += num;
loop++; // 입력 횟수 증가
}
 
printf("총 합: %d \n", total);

// < do/while >

 
return 0;
}

처음에 이중반복문을 유효한 숫자가 입력되면 이중반복문의 내용을 반복하라고 작성했는데

생각해보니 그러면 그 반복문이 끝나고나면 다시 입력하세요 라는 말이 나오게 된다.

그러니 잘못 입력했을 때를 이중반복문으로 돌리고, 그 안에서 유효한 숫자를 입력했을 때 반복문이 끝나게하고

그 반복문이 끝나면 입력횟수와 총합에 숫자가 더해지게끔 코드를 짜는게 맞다. 아따 어렵네

 


//문제 2
// *
// 0*
// 00*
// 000*

int loop=0, loop2=0; //별 반복, o 반복

while (loop<5)
{
while (loop2<loop) // o는 별이 n번째 인 만큼 갯수 추가
//0번째면 0개, 1번째면 1개, 2번째면 2개
{
printf("o");
loop2 ++;
}
 
loop2 = 0; // 초기화 안해주면 1-2,2-3,3-4라서 o가 1개씩만 출력됨
printf("*\n");
loop ++;
}
 

return 0;
}

 

 

 

< do/while문 >

//문제2
// 0~100 정수 중 짝수의 합을 출력
// do/while문을 써서 작성
// 결과: 2550

//짝수면 합계에 더하는 식으로 짜보자

int total = 0, num = 0;

do
{
total += num;
num += 2;

} while (num <= 100);
 
printf("0~100 사이의 정수 중 짝수의 총 합은 %d 입니다.", total);

return 0;
}

 

< for문 >

for( 초기식; 조건식; 증감식 )

{

    반복이 되는 문장들

}

for (int i = 0; i < 5; i++)
{
printf("hi \n");
}

return 0;
}

 

<p.167 문제 07-4 >

// 문제1
int num1, num2;
printf("정수를 입력하세요.\n");
scanf("%d %d", &num1, &num2);

int total = 0;
for (; num1 <= num2; num1++)
{
printf("%d \n", num1);
total += num1;
}
printf("합계: %d", total);
}

 

// 문제2
// 계승
// n! = 1x2x3x4...x'n'

int num;
printf("정수 입력: ");
scanf("%d", &num);
int total = 1;

for (int i = 1; i < num+1; i++)
{
total *= i;
}
printf("%d의 계승: %d", num, total);

return 0;
}


 

// 구구단

int dan, is;

for (dan=2; dan<10; dan++)
{
for (is=1; is<10; is++)
printf("%dx%d=%d ", dan, is, dan*is);

printf("\n");
}

return 0;
}