출처 블로그 > LOVE&FREE
원본 http://blog.naver.com/mysk4521/40027193810

톰켓 5.x  설치                                                        

 

 

어제 저녁 j2sk1.4.2 에 이어 오늘은 톰켓을 설치해 봄돠^^

별로 어려울거 엄죠~

시작 하갓슴네닷~ 히아리 꼬우!! -_-

 

 

 

1. 일단 톰켓을 다운 받아봄니다. http://www.apache.org 여기로 가셔셔 아래 그림의 화살표를 따

    라 조금만 내려가시면 Tomcat 이라는게 있는데 그걸 글릭..
 

 

 

 

 

2. 이런화면이 나옵니다. 거기서 다시 우리가 필요한 Tomcat5.x  요것을 클릭합니다.
 

 

 

 

 

3. 아래와 같은 화면이 나올겁니다. 약간 밑에 있으니 스크롤을 굴려서...

    표시된 부분을 클릭해서 다운 받습니다. 머 아래위로 다른 버전도 있습니다만..

    저는 이걸 다운 받겠습니다. 톰켓5.x 이므로 편한대로 골라주세용^^

 

 

 

 

4. 요로케 생긴놈이 받아 졌나요? 자 이제 인스톨을 시작할까요?
 

 

 

 

 

5. 쭈욱 따라만 가시면 되죵~
 



6. 동의 하실건 동의 해주시고..
 

 

 

 

7. 디폴트로 하시는게 맘 편하실거 같아요 -_-
 

 

 

 

 

8. 자 이제 설치할 위치를 정합니다. 취향에 맞게 설치하세요. 디폴트도 상관없죠.

    저는 아래와 같이 합니다.  보통 c드라이브에들 하시져?

    그리고 환경설정시 아래 주소가 필요하니 메모해두시고..

    물론 윈우 탐색기로 금방 찾아 지지만.. 암튼 기억해 두세요. 자주 들락거릴 위치니까요~


 

 

 


9. 포트랑 유저명, 패스워드 설정화면.. 디폴트로~^^

 

 

 

 

10. 사용하실 JVM을 설정하는거죠. 자신이 사용할JVM을 선택....전 1.4.2가 깔려있군요.

      이것은 자바가 깔려있어야 되것죵^^ 안깔려 있다면 깔고나서 다시!!
 

 


11. 설치가 진행됩니다. 잠시만 기둘려 주시면..


 

 

 

12. 설치가 끝났습니다. 아래는 바로 실행을 체크했습니다.

    시작 - 모든프로그램 - Apache Tomcat 5.0 - Configure Tomcat 에서 시작 종료가 가능


 

 

13. 그리고 이젠 환경변수를 설정해 봅니다. 내컴터 우클릭해서 속성을 클릭하면


 

 

 

 

14. 시스템 등록 정보화면이 나오고 고급을 선택해서 환경변수를 클릭합니다.

 

 

 

 

 

15. 새로 만들기를 선택합니다.
 

 

 

 

16. CATALINA_HOME 을 만들어 줍니다.  경로는 아까 메모했던 톰켓설치 위치죠~

     까먹었다고요? -_-a  윈도우 탐색기를 켜시고 Tomcat 5.0 폴더위치를 찾아봅니다.

     윈도 탐색기 주소표시창의 경로를 카피해 오면 되는 겁니다.
 

 

 

 

17. 이번에는 CLASSPATH를 추가해 보겠습니다.

     CATALINA_HOME을 만들었으므로 아래와 같이 추가해 주시면 되겠습니다. ( ;붙여주고요)

 

 

18. 환경변수 설정도 끝이 났습니다. 톰켓을 기동하시고 아래주소를 쳐 봅니다.

     호랑이 한마리 튀어 나옵니까? 그럼 성공입니다. 혹시 호랑이가 안나오신다거나..

     다른 서블릿, JSP등을 실행하는데 문제가 있다면 대부분 CLASSPATH 문제 일겁니다.

     다시 확인해 보셔요^^ 수고하셨습니다.


 
Posted by 나비:D
:
Editplus에서 java컴파일하고 실행 설정하는 방법
 
 

먼저 JDK가 깔려있어야 한다

 1. Editplus의 메뉴 도구- 기본설정(P)… 를 선택후 기본설정 창이 열리면

항목아래있는 도구 아래 사용자 도구를 클릭한다

 

 2. 추가>>버튼을 누르고 프로그램을 선택한다.

 


 

3. 한번 더 추가>>버튼을 누르고 프로그램을 선택한 다음선택한다.
 


4. 이제 Editplus로 소스를 작성한 다음 ctrl+1을 눌르면 컴파일

    ctrl+2를 누르면 실행한 화면을 확인할수 있다.

Posted by 나비:D
:

AdventureWorks 예제 데이터베이스를 활용한 SQL Server 2005 학습 가이드


--------------------------------------------------------------------------

1. 최신(2006.04월 업데이트) 예제 데이터베이스와 샘플을 다운로드 받는다


http://www.microsoft.com/downloads/details.aspx?familyid=e719ecf7-9f46-4312-af89-6ad8702e4e6e&displaylang=en


2. 예제데이터베이스 설치/제거방법


- AdventureWorksDB.msi(OLTP용 예제)  --> BI 용 예제는 AdventureWorksBI.msi

AdventureWorksDB.msi 에는 AdventureWorks OLTP 데이터베이스 파일이 포함되어 있습니다. 새로운 버전을 설치하기 전에 이전에 설치된 AdventureWorks 데이터베이스는 완전히 제거해야 합니다.


이전 버전 AdventureWorks 데이터베이스를 제거하려면,

1) AdventureWorks 데이터베이스를 Drop 한 다음,

2) 프로그램 추가/제거 애플릿을 사용하여 AdventureWorksDB를 선택하고 제거를 클릭합니다.


Setup 프로그램을 사용하여 AdventureWorks 데이터베이스를 제거하기 위해서는

1) AdventureWorks 데이터베이스를 Drop 한 다음,

2) 프로그램 추가/제거 애플릿에서, MS SQL Server 2005를 선택하고 변경을 클릭합니다.

3) 구성요소 선택에서 워크스테이션 구성요소를 선택한 다음, 다음을 클릭합니다.

4) SQL Server 설치 마법사 첫 화면이 나타나면, 다음을 클릭합니다.

5) 시스템 구성 검사가 나타나면, 다음을 클릭합니다.

6) 인스턴스 변경 또는 제거 화면이 나타나면, 설치된 구성 요소 변경을 클릭합니다.

7) 기능 선택화면에서, 설명서, 예제 및 예제데이터베이스 노트를 확장합니다.

8) 예제 코드 및 응용 프로그램을 선택합니다.

9) 예제 데이터베이스를 선택하고, "모든 기능을 사용할 수 없습니다."를 선택하고, 다음을클릭합니다.

10) 설치를 클릭하여, 설치 마법사를 완료합니다.


SQL Server 인스턴스가 하나 이상 설치되어 있는 경우에서는 MSI에서 지정하는 디렉토리를 해당 인스턴스의 master 데이터베이스가 위치하는 디렉토리와 동일하게 수정해 주어야 합니다. master 데이터베이스의 위치를 확인하기 위해서는, Express Manager나 SQL Server Management Studio에서 AdventureWorks 데이터베이스를 설치하고자 하는 인스턴스에 연결한 다음, 다음 쿼리를 실행하면 됩니다.

select physical_name from sys.database_files where name = 'master'

 

예제 데이터베이스와 예제 코드를 사용하기 위해서는, Microsoft SQL Server 2005 Express Edition이나 Microsoft SQL Server 2005의 인스턴스에 해당 데이터베이스 파일을 연결(attach)해야 합니다. SQLCMD나 SQL Server Management Studio를 사용하여, 다음 예제와 같은 쿼리를 실행하여 AdventureWorks 데이터베이스를 연결할 수 있습니다.

