//1
1부터 10까지의 정수를 입력받다가 입력된 정수가 범위를 벗어나면 그 때까지 1번 이상 입력된 각 숫자의 개수를 작은 수부터 출력하는 프로그램을 작성하시오.
입력 예 5 6 10 9 3 5 3 5 0
출력 예
3 : 2개
5 : 3개
6 : 1개
9 : 1개
10 : 1개
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num, i;
int count[11] = { 0 };
while (1)
{
scanf("%d", &num);
if (num < 1 || num > 10)break;
count[num]++;
}
for (i = 1; i <= 10; i++)
{
if (count[i] > 0)
{
printf("%d : %d개\n", i, count[i]);
}
}
return 0;
}
자가진단 1 영문 대문자를 입력받다가 대문자 이외의 문자가 입력되면 그 때까지 1번 이상 입력된 각 문자의 개수를 사전 순으로 출력하는 프로그램을 작성하시오.
입력 예 A B C F F F B Z !
출력 예
A : 1
B : 2
C : 1
F : 3
Z : 1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char a[26] = { 0 };
char ch;
int i;
while (1)
{
scanf(" %c", &ch);
if (ch < 'A' || ch > 'Z')break;
a[ch-'A']++;
}
for (i = 0; i <= 25; i++)
{
if (a[i] > 0)
{
printf("%c : %d\n", i+'A', a[i]);
}
}
return 0;
}
//2
정수를 입력받다가 0이 입력되면 마지막에 입력된 0을 제외하고 그 때까지 입력된 정수의 일의 자리 숫자가 각각 몇 개인지 작은 수부터 출력하는 프로그램을 작성하시오. (0개인 숫자는 출력하지 않는다.)
입력 예 10 55 123 63 85 61 125 0
출력 예
0 : 1개
1 : 1개
3 : 2개
5 : 3개
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num, i;
int count[10] = { 0 };
while (1)
{
scanf("%d", &num);
if (num == 0) break;
count[num % 10]++;
}
for (i = 0; i < 10; i++)
{
if (count[i] > 0)
{
printf("%d : %d개\n", i, count[i]);
}
}
return 0;
}
자가진단 2 100 미만의 정수를 입력받다가 0이 입력되면 마지막에 입력된 0을 제외하고 그 때까지 입력된 정수의 십의 자리 숫자가 각각 몇 개인지 작은 수부터 출력하는 프로그램을 작성하시오. (0개인 숫자는 출력하지 않는다.)
입력 예 10 55 3 63 85 61 85 0
출력 예
0 : 1
1 : 1
5 : 1
6 : 2
8 : 2
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num, i;
int count[10] = { 0 };
while (1)
{
scanf("%d", &num);
if (num == 0) break;
if (num < 1 || num < 100)
{
count[num % 10]++;
}
}
for (i = 0; i < 10; i++)
{
if (count[i] > 0)
{
printf("%d : %d\n", i, count[i]);
}
}
return 0;
}
//3
피보나치 수열이란 첫 번째 항과 두 번째 항만 1이고 나머지 항은 바로 앞의 두 항의 합과 같은 수열을 말한다. 각 항의 값을 계산하는 다음의 예를 보고 피보나치 수열의 10, 20, 30, 40항의 값을 출력하는 프로그램을 작성하시오.
항
1
2
3
4
5
…
계산식
1+1
1+2
2+2
…
수열
1
1
2
3
5
...
입력 예 10 55 123 63 85 61 125 0
출력 예
피보나치 수열 10항 : 55
피보나치 수열 20항 : 6765
피보나치 수열 30항 : 832040
피보나치 수열 40항 : 102334155
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i;
int fibo[41] = { 0, 1, 1 };
for (i = 3; i <= 40; i++)
{
fibo[i] = fibo[i - 1] + fibo[i - 2];
}
for (i = 10; i <= 40; i += 10)
{
printf("피보나치 수열 %d항 : %d\n", i, fibo[i]);
}
return 0;
}
자가진단 3 100 이하의 자연수를 입력받아 첫 번째 항은 100으로 두 번째 항은 입력받은 수로 초기화하고 다음 항부터는 전전항에서 전항을 뺀 수로 채워나가는 수열을 작성하여 그 수가 음수가 나올 때까지 출력하는 프로그램을 작성하시오.
입력 예 62
출력 예 100 62 38 24 14 10 4 6 –2
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i;
int arr[100] = { 0, 100 };
scanf("%d", &arr[2]);
printf("%d %d ", arr[1], arr[2]);
for (i = 3; i <= 100; i++)
{
arr[i] = arr[i - 2] - arr[i - 1];
printf("%d ", arr[i]);
if (arr[i] < 0) break;
}
return 0;
}
이 표현보다 이표현이 좋음
scanf("%d", &a);
arr[2] = a;
scanf("%d", &arr[2]);
//4
3행 3열의 배열을 선언하고 아래의 출력 예와 같이 초기화한 후 출력하는 프로그램을 작성하시오.
출력 예
3 5 4
2 6 7
8 10 1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i, j;
int arr[3][3] = { {3, 5, 4}, {2, 6, 7}, {8, 10, 1} };
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
자가진단 4 3행 5열의 배열을 아래 출력 예와 같이 초기화 한 후 형식에 맞추어 출력하는 프로그램을 작성하시오. (수 사이의 공백은 3칸으로 하고 각 수는 2칸으로 오른쪽에 맞추어 출력한다. "%2d ")
출력 예
5 8 10 6 4
11 20 1 13 2
7 9 14 22 3
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i, j;
int arr[3][5] = { {5, 8, 10, 6, 4}, {11, 20, 1, 13, 2}, {7, 9, 14, 22, 3} };
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
printf("%2d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
<운영체제 register 메모리>
Cache 내부 메모리 - 자주쓰는거는 중간메모리를 가져와서 하는것
데이터 큰거 gpu cache 에 저장해두고 외부 따는 등에 사용
usb하드데스트 외부메모리
혼자 공부하는 컴퓨터 구조 운영체체 책
<운영체제>
컴퓨터 안의 영상 제어 scanf printf 화면에 뿌리고 그런거 구현
메모리 저장 명령어내려서 만드는거
Job scheduling - 배분 뭐먼저해 너부터해 나부터 할래
{{}} 배열 등 사람이 인식하기 쉽게 적는것이고, 컴퓨터 내부적으로는 일자로 여김
숫자로만 개수 제대로 맞게 들어가 있으면 상관없음 -> 오류 체크할때 주의
일자인데 시작주소 arr[0] arr[1]…
<터보 C정복 - 1990년대 포인터 부분 잘 다뤘던 책>
어마어마하게 두꺼운데 잘나옴, 그만큼 포인터가 어렵다.
//5
3행 3열의 배열 두 개를 만들어서 입력을 받고 두 배열의 합을 구하여 출력하는 프로그램을 작성하시오.
입력 예
첫 번째 배열 1행 1 2 3
첫 번째 배열 2행 4 5 6
첫 번째 배열 3행 7 8 9
두 번째 배열 1행 9 6 3
두 번째 배열 2행 8 5 2
두 번째 배열 3행 7 4 1
출력 예
10 8 6
12 10 8
14 12 10
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i, j;
int a[3][3], b[3][3], hap[3][3];
for (i = 0; i < 3; i++)
{
printf("첫번째 배열 %d행 ", i + 1);
for (j = 0; j < 3; j++)
{
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < 3; i++)
{
printf("두번째 배열 %d행 ", i + 1);
for (j = 0; j < 3; j++)
{
scanf("%d", &b[i][j]);
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
hap[i][j] = a[i][j] + b[i][j];
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d ", hap[i][j]);
}
printf("\n");
}
return 0;
}
자가진단 5 2행 3열의 배열 두 개를 만들어서 입력을 받고 두 배열의 곱을 구하여 출력하는 프로그램을 작성하시오.
입력 예
first array
1 2 3 4
5 6 7 8
second array
1 4 7 8
3 6 9 8
출력 예
1 8 21 32
15 36 63 64
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i, j;
int a[2][4], b[2][4], mul[2][4];
printf("first array\n");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
scanf("%d", &a[i][j]);
}
}
printf("second array\n");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
scanf("%d", &b[i][j]);
}
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
mul[i][j] = a[i][j] * b[i][j];
}
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", mul[i][j]);
}
printf("\n");
}
return 0;
}
//6
학생 3명의 국어, 영어, 수학 점수를 입력받아 학생별 총점과 과목별 합계를 아래와 같이 출력하는 프로그램을 작성하시오.
입력 예
1번째 학생의 점수 95 100 88
2번째 학생의 점수 85 60 93
3번째 학생의 점수 66 99 88
출력 예
국어 영어 수학 총점
1번 95 100 88 283
2번 85 60 93 238
3번 66 99 88 253
합계 246 259 269 774
10 8 6
12 10 8
14 12 10
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i, j;
int score[4][4] = { {0} };
for (i = 0; i < 3; i++)
{
printf("%d번째 학생의 점수 ", i + 1);
for (j = 0; j < 3; j++)
{
scanf("%d", &score[i][j]);
score[i][3] += score[i][j];
score[3][j] += score[i][j];
score[3][3] += score[i][j];
}
}
printf(" 국어 영어 수학 총점\n");
for (i = 0; i < 4; i++)
{
if (i < 3) printf(" %d번", i + 1);
else printf("합계");
for (j = 0; j < 4; j++)
{
printf("%4d", score[i][j]);
}
printf("\n");
}
return 0;
}
자가진단 6 5명 학생의 국어, 영어, 수학, 과학 4과목의 점수를 입력 받아서 각 개인별로 평균이 80 이상이면 "pass", 그렇지 않으면 "fail"을 출력하고, 합격한 사람의 수를 출력하는 프로그램을 작성하시오.
입력 예
85 67 95 65
80 95 86 56
100 98 67 86
95 76 84 65
67 86 90 76
출력 예
fail
fail
pass
pass
fail
Successful : 2
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i, j;
int score[6][5];
int total[6] = { 0, };
int count = 0;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 4; j++)
{
scanf("%d", &score[i][j]);
}
}
for (i = 0; i < 5; i++)
{
total[i+1] += score[i][i+1];
if (total[i] >= 80)
{
printf("pass\n");
count++;
}
else printf("fail\n");
}
printf("Successful : %d", count);
return 0;
}
sum 을 추가해서 짤 수있음 배열 안하고
구분해서 처리하는게 나중에 확장성이 좋음
//7
아래와 같은 파스칼 삼각형을 출력하는 프로그램을 작성하시오. 파스칼 삼각형은 첫 번째 줄 첫 번째 행을 1로 초기화한 후 다음 줄부터는 바로 위의 값과 바로 위 왼쪽의 값을 더한 값이 된다.
출력 예
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
#include <stdio.h>
int main()
{
int i, j;
int pas[6][6] = {0};
pas[1][1] = 1;
for (i = 2; i < 6; i++)
{
for (j = 1; j <= i; j++)
{
pas[i][j] = pas[i - 1][j - 1] + pas[i - 1][j];
}
}
for (i = 1; i < 6; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d", pas[i][j]);
}
printf("\n");
}
return 0;
}
자가진단 7 배열을 만들어서 반복문을 이용하여 아래와 같이 저장한 수 출력하는 프로그램을 작성하시오.
출력 예
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
#include <stdio.h>
int main()
{
int i, j;
int pas[6][6] = { 0 };
for (i = 2; i < 6; i++)
{
for (j = 1; j <= 5; j++)
{
pas[1][j] = 1;
pas[i][1] = 1;
pas[i][j] = pas[i - 1][j] + pas[i][j - 1];
}
}
for (i = 1; i < 6; i++)
{
for (j = 1; j <= 5; j++)
{
printf("%d ", pas[i][j]);
}
printf("\n");
}
return 0;
}
------ < 개념정리 > ---------------------------------------------------------------
< 다차원 배열 >
다차원 배열 : 배열을 더 잘활용하는 법, 이차원배열 지도형으로 사용하면 현실세계의 다양한 문제에 적용가능
다차원배열활용 예시
1. 구구단 - 이차원 배열을 출력하기
이중포문과 이차원배열은 굉장히 밀접한 관계가있다는 것을 확인할 수 있는 예시
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i, j;
int gugudan[10][10];
for (i = 1; i <= 9; i++)
{
printf("\n[%d단]\n\n", i);
for (j = 1; j <= 9; j++)
{
gugudan[i][j] = i * j;
printf("%d X %d = %d\n", i, j, gugudan[i][j]);
}
}
return 0;
}
i는 아래로 증가, j는 세로로 증가 매칭이 되는 공간
학생점수의 총합을 구하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i, j;
int score[5][2];
int total[2] = { 0, };
for (i = 0; i < 5; i++)
{
printf("%d번 학생의 수학, 영어 점수 : ", i + 1);
scanf("%d %d", &score[i][0], &score[i][1]);
}
for (i = 0; i < 5; i++)
{
total[0] += score[i][0];
total[1] += score[i][1];략
}
printf("\n\n5명의 수학 점수 합계 : %d\n", total[0]);
printf("5명의 영어 점수 합계 : %d\n", total[1]);
return 0;
}
배열 크기 :
나중에 늘어날 수도 있으면 넓게 평생 그대로면 최적화 시키는게 좋음
더필요하면 닐록이라고 더 할당하는 경우도 있는데 많이 없고
근데 게임같은 경우는 정확하게 하는게 중요
자기거에서 쓸때는 그래도 조금 너그러운데 멀리 떨어진 사용자들한테 데이터를 날려야 할 경우
효율적으로 조심해야함
효율적으로 데이터를 관리할 필요가 있다
(parentheses)
[brackets]
{braces}
이렇게 구분해서 언급
초기화를 안시키면 누적해서 더할때 문제가 생기기 때문에
0으로 초기화를 시키는 습관을 들여야 한다
if (i == 0 || j == 0)
{
arr[i][j] = 1;
}
좋은방법
실내던전 구축 - BSP
90년대 출시 퀘이크 존 카멕이 만들걸로 유명
횡스크롤 2D게임 시대 - 퀘이크 나옴 80286
벽이 있고 벽이있고 벽 기준으로
좌우 binary space partition 효과적으로 3D공간 구현
효과적으로 공간구현
언리얼엔진의 경우 실내던전에 비스비가 없음
3D디자이너가 만든거 올려도돼 - 왼쪽 오른쪽 계산없이.
시대가 변했음
그래픽카드가 발전하면서 BSP 유물됨
* 이거 차이(?)
#include<math.h>
#include<cmath> - c++ 에서 정의한 math 라는 소리
'Basics > 자기주도 C언어 프로그래밍' 카테고리의 다른 글
[Chapter] 12 함수 II (0) | 2023.07.14 |
---|---|
[Chapter] 11 함수 I (0) | 2023.07.14 |
[Chapter] 09 배열 I (0) | 2023.07.14 |
[Chapter] 08 반복제어문 III (0) | 2023.07.14 |
[Chapter] 07 반복제어문 II (0) | 2023.07.14 |