기초 다지기 133 : 반복제어문2 - 형성평가4
*완전!!!! 기초부터 혼자 공부하면서 기록하기 위해 쓰는 글입니다. 부족한 부분이 많습니다. 혹시 가르쳐주실 부분이 있으시면 댓글 언제든지 환영합니다 :D
참고로, 이클립스를 사용했습니다!
문제:
100 이하의 자연수 n을 입력받고 n개의 정수를 입력받아 평균을 출력하는 프로그램을 작성하시오.
(평균은 반올림하여 소수 둘째자리까지 출력하도록 한다.)
일단 데이터값을 입력받기 위해서는
import java.util.Scanner; ☞ Scanner를 import해주고,
Scanner sc=new Scanner(System.in); ☞ Scanner 객체를 생성해줘야 합니다.
int cnt=sc.nextInt();
int sum=0;
float avg=0;
☞ 필요한 변수들을 생성한 후 초기화시켜줍니다.
일단 cnt는 현재 입력된 변수가 몇개인지 세는 역할을 할 겁니다. 그래야 합계를 총 개수로 나눌 수 있으니까요!
여기서는 몇개인지 저희가 직접 입력해줄 것 이기 때문에 정수를 입력받을 수 있도록 scanner 함수를 써줍니다.
sum 변수는 합계를 저장해줄겁니다. 계속 입력받은 변수를 더해서 저장해놔야겠죠?
avg 변수는 누가 봐도 평균함수일 겁니다 ㅎ.ㅎ... 소수까지 저장시켜줘야 하므로 float형 실수형 변수로 만들어줬습니다.
즉, avg 변수에는 sum/cnt를 한 값이 들어가겠죵?
cnt변수와 sum변수에는 정수가 들어갈 것이기 때문에 int형 변수로 지정해줬답니다
for(int i=1;i<=cnt;i++){
☞ for문은 while문과 같은 반복제어문 중 하나로 기본 구조는 for(초기값; 조건식; 증감식) 입니다
초기값 부분에는 for문을 cnt값만큼 반복해야 하므로 int형 변수 i를 만들어주고 일단 1로 설정해줍니다.
두번째 부분인 조건식에는 반복문이 실행될 조건을 넣어줍니다. 이 조건식이 참일때만 반복문이 실행됩니다.
저는 cnt 숫자만큼 반복문을 실행시킬 것이기 때문에 i가 cnt 이하라는 조건식을 넣어줍니다.
마지막 증감식 부분에는 반복문이 계속 돌아가는 무한루프를 벗어나기 위해 i의 값을 변경시켜주는 증감식을 넣어줍니다.
i++는 i=i+1과 같은 의미입니다.
int j=sc.nextInt();
☞그 다음엔 cnt수만큼 정수를 입력받을 수 있도록 for문 안에 int형 변수 j를 설정해둡니다.
sum+=j;
☞ sum은 합계를 구하는 함수이기 때문에 입력받은 j변수를 계속 더해줍니다.
sum+=j 는 sum=sum+j 와 같은 문장입니다.
avg=(float)sum/(float)cnt;
☞ avg 함수에 평균을 구해서 저장해야 하므로 sum/cnt를 한 값을 저장해줍니다.
여기서 주의해야 할 점은 현재 sum 변수와 cnt 변수는 int형으로 지정이 되어있기 때문에 그냥 sum/cnt로 계산을 하면 계산결과도 int형으로 나옵니다.
우리는 소수점 첫째 자리까지 출력해야 하므로 sum값고 cnt값도 모두 실수형인 float형으로 바꿔줍니다.
저렇게 앞에 (float)를 붙여서 다른 형으로 형변환을 하는 것을 casting(캐스팅)이라고 합니다.
System.out.printf("%.2f",avg);
☞ for문 밖에 printf 출력문을 써서 avg 변수를 출력해줍니다.
printf 출력문은 %d, %f, %s 와 같은 서식을 써서 변수를 넣기 용이하게 만들어져 있는 출력문입니다.
소수 둘째자리까지 출력하고 싶을 때는 "%.2f"를 쓰고 , 뒤에 넣고 싶은 변수명을 써주시면 됩니다.
avg를 소수둘째자리까지 반올림하고 싶으므로 ("%.2f",avg)를 넣어줬습니다.
어디 한번 실행해볼까요?
☞ 3 값을 넣었더니 세개의 정수를 입력받습니다.
그래서 바로 99 65 30 세개의 정수를 넣어봤는데요
세개의 정수를 합한 값이 sum 값에 저장되고 그 값을 3으로 나눈 avg값이 출력되는 순서입니다.
avg값은 소수 둘째 자리만 출력되도록 설정해놨으므로 64.67이라는 값이 출력되네요
그럼 오늘도 열심히 다음 문제를 풀러 달려보겠습니다.!!