마음만은 새내기

항상 초심을 잃지 않고 생활하겠습니다~!

2019 수업 노트

2019-1학기 수업 노트 (자료구조 1 실습, 2019.03.19.)

동동매니저 2019. 3. 27. 18:54

「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번 문제보다는 쉬웠던 느낌?


기타 참고 사항!!

없음