exec sp_attach_db @dbname=N'AdventureWorks', @filename1=N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf', @filename2=N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_log.ldf'

 

AdventureWorks 데이터베이스를 다른 디렉토리나 드라이브에 설치하기 위해서는, 각자의 환경에 따라 sp_attach_db 저장 프로시저에 입력해야 하는 매개변수를 적절하게 수정해 주어야 합니다.


3. 2006.04월 예제 코드에 추가된 내용


SqlServerSamples.msi에는 Microsoft SQL Server 2005와 Microsoft SQL Server 2005 Express Edition에 대한 예제코드가 포함되어 있습니다. Visual C#과 Visual Basic.NET 예제로 개발된 코드 중 대부분은 예제에 대한 설명에 언급된 것과 같이 Microsoft SQL Server 2005 Express Edition에서는 동작하지 않습니다.


예제를 설치하기 위해서는 SqlServerSamples.msi를 실행하면 됩니다. 설치시 다른 경로를 지정하지 않는다면, 기본값으로, [drive:]\Program Files\Microsoft SQL Server\90\Samples에 설치됩니다.


2006년 4월에 추가된 예제 코드는 다음과 같은 것이 있습니다.

Analysis Services:

 

Data Access (OLEDB)

 

Data Access (ODBC)

 

Common Language Runtime (CLR) Integration:

 

Integration Services

 

Replication


CLR 통합과 관련된 2005년 12 월 업데이트 내용도 포함되어 있습니다.

 

Server Management Objects (SMO):

 

Integration Services:

 

Replication:

 

Reporting Services


4.

아래는 SQL 2005 AdventureWorks  예제 데이터베이스에 대한 내용을 다루는 블로그에 기재된 내용입니다.


참고하시기 바랍니다.


원문출처...

=====================================================


http://blogs.msdn.com/bonniefe/


Welcome everyone! The purpose of this blog is to chat about the samples and sample databases for Microsoft SQL Server.  I'll be talking about some of the cool samples already shipping, and let you know about updates and new samples as time goes by.  Please participate by sending in feedback on existing samples and suggestions for new ones.

If you have Microsoft SQL Server 2005, read the topic "Installing Samples" in Microsoft SQL Server Books Online (Books Online) to learn how to install the samples which ship with that product.  You do have to go through some extra steps during installation of SQL Server to get samples installed.  In particular, on the page where you select what to install use the "Advanced" button to activate the control which allows you to select the samples for installation.

Even better, you can get the latest version of the samples on the web at http://msdn.microsoft.com/sql/downloads/samples/default.aspx.  Right the December 2005 refresh is available there.  You'll find MSIs with the samples in them, and also MSIs with various sample databases.  Be sure to pick out the correct MSI for your computer's processor (x86, x64, or IA64).

At http://www.microsoft.com/downloads/details.aspx?familyid=e719ecf7-9f46-4312-af89-6ad8702e4e6e&displaylang=en you'll find the actual MSIs, and also two important documents, GettingStartedWithSQLSamples.htm which gives you a top 10 list of things to know about the samples, and SQLServerDatabasesAndSamplesOverview.htm which provides detailed information about all the samples and sample databases.

The readme files for the samples and a lot of other sample information is located in Books Online starting at [SQL Server 2005 Books Online / Samples and Sample Databases].

The samples cover the gamut of SQL Server technologies: CLR Integration, SMO, XML, Administration, Data Access, Full Text Search, Service Broker, Analysis Services, Integration Services, Notification Services, Reporting Services, Replication.  The Integrated Samples show how to combine several of the above technologies to solve a particular business problem.

The AdventureWorks sample database provides an example of an enterprise class database schema for manufacturing, sales, inventory, purchasing, and human resource scenarios.  The AdventureWorksDW and AdventureWorksAS sample databases demonstrate how to design and use a data warehouse and an analysis services project to gather business intelligence.

Thanks for taking a look at the samples.  I hope they help you get up to speed faster on SQL Server 2005 and make your job easier and more fun.

--Bonnie

Posted by 나비:D
:
Posted by 나비:D
:

▩ 포인터(Pointer)


   - Pointer는 지시자의 뜻

   - 기억장치의 주소를 변수의 값으로 사용 하는것이 목적

   - 포인터 변수의 선언: 데이터 타입 *포인터변수명
     . int* pk; int * pk; int *pk;

   - & 연산자: 변수의 메모리상에 데이터가있는 주소를 알려줌
     . int k=10; 이라고 선언했다면 &k라고하는 것은 k라는 변수의 값 10이 있는 메모리의 주소를 가

       져옵니다.
     . k변수의 주소입니다.

   - 출력은 주소는 양수만 있음으로 %u로 출력함

   - * 표시는 포인터 변수 선언문이 아닌 곳 즉 수식문에서는 그 포인터 변수가 가지고 있는 주소의

       값을 가지고 옴

   - 포인터 변수는 Borland C에서는 2바이트, Visual C++에서는 4바이트임

   - 포인터를 사용하면 함수로 인자의 주소를 전달할 수 있어 매우 편리하다.
     scanf("%d", &kuk);의 경우를 이해할 것. 


#include <stdio.h>

void main( void )
{
   int   i, result;
   float fp;
   char  c, s[81], d;


   //printf("%d", d);
   //exit(0);
  
   printf( "\n\n정수, 실수, 문자, 문자열을 입력하세요.\n");

   result = scanf( "%d %f %c %s %d", &i, &fp, &c, s, d);
   printf( "\n입력받은 데이터의 수 %d\n", result );
   printf( "The contents are: %d %f %c %s %c\n", i, fp, c, s, d);

}


   - 포인터 변수는 더하거나 빼는 연산을 할 수 있다.
    . 포인터 변수 + 1: 포인터 변수가 가리키는 곳의 주소가 포인터 변수의 데이터형 만큼 증가한다.
    . *포인터 변수 + 1: 포인터 변수가 값으로 가지고있는 주소가 가르키는 값을 1 증가 시킨다.
    . *(포인터 변수 + 1): 포인터 변수가 가리키는 곳의 주소를 포인터 변수의 데이터형 만큼 증가시

      킨 후 그 값을 1 증가시킨다.



1. 포인터 변수의 선언
     int k=10;
     int *kp = &k;
     printf("%d\n", *kp);  라고 선언하면
     . int *kp는 포인터 변수를 의미한다.
     . &k는 k변수의 주소를 의미한다.
     . 포인터 변수 kp는 k의 주소를 저장한다.
     . kp는 int형 포인터 변수임으로 int형 변수의 주소만 저장할 수 있다.
     . 수식문에서 *kp라고하면 kp가 값으로 가지고있는 주소의 값을 가져온다.



>>>>> 포인터 변수의 선언


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int i;

   printf("i의 값은 %d입니다.\n", i);
   printf("i의 주소는 %X입니다.\n", &i);

   printf("\ni의 값을 입력하세요 : ");
   scanf("%d",&i);
  
   printf("i의 값은 %d입니다.\n", i);
   printf("i의 주소는 %X입니다.\n", &i);
   getch();
 }




>>>>> 정수형 변수의 주소 출력, 주소 할당의 진행 방향의 이해


 #include <conio.h>
 #include <stdio.h>

 void main() {
   int i = 10;
   int j = 20;
   int k = 30;
 
   printf("정수형 변수 i의 값은 %d입니다.\n", i);
   printf("정수형 변수 i의 주소는 %u입니다.\n", &i);

   printf("정수형 변수 j의 값은 %d입니다.\n", j);
   printf("정수형 변수 j의 주소는 %u입니다.\n", &j);

   printf("정수형 변수 k의 값은 %d입니다.\n", k);
   printf("정수형 변수 k의 주소는 %u입니다.\n", &k);
   getch();
 }




