목차
■ 이해점검 풀이
■ 프로그램 문제 풀이
■ 프로그램 문제 풀이
본문내용
print(a, b)
return 0;
}
5. 프로그램 연습을 수정하여 특정 파일에서 여러 문자열을 동적으로 입력 받아 정렬하는 프로그램을 작성하시오.
#include "sort.h"
char *str[] = {"오름차순(ASCEND order)","내림차순(DESCEND order)"};
int main()
{
char tst[80];
char *pl[100];
int i=0,N=0;
order odr;
FILE *fp;
char fn[] ="str.txt";
if((fp = fopen(fn,"r")) == NULL)
{
printf("파일이 열리지 않습니다.\n");
exit(1);
}
while(!feof(fp)){
fscanf(fp,"%s",tst);
++N;
}
rewind(fp);
while(!feof(fp)){
fscanf(fp,"%s",tst);
pl[i]= ( char * ) malloc ( sizeof(char) * (strlen(tst)+1) );
strcpy(pl[i++],tst);
}
odr = ASCEND;
printf("원래 문자열 배열 : \n");
prtarray(pl,N);
sort(pl,N,odr);
printf("%s 정렬 후 >>\n", str[(odr == ASCEND)? 0:1]);
prtarray(pl,N);
odr = DESCEND;
sort(pl,N,odr);
printf("%s 정렬 후 >>\n", str[(odr == ASCEND)? 0:1]);
prtarray(pl,N);
return 0;
}
/* file : sort.c */
#include "sort.h"
void prtarray(char *a[],int n)
{
int i;
for(i = 0;i
printf("%s ",a[i]);
printf("\n\n");
}
void sort(char *s[], int n, order odr)
{
int i,j;
for(i=0;i
for(j=i+1;j
if(odr == ASCEND)
{
if(strcmp(s[i],s[j])>0)
swap(&s[i],&s[j]);
}
else
{
if(strcmp(s[i],s[j])<0)
swap(&s[i],&s[j]);
}
}
void swap(char **x, char **y)
{
char *temp;
temp = *x;
*x = *y;
*y = temp;
}
/* file : sort.h */
#include
#include
#include
enum order {ASCEND, DESCEND};
typedef enum order order;
void sort(char *s[], int n, order odr);
void prtarray(char *a[], int n);
void swap(char **, char **);
6. 위 프로그램에서 명령어 인자로 옵션 a와 d를 두어 각각 오름차순과 내림차순으로 정렬되도록 프로그램을 작성하시오.
#include "sort.h"
char *str[] = {"오름차순(ASCEND order)","내림차순(DESCEND order)"};
int main(int argc,int argv[])
{
char tst[80];
char *pl[100];
int i=0,N=0;
order odr;
FILE *fp;
char fn[] ="str.txt";
if(argc != 2 )
{
printf("사용법: sort (a or d)\n");
exit(1);
}
if( strcmp(argv[1],"a") == 0)
odr = ASCEND;
if( strcmp(argv[1],"d") == 0)
odr = DESCEND;
if((fp = fopen(fn,"r")) == NULL)
{
printf("파일이 열리지 않습니다.\n");
exit(1);
}
while(!feof(fp)){
fscanf(fp,"%s",tst);
++N;
}
rewind(fp);
while(!feof(fp)){
fscanf(fp,"%s",tst);
pl[i]= ( char * ) malloc ( sizeof(char) * (strlen(tst)+1));
strcpy(pl[i++],tst);
}
printf("원래 문자열 배열 : \n");
prtarray(pl,N);
switch(odr+1){
case 1:
sort(pl,N,odr);
printf("%s 정렬 후 >>\n",str[(odr == ASCEND)? 0:1]);
prtarray(pl,N);
break;
case 2:
sort(pl,N,odr);
printf("%s 정렬 후 >>\n",str[(odr == ASCEND)? 0:1]);
prtarray(pl,N);
break;
}
return 0;
}
/* file : sort.c */
#include "sort.h"
void prtarray(char *a[],int n)
{
int i;
for(i = 0;i
printf("%s ",a[i]);
printf("\n\n");
}
void sort(char *s[],int n,order odr)
{
int i,j;
for(i=0;i
for(j=i+1;j
if(odr == ASCEND)
{
if(strcmp(s[i],s[j])>0)
swap(&s[i],&s[j]);
}
else
{
if(strcmp(s[i],s[j])<0)
swap(&s[i],&s[j]);
}
}
void swap(char **x,char **y)
{
char *temp;
temp = *x;
*x = *y;
*y = temp;
}
/* file : sort.h */
#include
#include
#include
enum order {ASCEND,DESCEND};
typedef enum order order;
void sort(char *s[],int n,order odr);
void prtarray(char *a[],int n);
void swap(char **,char **);
return 0;
}
5. 프로그램 연습을 수정하여 특정 파일에서 여러 문자열을 동적으로 입력 받아 정렬하는 프로그램을 작성하시오.
#include "sort.h"
char *str[] = {"오름차순(ASCEND order)","내림차순(DESCEND order)"};
int main()
{
char tst[80];
char *pl[100];
int i=0,N=0;
order odr;
FILE *fp;
char fn[] ="str.txt";
if((fp = fopen(fn,"r")) == NULL)
{
printf("파일이 열리지 않습니다.\n");
exit(1);
}
while(!feof(fp)){
fscanf(fp,"%s",tst);
++N;
}
rewind(fp);
while(!feof(fp)){
fscanf(fp,"%s",tst);
pl[i]= ( char * ) malloc ( sizeof(char) * (strlen(tst)+1) );
strcpy(pl[i++],tst);
}
odr = ASCEND;
printf("원래 문자열 배열 : \n");
prtarray(pl,N);
sort(pl,N,odr);
printf("%s 정렬 후 >>\n", str[(odr == ASCEND)? 0:1]);
prtarray(pl,N);
odr = DESCEND;
sort(pl,N,odr);
printf("%s 정렬 후 >>\n", str[(odr == ASCEND)? 0:1]);
prtarray(pl,N);
return 0;
}
/* file : sort.c */
#include "sort.h"
void prtarray(char *a[],int n)
{
int i;
for(i = 0;i
printf("\n\n");
}
void sort(char *s[], int n, order odr)
{
int i,j;
for(i=0;i
{
if(strcmp(s[i],s[j])>0)
swap(&s[i],&s[j]);
}
else
{
if(strcmp(s[i],s[j])<0)
swap(&s[i],&s[j]);
}
}
void swap(char **x, char **y)
{
char *temp;
temp = *x;
*x = *y;
*y = temp;
}
/* file : sort.h */
#include
#include
#include
enum order {ASCEND, DESCEND};
typedef enum order order;
void sort(char *s[], int n, order odr);
void prtarray(char *a[], int n);
void swap(char **, char **);
6. 위 프로그램에서 명령어 인자로 옵션 a와 d를 두어 각각 오름차순과 내림차순으로 정렬되도록 프로그램을 작성하시오.
#include "sort.h"
char *str[] = {"오름차순(ASCEND order)","내림차순(DESCEND order)"};
int main(int argc,int argv[])
{
char tst[80];
char *pl[100];
int i=0,N=0;
order odr;
FILE *fp;
char fn[] ="str.txt";
if(argc != 2 )
{
printf("사용법: sort (a or d)\n");
exit(1);
}
if( strcmp(argv[1],"a") == 0)
odr = ASCEND;
if( strcmp(argv[1],"d") == 0)
odr = DESCEND;
if((fp = fopen(fn,"r")) == NULL)
{
printf("파일이 열리지 않습니다.\n");
exit(1);
}
while(!feof(fp)){
fscanf(fp,"%s",tst);
++N;
}
rewind(fp);
while(!feof(fp)){
fscanf(fp,"%s",tst);
pl[i]= ( char * ) malloc ( sizeof(char) * (strlen(tst)+1));
strcpy(pl[i++],tst);
}
printf("원래 문자열 배열 : \n");
prtarray(pl,N);
switch(odr+1){
case 1:
sort(pl,N,odr);
printf("%s 정렬 후 >>\n",str[(odr == ASCEND)? 0:1]);
prtarray(pl,N);
break;
case 2:
sort(pl,N,odr);
printf("%s 정렬 후 >>\n",str[(odr == ASCEND)? 0:1]);
prtarray(pl,N);
break;
}
return 0;
}
/* file : sort.c */
#include "sort.h"
void prtarray(char *a[],int n)
{
int i;
for(i = 0;i
printf("\n\n");
}
void sort(char *s[],int n,order odr)
{
int i,j;
for(i=0;i
{
if(strcmp(s[i],s[j])>0)
swap(&s[i],&s[j]);
}
else
{
if(strcmp(s[i],s[j])<0)
swap(&s[i],&s[j]);
}
}
void swap(char **x,char **y)
{
char *temp;
temp = *x;
*x = *y;
*y = temp;
}
/* file : sort.h */
#include
#include
#include
enum order {ASCEND,DESCEND};
typedef enum order order;
void sort(char *s[],int n,order odr);
void prtarray(char *a[],int n);
void swap(char **,char **);
소개글