** 실습1 **
/* 1
문제)100개의 정수를 저장할수 있는 배열을 선언하고 차례대로 입력 받다가 0이 입력되면
0을 제외하고 그때까지 입력된 정수를 가장 나중에 입력된 정수부터 차례대로
출력하는 프로그램.
입력예)3 5 10 55 0
출력예)55 10 5 3
*/
int[] arr = new int[100];
int i, cnt = 0;
for(i = 0 ; i < arr.length ; i++)
{
arr[i] = scn.nextInt();
if(arr[i] == 0)
break;
cnt++;
}
for(i = cnt-1 ; i >= 0 ; i--)
{
System.out.print(arr[i] + " ");
}
//i변수 이용하여 반복 (위와 동일한 문제)
int j;
for(j = i-1 ; j >=0 ; j--)
{
System.out.printf("%d ", arr[j]);
}
** 실습2 **
/* 2
문제)연도와 월을 입력받아 해당 월의 날수를 출력하다가 월이 0이 입력되면 프로그램 종료
(무한루프이용)
단, 윤년은 400년에 한번씩, 4년에 한번이면서 100년은 제외.
year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
윤년인 경우 2월의 날수는 29일
입.출력예)년 = 2000
월 = 2
입력하신 달의 날수 는 29일 입니다. //days[month]
년 = 2022
월 = 13
잘못입력하셨습니다. //month 월을 1~12가 아닌 경우
년 = 2023
월 = 0
*/
int[] days = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //new int[13]
int year, month;
while(true)
{
System.out.print("년 = ");
year = scn.nextInt();
System.out.print("월 = ");
month = scn.nextInt();
if(month == 0)
break;
if(month > 12 || month <1)
{
System.out.println("잘못입력하셨습니다.");
continue;
}
else
{
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
{
days[2] = 29;
}
else
{
days[2] = 28;
}
System.out.printf("입력사하신 달의 일수는 %d입니다.\n", days[month]);
}
}
** 실습3 **
/* 3
문제)10개의 정수를 입력받아 그 중 가장 큰 수를 출력하는 프로그램
단, 출력은 max변수 사용
입력예)5 10 8 55 6 31 12 24 61 2
출력예)61
*/
int[] a = new int[10];
int i,max=0;
for(i = 0 ; i < a.length ; i++)
{
a[i] = scn.nextInt();
if(a[i] > max)
{
max = a[i];
}
}
System.out.print(max);
//for문 2번 사용할 경우
for(i = 0 ; i < a.length ; i++)
{
a[i] = scn.nextInt();
}
max = a[0];
for(i = 1 ; i < a.length ; i++)
{
if(max < a[i])
{
max = a[i];
}
}
** 실습4 **
/*
문제)10개의 수를 입력받아 그 중 가장 작은 수를 출력하는 프로그램
단, 가장 작은 수 출력시 min변수를 사용하며, 선언시 초기값 설정하지 않음.
입력예)5 -10 8 55 -6 31 12 24 61 -2
출력예)-10
*/
int[] a = new int[10];
int i, min;
for(i = 0 ; i < a.length ; i++)
{
a[i] = scn.nextInt();
}
min = a[0];
for(i = 1 ; i < a.length ; i++)
{
if(min > a[i])
{
min = a[i];
}
}
System.out.println(min);
** 실습5 **
/* 5
문제)4자리 이하의 10개 정수를 입력받아 짝수 중 가장 큰 값과 홀수중 가장 작은 값을
출력하는 프로그램.
단, min,max 변수 초기값 설정 후 진행함
입력예)-5 10 -8 55 6 -31 12 -24 61 2
출력예)홀수 중 가장 작은 값 : -1 (min)
짝수중 가장 큰 값 : 12 (max)
*/
int[] a = new int[10];
int i, min = 9999, max = -9998; // min = 10000, max = -10000 가능
for(i = 0 ; i < a.length ; i++)
{
a[i] = scn.nextInt();
}
for(i = 0 ; i < a.length ; i++)
{
if(a[i] % 2 == 0) //if(a[i] % 2 == 1)는 음수가 안된다.
{
if(max <= a[i])
max = a[i];
}
else
{
if(min >= a[i])
min = a[i];
}
}
** 실습6 **
/* 6
문제)10명의 컴퓨터 점수를 입력받아 배열에 저장하고 총점과 평균을 구하는 프로그램작성.
단, for문 1번 사용. 평균은 소수 첫째자리까지 출력.
입력예)95 100 88 65 80 89 58 93 77 99
출력예)총점 = 844
평균 = 84.4
*/
int[] score = new int[10];
int i, sum = 0; //누적하려면 초기화 해야한다.
float avg;
for(i = 0 ; i < score.length ; i++)
{
score[i] = scn.nextInt();
sum += score[i];
}
avg = (float)sum / score.length; //for문안에쓰려면 avg 초기화 해줘야한다.
// 정수 / 정수 는 정수이기에 둘중하나를 실수로 형변환해줘야한다.
// foalt : 4byte / double : 8byte -> avg가 foalt이기에 double로 정수를 형변환하면 오류한다.
// 대입할때 큰평수에서 작은평수로는 대입 안된다.
System.out.printf("총점 : %d \n", sum);
System.out.printf("평균 : %.1f", avg);
** 정렬 **
** 선택정렬 (Selsection sort) **
- 자료 중 가장 작은 값 / 가장 큰 값을 선택하여 맨앞 / 맨뒤 로 보내며 정렬하는 알고리즘
- 비교 횟수는 많지만 교환 횟수가 적기 때문에 교환이 많이 이루어져야 하는 자료형태에서는 가장 효율적으로 적용가능
** 선택정렬 **
/*
기본 배열 오름차순 정렬문제
*/
int[] a = {3, 1, 2, 6, 5, 4};
int i, j , tmp, k;
for(i = 0 ; i < a.length-1 ; i++)
{
for(j = i + 1 ; j < a.length ; j++)
{
if(a[i] > a[j])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
System.out.println("\n" + i + "번째");
for(k = 0 ; k < a.length ; k++)
{
System.out.printf("%d ", a[k]);
}
}
System.out.println("\n\n최종 실행후 결과");
//디버깅 용도 : 프로그램문제는 없지만 내가 만든것을 검증하기위해?
for(i = 0 ; i < a.length ; i++)
{
System.out.printf("%d ", a[i]);
}
'수업끄적끄적_7MONTH > Java' 카테고리의 다른 글
11/10 수업 (10일차) (0) | 2023.11.10 |
---|---|
11/09 수업 (9일차) (2) | 2023.11.09 |
11/07 수업 (7일차) (1) | 2023.11.07 |
11/06 수업 (6일차) (0) | 2023.11.06 |
11/02 수업 (4일차) (0) | 2023.11.05 |