>>>>> 다양한 데이터형의 주소 출력


   char c = 'A';
   int i = 10;

 변수의 선언 형태가 위와 같을 경우 Borland C는 int변수는 2바이트를 사용하고 1바이트는 버린다.
   VisualC++은 char는 무조건 4바이트를 사용합니다.


 #include <stdio.h>
 #include <conio.h>

 void main() {
   char c = 'A';
   int i = 10;
   float f = 2.1;
   char c1 = 'A';
   char c2 = 'B';
 
   printf("문자형 변수 c의 값은 %c입니다.\n", c);
   printf("문자형 변수 c의 주소는 %u입니다.\n", &c);

   printf("정수형 변수 i의 값은 %d입니다.\n", i);
   printf("정수형 변수 i의 주소는 %u입니다.\n", &i);

   printf("실수형 변수 f의 값은 %f입니다.\n", f);
   printf("실수형 변수 f의 주소는 %u입니다.\n", &f);

   printf("문자형 변수 c1의 값은 %c입니다.\n", c1);
   printf("문자형 변수 c1의 주소는 %u입니다.\n", &c1);

   printf("문자형 변수 c2의 값은 %c입니다.\n", c2);
   printf("문자형 변수 c2의 주소는 %u입니다.\n", &c2);

   getch();
 }




2. 포인터 변수의 작동

   메모리 할당 모델                               대응하는 소스코드
   =========================================================
       Mapping 변수명    주소    값
   ----------------------------------
              int k             1000    10                int k = 10;      
   ----------------------------------
              int m             996     20                int m = 20;
   ----------------------------------
              int* pk          992     1000              int* pk = &k;
   ----------------------------------
              int* pm          988     996               int* pm = &m;
   ----------------------------------



>>>>> 다양한 데이터형의 포인터 변수의 출력


  #include <stdio.h>
 #include <conio.h>

 void main() {
   char c='A';
   int i=10;
   float f=2.1f;

   char *cp;  //char형 변수의 주소를 저장합니다.
   int *ip;   //int형 변수의 주소를 저장합니다.
   float *fp; //float형 변수의 주소를 저장합니다.

   //각종 타입의 변수의 주소를 포인터 변수에 저장
   cp=&c;
   ip=&i;
   fp=&f;

   printf("문자형 포인터 cp의 값은 %c입니다.\n", *cp);
   printf("정수형 포인터 ip의 값은 %d입니다.\n", *ip);
   printf("실수형 포인터 fp의 값은 %f입니다.\n", *fp);

   printf("char형 변수 c의 주소:%d \n", &c);
  
   getch();
 }



변수   주소   값
-----------------
c      5052   A     <--- c='A'
i      5048   10
f      5044   2.1f
cp     5040   5052  <--- cp = &c;
ip     5036   5048  <--- ip = &i;
fp     5032   5044  <--- fp = &f;

- c: 'A'
- &c: 5052

- cp: 5052
- &cp: 5040
- *cp: 'A'




>>>>> 포인터 변수의 초기화


   char *cp=&c;
   은 char *cp;    cp=&c;로 분리 실행된다.


 #include <stdio.h>
 #include <conio.h>

 void main() {
   char c='A';
   int i=10;
   float f=2.1;

   char *cp=&c;
   int *ip=&i;
   float *fp=&f;

   printf("문자형 포인터 cp의 값은 %c입니다.\n", *cp);
   printf("정수형 포인터 ip의 값은 %d입니다.\n", *ip);
   printf("실수형 포인터 fp의 값은 %f입니다.\n", *fp);
   getch();
 }




UP!!!▷ 'k'라는 변수를 선언해 100을 대입하고, 'kp'라는 포인터 변수를 선언하고,
        'kp'란 포인터 변수를 이용해 'k'의 값을 출력하는 프로그램을 작성하세요.




>>>>> 포인터 변수 자신의 주소 출력하기 1


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int i=10;
   int *ip=&i;  //i 변수의 주소를 ip포인터 변수에 할당합니다.

   printf("==================================================\n");

   printf("i의 값은 %d입니다.\n\n", i);

   printf("i의 자신의 주소는 %u입니다.\n", &i);
   printf("ip의 값은 %u입니다.\n\n", ip);

   printf("ip가 가지고 있는 주소의 값은 %d입니다.\n", *ip);
   printf("ip의 자신의 주소는 %u입니다.\n", &ip);

   printf("==================================================\n");
   getch();
}





3. 아래와 같이 선언된 경우 c 변수는 1바이트를 버린다., Visual C는 무조건 4바이트씩 사용


>>>>> 포인터 변수 자체의 주소 출력


 #include <stdio.h>
 #include <conio.h>

 void main() {
   char c='A';
   int i=10;
   float f=2.1;

   char *cp=&c;
   int *ip=&i;
   float *fp=&f;

   printf("==================================================\n");
   printf("①문자형 변수 c의 값은 %c입니다.\n", c);
   printf("②문자형 변수 c의 주소는 %u입니다.\n", &c);
   printf("③문자형 포인터 cp의 값은 %c입니다.\n", *cp);
   printf("④문자형 포인터 cp의 실제 주소는 %u입니다.\n", &cp);
   printf("⑤문자형 포인터 cp의 참조 주소는 %u입니다.\n", cp);
   printf("==================================================\n");
   printf("⑥정수형 변수 i의 값은 %d입니다.\n", i);
   printf("⑦정수형 변수 i의 주소는 %u입니다.\n", &i);
   printf("⑧정수형 포인터 ip의 값은 %d입니다.\n", *ip);
   printf("⑨정수형 포인터 ip의 실제 주소는 %u입니다.\n", &ip);
   printf("⑩정수형 포인터 ip의 참조 주소는 %u입니다.\n", ip);
   printf("==================================================\n");
   printf("⑪실수형 변수 f의 값은 %f입니다.\n", f);
   printf("⑫실수형 변수 f의 주소는 %u입니다.\n", &f);
   printf("⑬실수형 포인터 fp의 값은 %f입니다.\n", *fp);
   printf("⑭실수형 포인터 fp의 실제 주소는 %u입니다.\n", &fp);
   printf("⑮실수형 포인터 fp의 참조 주소는 %u입니다.\n", fp);
   printf("==================================================\n");
   getch();
}


--출력 결과
==================================================
①문자형 변수 c의 값은 A입니다.
②문자형 변수 c의 주소는 1245052입니다.
③문자형 포인터 cp의 값은 A입니다.
④문자형 포인터 cp의 실제 주소는 1245040입니다.
⑤문자형 포인터 cp의 참조 주소는 1245052입니다.
==================================================
⑥정수형 변수 i의 값은 10입니다.
⑦정수형 변수 i의 주소는 1245048입니다.
⑧정수형 포인터 ip의 값은 10입니다.
⑨정수형 포인터 ip의 실제 주소는 1245036입니다.
⑩정수형 포인터 ip의 참조 주소는 1245048입니다.
==================================================
⑪실수형 변수 f의 값은 2.100000입니다.
⑫실수형 변수 f의 주소는 1245044입니다.
⑬실수형 포인터 fp의 값은 2.100000입니다.
⑭실수형 포인터 fp의 실제 주소는 1245032입니다.
⑮실수형 포인터 fp의 참조 주소는 1245044입니다.
==================================================




4. 포인터 변수의 이용
 #include <stdio.h>
 #include <conio.h>

 void main() {
   int i=20;
   int *ip;
   int *ip2;

   ip = &i;

   printf("ip       : %u\n", ip);  //1245052
   printf("*ip      : %d\n", *ip); //20
   printf("i의 주소 : %u\n\n", &i); //5052


   *ip = 50;

   printf("*ip      : %d\n", *ip);  //50
   printf("i의 주소 : %u\n", &i);    //5052
   printf("ip 포인터 변수 자체의 주소 : %u\n\n", &ip); //5048

   ip2 = &i;  //
   *ip = 100;

   printf("i의 값 : %d\n", i);    //100
   printf("ip2    : %u\n", ip2);  //5052
   printf("*ip    : %d\n", *ip);  //100
   printf("*ip2   : %d\n", *ip2); //100
   printf("ip2 포인터 변수 자체의 주소 : %u\n\n", &ip2); //5044
   getch();

 }

