Code: Select all
1 #include <stdio.h>
2 #include <string.h>
3
4 int input (char word[50]);
5 void print_arr (char word[50]);
6 void swap (char word1[50], char word2[50]);
7
8 int main (void){
9
10 char word1[50];
11 char word2[50];
12 char word3[50];
13
14 //첫 번째 단어
15 printf("단어 입력: ");
16 if(!input(word1)){ //input함수의 리턴 값을 이용해 return값이 0이면 EOF입력이 들어왔다는 것을 구분
17 //!을 이용해 역으로 변경하면 1, 조건을 만족시키므로 프로그램 종료
18 return 0;
19 }
20 printf("정렬 된 단어: ");
21 print_arr(word1); //총 단어의 갯수가 1개이므로 정렬과정을 생략
22 putchar('\n');
23 printf("현재까지의 문자열: ");
24 print_arr(word1);
25 putchar('\n');
26
27 //두 번째 단어
28 printf("단어 입력: ");
29 if(!input(word2)){ //input함수의 리턴 값을 이용해 return값이 0이면 EOF입력이 들어왔다는 것을 구분
30 //!을 이용해 역으로 변경하면 1, 조건을 만족시키므로 프로그램 종료
31 return 0;
32 }
33 int r; //정렬 결과를 저장할 변수(strcmp의 반환값)
34 r = strcmp(word1,word2);
35 printf("정렬 된 단어: ");
36 if(r > 0){ //반환 값이 0보다 클 경우, 두 번째 입력받은 단어가 사전순으로는 앞에 위치함을 의미
37 print_arr(word2); //word2 문자열을 먼저 출력해줌
38 print_arr(word1);
39 }
40 else{ //반환값이 0이거나 0보다 작을 경우는 출력순서를 변경할 필요가 없으므로 입력순으로 출력
41 print_arr(word1);
42 print_arr(word2);
43 }
44 putchar('\n');
45 printf("현재까지의 문자열: ");
46 print_arr(word1);
47 print_arr(word2);
48 putchar('\n');
49
50 //세 번째 단어
51 printf("단어 입력: ");
52 if(!input(word3)){ //input함수의 리턴 값을 이용해 return값이 0이면 EOF입력이 들어왔다는 것을 구분
53 //!을 이용해 역으로 변경하면 1, 조건을 만족시키므로 프로그램 종료
54 return 0;
55 }
56 printf("정렬 된 단어: ");
57 char copy1[50]; //배열은 복사해 copy로 저장
58 char copy2[50]; //사전순과 입력받은 순 두 가지를 출력해야하므로 전용 배열을 생성
59 char copy3[50];
60 strcpy(copy1,word1);
61 strcpy(copy2,word2);
62 strcpy(copy3,word3);
63
64 if(strcmp(copy1,copy2) > 0){ //뒤에 있는 문자열을 앞 단어와 교환해야 하는 경우만 교환
65 swap(copy1,copy2); //입력순으로 저장되어있는 단어들을 사전순으로 정렬
66 }
67 if(strcmp(copy1,copy3) > 0){ //(1,2),(1,3)비교로 맨 먼저 나와야하는 copy1을 고정
68 swap(copy1,copy3); //(2,3)비교를 통해 2,3번째 자리를 지정
69 }
70 if(strcmp(copy2,copy3) > 0){
71 swap(copy2,copy3);
72 }
73 print_arr(copy1); //사전순 출력
74 print_arr(copy2);
75 print_arr(copy3);
76 putchar('\n');
77 printf("현재까지의 문자열: ");
78 print_arr(word1);
79 print_arr(word2);
80 print_arr(word3);
81 putchar('\n');
82
83 return 0;
84 }
85 int input (char word[50]){ //문자열 입력받아오는 함수
86 if(gets(word)== 0){ //반환값이 0이면 EOF
87 putchar('\n');
88 return 0;
89 }
90 else return 1;
91 }
92
93 void print_arr (char word[50]){ //문자열 배열 출력함수
94 printf("%s ",word);
95 }
96 void swap (char word1[50], char word2[50]){
97
98 char temp[50]; //사전순 배열에서 순서를 교환할 때 쓰이는 중간 문자열
99 if(strcmp(word1,word2) > 0){ //뒤에 있는 문자열을 앞 단어와 교환해야 하는 경우만 교환
100 strcpy(temp,word1); //입력순으로 저장되어있는 단어들을 사전순으로 정렬
101 strcpy(word1,word2);
102 strcpy(word2,temp);
103 }
104 }
Code: Select all
1 #include<stdio.h>
2
3 int check_prime(int num);
4 void print_prime(int num);
5
6 int prime[1000];
7
8 int main(void) {
9 int x=0; //자연수를 입력 받기 위한 변수 x
10 int count_all=0; //소수의 개수
11 int is_prime=0; //입력 값 x의 소수 여부
12
13 printf("자연수 입력: ");
14 scanf("%d",&x);
15 printf("\n");
16
17
18 //is_prime을 체크하여 소수 여부를 알려줌
19 if(check_prime(x)) printf("%d는 소수입니다.\n\n",x);
20 else printf("%d는 소수가 아닙니다.\n\n",x);
21
22
23
24 //논의 사항
25 //최대값 이 int 자료형을 벗어나면 연산 불가능 -> 자료구조
26 //구한 각 소수를 메모리에 저장하여 비교하면 비교적 빠른 연산가능 -> 알고리즘
27 }
28
29 int check_prime(int num) {
30 int i,j, det;
31 int count_prime=0, is_prime=0;
32
33 //이중포문 i는 x보다 작은 모든 정수에대해서
34 //각 i가 약수를 갖는지
35 for(i=1; i<=num; i++) {
36 det = 0;
37 for(j=1; j<=i; j++) {
38 //1과 j==i인경우만 판별식 값이 2가 됨
39 if(i%j == 0) det ++;
40 }
41 //det가 2 이상이면 제외 소수가 아니다.
42 if(det == 2) {
43 prime[count_prime++] = i;
44 //마지막으로 i==x 인경우에 소수라고 판단하면 x는 소수
45 if(i==num) is_prime=1;
46 }
47 }
48 printf("1부터 입력받은 소수%d 까지의 소수의 개수는 %d개 입니다.\n\n", num, count_prime);
49
50 print_prime(count_prime);
51 return is_prime;
52 }
53
54 void print_prime(int num) {
55 int i;
56 for(i = 0; i< num; i++) printf("%d ", prime[i]);
57 printf("\n");
58 }
Code: Select all
1 #include<stdio.h>
2 #include<string.h>
3
4 void search(char *word, char *sentence);
5
6 int main(void) {
7 char line[100]; //최초 문장 입력
8 char temp[30]; //검색할 단어(토큰) 입력
9
10 printf("문장 입력: ");
11 gets(line);
12
13 while(1) {
14 printf("검색할 문자열 입력(종료는 end): ");
15 if(0 == gets(temp)) break; //EOF 입력 받으면 반복문 탈출
16 if(0 == strcmp(temp,"end")) break; //end를 입력 받으면 반복문 탈출
17 search(temp, line); //검색 함수 호출
18 }
19
20 /*
21 논의 사항
22 더 효율적인 계산 방법은?
23 strstr() 함수를 각자 구현할 수 있는가?
24 */
25 }
26
27 void search(char *word, char *sentence) {
28 char *t[100];
29 int cnt = 1;
30 int i;
31
32 //0번지는 원문 저장, 1번지부터 검색된 문자의 포인터를 저장
33 t[0]=t[cnt]=sentence;
34
35 while(1) {
36 t[cnt] = strstr(t[cnt-1], word); //이전 검색된 위치 다음부터 찾아야함, 무한 루프 방지
37 if(t[cnt] == NULL) break; //검색되지 않은경우 반복문 탈풀
38 cnt++; //검색된 개수를 카운트
39 t[cnt-1]++; //검색된 포인터를 1 더해줌, 무한루프 방지
40 }
41 printf("%d개", cnt-1);
42 for(i=1; i<cnt; i++) {
43 printf(", %d번째", t[i]-sentence); //포인터 위치의 차를 이용해서 몇번재에 위치하는지 계산
44 }
45 printf("\n");
46 }