⭐️ 조건 : 입력값이 54321일 경우, 출력값이 43215가 되도록
#include <stdio.h>
int main(void) {
int n[5];
int i;
for(i=0; i<5; i++){
printf("숫자를 입력해주세요: ");
scanf("%d", &n[i]);
}
for(i=0; i<5; i++){
printf("%d", __________ );
}
return 0;
}
🖍 n[(i+1) % 5]
% 연산자 : 왼쪽 값을 오른쪽 값으로 나눈 나머지를 계산하는 연산자
⭐️ 조건 : 돈이 총 46320원일 경우 1000원, 500원, 100원, 10원의 지폐 및 동전을 이용하여 아래의 항목들을 사용하여 "최소한의 코드"를 작성
m
/
, %
[
, ]
, (
, )
1000
, 500
, 100
, 10
class HelloWorld {
public static void main(String[] args) {
int m = 4620;
int a = ____________;
int b = ____________;
int c = ____________;
int d = ____________;
System.out.println(a); // 천원짜리 4장 출력
System.out.println(b); // 오백원원짜리 1장 출력
System.out.println(c); // 백원짜리 1장 출력
System.out.println(d); // 십원짜리 2장 출력
}
}
🖍
m / 1000
(m % 1000) / 500
(m % 500) / 100
(m % 100) / 10
⭐️ 조건 : 입력값은 홍길동, 김철수, 박영희 순서로 주어짐
#include <stdio.h>
#include <stdlib.h>
char n[30];
char *test(){
printf("입력하세요: ");
gets(n);
return n;
}
int main() {
char * test1;
char * test2;
char * test3;
test1 = test();
test2 = test();
test3 = test();
printf("%s\n", test1);
printf("%s\n", test2);
printf("%s", test3);
}
🖍
박영희
박영희
박영희
1️⃣ test1, test2, test3는 char형 변수를 가리키는 포인터 변수 선언.
2️⃣test()
함수를 실행,test()
함수는char *
타입으로 리턴하며,n
은char *
타입으로 지정 됨.
3️⃣gets()
함수를 통해 입력 받은 문자열을 전역 변수n[30]
에 저장. (배열명 == 배열의 주소값)
4️⃣return n
에 의해 n의 주소값을 돌려줌.
5️⃣ test1에 n의 주소값을 저장.
6️⃣test2 = test();
의 구문에 의해gets(n)
의 함수가 다시 호출되면서 '홍길동'이라고 저장되어 있는 전역 변수n[30]
에 '김철수'를 덮어씀.
7️⃣ test2에 n의 주소값을 저장.
8️⃣test3 = test();
의 구문도 마찬가지로 test3에 n의 주소값을 저장.
9️⃣ ∴ test1, test2, test3 모두 같은 n의 주소값을 가지고 있으며, n은 마지막으로 저장된 '박영희' 값을 가지고 있음.
*
: 자료형 뒤에*
를 붙이면 주소를 저장하는 포인터 변수,
*
연산은 주소에 해당하는 값을 가리킴&
: 일반 변수명 뒤에&
를 붙이면 해당 변수의 주솟값
*(&)
과 같이 두 연산을 같이 쓰면 서로 상쇄 됌gets()
: scanf() 함수와 달리 문자열을 공백 단위로 끊지 않고 줄바꿈이 일어날 시 문자열 끝에 '\0'이 붙여, 공백을 포함한 문자열을 입력 받음.getchar()
: 문자를 입력 받음puts()
: 문자열(string)만을 출력하는 함수, 문자열 출력 후 줄 바꿈을 시전 함putchar()
: 문자를 출력
학번 | 이름 | 학년 | 전공 | 전화번호 |
---|---|---|---|---|
240416 | 푸바오 | 4 | 소프트웨어공학 | 010-0000-0000 |
⭐️ 조건 : 문자열의 경우 작은 따옴표('
) 사용
CREATE TABLE 학생(
학번 int,
이름 varchar(20),
학년 int,
전공 varchar(30),
전화번호 varchar(20),
)
🖍 INSERT INTO 학생(학번, 이름, 학년, 전공, 전화번호) VALUES(240416, '푸바오', 4, '소프트웨어공학', '010-0000-0000');
- DML : DB 사용자가 저장된 데이터를 실질적으로 관리하는데 사용되는 언어
- INSERT : 테이블에서 새로운 튜플 삽입
INSERT INTO 학생 VALUES('푸바오', 3);
#include <stdio.h>
int main() {
int n[3] = [73, 95, 82];
int sum = 0;
for(int i=0; i<3; i++){
sum += n[i];
}
switch(sum/30){
case 10:
case 9: printf("A");
case 8: printf("B");
case 7:
case 6: printf("C");
default: printf("D");
}
}
🖍 BCD
1️⃣ sum = 73 + 95 + 82 = 250
2️⃣ sum / 30 = 250 / 30 = 8
3️⃣ 8과 일치하는 값을case
문을 실행. ∴ B 출력
4️⃣break
가 존재하지 않을 경우, 진입한case
부터break
를 만날 때까지 또는switch
문 끝까지 동작
5️⃣ C 출력 D 출력
break
: 반복문이나switch
문 안에서break
가 나오면 블록을 벗어남continue
: 반복문에서continue
가 나오면continue
이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 옮김default
:case
의 어느 값도 만족하지 않으면default
로 진입해 명령문 실행
🖍 조건 커버리지(Condition Coverage)
- Statement Coverage(문장 검증 기준) :
소스 코드의 모든 구문이 한 번 이상 수행되도록 테스트 케이스를 설계- Branch Coverage(분기 검증 기준) :
소스 코드의 모든 조건문에 대해 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행 되도록 테스트 케이스를 설계
Decision Coverage(결정 검증 기준)이라고도 함- Condition Coverage(조건 검증 기준) :
소스 코드의 조건문에 포함된 개별 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행 되도록 테스트 케이스를 설계- Branch/Codition Coverage(분기/조건 기준) :
분기 검증 기준과 조건 검증 기준을 모두 만족하는 설계로, 조건문이 True인 경우와 False인 경우에 따라 조건 검증 기준의 입력 데이터를 구문하는 테스트 케이스를 설계
#include <stdio.h>
int main() {
int c = 0;
for(int i=1; i<=2023; i++){
if(i%4 == 0) c++;
}
printf("\n%d", c);
}
🖍 505
0부터 2023까지의 숫자 중 4로 나누고 난 후 나머지가 0인 수의 개수를 찾는 코드이며, 그 개수는 2023을 4로 나눈 몫과 같다.
🖍 템퍼 프루핑(Tamper proofing)
= 템퍼 레스턴스
- 허니팟(Honeypot) : 비정상적인 접근을 탐지하기 위해 의도적으로 설치해 둔 시스템으로 일부러 허술하게 만들어서 해커에게 노출하는 유인시스템
- 핑거프린팅(Finger Printing) : 멀티미디어 콘텐츠에 저작권 정보와 구매한 사용자 정보를 삽입하여 곤텐츠 불법 배포자에 대한 위치 추적이 가능한 기술(저작권 정보구매자 정보)
- 워터마킹(Water Marking) : 디지털 콘텐츠에 저적권자 정보를 삽입하여, 불법 복제 시 워터마크를 추출, 원소유자를 증명할 수 있는 콘텐츠 보호 기술
#include <stdio.h>
#define MAX_SIZE 10
int isWhat[MAX_SIZE];
int point= -1;
void into(int num) {
if (point >= 10) printf("Full");
isWhat[++point] = num;
}
int take() {
if (isEmpty() == 1) printf("Empty");
return isWhat[point--];
}
int isEmpty() {
if (point == -1) return 1;
return 0;
}
int isFull() {
if (point == 10) return 1;
return 0;
}
int main(int argc, char const *argv[]) {
int e;
into(5); into(2);
while(!isEmpty()) {
printf("%d", take());
into(4); into(1); printf("%d", take());
into(3); printf("%d", take()); printf("%d", take());
into(6); printf("%d", take()); printf("%d", take());
}
return 0;
}
🖍 213465
1️⃣into(5);
, num= 5, point = -1, isWhat[0] = 5
2️⃣into(2);
, num= 2, point = 0, isWhat[1] = 2
3️⃣!isEmpty()
= ture,isEmpty()
는 0을 리턴
4️⃣printf("%d", take());
,take()
함수 실행 →isWhat[1]
를 리턴 → point = 0, ∴ 2 출력
5️⃣into(4);
, num= 4, point = 0, isWhat[1] = 4
6️⃣into(1);
, num= 1, point = 1, isWhat[2] = 1
7️⃣printf("%d", take());
,take()
함수 실행 → if문에 의해isEmpty()
함수를 실행하여 0을 리턴 →isWhat[2]
를 리턴 → point = 1, ∴ 1 출력
8️⃣into(3);
, num= 3, point = 1, isWhat[2] = 3
9️⃣take()
함수 실행 →isWhat[2]
를 리턴 → point = 1, ∴ 3 출력
1️⃣0️⃣take()
함수 실행 →isWhat[1]
를 리턴 → point = 0, ∴ 4 출력
1️⃣1️⃣into(6);
, num= 6, point = 0, isWhat[1] = 6
1️⃣2️⃣take()
함수 실행 →isWhat[1]
를 리턴 → point = 0, ∴ 6 출력
1️⃣3️⃣take()
함수 실행 →isWhat[0]
를 리턴 → point = -1, ∴ 5 출력
🖍 요구조건 분석 → 개념적 설계 → 논리적 설계 → 물리적 설계 → 구현
참고,
https://newbt.kr/시험/정보처리기사%20실기/2023년%202회/오소프트0506,
https://www.youtube.com/watch?v=czoWXdwEygc,
길벗알앤디. 『정보처리기사 실기 단기완성』. 길벗. 2023.