Posted by 나비:D
:

▩ 다차원 배열


   - 1차원배열의 연속적인 형태
   - 논리적으로 테이블의 구조를 가지고 있으나 메모리상으로는 1차원배열의 연속임
   - 배열 처리시 일반적으로 for문이 2개이상 사용되는 경우가 많음
   - 배열명은 배열의 첫 요소의 주소를 가지고 있으나 상수형태임으로 포인터 변수처럼 배열의 주

     소를 증감할 수 없음


1. 2차원 배열
   - 자료형  배열 이름[첨자1, 행][첨자2, 열]
   - 2차원 배열의 선언
     . int arr[3][3];
     . char arr[3][3] =
       {
         {'A', 'B', 'C'},
         {'D', 'E', 'F'},
         {'G', 'H', 'I'},
       };


2. 3차원 배열
   - 자료형  배열 이름[첨자1, 면][첨자2, 행][첨자3, 열]
   - 3차원 배열의 선언
   int arr[2][3][4] =
   {
     {
       {1, 2, 3, 4},
       {5, 6, 7, 8},
       {9, 10, 11, 12}
     },
     {
       {51, 52, 53, 54},
       {55, 56, 57, 58},
       {59, 60, 61, 62}
     }
   };





▩ 다차원 배열 예제



>>>>> 2차원 배열의 사용


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int arr[3][4];
   int k, m;

   for(k=0; k<3; k++) {
      for(m=0; m<4; m++){
        arr[k][m]=k+m;
//        printf("arr[%d][%d]=%d  ", k, m, k+m);
        printf("k=%d m=%d  k+m=%d / ", k, m, k+m);
      }
      printf("\n");
   }

   printf("\n");

   for(k=0; k<3; k++) {
      for(m=0; m<4; m++){
        printf("arr[%d][%d] = %d  ", k, m, arr[k][m]);
      }
      printf("\n");
   }
   getch();
 }


UP!!!▷ 배열에 2의 배수로 입력되어 출력되도록 수정하세요.



>>>>> 2차원 배열에 값을 입력받아 역순으로 출력하는 프로그램


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int arr[2][3];
   int k, m;

   for(k=0; k<2; k++) {
      for(m=0; m<3; m++) {
        printf("arr[%d][%d]의 값을 입력하세요 : ", k, m);
        scanf("%d", &arr[k][m]);
      }
   }

   for(k=1; k>=0; k--) {
      for(m=2; m>=0; m--){
        printf("arr[%d][%d] = %d  ", k, m, arr[k][m]);
      }
      printf("\n");
   }
   printf("\n");
   printf("for문이 끝난 후의 k, m값:k=%d m=%d\n", k, m);
   getch();
 }



>>>>> 2차원 배열의 초기화 1


 #include <stdio.h>
 #include <conio.h>

 void main() {
   char arr[3][3] =
   {
     {'A', 'B', 'C'},
     {'D', 'E', 'F'},
     {'G', 'H', 'I'},
   };
   int k, m;

   for(k=0; k<3; k++) {
      for(m=0; m<3; m++){
         printf("arr[%d][%d] = %c  ", k, m, arr[k][m]);
      }
      printf("\n");
   }
   getch();
 }



>>>>> 2차원 배열의 초기화 2


 #include <stdio.h>
 #include <conio.h>

 void main() {
   char arr[3][3] =
   {
     {'A', 'B', 'C'},
     {'D', 'E', 'F'},
     {'G', 'H', 'I'},
   };
   int k, m;

   printf("* 원래의 값 * ===============================\n");
   for(k=0; k<3; k++) {
      for(m=0; m<3; m++){
         printf("arr[%d][%d] = %c  ", k, m, arr[k][m]);
      }
      printf("\n");
   }

   printf("* 변경된 값 * ===============================\n");
   for(k=0; k<3; k++) {
      for(m=2; m>=0; m--){
         printf("arr[%d][%d] = %c  ", k, m, arr[k][m]);
      }
      printf("\n");
   }
   getch();
 }



>>>>> 3차원 배열의 사용


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int arr[2][3][4] =
   {
     {
       {1, 2, 3, 4},
       {5, 6, 7, 8},
       {9, 10, 11, 12}
     },
     {
       {51, 52, 53, 54},
       {55, 56, 57, 58},
       {59, 60, 61, 62}
     }
   };
   int k, m, n;

   for(k=0; k<2; k++) {
      for(m=0; m<3; m++) {
  for(n=0; n<4; n++){
     printf("arr[%d][%d][%d] = %d  ", k, m, n, arr[k][m][n]);
  }
            printf("\n");
      }
   printf("\n");
   }
   getch();
 }

Posted by 나비:D
:

▩ 배열의 개념과 1차원 배열


   - 같은 데이터형을 가진 데이터들의 집합
   - 데이터의 형태가 집합적인 형태를 가지면서 같은 처리 방식을 가질 경우 사용
   - 배열은 인덱스를 이용하여 각 요소가 구분됨
   - 배열의 인덱스는 0부터 n-1까지 사용함
   - 배열 처리시 일반적으로 for문을 1개 정도 동반함
   - 배열의 선언:
     . int arr[5]; - 5개의 정수를 저장할 수 있는 배열을 선언합니다.
     . int arr[5] = {1,2,3,4,5};
       5개의 정수를 저장할 수 있는 배열을 선언하면서 5개의 정수를 배열에 저장합니다.

1. 배열에 값을 저장한 다음 출력하는 일반적인 프로그램

 #include <stdio.h>
 #include <conio.h>

 void main() {
   int i;
   int arr[10];

   for(i=0; i<10; i++)
      arr[i]=i;

   for(i=0; i<10; i++)
      printf("arr[%d] = %d\n", i, arr[i]);
   getch();
 } 




▩ 1차원 배열, 2차원 배열 예제



>>>>> 1차원 배열의 사용


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int k;
   int arr[10];

   for(k=0; k<10; k++)
      arr[k]=k;

   for(k=0; k<10; k++)
      printf("arr[%d] = %d\n", k, arr[k]);
   getch();
 }


UP!!!▷ 배열에 들어가는 값이 1부터 10이 되도록 수정하세요.


UP!!!▷ tot란 변수에 배열의 모든 값의 합을 구해서 출력해 보세요.


UP!!!▷ 배열에 들어가 있는 값중에 짝수인 수들의 합을 구해서 출력해 보세요.



>>>>> 영어 대문자를 배열에 저장하고, 역순으로 출력하는 프로그램


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int k;
   char alpha[26];

   for(k=65; k<=90; k++){
      alpha[k-65]=k;
   }

   for(k=90; k>=65; k--){
      printf("alpha[%d] = %c\n", k-65, alpha[k-65]);
   }
   getch();
 }


UP!!!▷ 알파벳이 Z부터 역으로 5개씩 출력되는 프로그램으로 수정하세요.


UP!!!▷ 알파벳이 A부터 5개씩 출력되는 프로그램으로 수정하세요.




▩ 최대/최소값 추출의 원리


   - MAX변수에는 최소값을 초기값으로 준다.
   - MIN변수에는 최대값을 초기값으로 준다.
     0 ~ 3000 사이의 데이터를 기준으로 한다면 max=0, min=3000으로 주어야 한다.

   - if문을 이용하여 최대값보다 큰 값이 나타나면 최대값에 새로운 값을 대입한다.
     if (max < readData) max = readData;

   - if문을 이용하여 최소값보다 작은 값이 나타나면 최소값에 새로운 값을 대입한다.
     if (min > readData) min = readData;



