초기 네이버 기록/과거 공부 기록

(흔적)코딩 공부 기록 switch문과 배열 (씹어먹는 C언어 정답)

뜨거운 개발자 2023. 1. 7. 01:10

/*문제 1번 스위치문에 값 부분에 왜 정수만 와야하는가?*/

/*정답: 스위치문은 점프 태이블을 사용하는데 점프태이블을 위해서는 정해진 정수만을 입력해야지 변수가 입력되면 사용할 수 없기 때문에 */

/*임의의 실수에서 소수점 이하 두자리수만 추출하여 정수형 변수에 대입하라. 
예를들어 사용자로부터 입력받은 실수 f 가 12.3456이라면 34만 추출한다. 
이때 반올림은 고려하지 않아도 상관없다. 
f 가 달러 단위의 화폐 액수라고할 때 센트 단위만 추출해내는 경우라고 생각하면 된다. 
다음 ???? 자리에 적합한 연산식을 작성하는 문제이다
printf("실수를 입력하시오 : ");
scanf("%f", &f);
i = ? ? ? ?
printf("i=%d\n", i);
이 문제의 핵심은 음수이거나 소수점 이하의 자리수가 없는 경우까지 잘 고려하여 항상 잘 동작하는 코드를 만드는것이다.
*/
#include<stdio.h>
int main() {
	float f;
	printf("실수를 입력하세요");
	scanf_s("%f", &f);
	int i = (f - (int)f) * 100;
	printf("i=%d\n", i);
	return 0;
}
//이 문제는 되게 쉽게 풀렸는데 내 코딩 능력이 조금씩 늘고 있다는게 느껴져서 정말 기분이 좋았다.
/*10명의 학생 성적의 평균 구하고 80점 이상이면 합격하는 프로그램 만들기*/
#include<stdio.h>
int main() {
	int score[10];
	int i;
	int sum = 0;
	for (i = 0; i < 10; i++) {
		printf("%d번째 학생의 점수를 입력하시오.", i + 1);
		scanf_s("%d", &score[i]);
		sum += score[i];
	}
	printf("학생들의 평균 점수는 %d\n", sum / 10);
	for (i = 0; i < 10; i++) {
		if (score >= 80) {
			printf("%d번째 학생은 %d점으로 합격입니다.\n", i + 1, score[i]);

		}
		else {
			printf("%d번째 학생은 %d점으로 불합격 입니다\n", i + 1, score[i]);
		}
	}

	return 0;

}
/* 소수 1000개를 찾아보자.*/
#include<stdio.h>
int main() {
	int sosu[1000];
	int i=3;//for 문 증감연산 변수
	int j = 0;//소수 몇번째 인지 표기용 
	int k;
	for (;;) {
		if (i % 2 == 1) {
			for (k = 0; k <=j; k++) {
				if (i % sosu[k] == 0) {
					break;
				}
				if (k == j) {
					sosu[j] = i;
					j++;
					break;
				}
			}
			
		
			
		}
		if (j == 1000) {
			break;
		}
		i++;
		
	}
	printf("1번째 소수는 2입니다\n");
	for (i = 0; i < 1000; i++) {
		
		printf("%d번째 소수는 %d입니다.\n", i + 2, sosu[i]);
	}

	return 0;
}//이 문제는 스스로 풀어봤고 재미있었다. 이게 코딩의 재미인 것 같다ㅎㅎ.
/* 소수 프로그램 */
#include <stdio.h>
int main() {
  /* 우리가 소수인지 판별하고 있는 수 */
  int guess = 5; /* 소수의 배열 */
  int prime[1000]; /*    현재까지 찾은 (소수의 개수 - 1)    아래 두 개의 소수를
                      미리 찾았으므로    초기값은 1 이 된다.    */
  int index = 1; /* for 문 변수 */
  int i;         /* 소수인지 판별위해 쓰이는 변수*/
  int ok;        /* 처음 두 소수는 특별한 경우로 친다 */
  prime[0] = 2;
  prime[1] = 3;
  for (;;) {
    ok = 0;
    for (i = 0; i <= index; i++) {
      if (guess % prime[i] != 0) {
        ok++;
      } else {
        break;
      }
    }
    if (ok == (index + 1)) {
      index++;
      prime[index] = guess;
      printf("소수 : %d \n", prime[index]);
      if (index == 999) break;
    }
    guess += 2;
  }
  return 0;
}//모범 답안

이 글은 코딩 꼬꼬마 시절에 푼 문제를 보관한 글로 네이버에 저장해둔 글을 옮긴 글입니다.
혹시나 참고하시는 부분에 이상한 부분이나 질문이 생긴다면 남겨주시면 친절히 답변 드리겠습니다.

728x90