Notice
Recent Posts
Link
정화 코딩
씨프실 기말고사 벼락치기 본문
9장. 함수와 변수
- 팩토리얼 함수
#include <stdio.h>
int factorial1(int n)
{
int result = 1;
for(int i = 1; i <= n; i++)
result *= i;
return result;
}
int factorial2(int n)
{
if(n == 1)
return 1;
else
return n * factorial2(n-1);
}
int main()
{
int n;
scanf("%d", &n);
printf("by 반복문 : %d\n", factorial1(n));
printf("by 순환문 : %d\n", factorial2(n));
return 0;
}
- 거듭제곱 함수
#include <stdio.h>
int power1(int x, int n)
{
int result = 1;
for(int i = 1; i <= n; i++)
result *= x;
return result;
}
int power2(int x, int n)
{
if(n == 0)
return 1;
else if(n % 2 == 0)
return power2(x*x, n/2);
else
return x * power2(x*x, (n-1)/2);
}
int main()
{
int x, n;
scanf("%d %d", &x, &n);
printf("by 반복문 : %d\n", power1(x, n));
printf("by 순환문 : %d\n", power2(x, n));
return 0;
}
10장. 배열
예제1. 난수로 배열 만들고 평균, 최댓값 구하기
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
void makeArray(int A[], int n)
{
srand(time(NULL));
for(int i = 0; i < n; i++)
A[i] = rand() % 100;
}
void printArray(int A[], int n)
{
for(int i = 0; i < n; i++)
printf("%d ", A[i]);
printf("\n");
}
int minArray(int A[], int n)
{
int min = A[0];
for(int i = 1; i < n; i++)
{
if(A[i] < min)
min = A[i];
}
return min;
}
int maxArray(int A[], int n)
{
int max = A[0];
for(int i = 1; i < n; i++)
{
if(A[i] > max)
max = A[i];
}
return max;
}
int main()
{
int A[N];
int n;
scanf("%d", &n);
makeArray(A, n);
printArray(A, n);
printf("%d %d\n", minArray(A, n), maxArray(A, n));
return 0;
}
- 주사위 던지기
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10000
int main()
{
int dice[6] = {0};
for(int i = 0; i < N; i++)
dice[rand() % 6]++;
printf("==============\n");
printf(" 면 빈도 \n");
printf("==============\n");
for(int i = 0; i < 6; i++)
printf(" %d %4.d \n", i, dice[i]);
return 0;
}
- 예제2. 이차원 배열에서 행의 합, 열의 합 구하기
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
void makeArray(int A[N][N], int r, int c)
{
for(int i = 0; i < r; i++)
for(int j = 0; j < c; j++)
A[i][j] = rand() % 100;
}
void printArray(int A[N][N], int r, int c)
{
for(int i = 0; i < r; i++)
{
for(int j = 0; j < c; j++)
printf("%d ", A[i][j]);
printf("\n");
}
}
void sumArray(int A[N][N], int r, int c)
{
int sumR, sumC;
for(int i = 0; i < r; i++)
{
sumR = 0;
for(int j = 0; j < c; j++)
sumR += A[i][j];
printf("%d ", sumR);
}
printf("\n");
for(int j = 0; j < r; j++)
{
sumC = 0;
for(int i = 0; i < c; i++)
sumC += A[i][j];
printf("%d ", sumC);
}
printf("\n");
}
int main()
{
int A[N][N];
int r, c;
scanf("%d %d", &r, &c);
srand(time(NULL));
makeArray(A, r, c);
printArray(A, r, c);
sumArray(A, r, c);
return 0;
}
- 예제3. 계산 결과 출현 횟수 구하기
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, c, num;
int appear[10] = {0};
scanf("%d %d %d", &a, &b, &c);
num = a*b*c;
for(int i = 0; i < 7; i++)
{
appear[num % 10]++;
num = num / 10;
printf("%d\n", num);
}
for(int i = 0; i < 10; i++)
printf("%d ", appear[i]);
return 0;
}
- 선택 정렬
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 선택 정렬
#define N 10
void selectionSort(int A[])
{
printf("Before Sort. : ");
for(int i = 0; i < N; i++)
printf("%d ", A[i]);
printf("\n");
printf("\n<<<<<<<<<< Selection Sorting... >>>>>>>>>>\n\n");
for(int i = 0; i < N-2; i++)
{
int min = i;
for(int j = i+1; j <= N-1; j++)
if(A[j] < A[min])
min = j;
int temp = A[min];
A[min] = A[i];
A[i] = temp;
printf(" %d Pass >> ", i+1);
for(int i = 0; i < N; i++)
printf("%d ", A[i]);
printf("\n");
}
}
int main()
{
int A[N];
srand(time(NULL));
for(int i = 0; i < N; i++)
A[i] = rand() % 100;
selectionSort(A);
return 0;
}
- 삽입 정렬
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 삽입 정렬
#define N 10
void insertionSort(int A[])
{
printf("Before Sort. : ");
for(int i = 0; i < N; i++)
printf("%d ", A[i]);
printf("\n");
printf("\n<<<<<<<<<< Insertion Sorting... >>>>>>>>>>\n\n");
for(int i = 1; i < N-1; i++)
{
int key = A[i];
int j = i - 1;
while(j >= 0 && A[j] > key)
{
A[j+1] = A[j];
j--;
}
A[j+1] = key;
printf(" %d Pass >> ", i);
for(int i = 0; i < N; i++)
printf("%d ", A[i]);
printf("\n");
}
}
int main()
{
int A[N];
srand(time(NULL));
for(int i = 0; i < N; i++)
A[i] = rand() % 100;
insertionSort(A);
return 0;
}
11. 포인터
12. 문자열
예제1. 공백 삭제하기
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
void deleteSpace(char str[])
{
char tmp[N];
int k = 0;
for(int i = 0; i < strlen(str); i++)
{
if(str[i] != ' ')
{
tmp[k] = str[i];
k++;
}
}
tmp[k] = '\0';
strcpy(str, tmp);
}
int main()
{
char str[N];
fgets(str, sizeof(str), stdin);
deleteSpace(str);
printf("%s\n", str);
return 0;
}
예제2. 문자열 속 문자 개수 세기
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int strChr(char str[], char key)
{
int count = 0;
for(int i = 0; i < strlen(str); i++)
{
if(str[i] == key)
count++;
}
return count;
}
int main()
{
char str[N];
char key;
fgets(str, sizeof(str), stdin);
scanf("%c", &key);
printf("%d\n", strChr(str, key));
return 0;
}
예제3. 문자열 속 단어 개수 세기
#include <string.h>
#define N 100
int countChr(char str[])
{
char *token;
int count = 0;
token = strtok(str, " ");
while(token != NULL)
{
count++;
token = strtok(NULL, " ");
}
return count;
}
int main()
{
char str[N];
fgets(str, sizeof(str), stdin);
printf("%d\n", countChr(str));
return 0;
}
예제4. 문자열 역순으로 출력하기
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
void countChr(char str[])
{
char *token[10];
int i = 0;
token[i] = strtok(str, " ");
while(token[i] != NULL)
{
i++;
token[i] = strtok(NULL, " \n");
}
for(int j = i-1; j >= 0; j--)
printf("%s ", token[j]);
}
int main()
{
char str[N];
fgets(str, sizeof(str), stdin);
countChr(str);
return 0;
}
예제5. 문자열에서 단어 찾아서 바꾸기
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main()
{
char str1[N], str2[N], find[N], replace[N];
fgets(str1, N, stdin);
fgets(find, N, stdin);
fgets(replace, N, stdin);
char *token;
token = strtok(str1, " ");
while(token != NULL)
{
if(strcmp(token, find) == 0)
strcat(str2, replace);
else
strcat(str2, token);
strcat(str2, " ");
token = strtok(NULL, " ");
}
printf("%s\n", str2);
return 0;
}
13. 구조체
예제1.
#include <stdio.h>
#include <stdlib.h>
typedef struct Bank
{
int num;
char name[20];
int rest;
}Bank;
int main()
{
Bank b;
scanf("%d %s %d", &b.num, b.name, &b.rest);
printf("%s의 %d계좌 잔액은 %d원\n", b.name, b.num, b.rest);
return 0;
}
예제2.
#include <stdio.h>
#include <stdlib.h>
typedef struct Bank
{
int num;
char name[20];
int rest;
}Bank;
void test(Bank *a)
{
scanf("%d %s %d", &a->num, a->name, &a->rest);
printf("%s의 %d계좌 잔액은 %d원\n", a->name, a->num, a->rest);
}
int main()
{
Bank b;
test(&b);
return 0;
}
예제3.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student
{
int num;
char name[20];
float grade;
} Student;
void inputStudents(Student s[])
{
for(int i = 0; i < 3; i++)
scanf("%d %s %f", &s[i].num, s[i].name, &s[i].grade);
}
void findByName(Student s[])
{
char name[20];
scanf("%s", name);
for(int i = 0; i < 3; i++)
if(strcmp(name,s[i].name) == 0)
printf("%d %s %.2f\n", s[i].num, s[i].name, s[i].grade);
}
void findByScore(Student s[])
{
float grade;
scanf("%f", &grade);
for(int i = 0; i < 3; i++)
if(grade <= s[i].grade)
printf("%d %s %.2f\n", s[i].num, s[i].name, s[i].grade);
}
int main()
{
Student s[3];
inputStudents(s);
findByName(s);
findByScore(s);
return 0;
}
14. 포인터 활용
'Free' 카테고리의 다른 글
[C++] vscode에서 C++ 파일 실행 단축키 설정 (0) | 2024.06.27 |
---|---|
Visual Studio 콘솔창 유지 안 되는 (바로 꺼지는) 오류 해결 (0) | 2024.04.03 |
C++ 개발 환경 구축하기 (4) | 2024.02.20 |
씨프실 중간고사 벼락치기 (0) | 2022.10.30 |
Comments