** 실습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

+ Recent posts