>>>>> 배열의 이용(입력 수의 범위:0~3000)


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int i, mx_cn=1, mn_cn=1;
   int max=0, min=3000;
   int jum[5];

   for(i=0; i<5; i++) {
      printf("%d번째 수를 입력하세요 : ", i+1);
      scanf("%d", &jum[i]);
   }

   for(i=0; i<5; i++) {
      if(jum[i]>max) {
  max=jum[i];
  mx_cn=i+1;
      }
      if(jum[i]<min) {
  min=jum[i];
  mn_cn=i+1;
      }
   }
   printf("\n");
   printf("최대값 : %d, 입력번호 : %d\n", max, mx_cn);
   printf("최소값 : %d, 입력번호 : %d\n", min, mn_cn);
   getch();
 }



>>>>> 배열의 크기


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int k;
   int num[] = {25, 36, 45, 45};
   char alpha[] = {'A', 'B', 'E'};

   for(k=0; k<4; k++)
      printf("배열 num[%d]의 크기 : %d\n", k, sizeof num[k]);
      printf("배열 num의 크기 : %d\n", sizeof(num));

   for(k=0;k<3;k++)
      printf("배열 alpha[%d]의 크기 : %d\n", k, sizeof alpha[k]);
      printf("배열 alpha의 크기 : %d\n", sizeof(alpha));
   getch();
 }




>>>>> 문자열의 초기화


 #include <stdio.h>
 #include <conio.h>

 void main() {
   char alpha1[] = {'A', 'B', 'C', 'D', 'E'};
   char alpha2[] = {'A', 'B', 'C', 'D', 'E', '\0'};
   char alpha3[] = "ABCDE";

   printf("배열 alpha1의 내용 : %s\n", alpha1);
   printf("배열 alpha1의 크기 : %d\n", sizeof(alpha1));
   printf("\n");
   printf("배열 alpha2의 내용 : %s\n", alpha2);
   printf("배열 alpha2의 크기 : %d\n", sizeof(alpha2));
   printf("\n");
   printf("배열 alpha3의 내용 : %s\n", alpha3);
   printf("배열 alpha4의 크기 : %d\n", sizeof(alpha3));
   getch();
 }




>>>>>  문자 배열의 이용


 #include <stdio.h>
 #include <conio.h>

 void main() {
   char fm[]= "File MENU";
   char em[]= "Edit MENU";
   char hm[]= "Help MENU";
   char wm[]= "Wrong Input";
   char c;

   printf("메뉴 코드를 입력하세요 : ");
   if((c=getch()) >= 97) c -= 32;

   while(c!='X') {
     switch(c) {
     case 'F' :
  printf("\n%s\n", fm);
  break;
     case 'E' :
  printf("\n%s\n", em);
  break;
     case 'H' :
  printf("\n%s\n", hm);
  break;
     default :
  printf("\n%s\n", wm);
     }
     printf("계속하려면 메뉴 코드를, 종료하려면 X를 누르세요.");
     if((c=getch()) >= 97) c -= 32;
   }
   printf("\n프로그램을 종료합니다.");
   getch();
 }





[참고] 데이터 정렬의 원리
   - swap 알고리즘
     a[0]=100, a[1]=200의 값을 바꾸는 경우, temp는 임시변수

     temp=a[0];
         ↙
     a[0]=a[1];
         ↙
     a[1]=temp;


           temp
       ①↗    ↘ ③
     a[0]   ←   a[1]  
            ② 

       기준수 a[0], 총 비교횟수 4회
       ↓
 비교1 500      400 300 100 200
 비교2 400      500 300 100 200 a[0], a[1] 비교후의 수
 비교3 300      500 400 100 200 a[0], a[2] 비교후의 수
 비교4 100      500 400 300 200 a[0], a[3] 비교후의 수
          100      500 400 300 200 a[0], a[4] 비교후의 수


            기준수 a[1], 총 비교횟수 3회
           ↓
 비교1 100 500      400 300 200
 비교2 100 400      500 300 200 a[1], a[2] 비교후의 수
 비교3 100 300      500 400 200 a[1], a[3] 비교후의 수
          100 200      500 400 300 a[1], a[4] 비교후의 수


                     기준수 a[2], 총 비교횟수 2회
                    ↓
 비교1 100 200      500 400 300
 비교2 100 200      400 500 300 a[2], a[3] 비교후의 수
          100 200      300 500 400 a[2], a[4] 비교후의 수


                        기준수 a[3], 총 비교횟수 1회
                       ↓
 비교1 100 200 300      500 400
          100 200 300      400 500 a[3], a[4] 비교후의 수


for (i=0; i<=3; i++)  <-- 기준수
   for(j=i+1; j<=4; j++)  <-- 대응수



>>>>> 5개의 정수를 입력받아 정렬하는 프로그램


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int i, j, t;
   int jum[5];

   for(i=0; i<5; i++) {
   printf("%d번째 수를 입력하세요 : ", i+1);
   scanf("%d", &jum[i]);
   }
   printf("\n");
   printf("입력된 자료\n");

   for(i=0; i<5; i++) {
   printf("%d ", jum[i]);
   }

   for(i=0; i<=3; i++) {
      for(j=i+1; j<=4; j++) {
         if(jum[i]>jum[j]) {
           t=jum[i];
           jum[i]=jum[i];
           jum[j]=t;
  }
      }
   }
   printf("\n정렬된 자료\n");

   for(i=0; i<5; i++) {
      printf("%d ", jum[i]);
   }
   getch();
 }

Posted by 나비:D
:

▩ Call By Value를 이용한 함수로의 데이터 전달 방법


   - Call By Value로 사용되는 데이터타입은 원시데이터 타입인 char, short int, int, float... 수

     치 형태의 데이터 전부 해당
     ※ 문자열이나 주소 형태의 데이터는 Call By Reference입니다.

1. EXE 프로그램의 Memory 사용영역(System Memory Model)
   - 기본적으로 64Kb의 조각 메모리를 5가지 단계의 방법으로 사용하는 모델을 가지고 있습

     니다.
┌────────────┐CS: Code Segment
│[코드 영역]                   │
│C의 Source가 등록되는  │
│영역, 각종 함수             │
├────────────┤DS: Data Segment
│[Data 영역]                   │
│static변수,                     │
│static 메소드 저장          │
│한번 초기화가 진행되면  │
│재 초기화가 발생안됨     │
├────────────┤SS: Stack Segment
│[Stack 영역]                  │
│함수가 사용하는 영역     │
│함수 안에서 선언되는     │
│지역변수가 선언,           │
│함수 처리가 끝나면        │
│메모리가 자동으로         │
│회수됨, 지역변수 삭제    │
├────────────┤
│[Heap 영역]                  │
│malloc() 함수를 이용해   │
│동적으로 메모리를 할당 │
│하는 영역                      │
│개발자 필이 메모리        │
│해야만 함                      │
└────────────┘

 

2. Call By Value 방식을 이용한 데이터의 전달, 메뉴 코드를 입력받아 메뉴 문자열을 출력하는 프로그램
 #include <stdio.h>
 #include <conio.h>

 void print_menu(char m) {
   switch(m) {
      case 'F' :
        printf("\nFile MENU\n");
        break;
      case 'E' :
        printf("\nEdit MENU\n");
        break;
      case 'H' :
        printf("\nHelp MENU\n");
        break;
      default :
        printf("\n잘못된 입력입니다.\n");
   }
 }

 main() {
   char c;
   printf("메뉴 코드를 입력하세요 : ");
   if((c=getch()) >= 97) c -= 32;

   while(c!='X') {
     print_menu(c);
     printf("메뉴코드를 입력하세요. 종료하려면 X를 누르세요.");
     if((c=getch()) >= 97) c -= 32;
   }
   printf("\n프로그램을 종료합니다.");
   getch();
 }


