U E D R , A S I H C RSS

허아영/C코딩연습

1. 소 개

05학번 ZeroPage 허아영의 C 코딩연습실 입니다.
아직까진 실력이 많이 부족하지만 연습 많이하다보면 늘겠죠? ^^
틀린 부분이나, 더 좋은 방법의 코딩법을 아시면, 말씀해 주세요.
열씸히 하겠습니다!

zp숙제 => 숙제용이라고 표기

2. 연 습

0.1. 1

5월 3일 숙제용 (devC++로)

~cpp 
/***********************************************************
한 변의 패턴수와 패턴모양을 입력받아 마름모를 출력하는******
프로그램 입니다. **20051095 허아영************************** 
***********************************************************/ 
#include <stdio.h>
#include <stdlib.h>
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;
}

1.1. 2

5월 4일 (visualC++로)
두번째는 첫번째보다는 시간이 별로 안걸렸어요. 그만큼 조잡(?)한가요?ㅡㅡ


~cpp 
/*************************************************************
*패턴모양만 입력받아 한변에 패턴 5개가 되는 마름모를 출력하는*
*프로그램입니다. [컴퓨터공학부 20051095 허아영]				 *
*************************************************************/
#include <stdio.h>
#include <string.h>

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");
	}
}

1.1. 3

5월 5일 (devC++)
직각 삼각형의 높이와 패턴모양을 입력받은 후 출력하는 프로그램입니다.
~cpp 
#include <stdio.h>
#include <stdlib.h>
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;
}

1.1. 4

5월 5일 (devC++)
두 숫자를 입력받은후 두 숫자 중에 큰 숫자를 출력하고, 두 숫자의 차를 구하는 프로그램입니다.
~cpp 
#include <stdio.h>
/*******************************************************************************
* 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 <stdio.h>

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 <stdio.h> 
 
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"); 
} 

1.1. 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
퀵 소트, 버블 소트 등 여러가지 방법이 있는데. 일단은 버블 소트가 구현하기 쉬울 꺼야. 그러나 혼자 어떻게 해야할지 고민해보는 것도 좋겠네 ㅎㅎ. -강희경
이 문제 내가 풀어봤는데 정렬 문제라고 보는 것보다는 순위를 매기는 문제라고 생각하면 더 쉽게 풀리겠네. 강희경/메모장을 참고해봐.
- 선배 감동이에요 ㅠㅠ 허아영

1.2. 세번째 C 과제


~cpp 
화면 출력제어에 대한 연습

&#8226;  2 ∼ 9 까지의 구구단을 한 화면에 출력하는 프로그램을 작성하시오.

포인터 처리에 대한 연습
&#8226;  포인터로 배열들의 요소를 지적하고 배열간의 자료교환을 하는 프로그램을 작성하시오.

-        변수형과 포인터와의 관계, 포인터가 가리키는 대상의 크기 등을 보여주는 기능을 첨가하여 작성하시오.    


1.3. 거듭제곱의 반대

시작값을 1024로 할 때
~cpp 
#include <stdio.h>

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);	
}

1.3.1. 소스짠 후 느낀점

함수 이름을 막 짓던 습관을 버리기로했다.
함수를 기능 별로 만들려는 습관은 가지기로 했다.

1.4. 팩토리얼(재귀함수 쓰지않고)

~cpp 
/*1에서 n까지의 곱을 구하는 프로그램입니다. 
	>>팩토리얼- 재귀함수<<를 쓰지않고 !! */
#include <stdio.h>

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;
}

1.4.1. 소스 짠 후

아직도 프로그래밍하는데 세미콜론을 빠트린다던지, scanf 함수를 쓸 때 변수앞에 &을 붙지지 않을 때가 다반사다.
습관이 중요하다. ! ! 좋은습관을 만들자!!.

1.5. 입력받은 한문자의 2진수 중 0의 갯수

~cpp 
/*한문자를 입력받아 문자의 비트중 0의 갯수*/
#include <stdio.h>

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;
}

1.6. 단어의 갯수를 출력

장난으로 짜봤다. 예외처리 하지 않음.
~cpp 
#include <stdio.h>

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);
}

1.7. 영소문자, 대문자, 특수문자, 수치문자의 갯수

gets 하다가 scanf로 바꾼 ! ㅠ
~cpp 
#include <stdio.h>

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);

}

2. Thread

  • 오 아영이 열심히 하는데 - 상협
    - 감사합니다^^; 다른애들에 비하면 열씸히 하는것도 아니죠 ^^
  • ^^ 자식. 완전 열심히 해! 나도 같이 하자! - 보창
    - 네 ^^
  • ^^ 자식. 완전 열심히 해! 나도....음.. 난 골수까지 귀차니즘이 스며서..에잇.혼자 열심히 해서 장학금 타서 밥사주!! - 조현태
    - 헉.. 너야말루. 장학금 타면 사줘 !! ㅋㅋ 난 공부할 때 적은 양이라도 너무 티를 많이 내서 그렇지.. 보면 별거 없어 ㅠ 이게 문제야..ㅋ -허아영
    - 훗... 내 장학금 받아서 얻어먹을 생각을 하다니.. 그러다 굶어 죽으려면 어떻하려고..;; 그나저나 왠지 위키가 우리 낙서장인 듯한 느낌이..음... 좋은 현상인지 좋지않은 현상인지..;; 뭐.. 어쨋든 열심히 하라고.^^ - 조현태
----
허아영

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.1058 sec