★ 「2019학년도 1학기」 수/업/노/트 ★
by. 동동매니저 >_<
▶ 일자 : 2019년 03월 19일 (화)
▶ 과목 : 자료구조 1 실습
▶ 담당 교수님 : SCH 성낙준 교수님
※ 실습 내용을 요약해보면?
C언어 복습 3주차(?) 및 알고리즘 고민의 시간...
※ 오늘 실습한 문제!!
▶ 문제 1
크기를 입력받고 아래의 출력과 같이 모래시계를 출력하시오.
★ 실행 예시
▶ 문제 2
파일 이름을 입력받고, 파일의 내용과 소문자, 대문자, 숫자, 공백의 개수를 각각 출력하시오.
★ 실행 예시
※ 문제를 풀어보면? (소스 코드)
★ 문제 1
#include <stdio.h>
int main(void){
int size; // 모래시계의 크기
int i,j; // 반복문 제어 변수
printf("크기를 입력하세요 : ");
scanf("%d",&size); // 크기를 입력 받음
for(i=0;i<size;i++){ // 크기만큼 반복
for(j=0;j<i;j++) printf(" "); // 공백 출력
for(j=0;j<2*(size-i)-1;j++) printf("*"); // 별 출력
for(j=0;j<i;j++) printf(" "); // 공백 출력
printf("\n"); // 줄 바꿈 문자 출력
}
for(i=size-1;i>=0;i--){ // 크기만큼 다시 반복
for(j=0;j<i;j++) printf(" "); // 공백 출력
for(j=0;j<2*(size-i)-1;j++) printf("*"); // 별 출력
for(j=0;j<i;j++) printf(" "); // 공백 출력
printf("\n");
}
return 0; // 프로그램 종료
}
★ 문제 2
#include <stdio.h>
int main(void){
char file_name[24],read; // 파일 이름 및 읽기 변수 선언
int small=0,large=0,num=0,space=0; // 각 문자를 세는 변수
FILE *fp; // 파일 포인터
printf("파일 이름: ");
scanf("%s",file_name); // 파일 이름 입력
fp=fopen(file_name,"r"); // 파일을 읽기 모드로 열기
if(fp==NULL){
puts("파일을 열 수 없음"); // 파일을 열 수 없을 때 예외 처리
return 0;
}
while(1){ // 파일의 끝을 만날 때 까지 계속 반복
fscanf(fp,"%c",&read); // 하나의 문자를 읽음
if(feof(fp)) break; // 파일의 끝이면, 반복문 탈출
if(read>='a'&&read<='z') small++; // 소문자
else if(read>='A'&&read<='Z') large++; // 대문자
else if(read>='0'&&read<='9') num++; // 숫자
else if(read==' ') space++; // 공백
printf("%c",read); // 문자를 출력
}
printf("\n");
printf("==%s 내용==\n",file_name); // 파일의 이름 출력
printf(" 소문자: %3d개\n",small); // 소문자 개수 출력
printf(" 대문자: %3d개\n",large); // 대문자 개수 출력
printf(" 숫자: %3d개\n",num); // 숫자 개수 출력
printf(" 공백: %3d개\n",space); // 공백 개수 출력
fclose(fp); // 파일 닫기
return 0;
}
※ 수업을 듣고 나서 느낀 점!!
1번 문제에서 별의 개수와 공백의 개수를 계산하는 과정에서 약간의 어려움이 있었지만, 그래도 고민을 한 끝에 해결~!
(굳이 우측의 공백을 넣지 않아도 됐는데... ㅠ.ㅠ)
2번 문제에서는, 파일의 끝을 감지하는 부분이 있어야 하고, 문자의 종류를 세야 하기에, 한 문자 단위로 파일에서 읽어왔음.
그래도 1번 문제보다는 쉬웠던 느낌?
※ 기타 참고 사항!!
없음