3. 입력된 값의 제곱값을 구하는 프로그램
 #include <stdio.h>
 #include <conio.h>

 long int sqr(int i) {
   long int res;

   if(i>0) {
     res=(long)i *(long)i;
     return res;
   }
   else if(i==0)
     return 0;
   else
     return -1;
 }

 main() {
   int a;
   char c;

   printf("시작하려면 ENTER를 누르세요.\n");
   c=getch();
   while(c!='X') {
     printf("\n계산하려는 숫자를 입력하세요 : ");
     scanf("%d", &a);
     printf("%d의 제곱은 %ld입니다.\n", a, sqr(a));
     printf("계속하려면 아무키나 누루세요, 종료하려면 X를 누르세요.");
     if((c=getch()) >= 97) c -= 32;
   }
   printf("\n프로그램을 종료합니다.");
   getch();
 }




4. 국어, 영어, 수학 점수를 (1~100점) main()함수에서 입력받아 총점은 tot(kor, eng, mat) 함수에

   서, 평균은 ave(kor, eng,mat) 함수에서 구한후 main()함수에서 출력하는 프로그램을 만들어 보

  시오.

 #include <stdio.h>
 #include <conio.h>

 int tot(int kor, int eng, int mat);
 float ave(int kor, int eng, int mat);

 void main() {
   int kor, eng, mat;
     
   printf("국어 점수를 입력하세요 : ");
   scanf("%d", &kor);
   printf("영어 점수를 입력하세요 : ");
   scanf("%d", &eng);
   printf("수학 점수를 입력하세요 : ");
   scanf("%d", &mat);

   printf("\n국어\t영어\t수학\t총점\t평균\n");
   printf("--------------------------------------\n");
   printf("%d\t%d\t%d\t%d\t%5.1f\n", kor, eng, mat, tot(kor,eng,mat), ave(kor,eng,mat));
   getch();
 }
 
 int tot(int kor, int eng, int mat){
    int tot;
    tot = kor+eng+mat;
    return tot;
 }

float ave(int kor, int eng, int mat){
    float ave;
    ave = (kor+eng+mat)/3.0;
    return ave;
}

/*
소스영역    Stack영역
--------    ---------
main()      int kor   90 -┐
               int eng   90 │
               int mat   90  │
---------   ---------  │
tot()         int kor ←-─┘90 복사    
               int eng
               int mat
               int tot
---------   ---------
ave()       int kor
              int eng
              int mat
              float ave
*/



▷ 아래처럼 학점이 출력되는 프로그램으로 수정하세요. (90~100: A, 80~89: B, 70~79:C, 60~69: D, 59이하:F)

국어 점수를 입력하세요 : 85
영어 점수를 입력하세요 : 90
수학 점수를 입력하세요 : 90

과목: 국어    영어    수학    총점    평균
-------------------------------------------
점수: 85      90      90      265      88.3
학점: B       A       A     



▩ 함수의 설계


1. 지하철 승차권 판매 함수 설계
#include <stdio.h>
#include <conio.h>

//처리 로직 시작 함수 void sale(점검중|판매중)
void sale(int k);

//목적지 입력 함수
int target(); 

//동전 금액 입력 void coin(목적지 금액)
void coin(int kum);

//승차권 인쇄
//void print_ticket(목적지 금액,입력 금액);
void print_ticket(int kum, int tot);

void main(){
    int k;  //1:판매중, 2:점검중 구분

    sale(1);  
    getch();
}

void sale(int k){
    int sw=1;
    if (k == 0){
        printf("판매기 점검중\n");   
        return;
    }

    if (k == 1){
        printf("판매기 작동중\n");
        while(sw){
            sw=target();
        }
    }

}

int target(){
    int kum;  //금액 입력
    int sw=1; //0: 정상 금액, 1: 비정상 금액
   
    printf("                  승차권                      \n");
    printf("----------------------------------------------\n");   
    printf("승차권: 700 750 800 850 900 950 1000 1050 1100\n\n");

    while(sw){
        printf("목적지에 해당하는 금액을 눌러 주세요. ");
        scanf("%d", &kum);

        if (kum==9999) {
            printf("\n점검중입니다.\n");
            return 0;
        }else if (kum < 700){
            printf("700원 이하 승차권은 없습니다.\n");
        }else if (kum > 1100) {
            printf("1100원을 초과하는 승차권은 없습니다.\n");
        }else if (kum % 50) {
            printf("승차권은 50원 단위입니다.\n");
        }else{
            sw=0;
        }
    }
    coin(kum);
    return 1;
}

void coin(int kum){
    int sw=1;  //0: 정상 금액, 1: 비정상 금액
    int tot=0; //입력한 금액의 합계
    int in;    //금액을 입력 받는 변수
   
    printf("\n\n");
    printf("입력 가능 화폐(동전/지폐 가능)\n");
    printf("------------------------------\n");   
    printf("종 류: 10 50 100 500 1000\n\n");

    while(sw){
        printf("금액 투입!!!. ");
        scanf("%d", &in);

        if (in < 10){
            printf("10원 이하 금액은 사용할 수 없습니다.\n");
        }else if (in > 1000) {
            printf("1000원을 초과하는 지폐는 사용할 수 없습니다.\n");
        }else if (in % 10) {
            printf("입력 금액은 10원 단위까지 가능합니다.\n");
        }else{
            tot = tot+in;
            if( tot >= kum) sw=0;
            printf("\n현재 입금한 금액:%5d\n", tot);
        }
    }
    print_ticket(kum, tot);
}

void print_ticket(int kum, int tot){
    printf("\n\n");
    printf("%5d원 금액의 승차권이 발매 되었습니다.\n", kum);
    printf("남은 잔액은 %5d원 입니다.\n", tot-kum);
    printf("지하철을 이용해 주셔서 감사합니다.!!!\n\n");
}

Posted by 나비:D
:

▩ 함수(function)


1. 일반적인 프로그램의 구성
   ┌----- 메인 루틴
   │
   ├----- 프로시저(Procedure) : Return 값이 없음
   │
   └----- 함수(Function) : Return 값이 있음
    


2. C언어의 함수 구성 : main() 함수와 일반 함수로 구성됨
   ┌----- 메인 함수 main()
   │
   │
   └----- 함수(Function) : Return 값이 있음, Return 값이 있음


3. 함수의 기본 구성
   return 형 함수명(인수형과 가인수의 나열...){
       함수내 변수 선언;
       실행문;
   }

☞ 함수의 작성 규칙
   1) main() 함수는 기능을 정의 하는 함수가 아니라 다른 함수를 이용하는 통제소의 역활을 한다.
      따라서 처리 로직을 main()안에 두면 안된다.
   2) 가인수와 실인수의 데이터 타입과 갯수는 반드시 일치 시킨다.
   3) 함수안에 선언되는 변수는 모두 지역변수이다. 따라서 메인에서는 사용할 수 없다.
   4) 함수를 처리한 후 함수의 리턴값의 데이터형은 함수의 원형에 선언된 타입과 일치해야한다.
   5) 변수명과 함수명이 같으면 함수의 인식이 안된다.


4. 프로토타입을 선언하는 이유
   - main() 함수로 하여금 어떤 함수가 이 프로그램에 선언되어 있는 지 알려주는 역활을 함
   - 사용자 정의 함수가 main()앞에 있으면 프로토타입이 필요 없고, main()뒤에 선언되면 반드시 프로토타입을 선언해야 한다.


5. 실인수와 가인수의 의미
   - 실인수 : 실제로 값을 가지고 있는 함수를 호출하는 측의 변수
   - 가인수 : 임시로 함수에서 지역 변수로 사용되는 변수


6. 값의 return 유형
   - 상황에 따라 1개이상의 return문이 올 수 있다.
   - return a;
   - return (a);
   - return 1;
   - return a+b;

☞ return을 사용하는 이유
   1) 함수에서 처리 값을 돌려줄 경우  
   2) 함수의 실행을 종료하는 역활을 한다.


7. void 형 함수 : 값을 return 하지 않는 함수, 주로 출력을 하는데 사용
   - void main(){}


8. void 형 인수 : 인수를 받지 않는 함수
   - void kkk(void){ } == void kkk(){ }




