위키페이지 구조에 맞게 [페이지이름바꾸기] 하였습니다. - [임인택] || [[TableOfContents]] || == 소 개 == 05학번 [ZeroPage] [허아영]의 C 코딩연습실 입니다. 아직까진 실력이 많이 부족하지만 연습 많이하다보면 늘겠죠? ^^ 틀린 부분이나, 더 좋은 방법의 코딩법을 아시면, 말씀해 주세요. 열씸히 하겠습니다! zp숙제 => ''숙제용''이라고 표기 == 연 습 == === #1 === 5월 3일 ''숙제용'' (devC++로) {{{~cpp /*********************************************************** 한 변의 패턴수와 패턴모양을 입력받아 마름모를 출력하는****** 프로그램 입니다. **20051095 허아영************************** ***********************************************************/ #include #include int main() { int pattern_num; int i, j; int blank; char pattern_shape; printf("출력 할 마름모 변의 패턴수를 입력하십시오(정수>0) :"); scanf("%d", &pattern_num); scanf("%c", &pattern_shape); printf("출력 할 마름모 패턴 모양을 입력하십시오(문자) :"); scanf("%c", &pattern_shape); for(i = 1; i <= pattern_num; i++) { for(blank = 0; blank < pattern_num - i; blank++) printf(" "); for(j = 0; j < 2*i-1; j++) printf("%c", pattern_shape); printf("n"); } for(i = 1; i < pattern_num; i++) { for(blank = 0; blank < i; blank++) printf(" "); for(j = 0; j < 2*(pattern_num-i)-1; j++) printf("%c", pattern_shape); printf("n"); } system("PAUSE"); return 0; } }}} === #2 === 5월 4일 (visualC++로) 두번째는 첫번째보다는 시간이 별로 안걸렸어요. 그만큼 조잡(?)한가요?ㅡㅡ {{{~cpp /************************************************************* *패턴모양만 입력받아 한변에 패턴 5개가 되는 마름모를 출력하는* *프로그램입니다. [컴퓨터공학부 20051095 허아영] * *************************************************************/ #include #include void main() { int i, j, k; char shape; printf("패턴모양을 입력하십시오 :"); scanf("%c", &shape); for(i = 0; i <= 4; i++) { for(j = 4; j >= i; j--) printf(" "); for(k = 0; k <= 2*i; k++) printf("%c", shape); printf("n"); } for(i = 0; i <= 3; i++) { for(j = 0; j - 1 <= i; j++) printf(" "); for(k = 6; k >= 2*i; k--) printf("%c", shape); printf("n"); } } }}} === #3 === 5월 5일 (devC++) 직각 삼각형의 높이와 패턴모양을 입력받은 후 출력하는 프로그램입니다. {{{~cpp #include #include int main() { int i,j; int h = 0; char shape; printf("삼각형의 높이 패턴의 모양을 입력하십시오(예 : 5*) : "); scanf("%d%c", &h, &shape); for(i = 1; i <= h; i++) { for (j = 0; j < i; j++) { printf("%c", shape); } printf("n"); } system("PAUSE"); return 0; } }}} === #4 === 5월 5일 (devC++) 두 숫자를 입력받은후 두 숫자 중에 큰 숫자를 출력하고, 두 숫자의 차를 구하는 프로그램입니다. {{{~cpp #include /******************************************************************************* * 20051095 허아영 두 숫자를 입력받아 더 큰 숫자를 출력시키고, 큰 수와 작은수의 * * 차를 구하는 프로그램입니다. ***************************************************************************** */ void main() { int a, b; printf("두 수를 입력하십시오 :"); scanf("%d %d", &a, &b); if(a > b) { printf("큰수는 %d입니다n", a); printf("차 : %d - %d = %dn", a, b, a-b); } else { printf("큰수는 %d입니다n", b); printf("차 : %d - %d = %dn", b, a, b-a); } system("PAUSE"); } }}} ↓↓↓ 정리차원에서 고쳐 보았습니다. {{{~cpp #include void main() { int a, b, Max, dif; printf("두 수를 입력하십시오 :"); scanf("%d %d", &a, &b); if(a > b) { Max = a; dif = a-b; } else { Max = b; dif = b-a; } printf("큰 수는 %d 입니다.n", Max); printf("두 수의 차이는 %d입니다n", dif); system("PAUSE"); } }}} ↓↓ 같은 수를 입력 받을 때를 생각을 못했어서, 다시 정리요 ㅎㅎ {{{~cpp #include void main() { int a, b, Max, dif; printf("두 수를 입력하십시오 :"); scanf("%d %d", &a, &b); if(a > b) { Max = a; dif = a-b; printf("큰 수는 %d 입니다.n", Max); printf("두 수의 차이는 %d입니다n", dif); } else if(a == b) { printf("두 수가 같습니다.n"); } else { Max = b; dif = b-a; printf("큰 수는 %d 입니다.n", Max); printf("두 수의 차이는 %d입니다n", dif); } system("PAUSE"); } }}} === #5 === 김승욱 교수님 홈페이지에 있는 실습자료인데 , 혼자 만들어보았습니다. 2번 문제는 너무 어려워서, 아직은 분석중이에요 -.- 문제1. 로또 복권의 6자리 수를 랜덤하게 생성하데, 사용자가 발생 횟수를 선택할 수 있도록 하시오. 예를 들면, 초기 화면에서 사용자가 5를 입력하면 랜덤 수 6개를 5번 출력 하는데 출력 양식이 다음과 같도록 프로그램을 완성하시오. {{{~cpp < LOTTO RANDOM NUMBER GENERATOR > Enter the game count : 5 ======================== GAME 1 : 21 18 31 2 4 30 GAME 2 : 20 41 38 2 26 32 GAME 3 : 15 16 25 31 36 37 GAME 4 : 34 32 23 27 11 6 GAME 5 : 38 15 36 15 21 24 ======================== }}} 2. 화면에서 5개의 점수를 입력 받아 1차원 배열에 저장하고 입력 받은 수의 합과 평균, 최대값과 최소값까지 산출하여 그 결과를 아래와 같이 보여주시오. {{{~cpp Enter a number for score[0] : 80 Enter a number for score[1] : 50 Enter a number for score[2] : 99 Enter a number for score[3] : 74 Enter a number for score[4] : 88 [[ The contents of score array ]] 80 50 99 74 88 sum = 391, avg = 78.2 max = 99, min = 50 score[0] : 80, rank = 3 score[1] : 50, rank = 5 score[2] : 99, rank = 1 score[3] : 74, rank = 4 score[4] : 88, rank = 2 }}} ㄷ ㅏ짜면 올리겠습니다 ! 정렬하는 여러방법중에 가장 쓸만 한것 (?) 이 뭘까요 aa 퀵 소트, 버블 소트 등 여러가지 방법이 있는데. 일단은 버블 소트가 구현하기 쉬울 꺼야. 그러나 혼자 어떻게 해야할지 고민해보는 것도 좋겠네 ㅎㅎ. -[강희경] 이 문제 내가 풀어봤는데 정렬 문제라고 보는 것보다는 순위를 매기는 문제라고 생각하면 더 쉽게 풀리겠네. [강희경/메모장]을 참고해봐. - 선배 감동이에요 ㅠㅠ [허아영] === 세번째 C 과제 === {{{~cpp 화면 출력제어에 대한 연습 • 2 ∼ 9 까지의 구구단을 한 화면에 출력하는 프로그램을 작성하시오. 포인터 처리에 대한 연습 • 포인터로 배열들의 요소를 지적하고 배열간의 자료교환을 하는 프로그램을 작성하시오. - 변수형과 포인터와의 관계, 포인터가 가리키는 대상의 크기 등을 보여주는 기능을 첨가하여 작성하시오. }}} === 거듭제곱의 반대 === 시작값을 1024로 할 때 {{{~cpp #include int calcul(int num); void print_result(int result); void main() { int result, n = 1024; while(n > 1) { result = calcul(n); print_result(result); n = result; } } int calcul(int num) { num /= 2; return num; } void print_result(int result) { printf("%d / 2 = %dn", result*2,result); } }}} ==== 소스짠 후 느낀점 ==== 함수 이름을 막 짓던 습관을 버리기로했다. 함수를 기능 별로 만들려는 습관은 가지기로 했다. === 팩토리얼(재귀함수 쓰지않고) === {{{~cpp /*1에서 n까지의 곱을 구하는 프로그램입니다. >>팩토리얼- 재귀함수<<를 쓰지않고 !! */ #include int fac(int n); void main() { int num, result; printf("n = "); scanf("%d", &num); result = fac(num); printf("%d", result); } int fac(int n) { int fac_result = 1,i = 1; while(i <= n) { fac_result *= i; i++; } return fac_result; } }}} ==== 소스 짠 후 ==== 아직도 프로그래밍하는데 세미콜론을 빠트린다던지, scanf 함수를 쓸 때 변수앞에 &을 붙지지 않을 때가 다반사다. 습관이 중요하다. ! ! 좋은습관을 만들자!!. === 입력받은 한문자의 2진수 중 0의 갯수 === {{{~cpp /*한문자를 입력받아 문자의 비트중 0의 갯수*/ #include int countbit(char ch); void main() { char ch; printf("input 한개의 문자 ==>"); scanf("%c", &ch); printf("n 0의 갯수 : %dn", countbit(ch)); } int countbit(char ch) { int count = 0; for(; ch != 0; ch>>=1) { if((~ch) & 1 ) { count++; } } return count; } }}} === 단어의 갯수를 출력 === 장난으로 짜봤다. 예외처리 하지 않음. {{{~cpp #include void main() { int i = 0, count = 0; char str[50]; printf("단어입력 : "); gets(str); while(str[i]) { if(str[i] == ' ') { count++; } i++; } printf("단어의 수 : %d n", count+1); } }}} === 영소문자, 대문자, 특수문자, 수치문자의 갯수 === gets 하다가 scanf로 바꾼 ! ㅠ {{{~cpp #include void main() { int i = 0, countBig = 0, countSmall = 0, countSpe = 0, countNum = 0; char str[100]; printf("영대문자, 영소문자, 수치문자, 특수문자의 수 알아내는 프로그램n"); printf("문장 입력 : "); scanf("%s", str); while(str[i] != NULL) { if((str[i] >= 48) && (str[i] <= 59)) { countNum++; }else if((str[i] >= 65) && (str[i] <= 90)) { countBig++; }else if((str[i] >= 97) && (str[i] <= 122)) { countSmall++; }else { countSpe++; } i++; } printf("소문자 : %d, 대문자 : %d, 수치문자 : %d, 특수문자 : %d", countSmall, countBig, countNum, countSpe); } }}} = Thread = * 오 아영이 열심히 하는데 - [상협] - 감사합니다^^; 다른애들에 비하면 열씸히 하는것도 아니죠 ^^ * ^^ 자식. 완전 열심히 해! 나도 같이 하자! - 보창 - 네 ^^ * ^^ 자식. 완전 열심히 해! 나도....음.. 난 골수까지 귀차니즘이 스며서..에잇.혼자 열심히 해서 장학금 타서 밥사주!! - [조현태] - 헉.. 너야말루. 장학금 타면 사줘 !! ㅋㅋ 난 공부할 때 적은 양이라도 너무 티를 많이 내서 그렇지.. 보면 별거 없어 ㅠ 이게 문제야..ㅋ -[허아영] - 훗... 내 장학금 받아서 얻어먹을 생각을 하다니.. 그러다 굶어 죽으려면 어떻하려고..;; 그나저나 왠지 위키가 우리 낙서장인 듯한 느낌이..음... 좋은 현상인지 좋지않은 현상인지..;; 뭐.. 어쨋든 열심히 하라고.^^ - [조현태] ---- [허아영]