1. 세 개의 숫자 중에 가장 큰 수 찾기
– 세 개의 숫자를 키보드로 입력 받음
– 가장 큰 숫자를 찾아 화면으로 출력
: if문 사용 or 삼항 연산자 사
#include <stdio.h>
int main()
{
int a, b, c;
int max;
scanf("%d %d %d", &a, &b, &c);
max = ((a>b) & (a>c)) ? a : ((b>a) & (b>c)) ? b : c;
printf("%d", max);
return 0;
}
2. 입력받은 수를 역순으로 만들기
– 12345 → 54321
– while() 문장 사용
#include <stdio.h>
int main()
{
int N;
int r = 0;
scanf("%d", &N);
while(N != 0){
r *= 10;
r += N % 10;
N /= 10;
}
printf("%d", r);
}
3. 두 수 사이의 소수 찾기
– 두개의 수를 입력 받음
– 두 수 사이의 소수를 화면에 출력
#include <stdio.h>
int main() {
int low, high, i, flag;
scanf("%d %d", &low, &high);
if(low > high){
int temp = low;
low = high;
high = temp;
}
printf("%d 와 %d 사이의 소수: ", low, high);
while (low < high) {
flag = 0;
if (low <= 1) {
++low;
continue;
}
for (i = 2; i <= low / 2; ++i) {
if (low % i == 0) {
flag = 1;
break;
}
}
if (flag == 0)
printf("%d ", low);
++low;
}
return 0;
}
4. 두 행렬의 곱 구하기
– 두 행렬의 row, column을 입력 받음
– 두 행렬을 구성하는 요소의 값을 입력 받음
– 두 행렬을 곱하고 결과를 화면에 출력
– 배열 사용
#include <stdio.h>
int main() {
int m, n, p, q;
scanf("%d %d", &m, &n);
scanf("%d %d", &p, &q);
if (n != p) {
printf("두 번째 행렬의 행 크기가 첫 번째 행렬의 열 크기와 일치해야 함.\n");
return 1;
}
int matrix1[m][n], matrix2[p][q], result[m][q];
printf("첫 번째 행렬 요소 입력\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &matrix1[i][j]);
}
}
printf("두 번째 행렬 요소 입력력\n");
for (int i = 0; i < p; i++) {
for (int j = 0; j < q; j++) {
scanf("%d", &matrix2[i][j]);
}
}
// 행렬 곱 계산
for (int i = 0; i < m; i++) {
for (int j = 0; j < q; j++) {
result[i][j] = 0;
for (int k = 0; k < n; k++) {
result[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
printf("두 행렬의 곱 결과:\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < q; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}
5. 문장에서 특정 문자의 출력 빈도 계산하기
– 문장을 입력 받음 (ex. English Advanced learner’s dictionary)
– 찾을 문자를 입력 받음 (ex. ‘a’) – 결과 출력 (ex. 3)
–배열을 사용하여 문장 저장할 것
#include <stdio.h>
#include <string.h>
int main() {
char sentence[1000];
char targetChar;
int count = 0;
printf("문장 입력: ");
scanf("%99[^\n]", sentence);
printf("찾을 문자 입력: ");
scanf(" %c", &targetChar);
for (int i = 0; i < strlen(sentence); i++) {
if (sentence[i] == targetChar) {
count++;
}
}
printf("'%c' 문자의 출력 빈도: %d\n", targetChar, count);
return 0;
}
6. 작성한 프로그램 소스 코드를 그대로 출력하는 프로그램 만들기
– 수행되는 프로그램의 소스 코드를 그대로 화면에 출력하기
#include <stdio.h>
int main() {
FILE *file;
char ch;
file = fopen(__FILE__, "r");
if (file == NULL) {
printf("파일을 열 수 없습니다.\n");
return 1;
}
printf("현재 프로그램의 소스 코드:\n");
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
fclose(file);
return 0;
}
7. 배열의 원소를 포인터를 사용하여 접근하기
– 배열의 원소를 초기화
– 포인터를 사용하여 전체 원소 출력
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int *ptr = arr; // 배열의 첫 번째 원소를 가리키는 포인터
printf("배열의 원소: ");
for (int i = 0; i < 5; i++) {
printf("%d ", *ptr);
ptr++;
}
printf("\n");
return 0;
}
8. 함수 포인터를 사용하여 입력된 두 문자, 두 숫자 또는 두 문자열을 비교하 라
– 세 형태의 비교를 수행하는 함수 구현
– 세 함수를 함수 포인터로 선언하여 프로그램 초기화시 함수 포인터 연결
– 두 개의 문자, 숫자 또는 문자열을 입력 받음
– 타입에 따라 함수 포인터를 이용하여 적절한 비교 함수 호출
– 결과 출력
#include <stdio.h>
#include <string.h>
// 문자열 비교 함수
int compareStrings(const char *str1, const char *str2) {
return strcmp(str1, str2);
}
// 숫자 비교 함수
int compareNumbers(int num1, int num2) {
if (num1 < num2) return -1;
else if (num1 > num2) return 1;
else return 0;
}
// 문자 비교 함수
int compareChars(char char1, char char2) {
if (char1 < char2) return -1;
else if (char1 > char2) return 1;
else return 0;
}
int main() {
int choice;
printf("(1: 문자열, 2: 숫자, 3: 문자): ");
scanf("%d", &choice);
if (choice == 1) {
char str1[100], str2[100];
printf("두 문자열 입력:\n");
scanf("%s %s", str1, str2);
// 함수 포인터를 문자열 비교 함수에 연결
int (*compare)(const char *, const char *) = compareStrings;
int result = compare(str1, str2);
if (result < 0) printf("첫 번째 문자열이 작습니다.\n");
else if (result > 0) printf("두 번째 문자열이 작습니다.\n");
else printf("두 문자열이 같습니다.\n");
} else if (choice == 2) {
int num1, num2;
printf("두 숫자를 입력하세요:\n");
scanf("%d %d", &num1, &num2);
// 함수 포인터를 숫자 비교 함수에 연결
int (*compare)(int, int) = compareNumbers;
int result = compare(num1, num2);
if (result < 0) printf("첫 번째 숫자가 작습니다.\n");
else if (result > 0) printf("두 번째 숫자가 작습니다.\n");
else printf("두 숫자가 같습니다.\n");
} else if (choice == 3) {
char char1, char2;
printf("두 문자를 입력하세요:\n");
scanf(" %c %c", &char1, &char2);
// 함수 포인터를 문자 비교 함수에 연결
int (*compare)(char, char) = compareChars;
int result = compare(char1, char2);
if (result < 0) printf("첫 번째 문자가 작습니다.\n");
else if (result > 0) printf("두 번째 문자가 작습니다.\n");
else printf("두 문자가 같습니다.\n");
} else {
printf("잘못된 선택입니다.\n");
}
return 0;
}
9. 두 문자열을 입력 받아 연결 후 출력하기
– 배열 사용
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100], result[200]; // 두 입력 문자열과 연결 결과를 저장할 배열
printf("첫 번째 문자열을 입력하세요: ");
scanf("%s", str1);
printf("두 번째 문자열을 입력하세요: ");
scanf("%s", str2);
// 두 문자열을 연결하여 result 배열에 저장
strcpy(result, str1); // 첫 번째 문자열 복사
strcat(result, str2); // 두 번째 문자열 연결
printf("연결된 문자열: %s\n", result);
return 0;
}
10. 시간을 표현하는 구조체를 선언하고 시간 차이 계산하기
– 마이크로 초(us), 밀리 초(ms)으로 구성된 시간 구조체 선언
– 두 개의 구조체 포인터 변수 선언
– 두 개의 구조체를 위해 동적 메모리 할당
– 프로그램을 시간할 때 시작 시간 구조체 초기화
– while(1000000); 백만번 빈 루프 수행
– 프로그램 종료 전에 종료 시간 구조체 세팅
– 시작과 종료사이에 걸린 시간을 계산해서 출력
– 사용이 끝난 동적 메모리 해제
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 시간을 저장하는 구조체 선언
struct Time {
long us; // 마이크로 초
long ms; // 밀리 초
};
int main() {
// 두 개의 구조체 포인터 변수 선언
struct Time *start_time, *end_time;
// 두 개의 구조체를 위해 동적 메모리 할당
start_time = (struct Time *)malloc(sizeof(struct Time));
end_time = (struct Time *)malloc(sizeof(struct Time));
if (start_time == NULL || end_time == NULL) {
printf("메모리 할당 오류\n");
return 1;
}
// 프로그램 시작 시간 구조체 초기화
struct timespec start;
clock_gettime(CLOCK_REALTIME, &start);
start_time->us = start.tv_nsec / 1000;
start_time->ms = start_time->us / 1000;
// 백만번 빈 루프 수행
long i;
for (i = 0; i < 1000000; i++) {
// 루프 내용은 비어있음
}
// 프로그램 종료 시간 구조체 세팅
struct timespec end;
clock_gettime(CLOCK_REALTIME, &end);
end_time->us = end.tv_nsec / 1000;
end_time->ms = end_time->us / 1000;
// 시작과 종료 사이에 걸린 시간 계산
long elapsed_us = end_time->us - start_time->us;
long elapsed_ms = end_time->ms - start_time->ms;
// 결과 출력
printf("시작 시간: %ld us, %ld ms\n", start_time->us, start_time->ms);
printf("종료 시간: %ld us, %ld ms\n", end_time->us, end_time->ms);
printf("경과 시간: %ld us, %ld ms\n", elapsed_us, elapsed_ms);
// 사용이 끝난 동적 메모리 해제
free(start_time);
free(end_time);
return 0;
}
'Computer Science > Data Structure' 카테고리의 다른 글
[자료구조] 8장 BST (0) | 2023.12.16 |
---|---|
[자료구조] 4장 스택 (0) | 2023.10.16 |
[자료구조] 3장 Linked List (0) | 2023.10.15 |
[자료구조] 2장 자료구조 소개 (0) | 2023.10.15 |
[자료구조] 1장 C언어 리뷰 (1) (0) | 2023.09.10 |