▩ 함수응용 예제


1. 함수 원형(Prototype) 정의의 이해
//함수는 한번 재작하면 반복해서 호출할 수 있습니다.
//따라서 소스를 매우 구조적으로 만들어 줍니다.

 #include <stdio.h>
 #include <conio.h>

//함수 선언, 함수 원형 선언, 함수 프로토 타입
 void print_line();

 void main() {
   int x, y;
   char c;

     //1회는 무조건 실행됨으로 do~while()사용
     do {
       print_line();
       printf("\n 첫번째 수를 입력하세요 : "); scanf("%d", &x);
       print_line();
       printf("\n 두번째 수를 입력하세요 : "); scanf("%d", &y);
       print_line();
       printf("\n %d 곱하기 %d는 %d입니다.\n", x, y, x*y);
       print_line();
       printf("\n 계속=>Enter, 종료=>Q");
       c=(getch());
     } while(c!='Q');
     getch();
 }

 //함수 정의
 void print_line() {
   int i;
   for(i=1; i<=30; i++){
      printf("-");
   }
 }




2. 기본적인 함수의 사용

▷ 국어, 영어, 수학 점수를 (1~100점) main()함수에서 입력받아
   총점은 tot(kor, eng, mat) 함수에서, 평균은 ave(kor, eng,mat) 함수에서 구한후 main()함수에서
   출력하는 프로그램을 만들어 보시오.



>>>>> 처리 형태 1


 #include <stdio.h>
 #include <conio.h>

 //              ┌---- 가인수
 //함수 선언  ↓
 int tot(int kor, int eng, int mat);
 float ave(int kor, int eng, int mat);
 //↑
 //└---- return 되는 데이터의 타입

 void main() {
   int kor, eng, mat;
     
   printf("국어 점수를 입력하세요 : ");
   scanf("%d", &kor);
   printf("영어 점수를 입력하세요 : ");
   scanf("%d", &eng);
   printf("수학 점수를 입력하세요 : ");
   scanf("%d", &mat);

   printf("\n국어\t영어\t수학\t총점\t평균\n");
   printf("--------------------------------------\n");
   printf("%d\t%d\t%d\t%d\t%5.1f\n", kor, eng, mat, tot(kor,eng,mat), ave(kor,eng,mat));
   getch(); //                                                                  │
 }//                                                                               │
 //                                                                                │
 //             ┌-------------------------------------------┘
 //함수정의  ↓실인수, 값 복사가 발생함, 실인수 <=== 가인수
 int tot(int kor, int eng, int mat){
    int tot;
    tot = kor+eng+mat;
    return tot; //정수형 합계 리턴
 }

float ave(int kor, int eng, int mat){
    float ave;
    ave = (kor+eng+mat)/3.0;
    return ave;
}



>>>> 출력결과:


국어 점수를 입력하세요 : 85
영어 점수를 입력하세요 : 90
수학 점수를 입력하세요 : 90

국어    영어    수학    총점    평균
--------------------------------------
85       90       90       265     88.3



>>>>> 처리 형태 2


 #include <stdio.h>
 #include <conio.h>

 int tot(int kor, int eng, int mat);
 float ave(int kor, int eng, int mat);

 void main() {
   int kor, eng, mat, total;
   float average;
     
   printf("국어 점수를 입력하세요 : ");
   scanf("%d", &kor);
   printf("영어 점수를 입력하세요 : ");
   scanf("%d", &eng);
   printf("수학 점수를 입력하세요 : ");
   scanf("%d", &mat);

   total = tot(kor, eng, mat);
   average = ave(kor, eng, mat);

   printf("\n국어\t영어\t수학\t총점\t평균\n");
   printf("--------------------------------------\n");
   printf("%d\t%d\t%d\t%d\t%5.1f\n", kor, eng, mat, total, average);
   getch();
 }
 
 int tot(int kor, int eng, int mat){
    int tot;
    tot = kor+eng+mat;
    return tot;
 }

float ave(int kor, int eng, int mat){
    float ave;
    ave = (kor+eng+mat)/3.0;
    return ave;
}



>>>>> 처리형태 3(권장 아님, 전역변수 사용은 최대한 피해야 합니다.)


 #include <stdio.h>
 #include <conio.h>

 void tot();
 void ave();

 int kor, eng, mat, total;
 float average;

 void main() {
   printf("국어 점수를 입력하세요 : ");
   scanf("%d", &kor);
   printf("영어 점수를 입력하세요 : ");
   scanf("%d", &eng);
   printf("수학 점수를 입력하세요 : ");
   scanf("%d", &mat);

   tot();
   ave();

   printf("\n국어\t영어\t수학\t총점\t평균\n");
   printf("--------------------------------------\n");
   printf("%d\t%d\t%d\t%d\t%5.1f\n", kor, eng, mat, total, average);
   getch();
 }
 
 void tot(){
    total = kor+eng+mat;
 }

 void ave(){
    average = (kor+eng+mat)/3.0;
}



▩ 함수의 반복 호출


#include <stdio.h>
 #include <conio.h>

 void print_long(void) {
   int i;
   for(i=0; i<=30; i++){
      printf("*");
   }
   printf("\n");
 }

 void print_short(void) {
   int i;

   printf("*");
   for(i=0; i<=28; i++){
      printf(" ");
   }
   printf("*");
   printf("\n");
 }

 void main() {
   int x;

   print_long();
   for(x=0; x<=5; x++)
      print_short();
   print_long();
   getch();
 }



▩ 함수의 중첩 예제 : main()함수안에서 호출한 함수안에 함수가 있는 경우


 #include <stdio.h>
 #include <conio.h>

 void print_long(void) {
   int i;
   for(i=0; i<=30; i++)
      printf("*");
 }

 void print_short(void) {
   int i;
   for(i=0; i<10; i++)
      printf(" ");

   for(i=0; i<10; i++)
      printf("*");
 }

 void print_one(void) {
   int j;
   for(j=0; j<=5; j++) {
      print_long();
      printf("\n");
   }
 }

 void print_two(void) {
   int k;
   for(k=0; k<=10; k++) {
      print_short();
      printf("\n");
   }
 }

 void main() {
   print_one();
   print_two();
   print_one();
   getch();
 }


☞ 함수원형을 추가한 후의 소스 (권장 유형)

 #include <stdio.h>
 #include <conio.h>

 void print_one(void);   //print_long() 호출
 void print_two(void);   //print_short() 호출
 void print_long(void);  //특수 문자를 30개 출력
 void print_short(void); //공백을 10개 출력, 특수문자 10개 출력
 

 void main() {
   print_one();
   print_two();
   print_one();
   getch();
 }


 void print_one(void) {
   int j;
   for(j=0; j<=5; j++) {
      print_long();
      printf("\n");
   }
 }

 void print_two(void) {
   int k;
   for(k=0; k<=10; k++) {
      print_short();
      printf("\n");
   }
 }

 void print_long(void) {
   int i;
   for(i=0; i<=30; i++)
      printf("*");
 }

 void print_short(void) {
   int i;
   for(i=0; i<10; i++)
      printf(" ");

   for(i=0; i<10; i++)
      printf("*");
 }

Posted by 나비:D
:

▩ C언어를 이용한 필수 기초 알고리즘 - 제어 반복문의 활용 1


1. 100~999 사이에 7의 배수의 갯수와 합을 구하는 프로그램을 작성하세요. 답 : 128, 70336
 
#include <stdio.h>
#include <conio.h>

void main(){
    long int i,cnt,sum,nmg;

    cnt=sum=0L;

    for(----- ? -----){
        nmg = ----- ? -----;
        if(nmg)
            continue;
  else {
         printf("현재 발견된 7의 배수: %d\n", i);
            sum += i;
            cnt++;
        }
    }
    printf("\n 7의 배수의 갯수: %5ld\n  합 : %5ld\n",cnt,sum);
    getch();


▷ 7의 배수를 한줄에 15개씩 출력하는 프로그램을 작성하세요.


2. 100~999 사이에 7의 배수가 아닌 수들의 갯수와 합을 구하는 프로그램을 작성하세요.

답 : 772, 424214


3. 최대값 , 최소값을 구하는 프로그램을 제작 하세요.

#include <stdio.h>
#include <conio.h>

void main(){
    int  no,data,max,min,cnt;

    printf("입력할 자료의 갯수는 ? ");
    scanf("%d",&no);
    cnt=1;
   
    printf("데이터를 입력해 주세요.\n------------------------\n");

    scanf("%d",&data);

    ----- ? -----

    do {
        cnt++;
        scanf("%d",&data);
        if( max < data ) max = data;
        if( min > data ) min = data ;
    } while( cnt < no );

    printf("\n   최대값 : %5d\n   최소값 : %5d\n", max, min);
    getch();
}


4. 5개의 정수를 입력 받아 수의 범위를 구하는 프로그램을 작성하시오.

#include <stdio.h>
#include <conio.h>

void main(){
    int  tbl[5], i, max, min, range;

    for(i=0;i<5;i++){
     scanf("%d", &tbl[i]);
    }

    printf("입력받은 데이터 : \n");

    for(i=0;i<5;i++){
        printf("%5d",tbl[i]);
    }

    ----- ? -----
 
    for(i=1;i<5;i++){
        if(max<tbl[i]) max=tbl[i];
        if(min>tbl[i]) min=tbl[i];
    }

    ----- ? -----
   
    printf("\n\n   입력받은 수의 범위 : %5d\n",range);
    getch();
}                                                   


5. 하나의 수를 입력받아 양수, 음수 인지 출력하는 프로그램 작성하세요.


6. 하나의 수를 입력받아 부호를 무조건 양수로 바꾸어 출력하는 프로그램을 작성하세요.


7. 세 과목의 점수(0~100)를 입력받아 평균을 구한 후 평균이 90점 이상이면 "A", 80이상이면 "B", 70 이상이면 "C", 60 이상이면 "D", 그렇지 않으면 "F"를 출력하는 프로그램을 작성하세요.

 #include <stdio.h>
 #include <conio.h>

 void main() {
   int kor, eng, mat, ave;
             
   printf("국어 점수를 입력하세요 : ");
   scanf("%d", &kor);
   printf("영어 점수를 입력하세요 : ");
   scanf("%d", &eng);
   printf("수학 점수를 입력하세요 : ");
   scanf("%d", &mat);
   --------?--------;
   printf("점수의 평균은 %d입니다.\n", ave);

   switch(--?--) {
     case 10 :
     case 9 :
 printf("당신의 평가는 A입니다.");
 break;
     case 8 :
 printf("당신의 평가는 B입니다.");
 break;
     case 7 :
 printf("당신의 평가는 C입니다.");
 break;
     case 6 :
 printf("당신의 평가는 D입니다.");
 break;
     default :
 printf("당신의 평가는 F입니다.");
   }
    getch();
 }



▩ 제어 반복문 활용 2


1. 아래 문제의 ---?--- 칸을 채우세요. 대문자로 변경하는 로직이 들어가야 합니다.

 #include <stdio.h>
 #include <conio.h>

 void main() {
   char c;

   do {
     printf("메뉴 코드를 입력하세요.(F, E, H, X, 기타) : ");
     c=getch();
     putchar(c);
     if(c>=97) c -= --?--;

     switch(c) {
       case 'F' :
           printf("\nFile MENU\n");
       break;
       case 'E' :
       printf("\nEdit MENU\n");
       break;
       case 'H' :
       printf("\nHelp MENU\n");
       break;
       case 'X' :
       printf("\n프로그램을 종료합니다.\n");
       break;

       default :
       printf("\n잘못된 입력입니다.\n");
     }
   } while(c!='X');
   getch();
 }


2. 1부터 3까지 a와 b의 값를 출력하는 데, a, b가 같은 경우는 출력되지 않도록 프로그램을 작성해 보세요.

출력 결과:

a=1 b=2
a=1 b=3
-------
a=2 b=1
a=2 b=3
-------
a=3 b=1
a=3 b=2


 #include <stdio.h>
 #include <conio.h>

 void main() {
   int a, b;

   printf("=========\n");
   for(a=1; a<=3; a++) {
      for(b=1; b<=3; b++) {
 if(a--?--b){
    --?--
           }

 printf("A=%d, B=%d\n", a ,b);
      }
   printf("=========\n");
   }
   getch();  
 }


3. 제어문을 이용하여 아래와 같이 출력되는 프로그램을 제작해 보세요.

 1
 2   3
 4   5   6
 7   8   9  10
11  12  13  14  15


4. 제어문을 이용하여 아래와 같이 출력되는 프로그램을 제작해 보세요.

 3
 6   9
12  15  18
21  24  27  30
33  36  39  42  45


5. 제어문을 이용하여 아래와 같이 출력되는 프로그램을 제작해 보세요.

                     1
                2   3
            4   5   6
       7   8   9  10
11  12  13  14  15


#include <stdio.h>
#include <conio.h>

main(){
 int i, j, cnt;
           cnt=0;
 for(----- ? -----){
  for(j=1; j<=5; j++){

   if(i>j){
    printf("     ");
   }else{
                                  cnt=cnt+1;
    printf("%5d", cnt);
                                }
  }
           printf("\n");
 }
    getch();
}


6. 제어문을 이용하여 아래와 같이 출력되는 프로그램을 제작해 보세요.

                 15
            14  13
       12  11  10
     9   8   7   6
5   4   3   2   1



▩ 제어 반복문의 활용 3


▶ 구구단 출력하기

1. 2단만 출력

#include <stdio.h>
#include <conio.h>

void main(){
 int i;

 for(i=1; i<=9; i++){
      printf("2*%d=%d\n", ----- ? -----);
    }
    getch();
}


2. 3단식 출력하기

#include <stdio.h>
#include <conio.h>

void main(){
 int k, i, p;

    for(----- ? -----){
  for(i=1; i<=9; i=i+1){
   printf("\t%d*%d=%d", k, i, k*i);
    printf("\t%d*%d=%d", k+1, i, (k+1)*i);
   printf("\t%d*%d=%d\n", k+2, i, ----- ? -----);
  }
  printf("\n---------------------------------------------------------\n");
                     p=getchar();

 }
    getch();
}


3. 배열을 이용하여 구구단 출력하기

#include <stdio.h>
#include <conio.h>

void main(){
 int k, i, ----- ? -----, p;


 for(k=0; k<=8; k=k+3){
  for(i=0; i<=8; i=i+1){
   a[k][i] = (k+1)*(i+1);
   a[k+1][i] = (k+2)*(i+1);
   a[k+2][i] = ----- ? -----;
  }
 }

    for(----- ? -----){
  for(i=0; i<=8; i=i+1){
   printf("\t%d*%d=%d", k+1, i+1, a[k][i]);
    printf("\t%d*%d=%d", k+2, i+1, a[k+1][i]);
   printf("\t%d*%d=%d\n", k+3, i+1, a[k+2][i]);
  }
  printf("\n---------------------------------------------------------\n");
        p=getchar();
 }
    getch();
}


▷ 1부터 100까지 짝수의 합 구하기 (답 : 2550)


▷ 1부터 100까지 홀수의 합 구하기 (답 : 2500)


4. 아래와 같이 출력되도록 프로그램을 작성하세요.

♡♡♡♡♡
♡♡♡♡
♡♡♡
♡♡


5. 아래와 같이 출력되도록 프로그램을 작성하세요.
   - ♡ 하나는 공백문자 2개에 해당합니다.

            ♡
         ♡♡
      ♡♡♡
   ♡♡♡♡
♡♡♡♡♡

Posted by 나비:D
:

BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total :
Today : Yesterday :